fern-api 4.68.0 → 4.68.1

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 +6 -6
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -1730,7 +1730,7 @@ ${$Ic.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&sto(th
1730
1730
  `+WQe.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?WQe.default.cyan(rwc(t,this.opt.mask)):WQe.default.italic(WQe.default.dim("[hidden]")):this.opt.mask?rwc(t,this.opt.mask):WQe.default.italic(WQe.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 CLr=be(sC(),1);var txc=be(Uto(),1),wLr=require("child_process"),Zet=require("fs"),ILr=be(require("path"),1),rxc=be(require("os"),1),nxc=require("crypto"),Cro=be(Zwc(),1);var bLr=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var QQt=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var ELr=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var vLr=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function xLr(e="",t,r){let n=new _ro(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 exc(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function M4d(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 _ro=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=M4d(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??rxc.default.tmpdir(),r=(0,nxc.randomUUID)(),n=exc(this.fileOptions.prefix),i=exc(this.fileOptions.postfix),o=`${n}${r}${i}`,s=ILr.default.resolve(t,o),a=ILr.default.resolve(t)+ILr.default.sep;if(!s.startsWith(a))throw new Error("Resolved temporary file escaped the base directory");this.tempFile=s;let c={encoding:"utf8",flag:"wx"};Object.prototype.hasOwnProperty.call(this.fileOptions,"mode")&&(c.mode=this.fileOptions.mode),(0,Zet.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new bLr(t)}}readTemporaryFile(){try{let t=(0,Zet.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,txc.detect)(t)??"utf8";Cro.default.encodingExists(r)||(r="utf8"),this.text=Cro.default.decode(t,r)}}catch(t){throw new ELr(t)}}removeTemporaryFile(){try{(0,Zet.unlinkSync)(this.tempFile)}catch(t){throw new vLr(t)}}launchEditor(){try{let t=(0,wLr.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new QQt(t)}}launchEditorAsync(t){try{(0,wLr.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new QQt(r)}}};var ixc=be(DL(),1);var MQt=class extends aC{_run(t){this.done=t,this.editorResult=new ixc.Subject;let r=UO(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"?CLr.default.dim("Received"):CLr.default.dim("Press <enter> to launch your preferred editor."),t&&(r=CLr.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),xLr(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 uxc=require("stream");var axc=be(require("readline"),1),cxc=be(sxc(),1),JQe=class{constructor(t){this.rl||=axc.default.createInterface(U4d(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 U4d(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 cxc.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var LQt=class extends JQe{constructor(t={}){super(t),this.log=new uxc.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return wQt(this.rl,this.bottomBar.split(`
1731
1731
  `).length),this}updateBottomBar(t){return wQt(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+`
1732
1732
  `}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&&$Mr(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var vd=be(DL(),1),fxc=be(eQt(),1);var _Lr=be(DL(),1),lxc=be(eQt(),1),SLr=function(e,t,r){return typeof e[t]!="function"?(0,_Lr.of)(e):(0,_Lr.from)((0,lxc.default)(e[t])(r).then(n=>(e[t]=n,e)))};var pxc={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}},ett=class extends JQe{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,vd.from)(t):(0,vd.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,vd.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,vd.from)([t]),this.process=n.pipe((0,vd.concatMap)(this.processQuestion.bind(this)),(0,vd.publish)()),this.process.connect(),this.process.pipe((0,vd.reduce)((i,o)=>(pxc.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,vd.defer)(()=>(0,vd.of)(t).pipe((0,vd.concatMap)(this.setDefaultType.bind(this)),(0,vd.concatMap)(this.filterIfRunnable.bind(this)),(0,vd.concatMap)(()=>SLr(t,"message",this.answers)),(0,vd.concatMap)(()=>SLr(t,"default",this.answers)),(0,vd.concatMap)(()=>SLr(t,"choices",this.answers)),(0,vd.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,vd.defer)(()=>(0,vd.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,vd.defer)(()=>(0,vd.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&pxc.get(this.answers,t.name)!==void 0)return vd.EMPTY;if(t.when===!1)return vd.EMPTY;if(typeof t.when!="function")return(0,vd.of)(t);let{answers:r}=this;return(0,vd.defer)(()=>(0,vd.from)((0,fxc.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,vd.filter)(n=>n!=null)))}};function dxc(e){let t=function(r,n){let i;try{i=new ett(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",CQt),this.registerPrompt("input",GQe),this.registerPrompt("number",_Qt),this.registerPrompt("confirm",SQt),this.registerPrompt("rawlist",OQt),this.registerPrompt("expand",TQt),this.registerPrompt("checkbox",BQt),this.registerPrompt("password",PQt),this.registerPrompt("editor",MQt)},t.restoreDefaultPrompts(),t}var Oro=dxc();function V4d(e,t){Oro.registerPrompt(e,t)}function q4d(){Oro.restoreDefaultPrompts()}var G4d={prompt:Oro,ui:{BottomBar:LQt,Prompt:ett},createPromptModule:dxc,registerPrompt:V4d,restoreDefaultPrompts:q4d,Separator:Qj},nf=G4d;var ttt=require("path");function hxc(){let e=W4d();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function W4d(e=process.argv[1]?(0,ttt.dirname)(process.argv[1]):process.cwd(),t=ttt.sep==="\\"){let r=t?mxc(e):e;return n=>{if(!n)return;let i=t?mxc(n):n,{dir:o,base:s,ext:a}=ttt.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(s=s.slice(0,-1*a.length));let c=decodeURIComponent(s);o||(o=".");let u=o.lastIndexOf("/node_modules");if(u>-1)return`${o.slice(u+14).replace(/\//g,".")}:${c}`;if(o.startsWith(r)){let l=o.slice(r.length+1).replace(/\//g,".");return l?`${l}:${c}`:c}return c}}function mxc(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var Tro=e=>{if("flags"in e){let t=gxc(e.flags),r=Axc(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,Bro(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,$4d(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function $4d(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 gxc=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,UQt(r)]).filter(([,t])=>t!==void 0)),Axc=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?Bro(n):void 0]}))};var UQt=e=>e===void 0?void 0:e.variant??e.enabled,Bro=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};function yxc(){return"CompressionStream"in globalThis}async function OLr(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 TLr="0123456789abcdef",BLr=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+=TLr.charAt(this.bytes[r]>>>4),t+=TLr.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+=TLr.charAt(this.bytes[r]>>>4),t+=TLr.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}},Pro=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??H4d()}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 BLr.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,BLr.ofInner(t)}},H4d=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),bxc,Vve=()=>K4d().toString(),K4d=()=>(bxc||(bxc=new Pro)).generate();var Lj=(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.DeviceId="device_id",e})({});var J4d=["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"],Exc=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return J4d.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var X4d=Array.isArray,vxc=Object.prototype,Hj0=vxc.hasOwnProperty,Dro=vxc.toString,Rro=X4d||function(e){return Dro.call(e)==="[object Array]"};var Fro=e=>e===Object(e)&&!Rro(e);var zQt=e=>e===void 0,VQt=e=>Dro.call(e)=="[object String]",Ixc=e=>VQt(e)&&e.trim().length===0;var wxc=e=>Dro.call(e)=="[object Number]"&&e===e;var kro=e=>e instanceof Error;function PLr(e){return e===null||typeof e!="object"}function YQe(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function xxc(e){return YQe(e,"ErrorEvent")}function rtt(e){return typeof Event<"u"&&Z4d(e,Event)}function Cxc(e){return YQe(e,"Object")}function Z4d(e,t){try{return e instanceof t}catch{return!1}}function qQt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),wxc(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),qQt(i||r,t,r,n))}var ezd=864e5,DLr=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=qQt(t.bucketSize,0,100,t._logger),this._refillRate=qQt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=qQt(t.refillInterval,0,ezd,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 RLr=class{add(t){let r=Vve();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 tzd(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var _xc=(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=>_xc(`${e} ${o}`,t,r)}},rzd=e=>e();function Sxc(e,t=rzd){return _xc(e,t,tzd())}var itt="Mobile",kLr="iOS",ntt="Android",Oxc="Tablet",s20=ntt+" "+Oxc;var nzd="Apple",a20=nzd+" Watch",Txc="Safari",NLr="BlackBerry",Bxc="Samsung",izd=Bxc+"Browser",ozd=Bxc+" Internet",jLr="Chrome",szd=jLr+" OS",azd=jLr+" "+kLr,Pxc="Internet Explorer",czd=Pxc+" "+itt,jro="Opera",c20=jro+" Mini",Dxc="Edge",uzd="Microsoft "+Dxc,Qro="Firefox",lzd=Qro+" "+kLr,Mro="Nintendo",Lro="PlayStation",FLr="Xbox",pzd=ntt+" "+itt,fzd=itt+" "+Txc,GQt="Windows",dzd=GQt+" Phone";var Rxc="Generic",u20=Rxc+" "+itt.toLowerCase(),l20=Rxc+" "+Oxc.toLowerCase(),mzd="Konqueror",qR="(\\d+(\\.\\d+)?)",Nro=new RegExp("Version/"+qR),p20=new RegExp(FLr,"i"),f20=new RegExp(Lro+" \\w+","i"),d20=new RegExp(Mro+" \\w+","i"),hzd=new RegExp(NLr+"|PlayBook|BB10","i"),gzd={"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 m20={[czd]:[new RegExp("rv:"+qR)],[uzd]:[new RegExp(Dxc+"?\\/"+qR)],[jLr]:[new RegExp("("+jLr+"|CrMo)\\/"+qR)],[azd]:[new RegExp("CriOS\\/"+qR)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+qR)],[Txc]:[Nro],[fzd]:[Nro],[jro]:[new RegExp("("+jro+"|OPR)\\/"+qR)],[Qro]:[new RegExp(Qro+"\\/"+qR)],[lzd]:[new RegExp("FxiOS\\/"+qR)],[mzd]:[new RegExp("Konqueror[:/]?"+qR,"i")],[NLr]:[new RegExp(NLr+" "+qR),Nro],[pzd]:[new RegExp("android\\s"+qR,"i")],[ozd]:[new RegExp(izd+"\\/"+qR)],[Pxc]:[new RegExp("(rv:|MSIE )"+qR)],Mozilla:[new RegExp("rv:"+qR)]};var h20=[[new RegExp(FLr+"; "+FLr+" (.*?)[);]","i"),e=>[FLr,e&&e[1]||""]],[new RegExp(Mro,"i"),[Mro,""]],[new RegExp(Lro,"i"),[Lro,""]],[hzd,[NLr,""]],[new RegExp(GQt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[dzd,""];if(new RegExp(itt).test(t)&&!/IEMobile\b/.test(t))return[GQt+" "+itt,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=gzd[n]||"";return/arm/i.test(t)&&(i="RT"),[GQt,i]}return[GQt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[kLr,t.join(".")]}return[kLr,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=zQt(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+ntt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+ntt+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[ntt,t.join(".")]}return[ntt,""]}],[/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/,[szd,""]],[/Linux|debian/i,["Linux",""]]];var Fxc="utf8";function kxc(e,t){if(!e||typeof e!="string"||Azd(e))throw new Error(t)}function Azd(e){return e.trim().length===0}function Nxc(e){return e?.replace(/\/+$/,"")}async function jxc(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 QLr(){return new Date().toISOString()}function ufe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var Qxc=e=>e instanceof Error;function Uro(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var MLr=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)}};var XQe=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()}},ott=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function Mxc(e){if(e instanceof XQe){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 zro(e){return typeof e=="object"&&(e instanceof XQe||e instanceof ott)}function Lxc(e){return typeof e=="object"&&e instanceof XQe&&e.status===413}var WQt=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new RLr,this._events=new MLr,this._isInitialized=!1,kxc(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=Nxc(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:zro},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=Sxc("[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=!yxc()||(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(Lj.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(Lj.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(Lj.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=!1){await this._initPromise;let a=s?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,u={token:this.apiKey,distinct_id:t,groups:r,person_properties:n,group_properties:i,...o};this.evaluationContexts&&this.evaluationContexts.length>0&&(u.evaluation_contexts=this.evaluationContexts);let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(u)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,l,{retryCount:0},this.featureFlagsRequestTimeoutMs).then(p=>p.json()).then(p=>({success:!0,response:Tro(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof XQe)return{type:"api_error",statusCode:t.status};if(t instanceof ott){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 c=UQt(a.response);return c===void 0&&(c=!1),{response:c,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 c=a[t];return c===void 0?null:c}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 c=await this.getFlags(t,r,n,i,a);if(!c.success)return;let u=c.response;return u.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"),u.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:u?.requestId,quotaLimited:u.quotaLimited}):u}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(Lj.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(Lj.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(Lj.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(Lj.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(Lj.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=ufe(()=>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:QLr()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await OLr(s,this.isDebug),u={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...c!==null&&{"Content-Encoding":"gzip"}},body:c||s};try{await this.fetchWithRetry(a,u)}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:QLr(),uuid:n?.uuid?n.uuid:Vve()};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 Mxc(t)})}async flush(){let t=Uro([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),Uro([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(Lj.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(Lj.Queue)||[]).slice(i.length);this.setPersistedProperty(Lj.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:QLr()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await OLr(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>Lxc(f)?!1:zro(f)};try{await this.fetchWithRetry(u,p,d)}catch(f){if(Lxc(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 ott||await s(),this._events.emit("error",f),f}await s(),r.push(...o)}this._events.emit("flush",r)}async fetchWithRetry(t,r,n,i){let o=r.body?r.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,Fxc)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await jxc(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=ufe(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new ott(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new XQe(l,s);return l},{...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(Lj.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!zro(o))throw o;await Mxc(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=ufe(()=>{this._logger.error("Timed out while shutting down PostHog"),r=!0,s("Timeout while shutting down PostHog. Some events may not have been sent.")},t)}),n()])}finally{clearTimeout(i)}}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 Uj={};H(Uj,{DOMExceptionCoercer:()=>Wro,ErrorCoercer:()=>$ro,ErrorEventCoercer:()=>Hro,ErrorPropertiesBuilder:()=>Vro,EventCoercer:()=>Yro,ObjectCoercer:()=>Jro,PrimitiveCoercer:()=>Xro,PromiseRejectionEventCoercer:()=>Zro,ReduceableCache:()=>eno,StringCoercer:()=>Kro,chromeStackLineParser:()=>qro,createDefaultStackParser:()=>Dzd,createStackParser:()=>Yxc,geckoStackLineParser:()=>Gro,nodeStackLineParser:()=>$xc,opera10StackLineParser:()=>qxc,opera11StackLineParser:()=>Gxc,reverseAndStripFrames:()=>Jxc,winjsStackLineParser:()=>Vxc});var LLr,Uxc,ULr;function zxc(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return ULr&&r.length===Uxc||(Uxc=r.length,ULr=r.reduce((n,i)=>{LLr||(LLr={});let o=LLr[i];if(o)n[o[0]]=o[1];else{let s=e(i);for(let a=s.length-1;a>=0;a--){let u=s[a]?.filename,l=t[i];if(u&&l){n[u]=l,LLr[i]=[u,l];break}}}return n},{})),ULr}var bzd=4,Vro=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),c=this.parseStacktrace(s,a);return{$exception_list:this.convertToExceptionList(c,i),$exception_level:"error"}}async modifyFrames(t){for(let r of t)r.stacktrace&&r.stacktrace.frames&&Rro(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:zxc(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=bzd){let c=this.buildCoercingContext(t,r,a);return this.applyCoercers(s,c)}};return{...r,syntheticException:n==0?r.syntheticException:void 0,mechanism:t,apply:s=>i(s,n),next:s=>i(s,n+1)}}};var VO="?";function yee(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?VO:r,in_app:!0};return zQt(n)||(o.lineno=n),zQt(i)||(o.colno=i),o}var zLr=(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]:VO,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var Ezd=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,vzd=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Izd=/\((\S*)(?::(\d+))(?::(\d+))\)/,qro=(e,t)=>{let r=Ezd.exec(e);if(r){let[,i,o,s]=r;return yee(t,i,VO,+o,+s)}let n=vzd.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=Izd.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=zLr(n[1]||VO,n[2]);return yee(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var wzd=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,xzd=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Gro=(e,t)=>{let r=wzd.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=xzd.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]||VO;return[o,i]=zLr(o,i),yee(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var Czd=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,Vxc=(e,t)=>{let r=Czd.exec(e);return r?yee(t,r[2],r[1]||VO,+r[3],r[4]?+r[4]:void 0):void 0};var _zd=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,qxc=(e,t)=>{let r=_zd.exec(e);return r?yee(t,r[2],r[3]||VO,+r[1]):void 0},Szd=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,Gxc=(e,t)=>{let r=Szd.exec(e);return r?yee(t,r[5],r[3]||r[4]||VO,+r[1],+r[2]):void 0};var Ozd=/^\s*[-]{4,}$/,Tzd=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,$xc=(e,t)=>{let r=e.match(Tzd);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||VO,o=s?`${s}.${a}`:a);let c=r[2]?.startsWith("file://")?r[2].slice(7):r[2],u=r[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&r[5]&&!u&&(c=r[5]),{filename:c?decodeURI(c):void 0,module:void 0,function:o,lineno:Wxc(r[3]),colno:Wxc(r[4]),in_app:Bzd(c||"",u),platform:t}}if(e.match(Ozd))return{filename:e,platform:t}};function Bzd(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 Wxc(e){return parseInt(e||"",10)||void 0}var Hxc=/\(error: (.*)\)/,Kxc=50;function Jxc(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,Kxc).map(r=>({...r,filename:r.filename||Pzd(t).filename,function:r.function||VO}))}function Pzd(e){return e[e.length-1]||{}}function Dzd(){return Yxc("web:javascript",qro,Gro)}function Yxc(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
1733
- `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=Hxc.test(a)?a.replace(Hxc,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=Kxc)break}}return Jxc(i)}}var Wro=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=VQt(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 YQe(t,"DOMException")}isDOMError(t){return YQe(t,"DOMError")}};var $ro=class{match(t){return kro(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 Hro=class{constructor(){}match(t){return xxc(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 Rzd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,Kro=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(Rzd);return i&&(r=i[1],n=i[2]),[r,n]}};var Xxc=["fatal","error","warning","log","info","debug"];function VLr(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 Jro=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 rtt(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=VLr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return VQt(t)&&!Ixc(t)&&Xxc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(Qxc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var Yro=class{match(t){return rtt(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${VLr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var Xro=class{match(t){return PLr(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var Zro=class{match(t){return YQe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!rtt(t))return!1;try{let r=t.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return PLr(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&t.detail!=null&&typeof t.detail=="object"&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var eno=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 tCc=require("fs"),rCc=require("readline"),qLr=new Uj.ReduceableCache(25),nCc=new Uj.ReduceableCache(20),tno=7,Fzd=1e3,kzd=1e4;async function iCc(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"||Mzd(s)||Lzd(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(nCc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=zzd(o);if(s.every(c=>Uzd(i,c)))continue;let a=Vzd(qLr,i,{});n.push(Nzd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&jzd(e,qLr),qLr.reduce(),e}function Nzd(e,t,r){return new Promise(n=>{let i=(0,tCc.createReadStream)(e),o=(0,rCc.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){nCc.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]=qzd(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function jzd(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;Qzd(r.lineno,r,n)}}function Qzd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=oCc(e);i<e;i++){let o=r[i];if(o===void 0)return void Zxc(t);t.pre_context.push(o)}if(r[e]===void 0)return void Zxc(t);t.context_line=r[e];let n=sCc(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 Zxc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Mzd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Lzd(e){return e.lineno!==void 0&&e.lineno>kzd||e.colno!==void 0&&e.colno>Fzd}function Uzd(e,t){let r=qLr.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 zzd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=eCc(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+tno:(i.push(n),n=eCc(o)),t++}return i}function eCc(e){return[oCc(e),sCc(e)]}function oCc(e){return Math.max(1,e-tno)}function sCc(e){return e+tno}function Vzd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function qzd(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 Gzd(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 aCc(e,t){globalThis.process?.on("uncaughtException",Gzd(e,t))}function cCc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var Wzd=2e3,$7=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new DLr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return Fro(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(aCc(this.onException.bind(this),this.onFatalError.bind(this)),cCc(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(Wzd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var uCc="5.29.1";var $Qt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function lCc(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 $zd=6e4,Hzd=1152921504606847e3,Kzd=["is_not"],stt=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Id=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},bee=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},GLr=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 c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof bee||u instanceof Id?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof bee||u instanceof Id?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),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 Id("Flag has experience continuity enabled");if(!t.active)return!1;let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Id("Flag has unknown group type index");if(!(u 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[u];return await this.matchFeatureFlagProperties(t,i[u],l,r)}{let u=this.getBucketingValueForFlag(t,n,o);if(u===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 Id(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,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 Id("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Id(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Id(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Id(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Id(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Id(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Id(`Dependency '${c}' 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,c;for(let u of s)try{if(await this.isConditionMatch(t,r,u,n,i)){let l=u.variant,p=o.multivariate?.variants||[];c=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof bee)throw l;if(l instanceof Id)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Id("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=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?hCc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):mCc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await pCc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await pCc(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($zd,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 stt(`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 stt(`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 stt(`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 stt&&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=ufe(()=>{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 pCc(e,t,r=""){let n=await lCc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/Hzd}function mCc(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 Id("Operator is_not_set is not supported")}else throw new Id(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!Kzd.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=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 fCc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return fCc(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:null;if(typeof i=="string")try{u=parseFloat(i)}catch{}return u==null||s==null?c(String(s),String(i),o):typeof s=="string"?c(s,String(i),o):c(s,u,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Id("Date operations cannot be performed on boolean values");let u=e5d(String(i));if(u==null&&(u=dCc(i)),u==null)throw new Id(`Invalid date: ${i}`);let l=dCc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return A3(qO(String(s)),qO(String(i)))===0;case"semver_neq":return A3(qO(String(s)),qO(String(i)))!==0;case"semver_gt":return A3(qO(String(s)),qO(String(i)))>0;case"semver_gte":return A3(qO(String(s)),qO(String(i)))>=0;case"semver_lt":return A3(qO(String(s)),qO(String(i)))<0;case"semver_lte":return A3(qO(String(s)),qO(String(i)))<=0;case"semver_tilde":{let u=qO(String(s)),{lower:l,upper:p}=Yzd(String(i));return A3(u,l)>=0&&A3(u,p)<0}case"semver_caret":{let u=qO(String(s)),{lower:l,upper:p}=Xzd(String(i));return A3(u,l)>=0&&A3(u,p)<0}case"semver_wildcard":{let u=qO(String(s)),{lower:l,upper:p}=Zzd(String(i));return A3(u,l)>=0&&A3(u,p)<0}default:throw new Id(`Unknown operator: ${o}`)}}function Jzd(e,t){if(!(e in t))throw new bee(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function hCc(e,t,r,n=!1){let i=String(e.value);Jzd(i,r);let o=r[i];return gCc(o,t,r,n)}function gCc(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 c=gCc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof bee)throw c;if(c instanceof Id)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Id("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let c;if(a.type==="cohort")c=hCc(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 c=mCc(a,t);let u=a.negation||!1;if(i==="AND"){if(!c&&!u||c&&u)return!1}else if(c&&!u||!c&&u)return!0}catch(c){if(c instanceof bee)throw c;if(c instanceof Id)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Id("can't match cohort without a given cohort property value");return i==="AND"}function fCc(e){try{return new RegExp(e),!0}catch{return!1}}function qO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Id(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Id(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function A3(e,t){for(let r=0;r<3;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0}function Yzd(e){let t=qO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function Xzd(e){let t=qO(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function Zzd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Id(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Id(`Invalid wildcard semver: ${e}`);let o,s;if(n.length===1)o=[i,0,0],s=[i+1,0,0];else{let a=parseInt(n[1],10);if(isNaN(a))throw new Id(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function dCc(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 Id(`${e} is in an invalid date format`)}throw new Id(`The date provided ${e} must be a string, number, or date object`)}function e5d(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 WLr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var t5d=100,ACc=3e4,r5d=5e4,n5d=50,i5d=500,$Lr=class extends WQt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new WLr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,t5d):ACc,typeof r.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(r.waitUntilDebounceMs,0)),typeof r.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(r.waitUntilMaxWaitMs,0)),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 GLr({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 $7(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||r5d}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??i5d,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??n5d;this._waitUntilCycle.timer=ufe(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}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 uCc}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=ACc){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 C=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:C}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,h,g,A,b,v,E;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let C=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(C){m=!0;let _=C.value;b=w.id,E="Evaluated locally",f={key:t,enabled:_!==!1,variant:typeof _=="string"?_:void 0,payload:C.payload??void 0}}}catch(C){if(C instanceof bee||C instanceof Id)this._logger?.info(`${C.name} when computing flag locally: ${t}: ${C.message}`);else throw C}}if(!m&&!c){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)A=$Qt.UNKNOWN_ERROR;else{h=w.requestId,g=w.evaluatedAt;let C=[];w.errorsWhileComputingFlags&&C.push($Qt.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&C.push($Qt.QUOTA_LIMITED);let _=w.flags[t];if(_===void 0)C.push($Qt.FLAG_MISSING);else{b=_.metadata?.id,v=_.metadata?.version,E=_.reason?.description??_.reason?.code;let x;if(_.metadata?.payload!==void 0)try{x=JSON.parse(_.metadata.payload)}catch{x=_.metadata.payload}f={key:t,enabled:_.enabled,variant:_.variant,payload:x}}C.length>0&&(A=C.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,C=`${t}_${w}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(C)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(C):this.distinctIdHasSentFlagCalls[r]=[C];let _={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:b,$feature_flag_version:v,$feature_flag_reason:E,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():g};if(m&&this.featureFlagsPoller){let x=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();x!==void 0&&(_.$feature_flag_definitions_loaded_at=x)}A&&(_.$feature_flag_error=A),this.capture({distinctId:r,event:"$feature_flag_called",properties:_,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:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=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&&!c){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){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}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=ufe(()=>{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(Cxc(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);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 u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,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(!$7.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise($7.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!$7.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise($7.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:c,uuid:u}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=Vve(),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:c,uuid:u});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,c,h)}return f.event,{}}).then(h=>{let g={};if(h)for(let[b,v]of Object.entries(h))g[`$feature/${b}`]=v;let A=Object.keys(h||{}).filter(b=>h?.[b]!==!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"&&Exc(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 yCc=require("async_hooks"),HLr=class{constructor(){this.storage=new yCc.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 bCc="posthog-node";function o5d(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 c=s.tags[rno.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).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:c,properties:f}),s}}var rno=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=bCc,this.name=bCc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(o5d(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};$7.errorPropertiesBuilder=new Uj.ErrorPropertiesBuilder([new Uj.EventCoercer,new Uj.ErrorCoercer,new Uj.ObjectCoercer,new Uj.StringCoercer,new Uj.PrimitiveCoercer],Uj.createStackParser("node:javascript",Uj.nodeStackLineParser),[hxc(),iCc]);var qve=class extends $Lr{getLibraryId(){return"posthog-node"}initializeContext(){return new HLr}};var KLr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new qve(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"4.68.0",usingAccessToken:!0}})}async flush(){await this.posthog.flush()}};var HQt=class{async sendEvent(){}async identify(){}async flush(){}};Ht();var att=require("fs/promises"),ECc=require("os"),vCc=require("path");var s5d="id",a5d=".fern",KQt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new qve(r),this.userId=t==null?void 0:bJi(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.68.0",...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 ab({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=$e(Gt.of((0,ECc.homedir)()),Pe.of(a5d),Pe.of(s5d));await sr(t)||(await(0,att.mkdir)((0,vCc.dirname)(t),{recursive:!0}),await(0,att.writeFile)(t,G_())),this.persistedDistinctId=(await(0,att.readFile)(t)).toString()}return this.persistedDistinctId}};var nno;async function JQt(){return nno==null&&(nno=await c5d()),nno}async function c5d(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new HQt;let r=await skr();return r!=null?new KQt({token:r,posthogApiKey:e}):await tee()!=null?new KLr({posthogApiKey:e}):new KQt({token:void 0,posthogApiKey:e})}catch{return new HQt}}Bt();var YQt=be(require("process"),1);w6e();var xCc=be(j6i(),1),CCc=be(wCc(),1);function uS(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=aG(e),e.length===0))return 0;e=e.replace((0,CCc.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(xCc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function JLr(e){let t=0;for(let r of e.split(`
1733
+ `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=Hxc.test(a)?a.replace(Hxc,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=Kxc)break}}return Jxc(i)}}var Wro=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=VQt(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 YQe(t,"DOMException")}isDOMError(t){return YQe(t,"DOMError")}};var $ro=class{match(t){return kro(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 Hro=class{constructor(){}match(t){return xxc(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 Rzd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,Kro=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(Rzd);return i&&(r=i[1],n=i[2]),[r,n]}};var Xxc=["fatal","error","warning","log","info","debug"];function VLr(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 Jro=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 rtt(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=VLr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return VQt(t)&&!Ixc(t)&&Xxc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(Qxc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var Yro=class{match(t){return rtt(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${VLr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var Xro=class{match(t){return PLr(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var Zro=class{match(t){return YQe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!rtt(t))return!1;try{let r=t.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return PLr(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&t.detail!=null&&typeof t.detail=="object"&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var eno=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 tCc=require("fs"),rCc=require("readline"),qLr=new Uj.ReduceableCache(25),nCc=new Uj.ReduceableCache(20),tno=7,Fzd=1e3,kzd=1e4;async function iCc(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"||Mzd(s)||Lzd(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(nCc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=zzd(o);if(s.every(c=>Uzd(i,c)))continue;let a=Vzd(qLr,i,{});n.push(Nzd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&jzd(e,qLr),qLr.reduce(),e}function Nzd(e,t,r){return new Promise(n=>{let i=(0,tCc.createReadStream)(e),o=(0,rCc.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){nCc.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]=qzd(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function jzd(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;Qzd(r.lineno,r,n)}}function Qzd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=oCc(e);i<e;i++){let o=r[i];if(o===void 0)return void Zxc(t);t.pre_context.push(o)}if(r[e]===void 0)return void Zxc(t);t.context_line=r[e];let n=sCc(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 Zxc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Mzd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Lzd(e){return e.lineno!==void 0&&e.lineno>kzd||e.colno!==void 0&&e.colno>Fzd}function Uzd(e,t){let r=qLr.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 zzd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=eCc(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+tno:(i.push(n),n=eCc(o)),t++}return i}function eCc(e){return[oCc(e),sCc(e)]}function oCc(e){return Math.max(1,e-tno)}function sCc(e){return e+tno}function Vzd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function qzd(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 Gzd(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 aCc(e,t){globalThis.process?.on("uncaughtException",Gzd(e,t))}function cCc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var Wzd=2e3,$7=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new DLr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return Fro(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(aCc(this.onException.bind(this),this.onFatalError.bind(this)),cCc(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(Wzd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var uCc="5.29.1";var $Qt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function lCc(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 $zd=6e4,Hzd=1152921504606847e3,Kzd=["is_not"],stt=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Id=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},bee=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},GLr=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 c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof bee||u instanceof Id?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof bee||u instanceof Id?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),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 Id("Flag has experience continuity enabled");if(!t.active)return!1;let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Id("Flag has unknown group type index");if(!(u 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[u];return await this.matchFeatureFlagProperties(t,i[u],l,r)}{let u=this.getBucketingValueForFlag(t,n,o);if(u===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 Id(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,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 Id("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Id(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Id(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Id(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Id(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Id(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Id(`Dependency '${c}' 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,c;for(let u of s)try{if(await this.isConditionMatch(t,r,u,n,i)){let l=u.variant,p=o.multivariate?.variants||[];c=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof bee)throw l;if(l instanceof Id)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Id("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=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?hCc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):mCc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await pCc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await pCc(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($zd,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 stt(`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 stt(`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 stt(`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 stt&&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=ufe(()=>{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 pCc(e,t,r=""){let n=await lCc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/Hzd}function mCc(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 Id("Operator is_not_set is not supported")}else throw new Id(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!Kzd.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=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 fCc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return fCc(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:null;if(typeof i=="string")try{u=parseFloat(i)}catch{}return u==null||s==null?c(String(s),String(i),o):typeof s=="string"?c(s,String(i),o):c(s,u,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Id("Date operations cannot be performed on boolean values");let u=e5d(String(i));if(u==null&&(u=dCc(i)),u==null)throw new Id(`Invalid date: ${i}`);let l=dCc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return A3(qO(String(s)),qO(String(i)))===0;case"semver_neq":return A3(qO(String(s)),qO(String(i)))!==0;case"semver_gt":return A3(qO(String(s)),qO(String(i)))>0;case"semver_gte":return A3(qO(String(s)),qO(String(i)))>=0;case"semver_lt":return A3(qO(String(s)),qO(String(i)))<0;case"semver_lte":return A3(qO(String(s)),qO(String(i)))<=0;case"semver_tilde":{let u=qO(String(s)),{lower:l,upper:p}=Yzd(String(i));return A3(u,l)>=0&&A3(u,p)<0}case"semver_caret":{let u=qO(String(s)),{lower:l,upper:p}=Xzd(String(i));return A3(u,l)>=0&&A3(u,p)<0}case"semver_wildcard":{let u=qO(String(s)),{lower:l,upper:p}=Zzd(String(i));return A3(u,l)>=0&&A3(u,p)<0}default:throw new Id(`Unknown operator: ${o}`)}}function Jzd(e,t){if(!(e in t))throw new bee(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function hCc(e,t,r,n=!1){let i=String(e.value);Jzd(i,r);let o=r[i];return gCc(o,t,r,n)}function gCc(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 c=gCc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof bee)throw c;if(c instanceof Id)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Id("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let c;if(a.type==="cohort")c=hCc(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 c=mCc(a,t);let u=a.negation||!1;if(i==="AND"){if(!c&&!u||c&&u)return!1}else if(c&&!u||!c&&u)return!0}catch(c){if(c instanceof bee)throw c;if(c instanceof Id)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Id("can't match cohort without a given cohort property value");return i==="AND"}function fCc(e){try{return new RegExp(e),!0}catch{return!1}}function qO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Id(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Id(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function A3(e,t){for(let r=0;r<3;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0}function Yzd(e){let t=qO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function Xzd(e){let t=qO(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function Zzd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Id(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Id(`Invalid wildcard semver: ${e}`);let o,s;if(n.length===1)o=[i,0,0],s=[i+1,0,0];else{let a=parseInt(n[1],10);if(isNaN(a))throw new Id(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function dCc(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 Id(`${e} is in an invalid date format`)}throw new Id(`The date provided ${e} must be a string, number, or date object`)}function e5d(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 WLr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var t5d=100,ACc=3e4,r5d=5e4,n5d=50,i5d=500,$Lr=class extends WQt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new WLr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,t5d):ACc,typeof r.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(r.waitUntilDebounceMs,0)),typeof r.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(r.waitUntilMaxWaitMs,0)),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 GLr({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 $7(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||r5d}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??i5d,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??n5d;this._waitUntilCycle.timer=ufe(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}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 uCc}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=ACc){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 C=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:C}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,h,g,A,b,v,E;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let C=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(C){m=!0;let _=C.value;b=w.id,E="Evaluated locally",f={key:t,enabled:_!==!1,variant:typeof _=="string"?_:void 0,payload:C.payload??void 0}}}catch(C){if(C instanceof bee||C instanceof Id)this._logger?.info(`${C.name} when computing flag locally: ${t}: ${C.message}`);else throw C}}if(!m&&!c){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)A=$Qt.UNKNOWN_ERROR;else{h=w.requestId,g=w.evaluatedAt;let C=[];w.errorsWhileComputingFlags&&C.push($Qt.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&C.push($Qt.QUOTA_LIMITED);let _=w.flags[t];if(_===void 0)C.push($Qt.FLAG_MISSING);else{b=_.metadata?.id,v=_.metadata?.version,E=_.reason?.description??_.reason?.code;let x;if(_.metadata?.payload!==void 0)try{x=JSON.parse(_.metadata.payload)}catch{x=_.metadata.payload}f={key:t,enabled:_.enabled,variant:_.variant,payload:x}}C.length>0&&(A=C.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,C=`${t}_${w}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(C)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(C):this.distinctIdHasSentFlagCalls[r]=[C];let _={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:b,$feature_flag_version:v,$feature_flag_reason:E,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():g};if(m&&this.featureFlagsPoller){let x=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();x!==void 0&&(_.$feature_flag_definitions_loaded_at=x)}A&&(_.$feature_flag_error=A),this.capture({distinctId:r,event:"$feature_flag_called",properties:_,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:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=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&&!c){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){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}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=ufe(()=>{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(Cxc(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);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 u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,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(!$7.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise($7.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!$7.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise($7.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:c,uuid:u}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=Vve(),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:c,uuid:u});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,c,h)}return f.event,{}}).then(h=>{let g={};if(h)for(let[b,v]of Object.entries(h))g[`$feature/${b}`]=v;let A=Object.keys(h||{}).filter(b=>h?.[b]!==!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"&&Exc(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 yCc=require("async_hooks"),HLr=class{constructor(){this.storage=new yCc.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 bCc="posthog-node";function o5d(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 c=s.tags[rno.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).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:c,properties:f}),s}}var rno=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=bCc,this.name=bCc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(o5d(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};$7.errorPropertiesBuilder=new Uj.ErrorPropertiesBuilder([new Uj.EventCoercer,new Uj.ErrorCoercer,new Uj.ObjectCoercer,new Uj.StringCoercer,new Uj.PrimitiveCoercer],Uj.createStackParser("node:javascript",Uj.nodeStackLineParser),[hxc(),iCc]);var qve=class extends $Lr{getLibraryId(){return"posthog-node"}initializeContext(){return new HLr}};var KLr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new qve(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"4.68.1",usingAccessToken:!0}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var HQt=class{async sendEvent(){}async identify(){}async flush(){}};Ht();var att=require("fs/promises"),ECc=require("os"),vCc=require("path");var s5d="id",a5d=".fern",KQt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new qve(r),this.userId=t==null?void 0:bJi(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.68.1",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}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 ab({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=$e(Gt.of((0,ECc.homedir)()),Pe.of(a5d),Pe.of(s5d));await sr(t)||(await(0,att.mkdir)((0,vCc.dirname)(t),{recursive:!0}),await(0,att.writeFile)(t,G_())),this.persistedDistinctId=(await(0,att.readFile)(t)).toString()}return this.persistedDistinctId}};var nno;async function JQt(){return nno==null&&(nno=await c5d()),nno}async function c5d(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new HQt;let r=await skr();return r!=null?new KQt({token:r,posthogApiKey:e}):await tee()!=null?new KLr({posthogApiKey:e}):new KQt({token:void 0,posthogApiKey:e})}catch{return new HQt}}Bt();var YQt=be(require("process"),1);w6e();var xCc=be(j6i(),1),CCc=be(wCc(),1);function uS(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=aG(e),e.length===0))return 0;e=e.replace((0,CCc.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(xCc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function JLr(e){let t=0;for(let r of e.split(`
1734
1734
  `))t=Math.max(t,uS(r));return t}var GCc=be(ono(),1);var l5d=/[\p{Lu}]/u,p5d=/[\p{Ll}]/u,OCc=/^[\p{Lu}](?![\p{Lu}])/gu,PCc=/([\p{Alpha}\p{N}_]|$)/u,sno=/[_.\- ]+/,f5d=new RegExp("^"+sno.source),TCc=new RegExp(sno.source+PCc.source,"gu"),BCc=new RegExp("\\d+"+PCc.source,"gu"),d5d=(e,t,r,n)=>{let i=!1,o=!1,s=!1,a=!1;for(let c=0;c<e.length;c++){let u=e[c];a=c>2?e[c-3]==="-":!0,i&&l5d.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&p5d.test(u)&&(!a||n)?(e=e.slice(0,c-1)+"-"+e.slice(c-1),s=o,o=!1,i=!0):(i=t(u)===u&&r(u)!==u,s=o,o=r(u)===u&&t(u)!==u)}return e},m5d=(e,t)=>(OCc.lastIndex=0,e.replace(OCc,r=>t(r))),h5d=(e,t)=>(TCc.lastIndex=0,BCc.lastIndex=0,e.replace(TCc,(r,n)=>t(n)).replace(BCc,r=>t(r)));function ano(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?sno.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=d5d(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(f5d,""),e=t.preserveConsecutiveUppercase?m5d(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),h5d(e,n))}var pno=be(RCc(),1);w6e();var FCc=(e=0)=>t=>`\x1B[${t+e}m`,kCc=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,NCc=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,n0={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]}},wL0=Object.keys(n0.modifier),b5d=Object.keys(n0.color),E5d=Object.keys(n0.bgColor),xL0=[...b5d,...E5d];function v5d(){let e=new Map;for(let[t,r]of Object.entries(n0)){for(let[n,i]of Object.entries(r))n0[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=n0[n],e.set(i[0],i[1]);Object.defineProperty(n0,t,{value:r,enumerable:!1})}return Object.defineProperty(n0,"codes",{value:e,enumerable:!1}),n0.color.close="\x1B[39m",n0.bgColor.close="\x1B[49m",n0.color.ansi=FCc(),n0.color.ansi256=kCc(),n0.color.ansi16m=NCc(),n0.bgColor.ansi=FCc(10),n0.bgColor.ansi256=kCc(10),n0.bgColor.ansi16m=NCc(10),Object.defineProperties(n0,{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=>n0.rgbToAnsi256(...n0.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)=>n0.ansi256ToAnsi(n0.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>n0.ansi256ToAnsi(n0.hexToAnsi256(t)),enumerable:!1}}),n0}var I5d=v5d(),jCc=I5d;var YLr=new Set(["\x1B","\x9B"]),w5d=39,uno="\x07",LCc="[",x5d="]",UCc="m",lno=`${x5d}8;;`,QCc=e=>`${YLr.values().next().value}${LCc}${e}${UCc}`,MCc=e=>`${YLr.values().next().value}${lno}${e}${uno}`,C5d=e=>e.split(" ").map(t=>uS(t)),cno=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=uS(aG(e[e.length-1]));for(let[a,c]of n.entries()){let u=uS(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),YLr.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(lno)),i){o?c===uno&&(i=!1,o=!1):c===UCc&&(i=!1);continue}s+=u,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())},_5d=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(uS(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},S5d=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=C5d(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=uS(a[a.length-1]);if(u!==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[u]>t){let d=t-p,f=1+Math.floor((s[u]-d-1)/t);Math.floor((s[u]-1)/t)<f&&a.push(""),cno(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){cno(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){cno(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>_5d(u)));let c=[...a.join(`
1735
1735
  `)];for(let[u,l]of c.entries()){if(n+=l,YLr.has(l)){let{groups:d}=new RegExp(`(?:\\${LCc}(?<code>\\d+)m|\\${lno}(?<uri>.*)${uno})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===w5d?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=jCc.codes.get(Number(i));c[u+1]===`
1736
1736
  `?(o&&(n+=MCc("")),i&&p&&(n+=QCc(p))):l===`
@@ -1787,7 +1787,7 @@ public static extern void CredFree(IntPtr credential);
1787
1787
  ${this.indentBlock(this.suggestion)}`}indentBlock(t,r=" "){return t.split(`
1788
1788
  `).map(n=>n.length>0?`${r}${n}`:n).join(`
1789
1789
  `)}};var v_c=be(G0(),1),ftt=class{absoluteFilePath;relativeFilePath;document;source;constructor({absoluteFilePath:t,relativeFilePath:r,document:n,source:i}){this.absoluteFilePath=t,this.relativeFilePath=r,this.document=n,this.source=i}get errors(){return this.document.errors}toJS(){return this.document.toJS()}getSourceLocation(t){let r=this.document.getIn(t,!0);if(!(0,v_c.isNode)(r))return this.getRootSourceLocation();let n=r.range;return n==null?this.getRootSourceLocation():this.offsetToLocation(n[0])}getRootSourceLocation(){return new y3({absoluteFilePath:this.absoluteFilePath,relativeFilePath:this.relativeFilePath,line:1,column:1})}offsetToLocation(t){let r=1,n=-1;for(let i=0;i<t&&i<this.source.length;i++)this.source[i]===`
1790
- `&&(r++,n=i);return new y3({absoluteFilePath:this.absoluteFilePath,relativeFilePath:this.relativeFilePath,line:r,column:t-n})}};var sUr="$ref",aUr=class{cwd;constructor({cwd:t}){this.cwd=t}async resolve({document:t}){let r=t.absoluteFilePath,n={cwd:this.cwd,document:t,originalFile:r,currentFile:r,resolutionStack:new Set([r]),referencedDocuments:{},issues:[],pathMappings:[],yamlPathIndex:0,refFromLocation:void 0},i=await this.resolveValue({context:n,yamlPath:[],value:t.toJS()});return n.issues.length>0?{success:!1,issues:n.issues}:{success:!0,data:i,pathMappings:n.pathMappings}}getSourceLocationWithMappings({document:t,pathMappings:r,yamlPath:n}){let i;for(let o of r)this.yamlPathStartsWith(n,o.yamlPath)&&(i==null||o.yamlPath.length>i.yamlPath.length)&&(i=o);if(i!=null){let o=n.slice(i.yamlPath.length);return i.document.getSourceLocation(o).withRefFrom(i.refFromLocation)}return t.getSourceLocation(n)}async resolveValue({context:t,yamlPath:r,value:n}){if(n==null)return n;if(Array.isArray(n))return Promise.all(n.map((i,o)=>this.resolveValue({context:t,yamlPath:[...r,o],value:i})));if(typeof n=="object"){let i=n;if(sUr in i){let s=[...r,sUr];return this.resolveRef({context:t,yamlPath:s,location:this.getSourceLocation({context:t,yamlPath:s}),obj:i,refValue:i[sUr]})}let o={};for(let s of Object.keys(i))o[s]=await this.resolveValue({context:t,yamlPath:[...r,s],value:i[s]});return o}return n}async resolveRef({context:t,yamlPath:r,location:n,obj:i,refValue:o}){if(typeof o!="string")return t.issues.push(new SA({message:`$ref must be a string, got ${typeof o}`,location:n,yamlPath:r})),i;let s=Object.keys(i);if(s.length>1){let d=s.filter(f=>f!==sUr);return t.issues.push(new SA({message:`$ref cannot have sibling keys; found ${d.join(", ")}`,location:n,yamlPath:r})),i}if(o.includes("#"))return t.issues.push(new SA({message:`JSON pointer and in-document references are not supported: ${o}`,location:n,yamlPath:r})),i;let a=this.resolveFilePath({currentFile:t.currentFile,refValue:o});if(t.resolutionStack.has(a)){let d=[...t.resolutionStack,a].join(" -> ");return t.issues.push(new SA({message:`Circular $ref detected: ${d}`,location:n,yamlPath:r})),i}let c=await this.parseFile({context:t,referencedFilePath:a,yamlPath:r,location:n,refValue:o});if(c===void 0)return i;if(c===null)return t.issues.push(new SA({message:`$ref resolves to null: ${o}`,location:n,yamlPath:r})),i;let u=r.slice(0,-1),l=t.referencedDocuments[a];return l!=null&&t.pathMappings.push({yamlPath:u,document:l,refFromLocation:n}),await this.resolveReferencedFile({context:t,referencedFilePath:a,refFromLocation:n,yamlPath:u,value:c})}async resolveReferencedFile({context:t,referencedFilePath:r,refFromLocation:n,yamlPath:i,value:o}){let s=t.currentFile,a=t.yamlPathIndex,c=t.refFromLocation;t.currentFile=r,t.yamlPathIndex=i.length,t.refFromLocation=n,t.resolutionStack.add(r);try{return await this.resolveValue({context:t,yamlPath:i,value:o})}finally{t.resolutionStack.delete(r),t.currentFile=s,t.yamlPathIndex=a,t.refFromLocation=c}}async parseFile({context:t,referencedFilePath:r,yamlPath:n,location:i,refValue:o}){if(!await sr(r)){t.issues.push(new SA({message:`Referenced file does not exist: ${o}`,location:i,yamlPath:n}));return}let s=await(0,I_c.readFile)(r,"utf-8"),a=(0,w_c.parseDocument)(s);if(a.errors.length>0){let u=a.errors.map(l=>l.message).join("; ");t.issues.push(new SA({message:`Failed to parse referenced file ${o}: ${u}`,location:i,yamlPath:n}));return}let c=new ftt({absoluteFilePath:r,relativeFilePath:Pe.of(Ys(t.cwd,r)),document:a,source:s});return t.referencedDocuments[r]=c,c.toJS()}getSourceLocation({context:t,yamlPath:r}){if(t.currentFile===t.originalFile)return t.document.getSourceLocation(r);let n=this.getSourceLocationFromCurrentFile({context:t,yamlPath:r});return t.refFromLocation!=null?n.withRefFrom(t.refFromLocation):n}yamlPathStartsWith(t,r){if(r.length>t.length)return!1;for(let n=0;n<r.length;n++)if(t[n]!==r[n])return!1;return!0}getSourceLocationFromCurrentFile({context:t,yamlPath:r}){let n=t.referencedDocuments[t.currentFile];if(n!=null){let i=r.slice(t.yamlPathIndex);return n.getSourceLocation(i)}return this.createLocationForReferencedFile({context:t,absoluteFilePath:t.currentFile})}createLocationForReferencedFile({context:t,absoluteFilePath:r}){return new y3({absoluteFilePath:r,relativeFilePath:Pe.of(Ys(t.cwd,r)),line:1,column:1})}resolveFilePath({currentFile:t,refValue:r}){let n=Tn(t);return $e(n,Pe.of(r))}};Bt();Ht();function x_c(e){return Eee(e,new WeakMap)}function o3d(e){return e._zod?.def}function Eee(e,t){if(t.has(e))return t.get(e);let r=o3d(e);if(r==null)return e;switch(r.type){case"object":{let n=r.shape??{},i={};for(let[s,a]of Object.entries(n))i[s]=Eee(a,t);let o=se.object(i).strict();return t.set(e,o),o}case"array":{let n=r.element;return n!=null?se.array(Eee(n,t)):e}case"optional":{let n=r.innerType;return n!=null?Eee(n,t).optional():e}case"nullable":{let n=r.innerType;return n!=null?Eee(n,t).nullable():e}case"union":{let n=r.options;return n!=null?se.union(n.map(i=>Eee(i,t))):e}case"record":{let n=r.keyType,i=r.valueType;return n!=null&&i!=null?se.record(n,Eee(i,t)):e}case"lazy":{let n=r.getter;if(n==null)return e;let i=se.lazy(()=>Eee(n(),t));return t.set(e,i),i}case"tuple":{let n=r.items;return n==null?e:se.tuple(n.map(i=>Eee(i,t)))}case"default":{let n=r.innerType;return n!=null?Eee(n,t).default(r.defaultValue):e}default:return e}}UA();var Sno=require("fs/promises"),uUr=be(G0(),1);var cUr=class{async parse(t){let r=await(0,Sno.readFile)(t,"utf-8");return(0,uUr.parse)(r)}async parseDocument({absoluteFilePath:t,cwd:r}){let n=await(0,Sno.readFile)(t,"utf-8"),i=(0,uUr.parseDocument)(n),o=Js.of(Iqe(r,t));return new ftt({absoluteFilePath:t,relativeFilePath:o,document:i,source:n})}};var lUr=class{document;constructor(t){this.document=t}toSourced(t){return this.toSourcedInternal(t,[])}toSourcedInternal(t,r){let n=this.document.getSourceLocation(r);if(t===null)return new $ve(null,n);if(t===void 0)return new $ve(void 0,n);if(Array.isArray(t))return Cno({value:t,location:n,wrapChild:(i,o)=>this.toSourcedInternal(i,[...r,o])});if(t instanceof Object)return _no({value:t,location:n,wrapChild:(i,o)=>this.toSourcedInternal(i,[...r,o])});switch(typeof t){case"string":return new lMt(t,n);case"number":return new pMt(t,n);case"boolean":return new fMt(t,n);default:throw new Error(`Unexpected value type: ${typeof t}`)}}};var dMt=class{parser;cwd;referenceResolver;constructor({cwd:t}){this.parser=new cUr,this.cwd=t,this.referenceResolver=new aUr({cwd:t})}async load({absoluteFilePath:t,schema:r,resolveReferences:n=!0,strict:i=!1}){let o=await this.parseDocument(t),s=this.getYamlErrors(o);if(s.length>0)return{success:!1,issues:s};let a=await this.resolveReferences({document:o,resolveReferences:n});if(!a.success)return{success:!1,issues:a.issues};let u=(i?x_c(r):r).safeParse(a.data);if(!u.success)return{success:!1,issues:u.error.issues.map(d=>{let f=d.path.filter(m=>typeof m!="symbol");return new SA({yamlPath:f,message:this.formatZodIssue(d),location:this.referenceResolver.getSourceLocationWithMappings({document:o,pathMappings:a.pathMappings,yamlPath:f})})})};let l=new lUr(o);return{success:!0,data:u.data,sourced:l.toSourced(u.data),absoluteFilePath:t,relativeFilePath:Pe.of(Ys(this.cwd,t))}}async parseDocument(t){try{return await this.parser.parseDocument({absoluteFilePath:t,cwd:this.cwd})}catch(r){throw new Error(`Failed to parse YAML file ${t}: ${ji(r)}`)}}async resolveReferences({document:t,resolveReferences:r}){if(!r)return{success:!0,data:t.toJS(),pathMappings:[]};let n=await this.referenceResolver.resolve({document:t});return n.success?n:{success:!1,issues:n.issues}}getYamlErrors(t){return t.errors.length===0?[]:t.errors.map(r=>{let n=r.linePos?.[0]?.line??1,i=r.linePos?.[0]?.col??1;return new SA({message:r.message,location:new y3({absoluteFilePath:t.absoluteFilePath,relativeFilePath:t.relativeFilePath,line:n,column:i})})})}formatZodIssue(t){let r=t.path.join(".");switch(t.code){case"invalid_type":return t.message.endsWith("received undefined")?r.length>0?`${r} is required`:"value is required":r.length>0?`${r} must be a ${t.expected}`:`must be a ${t.expected}`;case"invalid_value":{if(t.values!=null){let n=t.values.join(", ");return r.length>0?`${r} must be one of: ${n}`:`must be one of: ${n}`}return t.message}case"unrecognized_keys":return`unknown key(s): ${t.keys.join(", ")}`;case"invalid_union":{let n=new Set;for(let i of t.errors)for(let o of i)o.code==="invalid_type"&&n.add(o.expected);if(n.size>0){let i=Array.from(n).join(" or ");return r.length>0?`${r} must be a ${i}`:`must be a ${i}`}return r.length>0?`${r} has an invalid value`:"invalid value"}case"invalid_format":return r.length>0?`${r} must be a valid ${t.format}`:`must be a valid ${t.format}`;default:return t.message}}};Ht();var pUr=class{from;constructor(t){this.from=t.from}async findOrThrow({filename:t,remediationMessage:r}){let n=await this.find({filename:t});if(n==null)throw new Error(`${t} file not found in any parent directory from ${this.from}`);return n}async find({filename:t}){let r=await yd(t,{cwd:this.from,type:"file"});if(r==null)return;let n=Gt.of(r);if(await sr(n))return n}};var C_c="fern.yml",mMt=class{finder;loader;constructor(t={}){let r=Gt.of(t.cwd??process.cwd());this.finder=new pUr({from:r}),this.loader=new dMt({cwd:r})}async loadOrThrow(){let t=await this.load();if(t.type==="notFound")throw new Error(`${C_c} file not found in any parent directory; did you forget to run \`fern init\`?`);if(t.type==="failure")throw new TL(t.issues);return t}async load(){let t=await this.finder.find({filename:C_c});if(t==null)return{type:"notFound"};let r=await this.loader.load({absoluteFilePath:t,schema:H2t,strict:!0});return r.success?{type:"success",...r}:{type:"failure",issues:r.issues}}};Ht();var iMe=require("fs/promises"),__c=be(JTr(),1),fUr=be(require("os"),1),S_c=require("os"),O_c=require("path");var hMt=class e{posthog;sentry;baseTags;accumulatedTags={};distinctId;static async create({isTTY:t}){let r=await e.getDistinctId();return new e({isTTY:t,distinctId:r})}constructor({isTTY:t,distinctId:r}){this.distinctId=r;let n=this.isTelemetryEnabled(),i="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal";this.baseTags={version:"*",arch:fUr.arch(),ci:__c.default,os:fUr.platform(),tty:t,usingAccessToken:process.env.FERN_TOKEN!=null},this.posthog=i!=null&&i.length>0&&n?new qve(i):void 0;let o="";if(o!=null&&o.length>0&&n){let s="production";if(s==null||s.length===0)throw new Error("SENTRY_ENVIRONMENT must be set when SENTRY_DSN is configured");this.sentry=ACt({dsn:o,release:`cli@${"*"}`,environment:s,defaultIntegrations:!1,integrations:[ZVe()],tracesSampleRate:0}),yCt()}}sendEvent(t,r){if(this.posthog!=null)try{this.posthog.capture({distinctId:this.distinctId,event:t,properties:{...this.baseTags,...this.accumulatedTags,...r}})}catch{}}sendLifecycleEvent(t){if(this.posthog!=null)try{this.posthog.capture({distinctId:this.distinctId,event:"cli",properties:{...this.baseTags,...this.accumulatedTags,...t}})}catch{}}tag(t){Object.assign(this.accumulatedTags,t)}captureException(t){if(this.sentry!==void 0)try{this.sentry.captureException(t,{captureContext:{user:{id:this.distinctId},tags:{...this.baseTags,...this.accumulatedTags}}})}catch{}}async flush(){let t=[];this.posthog!=null&&t.push(this.posthog.shutdown().catch(()=>{})),this.sentry!==void 0&&t.push(Promise.resolve(this.sentry.flush(2e3)).catch(()=>{})),await Promise.all(t)}static async getDistinctId(){let t=e.getDistinctIdFilepath(),r=null;try{await sr(t)||(await(0,iMe.mkdir)((0,O_c.dirname)(t),{recursive:!0}),await(0,iMe.writeFile)(t,G_(),{flag:"wx"}));let n=(await(0,iMe.readFile)(t)).toString().trim();if(r=n,!c8i(n)){let i=G_();await(0,iMe.writeFile)(t,i),r=i}}catch{r=G_()}return(r==null||r.length===0)&&(r=G_()),r}static getDistinctIdFilepath(){return $e(Gt.of((0,S_c.homedir)()),Pe.of(".fern"),Pe.of("id"))}isTelemetryEnabled(){let t=process.env.FERN_TELEMETRY_DISABLED;return t!=null&&t.length>0?!1:new WR().loadTelemetryEnabledSync()??!0}};Ht();var dtt="api",dUr=class{cwd;issues=[];constructor({cwd:t}){this.cwd=t}async convert({fernYml:t}){let{api:r,apis:n}=t.data,i=t.sourced;if(r!=null&&n!=null)return this.issues.push(new SA({message:"Cannot define both 'api' and 'apis' in fern.yml.",location:i.$loc})),{success:!1,issues:this.issues};if(r==null&&n==null)return{success:!0,apis:{}};let o={};return r!=null&&!dI(i.api)&&(o=await this.convertApi({absoluteFernYmlPath:t.absoluteFilePath,api:r,sourcedApi:i.api})),n!=null&&!dI(i.apis)&&(o=await this.convertApis({absoluteFernYmlPath:t.absoluteFilePath,apis:n,sourcedApis:i.apis})),this.issues.length>0?{success:!1,issues:this.issues}:{success:!0,apis:o}}async convertApi({absoluteFernYmlPath:t,api:r,sourcedApi:n}){if(dI(n))return{};let o={specs:await this.convertSpecs({absoluteFernYmlPath:t,specs:r.specs,sourced:n.specs}),auth:r.auth,authSchemes:r.authSchemes,defaultUrl:r.defaultUrl,defaultEnvironment:r.defaultEnvironment,environments:r.environments,headers:r.headers};return{[dtt]:o}}async convertApis({absoluteFernYmlPath:t,apis:r,sourcedApis:n}){if(dI(n))return{};let i=Object.entries(r).filter(([s])=>!dI(n[s])).map(([s,a])=>({apiName:s,apiDef:a,sourcedApiDef:n[s]})).filter(s=>!dI(s.sourcedApiDef)),o=await Promise.all(i.map(async({apiName:s,apiDef:a,sourcedApiDef:c})=>{let l={specs:await this.convertSpecs({absoluteFernYmlPath:t,specs:a.specs,sourced:c.specs}),auth:a.auth,authSchemes:a.authSchemes,defaultUrl:a.defaultUrl,defaultEnvironment:a.defaultEnvironment,environments:a.environments,headers:a.headers};return[s,l]}));return Object.fromEntries(o)}async convertSpecs({absoluteFernYmlPath:t,specs:r,sourced:n}){this.validateSpecCombinations({specs:r,sourced:n});let i=[];for(let o=0;o<r.length;o++){let s=r[o],a=n[o];s==null||dI(a)||i.push({spec:s,sourced:a})}return await Promise.all(i.map(({spec:o,sourced:s})=>this.convertSpec({absoluteFernYmlPath:t,spec:o,sourced:s})))}async convertSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){if("openapi"in r&&"openapi"in n)return await this.convertOpenApiSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("asyncapi"in r&&"asyncapi"in n)return await this.convertAsyncApiSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("proto"in r&&"proto"in n)return await this.convertProtobufSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("fern"in r&&"fern"in n)return await this.convertFernSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("conjure"in r&&"conjure"in n)return await this.convertConjureSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("openrpc"in r&&"openrpc"in n)return await this.convertOpenRpcSpec({absoluteFernYmlPath:t,spec:r,sourced:n});throw new Error(`Unknown spec type: ${JSON.stringify(r)}`)}async convertOpenApiSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={openapi:await this.resolvePath({absoluteFernYmlPath:t,path:r.openapi,sourced:n.openapi})};return r.origin!=null&&(i.origin=r.origin),r.overrides!=null&&!dI(n.overrides)&&(i.overrides=await this.resolvePathOrPaths({absoluteFernYmlPath:t,paths:r.overrides,sourced:n.overrides})),r.overlays!=null&&!dI(n.overlays)&&(i.overlays=await this.resolvePath({absoluteFernYmlPath:t,path:r.overlays,sourced:n.overlays})),r.namespace!=null&&(i.namespace=r.namespace),r.settings!=null&&(i.settings=r.settings),i}async convertAsyncApiSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={asyncapi:await this.resolvePath({absoluteFernYmlPath:t,path:r.asyncapi,sourced:n.asyncapi})};return r.overrides!=null&&!dI(n.overrides)&&(i.overrides=await this.resolvePathOrPaths({absoluteFernYmlPath:t,paths:r.overrides,sourced:n.overrides})),r.settings!=null&&(i.settings=r.settings),i}async convertProtobufSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={root:await this.resolvePath({absoluteFernYmlPath:t,path:r.proto.root,sourced:n.proto.root})};if(r.proto.target!=null&&!dI(n.proto.target)&&(i.target=await this.resolvePath({absoluteFernYmlPath:t,path:r.proto.target,sourced:n.proto.target})),r.proto.overrides!=null&&!dI(n.proto.overrides)&&(i.overrides=await this.resolvePathOrPaths({absoluteFernYmlPath:t,paths:r.proto.overrides,sourced:n.proto.overrides})),r.proto.localGeneration!=null&&(i.localGeneration=r.proto.localGeneration),r.proto.fromOpenapi!=null&&(i.fromOpenapi=r.proto.fromOpenapi),r.proto.dependencies!=null&&!dI(n.proto.dependencies)){let s=[];for(let a=0;a<r.proto.dependencies.length;a++){let c=r.proto.dependencies[a],u=n.proto.dependencies[a];c!=null&&!dI(u)&&s.push(await this.resolvePath({absoluteFernYmlPath:t,path:c,sourced:u}))}i.dependencies=s}let o={proto:i};return r.settings!=null&&(o.settings=r.settings),o}async convertFernSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={fern:await this.resolvePath({absoluteFernYmlPath:t,path:r.fern,sourced:n.fern})};return r.settings!=null&&(i.settings=r.settings),i}async convertConjureSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={conjure:await this.resolvePath({absoluteFernYmlPath:t,path:r.conjure,sourced:n.conjure})};return r.settings!=null&&(i.settings=r.settings),i}async convertOpenRpcSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={openrpc:await this.resolvePath({absoluteFernYmlPath:t,path:r.openrpc,sourced:n.openrpc})};return r.overrides!=null&&!dI(n.overrides)&&(i.overrides=await this.resolvePathOrPaths({absoluteFernYmlPath:t,paths:r.overrides,sourced:n.overrides})),r.settings!=null&&(i.settings=r.settings),i}async resolvePathOrPaths({absoluteFernYmlPath:t,paths:r,sourced:n}){if(!Array.isArray(r))return await this.resolvePath({absoluteFernYmlPath:t,path:r,sourced:n});let i=[],o=n;for(let s=0;s<r.length;s++){let a=r[s],c=o[s];a!=null&&!dI(c)&&i.push(await this.resolvePath({absoluteFernYmlPath:t,path:a,sourced:c}))}return i}async resolvePath({absoluteFernYmlPath:t,path:r,sourced:n}){let i=Tn(t),o=$e(i,Pe.of(r));if(!await sr(o)){let s=Pe.of(Ys(this.cwd,o));this.issues.push(new SA({message:`File "${s}" does not exist`,location:n.$loc}))}return o}validateSpecCombinations({specs:t,sourced:r}){let n=[],i=[],o=[];for(let s=0;s<t.length;s++){let a=t[s],c=r[s];if(!(a==null||dI(c))){if("fern"in a){n.push(c);continue}if("conjure"in a){i.push(c);continue}o.push(c)}}if(n.length>1)for(let s of n)this.issues.push(new SA({message:"Multiple Fern specs are not allowed. Use multiple definition files within a single Fern definition directory instead.",location:s.fern.$loc}));if(i.length>1)for(let s of i)this.issues.push(new SA({message:"Multiple Conjure specs are not allowed.",location:s.conjure.$loc}));if(n.length>0&&(i.length>0||o.length>0))for(let s of n)this.issues.push(new SA({message:"Fern specs cannot be mixed with other spec types. Fern definitions are a standalone definition type.",location:s.fern.$loc}));if(i.length>0&&(o.length>0||n.length>0))for(let s of i)this.issues.push(new SA({message:"Conjure specs cannot be mixed with other spec types. Conjure definitions are a standalone definition type.",location:s.conjure.$loc}))}};var mUr=class{issues=[];convert({fernYml:t}){let r=t.data.docs;return r==null?{success:!1,issues:[]}:(this.validateInstances({docs:r,fernYml:t}),this.issues.length>0?{success:!1,issues:this.issues}:{success:!0,config:{raw:r}})}validateInstances({docs:t,fernYml:r}){t.instances.length===0&&this.issues.push(new SA({message:"You must specify at least one docs instance",location:r.sourced.$loc}))}};var vee=["csharp","go","java","php","python","ruby","rust","swift","typescript"],mtt={typescript:"TypeScript",python:"Python",go:"Go",java:"Java",csharp:"C#",ruby:"Ruby",php:"PHP",rust:"Rust",swift:"Swift"},hUr=["typescript","python","go","java","csharp","ruby","php","rust","swift"];var gUr={csharp:"fernapi/fern-csharp-sdk",go:"fernapi/fern-go-sdk",java:"fernapi/fern-java-sdk",php:"fernapi/fern-php-sdk",python:"fernapi/fern-python-sdk",ruby:"fernapi/fern-ruby-sdk",rust:"fernapi/fern-rust-sdk",swift:"fernapi/fern-swift-sdk",typescript:"fernapi/fern-typescript-sdk"},T_c={"fernapi/fern-csharp-sdk":"csharp","fernapi/fern-go-sdk":"go","fernapi/fern-java-sdk":"java","fernapi/fern-php-sdk":"php","fernapi/fern-python-sdk":"python","fernapi/fern-ruby-sdk":"ruby","fernapi/fern-rust-sdk":"rust","fernapi/fern-swift-sdk":"swift","fernapi/fern-typescript-sdk":"typescript","fernapi/fern-typescript-express":"typescript","fernapi/fern-fastapi-server":"python","fernapi/fern-java-spring":"java"},B_c={"fernapi/fern-python-sdk":"python-sdk","fernapi/fern-pydantic-model":"pydantic","fernapi/fern-fastapi-server":"fastapi","fernapi/fern-typescript":"ts-sdk","fernapi/fern-typescript-browser-sdk":"ts-sdk","fernapi/fern-typescript-node-sdk":"ts-sdk","fernapi/fern-typescript-sdk":"ts-sdk","fernapi/fern-typescript-express":"ts-express","fernapi/fern-java-sdk":"java-sdk","fernapi/fern-java-model":"java-model","java-model":"java-model","fernapi/fern-java-spring":"java-spring","fernapi/fern-go-sdk":"go-sdk","fernapi/fern-go-model":"go-model","fernapi/fern-csharp-sdk":"csharp-sdk","fernapi/fern-csharp-model":"csharp-model","fernapi/fern-ruby-sdk":"ruby-sdk","fernapi/fern-php-sdk":"php-sdk","fernapi/fern-php-model":"php-model","fernapi/fern-rust-sdk":"rust-sdk","fernapi/fern-rust-model":"rust-model","fernapi/fern-swift-sdk":"swift-sdk","fernapi/fern-swift-model":"swift-model","fernapi/fern-postman":"postman","fernapi/fern-openapi":"openapi"},Ono={"fernapi/fern-typescript-sdk":"https://buildwithfern.com/learn/sdks/generators/typescript/changelog","fernapi/fern-python-sdk":"https://buildwithfern.com/learn/sdks/generators/python/changelog","fernapi/fern-go-sdk":"https://buildwithfern.com/learn/sdks/generators/go/changelog","fernapi/fern-java-sdk":"https://buildwithfern.com/learn/sdks/generators/java/changelog","fernapi/fern-csharp-sdk":"https://buildwithfern.com/learn/sdks/generators/csharp/changelog","fernapi/fern-php-sdk":"https://buildwithfern.com/learn/sdks/generators/php/changelog","fernapi/fern-ruby-sdk":"https://buildwithfern.com/learn/sdks/generators/ruby/changelog","fernapi/fern-swift-sdk":"https://buildwithfern.com/learn/sdks/generators/swift/changelog"};function AUr({lang:e,version:t}){return{image:gUr[e],tag:t??"latest"}}function P_c({image:e}){return T_c[e]}var yUr=class{logger;issues=[];constructor({logger:t}){this.logger=t}convert({fernYml:t}){let r=t.data.sdks,n=t.sourced.sdks;if(r==null||dI(n))return{success:!1,issues:[]};let i={org:t.data.org,defaultGroup:r.defaultGroup,defaultGroupLocation:n.defaultGroup?.$loc,targets:this.convertTargets({targetsConfig:r.targets,sourced:n.targets,globalReadme:r.readme})};return this.issues.length>0?{success:!1,issues:this.issues}:{success:!0,config:i}}convertTargets({targetsConfig:t,sourced:r,globalReadme:n}){let i=[];for(let[o,s]of Object.entries(t)){let a=r[o];if(a==null)continue;let c=this.convertTarget({name:o,target:s,sourced:a,globalReadme:n});c!=null&&i.push(c)}return i}convertTarget({name:t,target:r,sourced:n,globalReadme:i}){let o=this.resolveGeneratorInfo({name:t,target:r,sourced:n});if(o==null)return;let s=this.mergeReadme({globalReadme:i,targetReadme:r.readme});return{name:t,lang:o.lang,image:o.image,registry:o.registry,version:o.version,api:this.resolveApi({api:r.api}),sourceLocation:n.$loc,config:r.config!=null?this.convertConfig(r.config):void 0,output:fI.resolveOutputObjectSchema(r.output),publish:r.publish,groups:r.group??[],metadata:r.metadata,readme:s}}mergeReadme({globalReadme:t,targetReadme:r}){if(t==null&&r==null)return;if(t==null)return r;if(r==null)return t;let n={...t,...r};return(t.customSections!=null||r.customSections!=null)&&(n.customSections=[...t.customSections??[],...r.customSections??[]]),n}resolveApi({api:t}){return t??dtt}resolveGeneratorInfo({name:t,target:r,sourced:n}){let i=this.resolveLanguage({name:t,target:r,sourced:n});if(i==null)return;if(r.image!=null)return typeof r.image=="string"?{lang:i,image:L0(r.image),version:r.version??"latest",registry:void 0}:{lang:i,image:L0(r.image.name),version:r.version??"latest",registry:r.image.registry};let o=AUr({lang:i,version:r.version});return{lang:i,image:o.image,version:o.tag,registry:void 0}}convertConfig(t){return t}resolveLanguage({name:t,target:r,sourced:n}){if(r.lang!=null)return r.lang;if(r.image!=null){let o=typeof r.image=="string"?r.image:r.image.name;return P_c({image:L0(o)})}let i=t;if(vee.includes(i))return i;this.issues.push(new SA({message:`target "${t}" is not a recognized language; please specify the "lang" property`,location:n.$loc}))}};var gMt=class{cwd;logger;issues=[];constructor({cwd:t,logger:r}){this.cwd=t,this.logger=r}async loadOrThrow({fernYml:t}){let r=await this.load({fernYml:t});if(!r.success)throw new TL(r.issues);return r.workspace}async load({fernYml:t}){let r=this.convertAi({fernYml:t}),n=this.convertDocs({fernYml:t}),[i,o,s]=await Promise.all([this.convertApis({fernYml:t}),this.convertCliVersion({fernYml:t}),this.convertSdks({fernYml:t})]);return this.issues.length>0?{success:!1,issues:this.issues}:{success:!0,workspace:{absoluteFilePath:t.absoluteFilePath,fernYml:t,ai:r,apis:i,cliVersion:o,docs:n,org:t.data.org,sdks:s}}}convertAi({fernYml:t}){let r=t.data.ai;if(r!=null)return{provider:r.provider,model:r.model}}async convertApis({fernYml:t}){let n=await new dUr({cwd:this.cwd}).convert({fernYml:t});return n.success?n.apis:(this.issues.push(...n.issues),{})}async convertCliVersion({fernYml:t}){return t.data.cli?.version??"*"}convertDocs({fernYml:t}){let n=new mUr().convert({fernYml:t});if(!n.success){this.issues.push(...n.issues);return}return n.config}async convertSdks({fernYml:t}){let n=new yUr({logger:this.logger}).convert({fernYml:t});if(!n.success){this.issues.push(...n.issues);return}return n.config}};function D_c(e){return{command:s3d(e),flags:a3d(e)}}function s3d(e){let t=[];for(let r of e.slice(2)){if(r.startsWith("-"))break;t.push(r)}return t.join(" ")}function a3d(e){return e.slice(2).filter(t=>t.startsWith("--")).map(t=>{let r=t.slice(2),n=r.indexOf("=");return n>=0?r.slice(0,n):r}).filter(t=>t.length>0).sort()}Ht();var htt=require("fs"),bUr=class{absoluteFilePath;initialized=!1;constructor(t){let r=new Date().toISOString().replace(/[:.]/g,"-");this.absoluteFilePath=$e(t,Pe.of(`${r}.log`))}write({taskName:t,level:r,message:n}){this.ensureInitialized();let o=`[${new Date().toISOString()}] [${r.toUpperCase().padEnd(5)}] [${t}] ${n}
1790
+ `&&(r++,n=i);return new y3({absoluteFilePath:this.absoluteFilePath,relativeFilePath:this.relativeFilePath,line:r,column:t-n})}};var sUr="$ref",aUr=class{cwd;constructor({cwd:t}){this.cwd=t}async resolve({document:t}){let r=t.absoluteFilePath,n={cwd:this.cwd,document:t,originalFile:r,currentFile:r,resolutionStack:new Set([r]),referencedDocuments:{},issues:[],pathMappings:[],yamlPathIndex:0,refFromLocation:void 0},i=await this.resolveValue({context:n,yamlPath:[],value:t.toJS()});return n.issues.length>0?{success:!1,issues:n.issues}:{success:!0,data:i,pathMappings:n.pathMappings}}getSourceLocationWithMappings({document:t,pathMappings:r,yamlPath:n}){let i;for(let o of r)this.yamlPathStartsWith(n,o.yamlPath)&&(i==null||o.yamlPath.length>i.yamlPath.length)&&(i=o);if(i!=null){let o=n.slice(i.yamlPath.length);return i.document.getSourceLocation(o).withRefFrom(i.refFromLocation)}return t.getSourceLocation(n)}async resolveValue({context:t,yamlPath:r,value:n}){if(n==null)return n;if(Array.isArray(n))return Promise.all(n.map((i,o)=>this.resolveValue({context:t,yamlPath:[...r,o],value:i})));if(typeof n=="object"){let i=n;if(sUr in i){let s=[...r,sUr];return this.resolveRef({context:t,yamlPath:s,location:this.getSourceLocation({context:t,yamlPath:s}),obj:i,refValue:i[sUr]})}let o={};for(let s of Object.keys(i))o[s]=await this.resolveValue({context:t,yamlPath:[...r,s],value:i[s]});return o}return n}async resolveRef({context:t,yamlPath:r,location:n,obj:i,refValue:o}){if(typeof o!="string")return t.issues.push(new SA({message:`$ref must be a string, got ${typeof o}`,location:n,yamlPath:r})),i;let s=Object.keys(i);if(s.length>1){let d=s.filter(f=>f!==sUr);return t.issues.push(new SA({message:`$ref cannot have sibling keys; found ${d.join(", ")}`,location:n,yamlPath:r})),i}if(o.includes("#"))return t.issues.push(new SA({message:`JSON pointer and in-document references are not supported: ${o}`,location:n,yamlPath:r})),i;let a=this.resolveFilePath({currentFile:t.currentFile,refValue:o});if(t.resolutionStack.has(a)){let d=[...t.resolutionStack,a].join(" -> ");return t.issues.push(new SA({message:`Circular $ref detected: ${d}`,location:n,yamlPath:r})),i}let c=await this.parseFile({context:t,referencedFilePath:a,yamlPath:r,location:n,refValue:o});if(c===void 0)return i;if(c===null)return t.issues.push(new SA({message:`$ref resolves to null: ${o}`,location:n,yamlPath:r})),i;let u=r.slice(0,-1),l=t.referencedDocuments[a];return l!=null&&t.pathMappings.push({yamlPath:u,document:l,refFromLocation:n}),await this.resolveReferencedFile({context:t,referencedFilePath:a,refFromLocation:n,yamlPath:u,value:c})}async resolveReferencedFile({context:t,referencedFilePath:r,refFromLocation:n,yamlPath:i,value:o}){let s=t.currentFile,a=t.yamlPathIndex,c=t.refFromLocation;t.currentFile=r,t.yamlPathIndex=i.length,t.refFromLocation=n,t.resolutionStack.add(r);try{return await this.resolveValue({context:t,yamlPath:i,value:o})}finally{t.resolutionStack.delete(r),t.currentFile=s,t.yamlPathIndex=a,t.refFromLocation=c}}async parseFile({context:t,referencedFilePath:r,yamlPath:n,location:i,refValue:o}){if(!await sr(r)){t.issues.push(new SA({message:`Referenced file does not exist: ${o}`,location:i,yamlPath:n}));return}let s=await(0,I_c.readFile)(r,"utf-8"),a=(0,w_c.parseDocument)(s);if(a.errors.length>0){let u=a.errors.map(l=>l.message).join("; ");t.issues.push(new SA({message:`Failed to parse referenced file ${o}: ${u}`,location:i,yamlPath:n}));return}let c=new ftt({absoluteFilePath:r,relativeFilePath:Pe.of(Ys(t.cwd,r)),document:a,source:s});return t.referencedDocuments[r]=c,c.toJS()}getSourceLocation({context:t,yamlPath:r}){if(t.currentFile===t.originalFile)return t.document.getSourceLocation(r);let n=this.getSourceLocationFromCurrentFile({context:t,yamlPath:r});return t.refFromLocation!=null?n.withRefFrom(t.refFromLocation):n}yamlPathStartsWith(t,r){if(r.length>t.length)return!1;for(let n=0;n<r.length;n++)if(t[n]!==r[n])return!1;return!0}getSourceLocationFromCurrentFile({context:t,yamlPath:r}){let n=t.referencedDocuments[t.currentFile];if(n!=null){let i=r.slice(t.yamlPathIndex);return n.getSourceLocation(i)}return this.createLocationForReferencedFile({context:t,absoluteFilePath:t.currentFile})}createLocationForReferencedFile({context:t,absoluteFilePath:r}){return new y3({absoluteFilePath:r,relativeFilePath:Pe.of(Ys(t.cwd,r)),line:1,column:1})}resolveFilePath({currentFile:t,refValue:r}){let n=Tn(t);return $e(n,Pe.of(r))}};Bt();Ht();function x_c(e){return Eee(e,new WeakMap)}function o3d(e){return e._zod?.def}function Eee(e,t){if(t.has(e))return t.get(e);let r=o3d(e);if(r==null)return e;switch(r.type){case"object":{let n=r.shape??{},i={};for(let[s,a]of Object.entries(n))i[s]=Eee(a,t);let o=se.object(i).strict();return t.set(e,o),o}case"array":{let n=r.element;return n!=null?se.array(Eee(n,t)):e}case"optional":{let n=r.innerType;return n!=null?Eee(n,t).optional():e}case"nullable":{let n=r.innerType;return n!=null?Eee(n,t).nullable():e}case"union":{let n=r.options;return n!=null?se.union(n.map(i=>Eee(i,t))):e}case"record":{let n=r.keyType,i=r.valueType;return n!=null&&i!=null?se.record(n,Eee(i,t)):e}case"lazy":{let n=r.getter;if(n==null)return e;let i=se.lazy(()=>Eee(n(),t));return t.set(e,i),i}case"tuple":{let n=r.items;return n==null?e:se.tuple(n.map(i=>Eee(i,t)))}case"default":{let n=r.innerType;return n!=null?Eee(n,t).default(r.defaultValue):e}default:return e}}UA();var Sno=require("fs/promises"),uUr=be(G0(),1);var cUr=class{async parse(t){let r=await(0,Sno.readFile)(t,"utf-8");return(0,uUr.parse)(r)}async parseDocument({absoluteFilePath:t,cwd:r}){let n=await(0,Sno.readFile)(t,"utf-8"),i=(0,uUr.parseDocument)(n),o=Js.of(Iqe(r,t));return new ftt({absoluteFilePath:t,relativeFilePath:o,document:i,source:n})}};var lUr=class{document;constructor(t){this.document=t}toSourced(t){return this.toSourcedInternal(t,[])}toSourcedInternal(t,r){let n=this.document.getSourceLocation(r);if(t===null)return new $ve(null,n);if(t===void 0)return new $ve(void 0,n);if(Array.isArray(t))return Cno({value:t,location:n,wrapChild:(i,o)=>this.toSourcedInternal(i,[...r,o])});if(t instanceof Object)return _no({value:t,location:n,wrapChild:(i,o)=>this.toSourcedInternal(i,[...r,o])});switch(typeof t){case"string":return new lMt(t,n);case"number":return new pMt(t,n);case"boolean":return new fMt(t,n);default:throw new Error(`Unexpected value type: ${typeof t}`)}}};var dMt=class{parser;cwd;referenceResolver;constructor({cwd:t}){this.parser=new cUr,this.cwd=t,this.referenceResolver=new aUr({cwd:t})}async load({absoluteFilePath:t,schema:r,resolveReferences:n=!0,strict:i=!1}){let o=await this.parseDocument(t),s=this.getYamlErrors(o);if(s.length>0)return{success:!1,issues:s};let a=await this.resolveReferences({document:o,resolveReferences:n});if(!a.success)return{success:!1,issues:a.issues};let u=(i?x_c(r):r).safeParse(a.data);if(!u.success)return{success:!1,issues:u.error.issues.map(d=>{let f=d.path.filter(m=>typeof m!="symbol");return new SA({yamlPath:f,message:this.formatZodIssue(d),location:this.referenceResolver.getSourceLocationWithMappings({document:o,pathMappings:a.pathMappings,yamlPath:f})})})};let l=new lUr(o);return{success:!0,data:u.data,sourced:l.toSourced(u.data),absoluteFilePath:t,relativeFilePath:Pe.of(Ys(this.cwd,t))}}async parseDocument(t){try{return await this.parser.parseDocument({absoluteFilePath:t,cwd:this.cwd})}catch(r){throw new Error(`Failed to parse YAML file ${t}: ${ji(r)}`)}}async resolveReferences({document:t,resolveReferences:r}){if(!r)return{success:!0,data:t.toJS(),pathMappings:[]};let n=await this.referenceResolver.resolve({document:t});return n.success?n:{success:!1,issues:n.issues}}getYamlErrors(t){return t.errors.length===0?[]:t.errors.map(r=>{let n=r.linePos?.[0]?.line??1,i=r.linePos?.[0]?.col??1;return new SA({message:r.message,location:new y3({absoluteFilePath:t.absoluteFilePath,relativeFilePath:t.relativeFilePath,line:n,column:i})})})}formatZodIssue(t){let r=t.path.join(".");switch(t.code){case"invalid_type":return t.message.endsWith("received undefined")?r.length>0?`${r} is required`:"value is required":r.length>0?`${r} must be a ${t.expected}`:`must be a ${t.expected}`;case"invalid_value":{if(t.values!=null){let n=t.values.join(", ");return r.length>0?`${r} must be one of: ${n}`:`must be one of: ${n}`}return t.message}case"unrecognized_keys":return`unknown key(s): ${t.keys.join(", ")}`;case"invalid_union":{let n=new Set;for(let i of t.errors)for(let o of i)o.code==="invalid_type"&&n.add(o.expected);if(n.size>0){let i=Array.from(n).join(" or ");return r.length>0?`${r} must be a ${i}`:`must be a ${i}`}return r.length>0?`${r} has an invalid value`:"invalid value"}case"invalid_format":return r.length>0?`${r} must be a valid ${t.format}`:`must be a valid ${t.format}`;default:return t.message}}};Ht();var pUr=class{from;constructor(t){this.from=t.from}async findOrThrow({filename:t,remediationMessage:r}){let n=await this.find({filename:t});if(n==null)throw new Error(`${t} file not found in any parent directory from ${this.from}`);return n}async find({filename:t}){let r=await yd(t,{cwd:this.from,type:"file"});if(r==null)return;let n=Gt.of(r);if(await sr(n))return n}};var C_c="fern.yml",mMt=class{finder;loader;constructor(t={}){let r=Gt.of(t.cwd??process.cwd());this.finder=new pUr({from:r}),this.loader=new dMt({cwd:r})}async loadOrThrow(){let t=await this.load();if(t.type==="notFound")throw new Error(`${C_c} file not found in any parent directory; did you forget to run \`fern init\`?`);if(t.type==="failure")throw new TL(t.issues);return t}async load(){let t=await this.finder.find({filename:C_c});if(t==null)return{type:"notFound"};let r=await this.loader.load({absoluteFilePath:t,schema:H2t,strict:!0});return r.success?{type:"success",...r}:{type:"failure",issues:r.issues}}};Ht();var iMe=require("fs/promises"),__c=be(JTr(),1),fUr=be(require("os"),1),S_c=require("os"),O_c=require("path");var hMt=class e{posthog;sentry;baseTags;accumulatedTags={};distinctId;static async create({isTTY:t}){let r=await e.getDistinctId();return new e({isTTY:t,distinctId:r})}constructor({isTTY:t,distinctId:r}){this.distinctId=r;let n=this.isTelemetryEnabled(),i="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal";this.baseTags={version:"*",arch:fUr.arch(),ci:__c.default,os:fUr.platform(),tty:t,usingAccessToken:process.env.FERN_TOKEN!=null},this.posthog=i!=null&&i.length>0&&n?new qve(i):void 0;let o="";if(o!=null&&o.length>0&&n){let s="production";if(s==null||s.length===0)throw new Error("SENTRY_ENVIRONMENT must be set when SENTRY_DSN is configured");this.sentry=ACt({dsn:o,release:`cli@${"*"}`,environment:s,defaultIntegrations:!1,integrations:[ZVe()],tracesSampleRate:0}),yCt()}}sendEvent(t,r){if(this.posthog!=null)try{this.posthog.capture({distinctId:this.distinctId,event:t,properties:{...this.baseTags,...this.accumulatedTags,...r}})}catch{}}sendLifecycleEvent(t){if(this.posthog!=null)try{this.posthog.capture({distinctId:this.distinctId,event:"cli",properties:{...this.baseTags,...this.accumulatedTags,...t}})}catch{}}tag(t){Object.assign(this.accumulatedTags,t)}captureException(t){if(this.sentry!==void 0)try{this.sentry.captureException(t,{captureContext:{user:{id:this.distinctId},tags:{...this.baseTags,...this.accumulatedTags}}})}catch{}}async flush(){let t=[];this.posthog!=null&&t.push(Promise.race([this.posthog.shutdown().catch(()=>{}),new Promise(r=>setTimeout(r,3e3))])),this.sentry!==void 0&&t.push(Promise.resolve(this.sentry.flush(2e3)).catch(()=>{})),await Promise.all(t)}static async getDistinctId(){let t=e.getDistinctIdFilepath(),r=null;try{await sr(t)||(await(0,iMe.mkdir)((0,O_c.dirname)(t),{recursive:!0}),await(0,iMe.writeFile)(t,G_(),{flag:"wx"}));let n=(await(0,iMe.readFile)(t)).toString().trim();if(r=n,!c8i(n)){let i=G_();await(0,iMe.writeFile)(t,i),r=i}}catch{r=G_()}return(r==null||r.length===0)&&(r=G_()),r}static getDistinctIdFilepath(){return $e(Gt.of((0,S_c.homedir)()),Pe.of(".fern"),Pe.of("id"))}isTelemetryEnabled(){let t=process.env.FERN_TELEMETRY_DISABLED;return t!=null&&t.length>0?!1:new WR().loadTelemetryEnabledSync()??!0}};Ht();var dtt="api",dUr=class{cwd;issues=[];constructor({cwd:t}){this.cwd=t}async convert({fernYml:t}){let{api:r,apis:n}=t.data,i=t.sourced;if(r!=null&&n!=null)return this.issues.push(new SA({message:"Cannot define both 'api' and 'apis' in fern.yml.",location:i.$loc})),{success:!1,issues:this.issues};if(r==null&&n==null)return{success:!0,apis:{}};let o={};return r!=null&&!dI(i.api)&&(o=await this.convertApi({absoluteFernYmlPath:t.absoluteFilePath,api:r,sourcedApi:i.api})),n!=null&&!dI(i.apis)&&(o=await this.convertApis({absoluteFernYmlPath:t.absoluteFilePath,apis:n,sourcedApis:i.apis})),this.issues.length>0?{success:!1,issues:this.issues}:{success:!0,apis:o}}async convertApi({absoluteFernYmlPath:t,api:r,sourcedApi:n}){if(dI(n))return{};let o={specs:await this.convertSpecs({absoluteFernYmlPath:t,specs:r.specs,sourced:n.specs}),auth:r.auth,authSchemes:r.authSchemes,defaultUrl:r.defaultUrl,defaultEnvironment:r.defaultEnvironment,environments:r.environments,headers:r.headers};return{[dtt]:o}}async convertApis({absoluteFernYmlPath:t,apis:r,sourcedApis:n}){if(dI(n))return{};let i=Object.entries(r).filter(([s])=>!dI(n[s])).map(([s,a])=>({apiName:s,apiDef:a,sourcedApiDef:n[s]})).filter(s=>!dI(s.sourcedApiDef)),o=await Promise.all(i.map(async({apiName:s,apiDef:a,sourcedApiDef:c})=>{let l={specs:await this.convertSpecs({absoluteFernYmlPath:t,specs:a.specs,sourced:c.specs}),auth:a.auth,authSchemes:a.authSchemes,defaultUrl:a.defaultUrl,defaultEnvironment:a.defaultEnvironment,environments:a.environments,headers:a.headers};return[s,l]}));return Object.fromEntries(o)}async convertSpecs({absoluteFernYmlPath:t,specs:r,sourced:n}){this.validateSpecCombinations({specs:r,sourced:n});let i=[];for(let o=0;o<r.length;o++){let s=r[o],a=n[o];s==null||dI(a)||i.push({spec:s,sourced:a})}return await Promise.all(i.map(({spec:o,sourced:s})=>this.convertSpec({absoluteFernYmlPath:t,spec:o,sourced:s})))}async convertSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){if("openapi"in r&&"openapi"in n)return await this.convertOpenApiSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("asyncapi"in r&&"asyncapi"in n)return await this.convertAsyncApiSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("proto"in r&&"proto"in n)return await this.convertProtobufSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("fern"in r&&"fern"in n)return await this.convertFernSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("conjure"in r&&"conjure"in n)return await this.convertConjureSpec({absoluteFernYmlPath:t,spec:r,sourced:n});if("openrpc"in r&&"openrpc"in n)return await this.convertOpenRpcSpec({absoluteFernYmlPath:t,spec:r,sourced:n});throw new Error(`Unknown spec type: ${JSON.stringify(r)}`)}async convertOpenApiSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={openapi:await this.resolvePath({absoluteFernYmlPath:t,path:r.openapi,sourced:n.openapi})};return r.origin!=null&&(i.origin=r.origin),r.overrides!=null&&!dI(n.overrides)&&(i.overrides=await this.resolvePathOrPaths({absoluteFernYmlPath:t,paths:r.overrides,sourced:n.overrides})),r.overlays!=null&&!dI(n.overlays)&&(i.overlays=await this.resolvePath({absoluteFernYmlPath:t,path:r.overlays,sourced:n.overlays})),r.namespace!=null&&(i.namespace=r.namespace),r.settings!=null&&(i.settings=r.settings),i}async convertAsyncApiSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={asyncapi:await this.resolvePath({absoluteFernYmlPath:t,path:r.asyncapi,sourced:n.asyncapi})};return r.overrides!=null&&!dI(n.overrides)&&(i.overrides=await this.resolvePathOrPaths({absoluteFernYmlPath:t,paths:r.overrides,sourced:n.overrides})),r.settings!=null&&(i.settings=r.settings),i}async convertProtobufSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={root:await this.resolvePath({absoluteFernYmlPath:t,path:r.proto.root,sourced:n.proto.root})};if(r.proto.target!=null&&!dI(n.proto.target)&&(i.target=await this.resolvePath({absoluteFernYmlPath:t,path:r.proto.target,sourced:n.proto.target})),r.proto.overrides!=null&&!dI(n.proto.overrides)&&(i.overrides=await this.resolvePathOrPaths({absoluteFernYmlPath:t,paths:r.proto.overrides,sourced:n.proto.overrides})),r.proto.localGeneration!=null&&(i.localGeneration=r.proto.localGeneration),r.proto.fromOpenapi!=null&&(i.fromOpenapi=r.proto.fromOpenapi),r.proto.dependencies!=null&&!dI(n.proto.dependencies)){let s=[];for(let a=0;a<r.proto.dependencies.length;a++){let c=r.proto.dependencies[a],u=n.proto.dependencies[a];c!=null&&!dI(u)&&s.push(await this.resolvePath({absoluteFernYmlPath:t,path:c,sourced:u}))}i.dependencies=s}let o={proto:i};return r.settings!=null&&(o.settings=r.settings),o}async convertFernSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={fern:await this.resolvePath({absoluteFernYmlPath:t,path:r.fern,sourced:n.fern})};return r.settings!=null&&(i.settings=r.settings),i}async convertConjureSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={conjure:await this.resolvePath({absoluteFernYmlPath:t,path:r.conjure,sourced:n.conjure})};return r.settings!=null&&(i.settings=r.settings),i}async convertOpenRpcSpec({absoluteFernYmlPath:t,spec:r,sourced:n}){let i={openrpc:await this.resolvePath({absoluteFernYmlPath:t,path:r.openrpc,sourced:n.openrpc})};return r.overrides!=null&&!dI(n.overrides)&&(i.overrides=await this.resolvePathOrPaths({absoluteFernYmlPath:t,paths:r.overrides,sourced:n.overrides})),r.settings!=null&&(i.settings=r.settings),i}async resolvePathOrPaths({absoluteFernYmlPath:t,paths:r,sourced:n}){if(!Array.isArray(r))return await this.resolvePath({absoluteFernYmlPath:t,path:r,sourced:n});let i=[],o=n;for(let s=0;s<r.length;s++){let a=r[s],c=o[s];a!=null&&!dI(c)&&i.push(await this.resolvePath({absoluteFernYmlPath:t,path:a,sourced:c}))}return i}async resolvePath({absoluteFernYmlPath:t,path:r,sourced:n}){let i=Tn(t),o=$e(i,Pe.of(r));if(!await sr(o)){let s=Pe.of(Ys(this.cwd,o));this.issues.push(new SA({message:`File "${s}" does not exist`,location:n.$loc}))}return o}validateSpecCombinations({specs:t,sourced:r}){let n=[],i=[],o=[];for(let s=0;s<t.length;s++){let a=t[s],c=r[s];if(!(a==null||dI(c))){if("fern"in a){n.push(c);continue}if("conjure"in a){i.push(c);continue}o.push(c)}}if(n.length>1)for(let s of n)this.issues.push(new SA({message:"Multiple Fern specs are not allowed. Use multiple definition files within a single Fern definition directory instead.",location:s.fern.$loc}));if(i.length>1)for(let s of i)this.issues.push(new SA({message:"Multiple Conjure specs are not allowed.",location:s.conjure.$loc}));if(n.length>0&&(i.length>0||o.length>0))for(let s of n)this.issues.push(new SA({message:"Fern specs cannot be mixed with other spec types. Fern definitions are a standalone definition type.",location:s.fern.$loc}));if(i.length>0&&(o.length>0||n.length>0))for(let s of i)this.issues.push(new SA({message:"Conjure specs cannot be mixed with other spec types. Conjure definitions are a standalone definition type.",location:s.conjure.$loc}))}};var mUr=class{issues=[];convert({fernYml:t}){let r=t.data.docs;return r==null?{success:!1,issues:[]}:(this.validateInstances({docs:r,fernYml:t}),this.issues.length>0?{success:!1,issues:this.issues}:{success:!0,config:{raw:r}})}validateInstances({docs:t,fernYml:r}){t.instances.length===0&&this.issues.push(new SA({message:"You must specify at least one docs instance",location:r.sourced.$loc}))}};var vee=["csharp","go","java","php","python","ruby","rust","swift","typescript"],mtt={typescript:"TypeScript",python:"Python",go:"Go",java:"Java",csharp:"C#",ruby:"Ruby",php:"PHP",rust:"Rust",swift:"Swift"},hUr=["typescript","python","go","java","csharp","ruby","php","rust","swift"];var gUr={csharp:"fernapi/fern-csharp-sdk",go:"fernapi/fern-go-sdk",java:"fernapi/fern-java-sdk",php:"fernapi/fern-php-sdk",python:"fernapi/fern-python-sdk",ruby:"fernapi/fern-ruby-sdk",rust:"fernapi/fern-rust-sdk",swift:"fernapi/fern-swift-sdk",typescript:"fernapi/fern-typescript-sdk"},T_c={"fernapi/fern-csharp-sdk":"csharp","fernapi/fern-go-sdk":"go","fernapi/fern-java-sdk":"java","fernapi/fern-php-sdk":"php","fernapi/fern-python-sdk":"python","fernapi/fern-ruby-sdk":"ruby","fernapi/fern-rust-sdk":"rust","fernapi/fern-swift-sdk":"swift","fernapi/fern-typescript-sdk":"typescript","fernapi/fern-typescript-express":"typescript","fernapi/fern-fastapi-server":"python","fernapi/fern-java-spring":"java"},B_c={"fernapi/fern-python-sdk":"python-sdk","fernapi/fern-pydantic-model":"pydantic","fernapi/fern-fastapi-server":"fastapi","fernapi/fern-typescript":"ts-sdk","fernapi/fern-typescript-browser-sdk":"ts-sdk","fernapi/fern-typescript-node-sdk":"ts-sdk","fernapi/fern-typescript-sdk":"ts-sdk","fernapi/fern-typescript-express":"ts-express","fernapi/fern-java-sdk":"java-sdk","fernapi/fern-java-model":"java-model","java-model":"java-model","fernapi/fern-java-spring":"java-spring","fernapi/fern-go-sdk":"go-sdk","fernapi/fern-go-model":"go-model","fernapi/fern-csharp-sdk":"csharp-sdk","fernapi/fern-csharp-model":"csharp-model","fernapi/fern-ruby-sdk":"ruby-sdk","fernapi/fern-php-sdk":"php-sdk","fernapi/fern-php-model":"php-model","fernapi/fern-rust-sdk":"rust-sdk","fernapi/fern-rust-model":"rust-model","fernapi/fern-swift-sdk":"swift-sdk","fernapi/fern-swift-model":"swift-model","fernapi/fern-postman":"postman","fernapi/fern-openapi":"openapi"},Ono={"fernapi/fern-typescript-sdk":"https://buildwithfern.com/learn/sdks/generators/typescript/changelog","fernapi/fern-python-sdk":"https://buildwithfern.com/learn/sdks/generators/python/changelog","fernapi/fern-go-sdk":"https://buildwithfern.com/learn/sdks/generators/go/changelog","fernapi/fern-java-sdk":"https://buildwithfern.com/learn/sdks/generators/java/changelog","fernapi/fern-csharp-sdk":"https://buildwithfern.com/learn/sdks/generators/csharp/changelog","fernapi/fern-php-sdk":"https://buildwithfern.com/learn/sdks/generators/php/changelog","fernapi/fern-ruby-sdk":"https://buildwithfern.com/learn/sdks/generators/ruby/changelog","fernapi/fern-swift-sdk":"https://buildwithfern.com/learn/sdks/generators/swift/changelog"};function AUr({lang:e,version:t}){return{image:gUr[e],tag:t??"latest"}}function P_c({image:e}){return T_c[e]}var yUr=class{logger;issues=[];constructor({logger:t}){this.logger=t}convert({fernYml:t}){let r=t.data.sdks,n=t.sourced.sdks;if(r==null||dI(n))return{success:!1,issues:[]};let i={org:t.data.org,defaultGroup:r.defaultGroup,defaultGroupLocation:n.defaultGroup?.$loc,targets:this.convertTargets({targetsConfig:r.targets,sourced:n.targets,globalReadme:r.readme})};return this.issues.length>0?{success:!1,issues:this.issues}:{success:!0,config:i}}convertTargets({targetsConfig:t,sourced:r,globalReadme:n}){let i=[];for(let[o,s]of Object.entries(t)){let a=r[o];if(a==null)continue;let c=this.convertTarget({name:o,target:s,sourced:a,globalReadme:n});c!=null&&i.push(c)}return i}convertTarget({name:t,target:r,sourced:n,globalReadme:i}){let o=this.resolveGeneratorInfo({name:t,target:r,sourced:n});if(o==null)return;let s=this.mergeReadme({globalReadme:i,targetReadme:r.readme});return{name:t,lang:o.lang,image:o.image,registry:o.registry,version:o.version,api:this.resolveApi({api:r.api}),sourceLocation:n.$loc,config:r.config!=null?this.convertConfig(r.config):void 0,output:fI.resolveOutputObjectSchema(r.output),publish:r.publish,groups:r.group??[],metadata:r.metadata,readme:s}}mergeReadme({globalReadme:t,targetReadme:r}){if(t==null&&r==null)return;if(t==null)return r;if(r==null)return t;let n={...t,...r};return(t.customSections!=null||r.customSections!=null)&&(n.customSections=[...t.customSections??[],...r.customSections??[]]),n}resolveApi({api:t}){return t??dtt}resolveGeneratorInfo({name:t,target:r,sourced:n}){let i=this.resolveLanguage({name:t,target:r,sourced:n});if(i==null)return;if(r.image!=null)return typeof r.image=="string"?{lang:i,image:L0(r.image),version:r.version??"latest",registry:void 0}:{lang:i,image:L0(r.image.name),version:r.version??"latest",registry:r.image.registry};let o=AUr({lang:i,version:r.version});return{lang:i,image:o.image,version:o.tag,registry:void 0}}convertConfig(t){return t}resolveLanguage({name:t,target:r,sourced:n}){if(r.lang!=null)return r.lang;if(r.image!=null){let o=typeof r.image=="string"?r.image:r.image.name;return P_c({image:L0(o)})}let i=t;if(vee.includes(i))return i;this.issues.push(new SA({message:`target "${t}" is not a recognized language; please specify the "lang" property`,location:n.$loc}))}};var gMt=class{cwd;logger;issues=[];constructor({cwd:t,logger:r}){this.cwd=t,this.logger=r}async loadOrThrow({fernYml:t}){let r=await this.load({fernYml:t});if(!r.success)throw new TL(r.issues);return r.workspace}async load({fernYml:t}){let r=this.convertAi({fernYml:t}),n=this.convertDocs({fernYml:t}),[i,o,s]=await Promise.all([this.convertApis({fernYml:t}),this.convertCliVersion({fernYml:t}),this.convertSdks({fernYml:t})]);return this.issues.length>0?{success:!1,issues:this.issues}:{success:!0,workspace:{absoluteFilePath:t.absoluteFilePath,fernYml:t,ai:r,apis:i,cliVersion:o,docs:n,org:t.data.org,sdks:s}}}convertAi({fernYml:t}){let r=t.data.ai;if(r!=null)return{provider:r.provider,model:r.model}}async convertApis({fernYml:t}){let n=await new dUr({cwd:this.cwd}).convert({fernYml:t});return n.success?n.apis:(this.issues.push(...n.issues),{})}async convertCliVersion({fernYml:t}){return t.data.cli?.version??"*"}convertDocs({fernYml:t}){let n=new mUr().convert({fernYml:t});if(!n.success){this.issues.push(...n.issues);return}return n.config}async convertSdks({fernYml:t}){let n=new yUr({logger:this.logger}).convert({fernYml:t});if(!n.success){this.issues.push(...n.issues);return}return n.config}};function D_c(e){return{command:s3d(e),flags:a3d(e)}}function s3d(e){let t=[];for(let r of e.slice(2)){if(r.startsWith("-"))break;t.push(r)}return t.join(" ")}function a3d(e){return e.slice(2).filter(t=>t.startsWith("--")).map(t=>{let r=t.slice(2),n=r.indexOf("=");return n>=0?r.slice(0,n):r}).filter(t=>t.length>0).sort()}Ht();var htt=require("fs"),bUr=class{absoluteFilePath;initialized=!1;constructor(t){let r=new Date().toISOString().replace(/[:.]/g,"-");this.absoluteFilePath=$e(t,Pe.of(`${r}.log`))}write({taskName:t,level:r,message:n}){this.ensureInitialized();let o=`[${new Date().toISOString()}] [${r.toUpperCase().padEnd(5)}] [${t}] ${n}
1791
1791
  `;(0,htt.appendFileSync)(this.absoluteFilePath,o)}empty(){return!this.initialized}ensureInitialized(){this.initialized||((0,htt.mkdirSync)(Tn(this.absoluteFilePath),{recursive:!0}),(0,htt.writeFileSync)(this.absoluteFilePath,`Fern Debug Log - ${new Date().toISOString()}
1792
1792
  ${"=".repeat(60)}
1793
1793
 
@@ -2244,7 +2244,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
2244
2244
  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=$e(this.cwd,Pe.of(ef)),r=$e(this.cwd,Pe.of(P9e));if(await sr(t,"file"))return t;if(await sr(r,"file"))return r}};var j4t=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 N4t({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=$e(n,Pe.of(rR)),a=await sr(s,"directory"),c;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};c=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};c=p.fernYml}let u=$e(this.cwd,Pe.of(xI)),l=this.serializeFernYml(c);if(await(0,Umt.writeFile)(u,l,"utf-8"),this.deleteOriginals)for(let p of r)try{await(0,Umt.rm)(p),this.logger.debug(`Deleted ${p}`)}catch{t.push({type:"info",message:`Could not delete ${p}`})}return this.logger.info(`Created ${u}`),{success:!0,warnings:t,migratedFiles:r,outputPath:u}}async migrateSingleApi(t){let{fernDir:r,org:n,warnings:i,migratedFiles:o}=t,a=await new zLe({cwd:r}).migrate();i.push(...a.warnings),a.absoluteFilePath!=null&&o.push(a.absoluteFilePath);let c=await w0o({fernDir:r,generatorsYmlApi:a.rawApi});i.push(...c.warnings);let u={org:n};return c.api!=null&&(u.api=c.api),a.sdks!=null&&(u.sdks=a.sdks),{success:!0,fernYml:u}}async migrateMultiApi(t){let{fernDir:r,apisDir:n,org:i,warnings:o,migratedFiles:s}=t,c=(await(0,Umt.readdir)(n,{withFileTypes:!0})).filter(A=>A.isDirectory()).map(A=>A.name);if(c.length===0)return o.push({type:"conflict",message:"No API directories found in fern/apis/"}),{success:!1,fernYml:{org:i}};let u={},l={targets:{}},p,d;for(let A of c){let b=$e(n,Pe.of(A)),E=await new zLe({cwd:b,apiName:A}).migrate();if(o.push(...E.warnings),E.absoluteFilePath!=null&&s.push(E.absoluteFilePath),u[A]=E.rawApi,E.sdks!=null){for(let[I,w]of Object.entries(E.sdks.targets))l.targets[I]=w;E.sdks.defaultGroup!=null&&p==null&&(p=E.sdks.defaultGroup),E.sdks.autorelease!=null&&d==null&&(d=E.sdks.autorelease)}}let f=await x0o({fernDir:r,apisDir:n,generatorsYmlApis:u});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 zLe({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()===mA)return this.cwd;let r=$e(this.cwd,Pe.of(mA));if(await sr(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)),Br.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 C0o=class{async handle(t,r){let i=await new j4t({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 tn({message:"Migration failed"})}};function _0o(e){let t=new C0o;Ja(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 S0o(e){PT(e,"config","Configure, edit, and inspect your settings",[_0o])}var O0o=class{async handle(t,r){let n=await t.loadWorkspaceOrThrow();if(n.docs==null)throw new tn({message:`No docs configuration found in fern.yml.
2245
2245
 
2246
2246
  Add a 'docs:' section to your fern.yml to get started.`});let o=await new xOe({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 tn.exit();return}if(o.violations.length>0)for(let a of o.violations){let c=a.severity==="warning"?ve.yellow:ve.red;process.stderr.write(`${c(`${a.displayRelativeFilepath}:${a.line}:${a.column}: ${a.message}`)}
2247
- `)}if(s)throw tn.exit();if(o.warningCount>0){t.stderr.info(`${Co.warning} ${ve.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(ve.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Co.success} ${ve.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>Iee(i))),{success:!r,results:n}}};function T0o(e){let t=new O0o;Ja(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 c9c=be(require("net"),1),u9c=be(require("os"),1),d3n=class extends Error{constructor(t){super(`${t} is locked`)}},zmt={old:new Set,young:new Set},RIm=1e3*15,l9c=new Set;var Q4t,FIm=()=>{let e=u9c.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},s9c=e=>new Promise((t,r)=>{let n=c9c.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),a9c=async(e,t)=>{if(e.host||e.port===0)return s9c(e);for(let r of t)try{await s9c({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},kIm=e=>zmt.old.has(e)||zmt.young.has(e)||l9c.has(e),NIm=function*(e){e&&(yield*e),yield 0};async function COe(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};Q4t===void 0&&(Q4t=setTimeout(()=>{Q4t=void 0,zmt.old=zmt.young,zmt.young=new Set},RIm),Q4t.unref&&Q4t.unref());let o=FIm();for(let s of NIm(t))try{if(r.has(s))continue;let a=await a9c({...i,port:s},o);for(;kIm(a);){if(s!==0)throw new d3n(s);a=await a9c({...i,port:s},o)}return n?l9c.add(a):zmt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof d3n))throw a}throw new Error("No available ports found")}Bt();dg();Ht();var gwo=require("child_process"),Cru=be(D0o(),1),_ru=be(Z3n(),1),Awo=be(require("fs"),1),$zt=require("fs/promises"),Sru=be(require("http"),1),Ewo=be(require("path"),1);var cKc=require("events"),iVn=be(require("fs"),1),XLe=be(require("path"),1);var qHc=be(require("os"),1),GHc=300,DOe=20,uzt=1e7,WHc=qHc.default.platform();var YOm=WHc==="darwin",YEo=WHc==="win32",ROe=YOm||YEo,$Hc=3e3,HHc=2e4,XEo=1250;var lie;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(lie||(lie={}));var YLe;(function(e){e.CHANGE="change",e.RENAME="rename"})(YLe||(YLe={}));var lzt;(function(e){e.CHANGE="change",e.ERROR="error"})(lzt||(lzt={}));var Dc;(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"})(Dc||(Dc={}));var KF;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(KF||(KF={}));var XOm=(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,c=0,u=0,l=()=>{let E=Date.now(),I=E-c,w=E-u,C=I>=t||w>=o;return[E,C]},p=E=>{if(u=E,!s)return;let I=s;s=void 0,e.apply(void 0,I)},d=()=>{b(0)},f=()=>{a&&(d(),p(Date.now()))},m=E=>{if(u=E,n)return p(E)},h=E=>{if(i&&s)return p(E);s=void 0},g=()=>{a=void 0;let[E,I]=l();return I?h(E):A(E)},A=E=>{let I=E-c,w=E-u,C=t-I,_=o-w,x=Math.min(C,_);return b(x)},b=E=>{a&&clearTimeout(a),!(E<=0)&&(a=setTimeout(g,E))},v=(...E)=>{let[I,w]=l(),C=!!a;if(s=E,c=I,(w||!a)&&b(t),w)return C?p(I):m(I)};return v.cancel=d,v.flush=f,v},eVn=XOm;var rvo=be(require("fs"),1),rVn=be(require("path"),1);var xd=be(require("fs"),1),iT=require("util");var Cde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},pie=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var ZEo=be(require("process"),1),KHc=ZEo.default.getuid?!ZEo.default.getuid():!1,JHc=1e4,Z2=()=>{};var pzt={isChangeErrorOk:e=>{if(!pzt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!KHc&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!pzt.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(!pzt.isNodeError(e))throw e;if(!pzt.isChangeErrorOk(e))throw e}},PI=pzt;var evo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=JHc,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()}}}}},YHc=new evo;var _de=(e,t)=>function(n){return function i(...o){return YHc.schedule().then(s=>{let a=u=>(s(),u),c=u=>{if(s(),Date.now()>=n)throw u;if(t(u)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw u};return e.apply(void 0,o).then(a,c)})}},Sde=(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 ZOm={attempt:{chmod:Cde((0,iT.promisify)(xd.default.chmod),PI.onChangeError),chown:Cde((0,iT.promisify)(xd.default.chown),PI.onChangeError),close:Cde((0,iT.promisify)(xd.default.close),Z2),fsync:Cde((0,iT.promisify)(xd.default.fsync),Z2),mkdir:Cde((0,iT.promisify)(xd.default.mkdir),Z2),realpath:Cde((0,iT.promisify)(xd.default.realpath),Z2),stat:Cde((0,iT.promisify)(xd.default.stat),Z2),unlink:Cde((0,iT.promisify)(xd.default.unlink),Z2),chmodSync:pie(xd.default.chmodSync,PI.onChangeError),chownSync:pie(xd.default.chownSync,PI.onChangeError),closeSync:pie(xd.default.closeSync,Z2),existsSync:pie(xd.default.existsSync,Z2),fsyncSync:pie(xd.default.fsync,Z2),mkdirSync:pie(xd.default.mkdirSync,Z2),realpathSync:pie(xd.default.realpathSync,Z2),statSync:pie(xd.default.statSync,Z2),unlinkSync:pie(xd.default.unlinkSync,Z2)},retry:{close:_de((0,iT.promisify)(xd.default.close),PI.isRetriableError),fsync:_de((0,iT.promisify)(xd.default.fsync),PI.isRetriableError),open:_de((0,iT.promisify)(xd.default.open),PI.isRetriableError),readFile:_de((0,iT.promisify)(xd.default.readFile),PI.isRetriableError),rename:_de((0,iT.promisify)(xd.default.rename),PI.isRetriableError),stat:_de((0,iT.promisify)(xd.default.stat),PI.isRetriableError),write:_de((0,iT.promisify)(xd.default.write),PI.isRetriableError),writeFile:_de((0,iT.promisify)(xd.default.writeFile),PI.isRetriableError),closeSync:Sde(xd.default.closeSync,PI.isRetriableError),fsyncSync:Sde(xd.default.fsyncSync,PI.isRetriableError),openSync:Sde(xd.default.openSync,PI.isRetriableError),readFileSync:Sde(xd.default.readFileSync,PI.isRetriableError),renameSync:Sde(xd.default.renameSync,PI.isRetriableError),statSync:Sde(xd.default.statSync,PI.isRetriableError),writeSync:Sde(xd.default.writeSync,PI.isRetriableError),writeFileSync:Sde(xd.default.writeFileSync,PI.isRetriableError)}},XHc=ZOm;var tVn=be(require("fs"),1),fzt=be(require("path"),1);var tvo=()=>{};var eTm=()=>{let e=tvo,t=tvo,r=!1,n=!1;return{promise:new Promise((c,u)=>{e=l=>(r=!0,c(l)),t=l=>(n=!0,u(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},ZHc=eTm;var tTm=()=>{let{promise:e,resolve:t,isPending:r}=ZHc(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},eKc=tTm;var tKc={then:e=>{e()}};var rKc=e=>Array.isArray(e)?e:[e],nKc=e=>typeof e=="function";var rTm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=rKc(o).map(ee=>nKc(ee)?ee:X=>ee.test(X)),a=ee=>s.some(X=>X(ee)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},g=[],A=new Set,b={},v={},E=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:b,map:v},{promise:C,increment:_,decrement:x}=eKc(),P=0,z=(ee,X,Ee,Ae)=>{E.has(X)||P>=i||(P+=1,ee.directories.push(X),ee.directoriesNames.add(Ee),l.push(X),p.add(Ee),d.propertyIsEnumerable(Ee)||(d[Ee]=[]),d[Ee].push(X),E.add(X),!(Ae>=n)&&(P>=i||Y(X,Ae+1)))},V=(ee,X,Ee)=>{E.has(X)||P>=i||(P+=1,ee.files.push(X),ee.filesNames.add(Ee),f.push(X),m.add(Ee),h.propertyIsEnumerable(Ee)||(h[Ee]=[]),h[Ee].push(X),E.add(X))},q=(ee,X,Ee,Ae)=>{E.has(X)||P>=i||(P+=1,ee.symlinks.push(X),ee.symlinksNames.add(Ee),g.push(X),A.add(Ee),b.propertyIsEnumerable(Ee)||(b[Ee]=[]),b[Ee].push(X),E.add(X),r&&(Ae>=n||P>=i||Se(X,Ae+1)))},te=(ee,X,Ee,Ae,De)=>{c.aborted||a(X)||(Ae.isDirectory()?z(ee,X,Ee,De):Ae.isFile()?V(ee,X,Ee):Ae.isSymbolicLink()&&q(ee,X,Ee,De))},ae=(ee,X,Ee,Ae)=>{if(c.aborted)return;let De=X===fzt.default.sep?"":fzt.default.sep,Be=Ee.name,Ke=`${X}${De}${Be}`;a(Ke)||(Ee.isDirectory()?z(ee,Ke,Be,Ae):Ee.isFile()?V(ee,Ke,Be):Ee.isSymbolicLink()&&q(ee,Ke,Be,Ae))},G=(ee,X,Ee,Ae)=>{for(let De=0,Be=Ee.length;De<Be;De++)ae(ee,X,Ee[De],Ae)},Y=(ee,X)=>{c.aborted||X>n||P>=i||(_(),tVn.default.readdir(ee,{withFileTypes:!0},(Ee,Ae)=>{if(Ee||c.aborted||!Ae.length)return x();(u(Ae)||tKc).then(()=>{let Be=v[ee]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};G(Be,ee,Ae,X),x()})}))},Se=(ee,X)=>{_(),tVn.default.realpath(ee,(Ee,Ae)=>{if(Ee||c.aborted)return x();tVn.default.stat(Ae,(De,Be)=>{if(De||c.aborted)return x();let Ke=fzt.default.basename(Ae),st=v[ee]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};te(st,Ae,Ke,Be,X),x()})})};return(async(ee,X=1)=>(ee=fzt.default.normalize(ee),E.add(ee),Y(ee,X),await C,c.aborted?I:w))(e)},iKc=rTm;var fie={lang:{debounce:eVn,attempt:e=>{try{return e()}catch(t){return fie.lang.castError(t)}},castArray:e=>fie.lang.isArray(e)?e:[e],castError:e=>fie.lang.isError(e)?e:fie.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(fie.lang.isNaN(e))return fie.lang.isNaN(t);if(fie.lang.isPrimitive(e)||fie.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(rVn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?rvo.default.realpathSync.native(e):rvo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===rVn.default.sep&&t.length-e.length>rVn.default.sep.length,poll:(e,t=HHc)=>XHc.retry.stat(t)(e,{bigint:!0}).catch(fie.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 iKc(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},Xl=fie;var nVn=be(require("path"),1);var nvo=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||Xl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=GHc){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,c)=>{let u=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...c]),p=this.eventsDeduplicate([...u,...l]);this.onTargetEvents(p)},s=Xl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,c="",u=!1)=>{u?await this.eventsPopulate([c],n,!0):i.add(c),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===Dc.CHANGE&&a===Dc.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===Dc.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Dc.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??DOe:Math.min(1,this.options.depth??DOe),s=this.options.limit??uzt,[a,c]=await Xl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),u=[...a,...c];return await Promise.all(u.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())Xl.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(Dc.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!ROe&&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(Dc.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Dc.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(nVn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Dc.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(nVn.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(Dc.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Dc.ADD?this.onTargetAdd(n):r===Dc.ADD_DIR?this.onTargetAddDir(n):r===Dc.CHANGE?this.onTargetChange(n):r===Dc.UNLINK?this.onTargetUnlink(n):r===Dc.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=YLe.CHANGE,r){if(this.watcher.isClosed())return;let n=nVn.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){YEo&&t.code==="EPERM"?this.onWatcherChange(YLe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(lzt.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(lzt.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(YLe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&ROe&&this.options.native!==!1?this.options.depth??DOe:Math.min(1,this.options.depth??DOe),n=this.options.limit??uzt,[i,o]=await Xl.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(YLe.CHANGE,a,t)}))}}},oKc=nvo;var JF={interval:100,intervalId:void 0,fns:new Map,init:()=>{JF.intervalId||(JF.intervalId=setInterval(JF.resolve,JF.interval))},reset:()=>{JF.intervalId&&(clearInterval(JF.intervalId),delete JF.intervalId)},add:(e,t)=>{JF.fns.set(e,Date.now()+t),JF.init()},remove:e=>{JF.fns.delete(e)},resolve:()=>{if(!JF.fns.size)return JF.reset();let e=Date.now();for(let[t,r]of JF.fns)r>=e||(JF.remove(t),t())}},dzt=JF;var mzt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=XEo){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(Xl.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 c=()=>{s.add.delete(n),dzt.remove(u)},u=()=>{c(),a()};dzt.add(u,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;c();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=XEo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let c=()=>{s.unlink.delete(n),dzt.remove(u)},u=()=>{c(),a()};dzt.add(u,r);let l=()=>(c(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Dc.ADD,lie.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,Dc.ADD_DIR,lie.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,Dc.UNLINK,lie.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,Dc.UNLINK_DIR,lie.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}}};mzt.DIR_EVENTS={add:Dc.ADD_DIR,rename:Dc.RENAME_DIR,unlink:Dc.UNLINK_DIR};mzt.FILE_EVENTS={add:Dc.ADD,change:Dc.CHANGE,rename:Dc.RENAME,unlink:Dc.UNLINK};var sKc=mzt;var ivo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(Xl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(Xl.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(Xl.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(Xl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return Xl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);Xl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},ovo=ivo;var svo=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}},aKc=svo;var avo=class{constructor(){this.inos={},this.paths=new ovo,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 Xl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new aKc(n)}reset(){this.inos={},this.paths=new ovo,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,Dc.ADD,i),[Dc.ADD];if(i.isDirectory())return this.updateIno(t,Dc.ADD_DIR,i),[Dc.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Dc.UNLINK,n),[Dc.UNLINK];if(n.isDirectory())return this.updateIno(t,Dc.UNLINK_DIR,n),[Dc.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Dc.CHANGE,i),[Dc.CHANGE]);if(i.isDirectory())return this.updateIno(t,Dc.UNLINK,n),this.updateIno(t,Dc.ADD_DIR,i),[Dc.UNLINK,Dc.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Dc.UNLINK_DIR,n),this.updateIno(t,Dc.ADD,i),[Dc.UNLINK_DIR,Dc.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Dc.UNLINK_DIR,n),this.updateIno(t,Dc.ADD_DIR,i),[Dc.UNLINK_DIR,Dc.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?lie.FILE:lie.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)}}},cvo=avo;var uvo=class e extends cKc.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(KF.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(KF.CLOSE,i)),this._readyWait=new Promise(i=>this.on(KF.READY,i)),this._locker=new sKc(this),this._roots=new Set,this._poller=new cvo,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&&(Xl.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(KF.CLOSE))}error(t){if(this.isClosed())return!1;let r=Xl.lang.castError(t);return this.emit(KF.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(KF.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(KF.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&Xl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&Xl.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)Xl.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 oKc(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=Xl.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=XLe.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??DOe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&ROe&&l.options.native!==!1)))return!0;if(!ROe)break;let u=XLe.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=Xl.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 c=!r.recursive||ROe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:iVn.default.watch(a,c),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=XLe.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(c){this.error(c)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||ROe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??DOe,a=r.limit??uzt,[c]=await Xl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let u=await this.watchDirectories([t],r,n,i,o);if(c.length){let l=Xl.fs.getDepth(t);for(let p of c){let d=Xl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||u)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(u,l)=>{l===t&&(c(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(KF.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(KF.CLOSE,c),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=XLe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new cvo,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 Xl.lang.noop;if(this.pollerExists(t,r))return Xl.lang.noop;let i={...r,interval:r.pollingInterval??$Hc},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(KF.CLOSE,a),iVn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(KF.CLOSE,a),iVn.default.unwatchFile(t,n)};return Xl.lang.attempt(s),()=>Xl.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=Xl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!Xl.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=XLe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await Xl.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=XLe.default.dirname(t);return(await Xl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=Xl.lang.noop){if(Xl.lang.isFunction(t))return this.watch([],{},t);if(Xl.lang.isUndefined(t))return this.watch([],r,n);if(Xl.lang.isFunction(r))return this.watch(t,{},r);if(Xl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=Xl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==Xl.lang.noop&&this.on(KF.ALL,n),r.readdirMap=void 0,this.ready())}},oVn=uvo;EVn();Ht();var c6=require("fs/promises"),dJc=require("os"),Dvo=be(require("path"),1),OBm=".fern",TBm="logs",Pvo=100*1024*1024;function BBm(){return"cli@4.68.0"}var iUe=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=$e(Gt.of((0,dJc.homedir)()),Pe.of(OBm)),n=$e(r,Pe.of(TBm));await sr(n)||await(0,c6.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=$e(n,Pe.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${Dvo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
2247
+ `)}if(s)throw tn.exit();if(o.warningCount>0){t.stderr.info(`${Co.warning} ${ve.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(ve.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Co.success} ${ve.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>Iee(i))),{success:!r,results:n}}};function T0o(e){let t=new O0o;Ja(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 c9c=be(require("net"),1),u9c=be(require("os"),1),d3n=class extends Error{constructor(t){super(`${t} is locked`)}},zmt={old:new Set,young:new Set},RIm=1e3*15,l9c=new Set;var Q4t,FIm=()=>{let e=u9c.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},s9c=e=>new Promise((t,r)=>{let n=c9c.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),a9c=async(e,t)=>{if(e.host||e.port===0)return s9c(e);for(let r of t)try{await s9c({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},kIm=e=>zmt.old.has(e)||zmt.young.has(e)||l9c.has(e),NIm=function*(e){e&&(yield*e),yield 0};async function COe(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};Q4t===void 0&&(Q4t=setTimeout(()=>{Q4t=void 0,zmt.old=zmt.young,zmt.young=new Set},RIm),Q4t.unref&&Q4t.unref());let o=FIm();for(let s of NIm(t))try{if(r.has(s))continue;let a=await a9c({...i,port:s},o);for(;kIm(a);){if(s!==0)throw new d3n(s);a=await a9c({...i,port:s},o)}return n?l9c.add(a):zmt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof d3n))throw a}throw new Error("No available ports found")}Bt();dg();Ht();var gwo=require("child_process"),Cru=be(D0o(),1),_ru=be(Z3n(),1),Awo=be(require("fs"),1),$zt=require("fs/promises"),Sru=be(require("http"),1),Ewo=be(require("path"),1);var cKc=require("events"),iVn=be(require("fs"),1),XLe=be(require("path"),1);var qHc=be(require("os"),1),GHc=300,DOe=20,uzt=1e7,WHc=qHc.default.platform();var YOm=WHc==="darwin",YEo=WHc==="win32",ROe=YOm||YEo,$Hc=3e3,HHc=2e4,XEo=1250;var lie;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(lie||(lie={}));var YLe;(function(e){e.CHANGE="change",e.RENAME="rename"})(YLe||(YLe={}));var lzt;(function(e){e.CHANGE="change",e.ERROR="error"})(lzt||(lzt={}));var Dc;(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"})(Dc||(Dc={}));var KF;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(KF||(KF={}));var XOm=(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,c=0,u=0,l=()=>{let E=Date.now(),I=E-c,w=E-u,C=I>=t||w>=o;return[E,C]},p=E=>{if(u=E,!s)return;let I=s;s=void 0,e.apply(void 0,I)},d=()=>{b(0)},f=()=>{a&&(d(),p(Date.now()))},m=E=>{if(u=E,n)return p(E)},h=E=>{if(i&&s)return p(E);s=void 0},g=()=>{a=void 0;let[E,I]=l();return I?h(E):A(E)},A=E=>{let I=E-c,w=E-u,C=t-I,_=o-w,x=Math.min(C,_);return b(x)},b=E=>{a&&clearTimeout(a),!(E<=0)&&(a=setTimeout(g,E))},v=(...E)=>{let[I,w]=l(),C=!!a;if(s=E,c=I,(w||!a)&&b(t),w)return C?p(I):m(I)};return v.cancel=d,v.flush=f,v},eVn=XOm;var rvo=be(require("fs"),1),rVn=be(require("path"),1);var xd=be(require("fs"),1),iT=require("util");var Cde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},pie=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var ZEo=be(require("process"),1),KHc=ZEo.default.getuid?!ZEo.default.getuid():!1,JHc=1e4,Z2=()=>{};var pzt={isChangeErrorOk:e=>{if(!pzt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!KHc&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!pzt.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(!pzt.isNodeError(e))throw e;if(!pzt.isChangeErrorOk(e))throw e}},PI=pzt;var evo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=JHc,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()}}}}},YHc=new evo;var _de=(e,t)=>function(n){return function i(...o){return YHc.schedule().then(s=>{let a=u=>(s(),u),c=u=>{if(s(),Date.now()>=n)throw u;if(t(u)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw u};return e.apply(void 0,o).then(a,c)})}},Sde=(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 ZOm={attempt:{chmod:Cde((0,iT.promisify)(xd.default.chmod),PI.onChangeError),chown:Cde((0,iT.promisify)(xd.default.chown),PI.onChangeError),close:Cde((0,iT.promisify)(xd.default.close),Z2),fsync:Cde((0,iT.promisify)(xd.default.fsync),Z2),mkdir:Cde((0,iT.promisify)(xd.default.mkdir),Z2),realpath:Cde((0,iT.promisify)(xd.default.realpath),Z2),stat:Cde((0,iT.promisify)(xd.default.stat),Z2),unlink:Cde((0,iT.promisify)(xd.default.unlink),Z2),chmodSync:pie(xd.default.chmodSync,PI.onChangeError),chownSync:pie(xd.default.chownSync,PI.onChangeError),closeSync:pie(xd.default.closeSync,Z2),existsSync:pie(xd.default.existsSync,Z2),fsyncSync:pie(xd.default.fsync,Z2),mkdirSync:pie(xd.default.mkdirSync,Z2),realpathSync:pie(xd.default.realpathSync,Z2),statSync:pie(xd.default.statSync,Z2),unlinkSync:pie(xd.default.unlinkSync,Z2)},retry:{close:_de((0,iT.promisify)(xd.default.close),PI.isRetriableError),fsync:_de((0,iT.promisify)(xd.default.fsync),PI.isRetriableError),open:_de((0,iT.promisify)(xd.default.open),PI.isRetriableError),readFile:_de((0,iT.promisify)(xd.default.readFile),PI.isRetriableError),rename:_de((0,iT.promisify)(xd.default.rename),PI.isRetriableError),stat:_de((0,iT.promisify)(xd.default.stat),PI.isRetriableError),write:_de((0,iT.promisify)(xd.default.write),PI.isRetriableError),writeFile:_de((0,iT.promisify)(xd.default.writeFile),PI.isRetriableError),closeSync:Sde(xd.default.closeSync,PI.isRetriableError),fsyncSync:Sde(xd.default.fsyncSync,PI.isRetriableError),openSync:Sde(xd.default.openSync,PI.isRetriableError),readFileSync:Sde(xd.default.readFileSync,PI.isRetriableError),renameSync:Sde(xd.default.renameSync,PI.isRetriableError),statSync:Sde(xd.default.statSync,PI.isRetriableError),writeSync:Sde(xd.default.writeSync,PI.isRetriableError),writeFileSync:Sde(xd.default.writeFileSync,PI.isRetriableError)}},XHc=ZOm;var tVn=be(require("fs"),1),fzt=be(require("path"),1);var tvo=()=>{};var eTm=()=>{let e=tvo,t=tvo,r=!1,n=!1;return{promise:new Promise((c,u)=>{e=l=>(r=!0,c(l)),t=l=>(n=!0,u(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},ZHc=eTm;var tTm=()=>{let{promise:e,resolve:t,isPending:r}=ZHc(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},eKc=tTm;var tKc={then:e=>{e()}};var rKc=e=>Array.isArray(e)?e:[e],nKc=e=>typeof e=="function";var rTm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=rKc(o).map(ee=>nKc(ee)?ee:X=>ee.test(X)),a=ee=>s.some(X=>X(ee)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},g=[],A=new Set,b={},v={},E=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:b,map:v},{promise:C,increment:_,decrement:x}=eKc(),P=0,z=(ee,X,Ee,Ae)=>{E.has(X)||P>=i||(P+=1,ee.directories.push(X),ee.directoriesNames.add(Ee),l.push(X),p.add(Ee),d.propertyIsEnumerable(Ee)||(d[Ee]=[]),d[Ee].push(X),E.add(X),!(Ae>=n)&&(P>=i||Y(X,Ae+1)))},V=(ee,X,Ee)=>{E.has(X)||P>=i||(P+=1,ee.files.push(X),ee.filesNames.add(Ee),f.push(X),m.add(Ee),h.propertyIsEnumerable(Ee)||(h[Ee]=[]),h[Ee].push(X),E.add(X))},q=(ee,X,Ee,Ae)=>{E.has(X)||P>=i||(P+=1,ee.symlinks.push(X),ee.symlinksNames.add(Ee),g.push(X),A.add(Ee),b.propertyIsEnumerable(Ee)||(b[Ee]=[]),b[Ee].push(X),E.add(X),r&&(Ae>=n||P>=i||Se(X,Ae+1)))},te=(ee,X,Ee,Ae,De)=>{c.aborted||a(X)||(Ae.isDirectory()?z(ee,X,Ee,De):Ae.isFile()?V(ee,X,Ee):Ae.isSymbolicLink()&&q(ee,X,Ee,De))},ae=(ee,X,Ee,Ae)=>{if(c.aborted)return;let De=X===fzt.default.sep?"":fzt.default.sep,Be=Ee.name,Ke=`${X}${De}${Be}`;a(Ke)||(Ee.isDirectory()?z(ee,Ke,Be,Ae):Ee.isFile()?V(ee,Ke,Be):Ee.isSymbolicLink()&&q(ee,Ke,Be,Ae))},G=(ee,X,Ee,Ae)=>{for(let De=0,Be=Ee.length;De<Be;De++)ae(ee,X,Ee[De],Ae)},Y=(ee,X)=>{c.aborted||X>n||P>=i||(_(),tVn.default.readdir(ee,{withFileTypes:!0},(Ee,Ae)=>{if(Ee||c.aborted||!Ae.length)return x();(u(Ae)||tKc).then(()=>{let Be=v[ee]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};G(Be,ee,Ae,X),x()})}))},Se=(ee,X)=>{_(),tVn.default.realpath(ee,(Ee,Ae)=>{if(Ee||c.aborted)return x();tVn.default.stat(Ae,(De,Be)=>{if(De||c.aborted)return x();let Ke=fzt.default.basename(Ae),st=v[ee]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};te(st,Ae,Ke,Be,X),x()})})};return(async(ee,X=1)=>(ee=fzt.default.normalize(ee),E.add(ee),Y(ee,X),await C,c.aborted?I:w))(e)},iKc=rTm;var fie={lang:{debounce:eVn,attempt:e=>{try{return e()}catch(t){return fie.lang.castError(t)}},castArray:e=>fie.lang.isArray(e)?e:[e],castError:e=>fie.lang.isError(e)?e:fie.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(fie.lang.isNaN(e))return fie.lang.isNaN(t);if(fie.lang.isPrimitive(e)||fie.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(rVn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?rvo.default.realpathSync.native(e):rvo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===rVn.default.sep&&t.length-e.length>rVn.default.sep.length,poll:(e,t=HHc)=>XHc.retry.stat(t)(e,{bigint:!0}).catch(fie.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 iKc(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},Xl=fie;var nVn=be(require("path"),1);var nvo=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||Xl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=GHc){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,c)=>{let u=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...c]),p=this.eventsDeduplicate([...u,...l]);this.onTargetEvents(p)},s=Xl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,c="",u=!1)=>{u?await this.eventsPopulate([c],n,!0):i.add(c),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===Dc.CHANGE&&a===Dc.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===Dc.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Dc.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??DOe:Math.min(1,this.options.depth??DOe),s=this.options.limit??uzt,[a,c]=await Xl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),u=[...a,...c];return await Promise.all(u.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())Xl.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(Dc.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!ROe&&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(Dc.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Dc.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(nVn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Dc.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(nVn.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(Dc.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Dc.ADD?this.onTargetAdd(n):r===Dc.ADD_DIR?this.onTargetAddDir(n):r===Dc.CHANGE?this.onTargetChange(n):r===Dc.UNLINK?this.onTargetUnlink(n):r===Dc.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=YLe.CHANGE,r){if(this.watcher.isClosed())return;let n=nVn.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){YEo&&t.code==="EPERM"?this.onWatcherChange(YLe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(lzt.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(lzt.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(YLe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&ROe&&this.options.native!==!1?this.options.depth??DOe:Math.min(1,this.options.depth??DOe),n=this.options.limit??uzt,[i,o]=await Xl.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(YLe.CHANGE,a,t)}))}}},oKc=nvo;var JF={interval:100,intervalId:void 0,fns:new Map,init:()=>{JF.intervalId||(JF.intervalId=setInterval(JF.resolve,JF.interval))},reset:()=>{JF.intervalId&&(clearInterval(JF.intervalId),delete JF.intervalId)},add:(e,t)=>{JF.fns.set(e,Date.now()+t),JF.init()},remove:e=>{JF.fns.delete(e)},resolve:()=>{if(!JF.fns.size)return JF.reset();let e=Date.now();for(let[t,r]of JF.fns)r>=e||(JF.remove(t),t())}},dzt=JF;var mzt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=XEo){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(Xl.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 c=()=>{s.add.delete(n),dzt.remove(u)},u=()=>{c(),a()};dzt.add(u,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;c();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=XEo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let c=()=>{s.unlink.delete(n),dzt.remove(u)},u=()=>{c(),a()};dzt.add(u,r);let l=()=>(c(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Dc.ADD,lie.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,Dc.ADD_DIR,lie.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,Dc.UNLINK,lie.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,Dc.UNLINK_DIR,lie.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}}};mzt.DIR_EVENTS={add:Dc.ADD_DIR,rename:Dc.RENAME_DIR,unlink:Dc.UNLINK_DIR};mzt.FILE_EVENTS={add:Dc.ADD,change:Dc.CHANGE,rename:Dc.RENAME,unlink:Dc.UNLINK};var sKc=mzt;var ivo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(Xl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(Xl.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(Xl.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(Xl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return Xl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);Xl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},ovo=ivo;var svo=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}},aKc=svo;var avo=class{constructor(){this.inos={},this.paths=new ovo,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 Xl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new aKc(n)}reset(){this.inos={},this.paths=new ovo,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,Dc.ADD,i),[Dc.ADD];if(i.isDirectory())return this.updateIno(t,Dc.ADD_DIR,i),[Dc.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Dc.UNLINK,n),[Dc.UNLINK];if(n.isDirectory())return this.updateIno(t,Dc.UNLINK_DIR,n),[Dc.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Dc.CHANGE,i),[Dc.CHANGE]);if(i.isDirectory())return this.updateIno(t,Dc.UNLINK,n),this.updateIno(t,Dc.ADD_DIR,i),[Dc.UNLINK,Dc.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Dc.UNLINK_DIR,n),this.updateIno(t,Dc.ADD,i),[Dc.UNLINK_DIR,Dc.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Dc.UNLINK_DIR,n),this.updateIno(t,Dc.ADD_DIR,i),[Dc.UNLINK_DIR,Dc.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?lie.FILE:lie.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)}}},cvo=avo;var uvo=class e extends cKc.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(KF.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(KF.CLOSE,i)),this._readyWait=new Promise(i=>this.on(KF.READY,i)),this._locker=new sKc(this),this._roots=new Set,this._poller=new cvo,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&&(Xl.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(KF.CLOSE))}error(t){if(this.isClosed())return!1;let r=Xl.lang.castError(t);return this.emit(KF.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(KF.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(KF.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&Xl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&Xl.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)Xl.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 oKc(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=Xl.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=XLe.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??DOe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&ROe&&l.options.native!==!1)))return!0;if(!ROe)break;let u=XLe.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=Xl.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 c=!r.recursive||ROe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:iVn.default.watch(a,c),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=XLe.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(c){this.error(c)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||ROe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??DOe,a=r.limit??uzt,[c]=await Xl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let u=await this.watchDirectories([t],r,n,i,o);if(c.length){let l=Xl.fs.getDepth(t);for(let p of c){let d=Xl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||u)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(u,l)=>{l===t&&(c(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(KF.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(KF.CLOSE,c),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=XLe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new cvo,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 Xl.lang.noop;if(this.pollerExists(t,r))return Xl.lang.noop;let i={...r,interval:r.pollingInterval??$Hc},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(KF.CLOSE,a),iVn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(KF.CLOSE,a),iVn.default.unwatchFile(t,n)};return Xl.lang.attempt(s),()=>Xl.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=Xl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!Xl.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=XLe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await Xl.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=XLe.default.dirname(t);return(await Xl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=Xl.lang.noop){if(Xl.lang.isFunction(t))return this.watch([],{},t);if(Xl.lang.isUndefined(t))return this.watch([],r,n);if(Xl.lang.isFunction(r))return this.watch(t,{},r);if(Xl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=Xl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==Xl.lang.noop&&this.on(KF.ALL,n),r.readdirMap=void 0,this.ready())}},oVn=uvo;EVn();Ht();var c6=require("fs/promises"),dJc=require("os"),Dvo=be(require("path"),1),OBm=".fern",TBm="logs",Pvo=100*1024*1024;function BBm(){return"cli@4.68.1"}var iUe=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=$e(Gt.of((0,dJc.homedir)()),Pe.of(OBm)),n=$e(r,Pe.of(TBm));await sr(n)||await(0,c6.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=$e(n,Pe.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${Dvo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
2248
2248
  `);await(0,c6.writeFile)(this.logFilePath,s,"utf-8"),this.initialized=!0,this.enforceLogSizeLimit(n)}getLogFilePath(){return this.logFilePath}async writeEntry(t){if(!this.initialized||!this.logFilePath)return;let r=JSON.stringify(t)+`
2249
2249
  `;try{await(0,c6.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:BBm(),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)}async enforceLogSizeLimit(t){try{let n=(await(0,c6.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=Dvo.default.join(t,c);try{let l=await(0,c6.stat)(u);i.push({name:c,fullPath:u,size:l.size,mtimeMs:l.mtimeMs})}catch{}}let o=i.reduce((c,u)=>c+u.size,0),s=Math.round(o/1024/1024*100)/100,a=Pvo/1024/1024;if(o<=Pvo){this.consoleLogger?.debug(`Log directory size ${s} MB does not exceed ${a} MB cap`);return}this.consoleLogger?.info(`Rotating logs: total size ${s} MB exceeds ${a} MB cap`),i.sort((c,u)=>c.mtimeMs-u.mtimeMs);for(let c of i){if(o<=Pvo)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,c6.unlink)(c.fullPath),o-=c.size}catch{}}}catch{}}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 Rvo={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function mJc(e){let t=PBm();if(t==null)return;let{port:r,debugLogger:n,getDocsLoadResponse:i}=e,o=new Map;function s(c){let u=JSON.stringify(c),l=[];for(let[p]of o)try{p.send(u)}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(c,u){if(c.method==="OPTIONS")return new Response(null,{status:204,headers:Rvo});let l=new URL(c.url);if(c.headers.get("upgrade")?.toLowerCase()==="websocket"){u.upgrade(c,{data:{connectionId:`${Date.now()}`}});return}if(c.method==="POST"&&l.pathname==="/v2/registry/docs/load-with-url")return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...Rvo}});let p=/^\/_local\/(.*)/.exec(l.pathname);return c.method==="GET"&&p!=null?new Response(t.file(`/${p[1]}`),{headers:Rvo}):new Response("Not Found",{status:404})},websocket:{open(c){let{connectionId:u}=c.data,l=setInterval(()=>{let p=o.get(c);if(!p)return;let d=Date.now();if(d-p.lastPong>9e4){c.close();return}try{c.send(JSON.stringify({type:"ping",timestamp:d}))}catch{c.close()}},3e4);o.set(c,{pingInterval:l,lastPong:Date.now()});try{c.send(JSON.stringify({type:"connected",connectionId:u}))}catch{}},message(c,u){try{let l=JSON.parse(u.toString());if(l.type==="pong"){let p=o.get(c);p&&(p.lastPong=Date.now())}else iUe.isMetricsMessage(l)&&n.logFrontendMetrics(l)}catch{}},close(c){let u=o.get(c);u&&(clearInterval(u.pingInterval),o.delete(c))}}});return{sendData:s,stop:c=>a.stop(c)}}function PBm(){return globalThis.Bun}Ht();var dwo=be(zvo(),1),Aru=be(two(),1),ZP=require("fs/promises"),yru=require("os"),bru=be(JC(),1),Eru=be(hru(),1),D8n=process.platform==="win32",fwo=ve.cyan("[docs]:"),akm="etag",ckm=23,gru=e=>e.padEnd(ckm," "),ukm="preview",lkm="app-preview",pkm="bundle",fkm=".next",dkm="standalone",mkm=".fern",hkm="packages/fern-docs/bundle/.next/server/instrumentation.js",gkm=".npmrc",Akm=".pnpmfile.cjs",ykm="pnpm-workspace.yaml",bkm='Cannot find matching keyid: {"signatures":';function Ekm(){return $e(Gt.of((0,yru.homedir)()),Pe.of(mkm))}function Pht({app:e=!1}){return $e(Ekm(),Pe.of(e?lkm:ukm))}function qOe({app:e=!1}){return $e(Pht({app:e}),Pe.of(e?fkm:pkm))}function Gzt({app:e=!1}){return $e(qOe({app:e}),Pe.of(dkm))}function vkm({app:e=!1}){return $e(Gzt({app:e}),Pe.of(hkm))}function Ikm({app:e=!1}){return $e(Gzt({app:e}),Pe.of(ykm))}function wkm({app:e=!1}){return $e(Gzt({app:e}),Pe.of(Akm))}function xkm({app:e=!1}){return $e(Gzt({app:e}),Pe.of(gkm))}function dUe(e){return new Error(`${e}. Please reach out to support@buildwithfern.com.`)}function Ckm({app:e=!1}){return $e(Pht({app:e}),Pe.of(akm))}var _km=`module.exports = {
2250
2250
  hooks: {
@@ -2288,7 +2288,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
2288
2288
 
2289
2289
  Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`:r}function x2m(e,t){return t!=null&&t.includes("Invalid authorization token")?"Your authentication token is invalid or expired. Please run 'fern login' to re-authenticate.":`You are not authorized to publish docs under organization '${e}'. Please run 'fern login' to ensure you are logged in with the correct account.
2290
2290
 
2291
- Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function C2m(e){if(e==null)return{code:void 0,message:void 0};let t=e.body;if(t!=null&&typeof t=="object"){let n=typeof t.code=="string"?t.code:void 0,i=typeof t.message=="string"?t.message:void 0;return{code:n,message:i}}return{code:void 0,message:typeof t=="string"&&t.length>0?t:typeof e.errorMessage=="string"?e.errorMessage:typeof e.message=="string"?e.message:void 0}}function _2m(e){try{return new URL(UF(e)).pathname}catch{return}}async function S2m({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await O2m({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:Dr.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 c={};for(let[u,l]of Object.entries(a))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${u}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();c[u]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${u}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${u}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${u}: ${p}`)}return Object.keys(c).length>0?c:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function nxo(e){return e.replace(/^https:\/\//,"")}async function O2m({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&&nxo(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 T2m({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 T2m({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,c;if(t.generatorsConfiguration?.groups){let u=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=Pn.getPackageName({generatorInvocation:p});d&&u.push(d),!a&&d&&(a=d,c=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 u=await e.sdks.versions.computeSemanticVersion({githubRepository:s,language:o,package:a});if(!u.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 ${u.body.version} for package "${a}"`),{version:u.body.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function B2m({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&&nxo(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 c of a.generators){let u=mUe({apiName:e.workspaceName??"",organization:t,generatorInvocation:c}),l="";if(u?.outputConfig.type==="publish")switch(u.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=u.outputConfig.value.packageName;break;case"maven":l=u.outputConfig.value.coordinate;break;case"go":l=u.outputConfig.value.repoUrl;break;case"swift":l=u.outputConfig.value.repoUrl;break;case"crates":l=u.outputConfig.value.packageName;break}if(c.language==="php"&&c.config&&typeof c.config=="object"&&"packageName"in c.config&&(l=c.config.packageName??""),c.language==="go"&&l&&(l=nxo(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=hg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new uh(r,e),dynamicGeneratorConfig:u}),d=r2e({ir:p,disableExamples:!0,smartCasing:c.smartCasing,generationLanguage:c.language,generatorConfig:u});d?o[c.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${c.language}`)}}}for(let[a,c]of Object.entries(s))a&&c&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${c}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${c} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function P2m({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 D2m({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(ve.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function R2m(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 ciu(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 Zzt=[60*1e3,300*1e3,300*1e3];async function e5t({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,previewId:c,disableTemplates:u,skipUpload:l,cliVersion:p,ciSource:d,deployerAuthor:f}){let m=a&&!n.config.settings?.substituteEnvVars;n.config=kb(n.config,{onError:v=>i.failAndThrow(v)},{substituteAsEmpty:m});let h=n.config.instances;if(h.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.");return}if(h.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${h[0]?.url})`);return}let g=h.find(v=>v.url===s)??h[0];if(g==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`);return}let A=[];g.customDomain!=null&&(typeof g.customDomain=="string"?A.push(g.customDomain):Array.isArray(g.customDomain)&&A.push(...g.customDomain)),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${g.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let b;return await i.runInteractiveTask({name:g.url},async()=>{let v=performance.now(),E=()=>siu({docsWorkspace:n,customDomains:A,domain:g.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:g.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:g.audiences?Array.isArray(g.audiences)?g.audiences:[g.audiences]:void 0,docsUrl:g.url,cliVersion:p,ciSource:d,deployerAuthor:f});for(let w=0;;w++)try{b=await E();break}catch(C){if(!(C instanceof kht)||w>=Zzt.length){if(C instanceof kht)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.");throw C}let _=Zzt[w]??Zzt[Zzt.length-1]??6e4,x=_/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${x} minute${x===1?"":"s"} (attempt ${w+1}/${Zzt.length})...`),await new Promise(P=>setTimeout(P,_))}let I=performance.now()-v;i.logger.debug(`Docs publishing completed in ${I.toFixed(0)}ms`)}),b}var S6n=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,previewId:n,skipUpload:i}){let o=new Eg({context:this.context,task:this.task});try{let s=await e5t({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:o,token:this.token,instanceUrl:t,preview:r,previewId:n,disableTemplates:void 0,skipUpload:i,cliVersion:"4.68.0"});return o.getResult()===Bf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:ji(s)}}}};Bt();var Nht=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(`
2291
+ Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function C2m(e){if(e==null)return{code:void 0,message:void 0};let t=e.body;if(t!=null&&typeof t=="object"){let n=typeof t.code=="string"?t.code:void 0,i=typeof t.message=="string"?t.message:void 0;return{code:n,message:i}}return{code:void 0,message:typeof t=="string"&&t.length>0?t:typeof e.errorMessage=="string"?e.errorMessage:typeof e.message=="string"?e.message:void 0}}function _2m(e){try{return new URL(UF(e)).pathname}catch{return}}async function S2m({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await O2m({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:Dr.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 c={};for(let[u,l]of Object.entries(a))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${u}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();c[u]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${u}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${u}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${u}: ${p}`)}return Object.keys(c).length>0?c:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function nxo(e){return e.replace(/^https:\/\//,"")}async function O2m({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&&nxo(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 T2m({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 T2m({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,c;if(t.generatorsConfiguration?.groups){let u=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=Pn.getPackageName({generatorInvocation:p});d&&u.push(d),!a&&d&&(a=d,c=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 u=await e.sdks.versions.computeSemanticVersion({githubRepository:s,language:o,package:a});if(!u.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 ${u.body.version} for package "${a}"`),{version:u.body.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function B2m({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&&nxo(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 c of a.generators){let u=mUe({apiName:e.workspaceName??"",organization:t,generatorInvocation:c}),l="";if(u?.outputConfig.type==="publish")switch(u.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=u.outputConfig.value.packageName;break;case"maven":l=u.outputConfig.value.coordinate;break;case"go":l=u.outputConfig.value.repoUrl;break;case"swift":l=u.outputConfig.value.repoUrl;break;case"crates":l=u.outputConfig.value.packageName;break}if(c.language==="php"&&c.config&&typeof c.config=="object"&&"packageName"in c.config&&(l=c.config.packageName??""),c.language==="go"&&l&&(l=nxo(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=hg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new uh(r,e),dynamicGeneratorConfig:u}),d=r2e({ir:p,disableExamples:!0,smartCasing:c.smartCasing,generationLanguage:c.language,generatorConfig:u});d?o[c.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${c.language}`)}}}for(let[a,c]of Object.entries(s))a&&c&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${c}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${c} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function P2m({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 D2m({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(ve.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function R2m(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 ciu(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 Zzt=[60*1e3,300*1e3,300*1e3];async function e5t({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,previewId:c,disableTemplates:u,skipUpload:l,cliVersion:p,ciSource:d,deployerAuthor:f}){let m=a&&!n.config.settings?.substituteEnvVars;n.config=kb(n.config,{onError:v=>i.failAndThrow(v)},{substituteAsEmpty:m});let h=n.config.instances;if(h.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.");return}if(h.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${h[0]?.url})`);return}let g=h.find(v=>v.url===s)??h[0];if(g==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`);return}let A=[];g.customDomain!=null&&(typeof g.customDomain=="string"?A.push(g.customDomain):Array.isArray(g.customDomain)&&A.push(...g.customDomain)),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${g.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let b;return await i.runInteractiveTask({name:g.url},async()=>{let v=performance.now(),E=()=>siu({docsWorkspace:n,customDomains:A,domain:g.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:g.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:g.audiences?Array.isArray(g.audiences)?g.audiences:[g.audiences]:void 0,docsUrl:g.url,cliVersion:p,ciSource:d,deployerAuthor:f});for(let w=0;;w++)try{b=await E();break}catch(C){if(!(C instanceof kht)||w>=Zzt.length){if(C instanceof kht)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.");throw C}let _=Zzt[w]??Zzt[Zzt.length-1]??6e4,x=_/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${x} minute${x===1?"":"s"} (attempt ${w+1}/${Zzt.length})...`),await new Promise(P=>setTimeout(P,_))}let I=performance.now()-v;i.logger.debug(`Docs publishing completed in ${I.toFixed(0)}ms`)}),b}var S6n=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,previewId:n,skipUpload:i}){let o=new Eg({context:this.context,task:this.task});try{let s=await e5t({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:o,token:this.token,instanceUrl:t,preview:r,previewId:n,disableTemplates:void 0,skipUpload:i,cliVersion:"4.68.1"});return o.getResult()===Bf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:ji(s)}}}};Bt();var Nht=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(`
2292
2292
  `),this.stream.write(`${ve.cyan("\u25C6")} ${ve.bold(t.title)}
2293
2293
  `),t.subtitle!=null&&this.stream.write(` ${ve.dim(t.subtitle)}
2294
2294
  `),this.stream.write(`
@@ -3686,8 +3686,8 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
3686
3686
  Run ${ve.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
3687
3687
  Run ${ve.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),ctt(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function z7o({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!hUu(e))return;let i=t??"",o=e.filter(a=>a.isUpgradeAvailable);r!=null&&(o=o.slice(0,r+1));let s=o.sort((a,c)=>a.generatorName.localeCompare(c.generatorName)||a.currentVersion.localeCompare(c.currentVersion));for(let a of s)i+=`
3688
3688
  ${await GKh(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+ve.dim(a.currentVersion)+ve.reset(" \u2192 ")+ve.green(a.latestVersion);return i+=`
3689
- `,n?ctt(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function GKh(e){let r=await new mUu.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 WKh({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await AUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=gje(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await CB({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await AUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=gje(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await CB({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function AUu({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 uL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?L0(n):void 0;for(let u of a.groups)if(!(i!=null&&u.groupName!==i))for(let l of u.generators)c!=null&&l.name!==c||await r(o.workspaceName,u.groupName,l,s)})}))}function yUu(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 c=Ej(a.latestVersion,a.previousVersion);r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Fti({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await WKh({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...yUu(u,c,t.logger));else s.push(...yUu(a.versions,void 0,t.logger))}return s}async function mhe({cliEnvironment:e,includePreReleases:t=!1}){return e.packageName!=="fern-api"||e.packageVersion==="0.0.0"?e.packageVersion:JSt(e.packageName,{version:t?"prerelease":"latest"})}var bUu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],kti=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=ei.Info;isLocal;stdoutRedirector=new Rti;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await JQt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new A2e(t,r),this.isLocal=n??!1,this.posthogManager=i;let o=this.getPackageName(),s=this.getPackageVersion(),a=this.getCliName();(o==null||s==null||a==null)&&this.exitProgram(),this.environment={packageName:o,packageVersion:s,cliName:a},this.sentryClient=new Dti({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"4.68.0"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${ve.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r){throw this.failWithoutThrowing(t,r),new bm}failWithoutThrowing(t,r){this.didSucceed=!1,zFt({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)+`
3690
- `),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish(),await this.posthogManager.flush(),await this.sentryClient.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 gUu({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
3689
+ `,n?ctt(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function GKh(e){let r=await new mUu.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 WKh({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await AUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=gje(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await CB({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await AUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=gje(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await CB({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function AUu({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 uL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?L0(n):void 0;for(let u of a.groups)if(!(i!=null&&u.groupName!==i))for(let l of u.generators)c!=null&&l.name!==c||await r(o.workspaceName,u.groupName,l,s)})}))}function yUu(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 c=Ej(a.latestVersion,a.previousVersion);r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Fti({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await WKh({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...yUu(u,c,t.logger));else s.push(...yUu(a.versions,void 0,t.logger))}return s}async function mhe({cliEnvironment:e,includePreReleases:t=!1}){return e.packageName!=="fern-api"||e.packageVersion==="0.0.0"?e.packageVersion:JSt(e.packageName,{version:t?"prerelease":"latest"})}var bUu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],kti=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=ei.Info;isLocal;stdoutRedirector=new Rti;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await JQt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new A2e(t,r),this.isLocal=n??!1,this.posthogManager=i;let o=this.getPackageName(),s=this.getPackageVersion(),a=this.getCliName();(o==null||s==null||a==null)&&this.exitProgram(),this.environment={packageName:o,packageVersion:s,cliName:a},this.sentryClient=new Dti({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"4.68.1"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${ve.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r){throw this.failWithoutThrowing(t,r),new bm}failWithoutThrowing(t,r){this.didSucceed=!1,zFt({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)+`
3690
+ `),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish();try{await this.posthogManager.flush()}catch{}await this.sentryClient.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 gUu({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
3691
3691
  `)||(r+=`
3692
3692
  `),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=Zmi(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 Wqt(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 instanceof bm?o:(o.message.includes("globalThis")?(n.logger.error(this.USE_NODE_18_OR_ABOVE_MESSAGE),n.failWithoutThrowing()):n.failWithoutThrowing(void 0,o),new bm)}finally{n.finish()}return i}instrumentPostHogEvent(t){this.isLocal||this.posthogManager.sendEvent(t)}async captureException(t){await this.sentryClient.captureException(t)}logger=aO((t,...r)=>this.log(t,...r));stderr=aO((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=EUu(t.type==="docs"?"docs":t.workspaceName??"api"),n=1+(this.longestWorkspaceName!=null?EUu(this.longestWorkspaceName):r).length,i=r.padEnd(n),o=bUu[this.numTasks++%bUu.length],s=ve.hex(o)(i);return{...this.constructTaskInit(),logPrefix:s}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Bf.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:t=>{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=>sO.indexOf(i.level)>=sO.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===ei.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 mhe({cliEnvironment:this.environment,includePreReleases:t}),n=Ej(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await Fti({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await L7o({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:ve.yellow("?"),style:{answer:i=>ve.cyan(i),message:i=>ve.bold(i),highlight:i=>ve.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
3693
3693
  Cancelled by user.`),new bm):n}}async getInput(t){return await j7o({message:t.message,default:t.default})}};function EUu(e){return`[${e}]:`}Ht();var vUu=require("fs/promises");async function V7o({context:e,nameOverride:t,...r}){let n=await sb(t);return n==null?e.failAndThrow(`Directory "${t??mA}" not found.`):await IUu({absolutePathToFernDirectory:n,context:e,nameOverride:t,...r})}async function IUu({absolutePathToFernDirectory:e,cliName:t,cliVersion:r,commandLineApiWorkspace:n,defaultToAllApiWorkspaces:i,context:o}){let s=[],[a,c,u,l,p,d]=await Promise.all([sr($e(e,Pe.of(rR))),sr($e(e,Pe.of(hA))),sr($e(e,Pe.of(ef))),sr($e(e,Pe.of(P9e))),sr($e(e,Pe.of(XSt))),sr($e(e,Pe.of(rvi)))]);(a||c||u||l||p||d)&&(s=await wUu({cliName:t,fernDirectory:e,cliVersion:r,context:o,commandLineApiWorkspace:n,defaultToAllApiWorkspaces:i}));let f=await Dwo({fernDirectory:e,context:o});return s.length===0&&f==null?o.failAndThrow(`No SDK specifications or docs specifications found. Please ensure one of the following .yml (not .yaml) files is present:
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.68.0",
2
+ "version": "4.68.1",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",