fern-api 5.17.0 → 5.17.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 +5 -5
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -3043,7 +3043,7 @@ ${skc.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&dCo(th
3043
3043
  `+gLe.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?gLe.default.cyan(hkc(t,this.opt.mask)):gLe.default.italic(gLe.default.dim("[hidden]")):this.opt.mask?hkc(t,this.opt.mask):gLe.default.italic(gLe.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 b8r=xe($x(),1);var mNc=xe(KCo(),1),A8r=require("child_process"),Cit=require("fs"),g8r=xe(require("path"),1),hNc=xe(require("os"),1),gNc=require("crypto"),Rwo=xe(fNc(),1);var d8r=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var qUt=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var m8r=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var h8r=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function y8r(e="",t,r){let n=new Fwo(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 dNc(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function eLd(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 Fwo=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=eLd(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??hNc.default.tmpdir(),r=(0,gNc.randomUUID)(),n=dNc(this.fileOptions.prefix),i=dNc(this.fileOptions.postfix),o=`${n}${r}${i}`,s=g8r.default.resolve(t,o),a=g8r.default.resolve(t)+g8r.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,Cit.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new d8r(t)}}readTemporaryFile(){try{let t=(0,Cit.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,mNc.detect)(t)??"utf8";Rwo.default.encodingExists(r)||(r="utf8"),this.text=Rwo.default.decode(t,r)}}catch(t){throw new m8r(t)}}removeTemporaryFile(){try{(0,Cit.unlinkSync)(this.tempFile)}catch(t){throw new h8r(t)}}launchEditor(){try{let t=(0,A8r.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new qUt(t)}}launchEditorAsync(t){try{(0,A8r.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new qUt(r)}}};var ANc=xe(ZL(),1);var GUt=class extends eS{_run(t){this.done=t,this.editorResult=new ANc.Subject;let r=NO(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"?b8r.default.dim("Received"):b8r.default.dim("Press <enter> to launch your preferred editor."),t&&(r=b8r.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),y8r(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 INc=require("stream");var ENc=xe(require("readline"),1),vNc=xe(bNc(),1),ELe=class{constructor(t){this.rl||=ENc.default.createInterface(rLd(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 rLd(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 vNc.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var WUt=class extends ELe{constructor(t={}){super(t),this.log=new INc.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return OUt(this.rl,this.bottomBar.split(`
3044
3044
  `).length),this}updateBottomBar(t){return OUt(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+`
3045
3045
  `}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&&U5r(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var Qd=xe(ZL(),1),xNc=xe(sUt(),1);var E8r=xe(ZL(),1),CNc=xe(sUt(),1),v8r=function(e,t,r){return typeof e[t]!="function"?(0,E8r.of)(e):(0,E8r.from)((0,CNc.default)(e[t])(r).then(n=>(e[t]=n,e)))};var wNc={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}},wit=class extends ELe{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,Qd.from)(t):(0,Qd.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,Qd.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,Qd.from)([t]),this.process=n.pipe((0,Qd.concatMap)(this.processQuestion.bind(this)),(0,Qd.publish)()),this.process.connect(),this.process.pipe((0,Qd.reduce)((i,o)=>(wNc.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,Qd.defer)(()=>(0,Qd.of)(t).pipe((0,Qd.concatMap)(this.setDefaultType.bind(this)),(0,Qd.concatMap)(this.filterIfRunnable.bind(this)),(0,Qd.concatMap)(()=>v8r(t,"message",this.answers)),(0,Qd.concatMap)(()=>v8r(t,"default",this.answers)),(0,Qd.concatMap)(()=>v8r(t,"choices",this.answers)),(0,Qd.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,Qd.defer)(()=>(0,Qd.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,Qd.defer)(()=>(0,Qd.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&wNc.get(this.answers,t.name)!==void 0)return Qd.EMPTY;if(t.when===!1)return Qd.EMPTY;if(typeof t.when!="function")return(0,Qd.of)(t);let{answers:r}=this;return(0,Qd.defer)(()=>(0,Qd.from)((0,xNc.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,Qd.filter)(n=>n!=null)))}};function SNc(e){let t=function(r,n){let i;try{i=new wit(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",DUt),this.registerPrompt("input",hLe),this.registerPrompt("number",RUt),this.registerPrompt("confirm",FUt),this.registerPrompt("rawlist",kUt),this.registerPrompt("expand",NUt),this.registerPrompt("checkbox",jUt),this.registerPrompt("password",QUt),this.registerPrompt("editor",GUt)},t.restoreDefaultPrompts(),t}var Nwo=SNc();function iLd(e,t){Nwo.registerPrompt(e,t)}function oLd(){Nwo.restoreDefaultPrompts()}var sLd={prompt:Nwo,ui:{BottomBar:WUt,Prompt:wit},createPromptModule:SNc,registerPrompt:iLd,restoreDefaultPrompts:oLd,Separator:KQ},Jl=sLd;var xit=require("path");function BNc(){let e=aLd();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function aLd(e=process.argv[1]?(0,xit.dirname)(process.argv[1]):process.cwd(),t=xit.sep==="\\"){let r=t?TNc(e):e;return n=>{if(!n)return;let i=t?TNc(n):n,{dir:o,base:s,ext:a}=xit.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 TNc(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var jwo=e=>{if("flags"in e){let t=ONc(e.flags),r=PNc(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,Qwo(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,cLd(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function cLd(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 ONc=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,HUt(r)]).filter(([,t])=>t!==void 0)),PNc=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?Qwo(n):void 0]}))};var HUt=e=>e===void 0?void 0:e.variant??e.enabled,Qwo=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};function DNc(){return"CompressionStream"in globalThis}async function I8r(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 C8r="0123456789abcdef",w8r=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+=C8r.charAt(this.bytes[r]>>>4),t+=C8r.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+=C8r.charAt(this.bytes[r]>>>4),t+=C8r.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}},Mwo=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??uLd()}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 w8r.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,w8r.ofInner(t)}},uLd=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),RNc,MIe=()=>lLd().toString(),lLd=()=>(RNc||(RNc=new Mwo)).generate();var YQ=(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 pLd=["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"],FNc=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return pLd.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var dLd=Array.isArray,kNc=Object.prototype,fG0=kNc.hasOwnProperty,Lwo=kNc.toString,zwo=dLd||function(e){return Lwo.call(e)==="[object Array]"};var Uwo=e=>e===Object(e)&&!zwo(e);var KUt=e=>e===void 0,JUt=e=>Lwo.call(e)=="[object String]",NNc=e=>JUt(e)&&e.trim().length===0;var jNc=e=>Lwo.call(e)=="[object Number]"&&e===e;var _wo=e=>e instanceof Error;function x8r(e){return e===null||typeof e!="object"}function vLe(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function QNc(e){return vLe(e,"ErrorEvent")}function Sit(e){return typeof Event<"u"&&mLd(e,Event)}function MNc(e){return vLe(e,"Object")}function mLd(e,t){try{return e instanceof t}catch{return!1}}function YUt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),jNc(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),YUt(i||r,t,r,n))}var hLd=864e5,S8r=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=YUt(t.bucketSize,0,100,t._logger),this._refillRate=YUt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=YUt(t.refillInterval,0,hLd,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 T8r=class{add(t){let r=MIe();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 gLd(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var LNc=(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=>LNc(`${e} ${o}`,t,r)}},ALd=e=>e();function zNc(e,t=ALd){return LNc(e,t,gLd())}var Bit="Mobile",O8r="iOS",Tit="Android",UNc="Tablet",wG0=Tit+" "+UNc;var yLd="Apple",xG0=yLd+" Watch",_Nc="Safari",P8r="BlackBerry",VNc="Samsung",bLd=VNc+"Browser",ELd=VNc+" Internet",D8r="Chrome",vLd=D8r+" OS",ILd=D8r+" "+O8r,qNc="Internet Explorer",CLd=qNc+" "+Bit,qwo="Opera",SG0=qwo+" Mini",GNc="Edge",wLd="Microsoft "+GNc,Gwo="Firefox",xLd=Gwo+" "+O8r,Wwo="Nintendo",Hwo="PlayStation",B8r="Xbox",SLd=Tit+" "+Bit,TLd=Bit+" "+_Nc,XUt="Windows",BLd=XUt+" Phone";var WNc="Generic",TG0=WNc+" "+Bit.toLowerCase(),BG0=WNc+" "+UNc.toLowerCase(),OLd="Konqueror",gk="(\\d+(\\.\\d+)?)",Vwo=new RegExp("Version/"+gk),OG0=new RegExp(B8r,"i"),PG0=new RegExp(Hwo+" \\w+","i"),DG0=new RegExp(Wwo+" \\w+","i"),PLd=new RegExp(P8r+"|PlayBook|BB10","i"),DLd={"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 RG0={[CLd]:[new RegExp("rv:"+gk)],[wLd]:[new RegExp(GNc+"?\\/"+gk)],[D8r]:[new RegExp("("+D8r+"|CrMo)\\/"+gk)],[ILd]:[new RegExp("CriOS\\/"+gk)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+gk)],[_Nc]:[Vwo],[TLd]:[Vwo],[qwo]:[new RegExp("("+qwo+"|OPR)\\/"+gk)],[Gwo]:[new RegExp(Gwo+"\\/"+gk)],[xLd]:[new RegExp("FxiOS\\/"+gk)],[OLd]:[new RegExp("Konqueror[:/]?"+gk,"i")],[P8r]:[new RegExp(P8r+" "+gk),Vwo],[SLd]:[new RegExp("android\\s"+gk,"i")],[ELd]:[new RegExp(bLd+"\\/"+gk)],[qNc]:[new RegExp("(rv:|MSIE )"+gk)],Mozilla:[new RegExp("rv:"+gk)]};var FG0=[[new RegExp(B8r+"; "+B8r+" (.*?)[);]","i"),e=>[B8r,e&&e[1]||""]],[new RegExp(Wwo,"i"),[Wwo,""]],[new RegExp(Hwo,"i"),[Hwo,""]],[PLd,[P8r,""]],[new RegExp(XUt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[BLd,""];if(new RegExp(Bit).test(t)&&!/IEMobile\b/.test(t))return[XUt+" "+Bit,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=DLd[n]||"";return/arm/i.test(t)&&(i="RT"),[XUt,i]}return[XUt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[O8r,t.join(".")]}return[O8r,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=KUt(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+Tit+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Tit+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[Tit,t.join(".")]}return[Tit,""]}],[/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/,[vLd,""]],[/Linux|debian/i,["Linux",""]]];var HNc="utf8";function KNc(e,t){if(!e||typeof e!="string"||RLd(e))throw new Error(t)}function RLd(e){return e.trim().length===0}function JNc(e){return e?.replace(/\/+$/,"")}async function YNc(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 R8r(){return new Date().toISOString()}function sfe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var XNc=e=>e instanceof Error;function Kwo(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var F8r=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 ILe=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()}},Oit=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function ZNc(e){if(e instanceof ILe){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 Jwo(e){return typeof e=="object"&&(e instanceof ILe||e instanceof Oit)}function $Nc(e){return typeof e=="object"&&e instanceof ILe&&e.status===413}var ZUt=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new T8r,this._events=new F8r,this._isInitialized=!1,KNc(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=JNc(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:Jwo},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=zNc("[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=!DNc()||(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(YQ.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(YQ.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(YQ.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:jwo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof ILe)return{type:"api_error",statusCode:t.status};if(t instanceof Oit){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=HUt(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(YQ.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(YQ.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(YQ.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(YQ.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(YQ.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=sfe(()=>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:R8r()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await I8r(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:R8r(),uuid:n?.uuid?n.uuid:MIe()};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 ZNc(t)})}async flush(){let t=Kwo([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),Kwo([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(YQ.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(YQ.Queue)||[]).slice(i.length);this.setPersistedProperty(YQ.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:R8r()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await I8r(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>$Nc(f)?!1:Jwo(f)};try{await this.fetchWithRetry(u,p,d)}catch(f){if($Nc(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 Oit||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,HNc)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await YNc(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=sfe(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new Oit(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new ILe(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(YQ.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!Jwo(o))throw o;await ZNc(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=sfe(()=>{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 XQ={};re(XQ,{DOMExceptionCoercer:()=>$wo,ErrorCoercer:()=>exo,ErrorEventCoercer:()=>txo,ErrorPropertiesBuilder:()=>Ywo,EventCoercer:()=>ixo,ObjectCoercer:()=>nxo,PrimitiveCoercer:()=>oxo,PromiseRejectionEventCoercer:()=>sxo,ReduceableCache:()=>axo,StringCoercer:()=>rxo,chromeStackLineParser:()=>Xwo,createDefaultStackParser:()=>HLd,createStackParser:()=>ljc,geckoStackLineParser:()=>Zwo,nodeStackLineParser:()=>sjc,opera10StackLineParser:()=>njc,opera11StackLineParser:()=>ijc,reverseAndStripFrames:()=>ujc,winjsStackLineParser:()=>rjc});var k8r,ejc,N8r;function tjc(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return N8r&&r.length===ejc||(ejc=r.length,N8r=r.reduce((n,i)=>{k8r||(k8r={});let o=k8r[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,k8r[i]=[u,l];break}}}return n},{})),N8r}var kLd=4,Ywo=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&&zwo(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:tjc(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=kLd){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 QO="?";function W$(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?QO:r,in_app:!0};return KUt(n)||(o.lineno=n),KUt(i)||(o.colno=i),o}var j8r=(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]:QO,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var NLd=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,jLd=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,QLd=/\((\S*)(?::(\d+))(?::(\d+))\)/,Xwo=(e,t)=>{let r=NLd.exec(e);if(r){let[,i,o,s]=r;return W$(t,i,QO,+o,+s)}let n=jLd.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=QLd.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=j8r(n[1]||QO,n[2]);return W$(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var MLd=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,LLd=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Zwo=(e,t)=>{let r=MLd.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=LLd.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]||QO;return[o,i]=j8r(o,i),W$(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var zLd=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,rjc=(e,t)=>{let r=zLd.exec(e);return r?W$(t,r[2],r[1]||QO,+r[3],r[4]?+r[4]:void 0):void 0};var ULd=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,njc=(e,t)=>{let r=ULd.exec(e);return r?W$(t,r[2],r[3]||QO,+r[1]):void 0},_Ld=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,ijc=(e,t)=>{let r=_Ld.exec(e);return r?W$(t,r[5],r[3]||r[4]||QO,+r[1],+r[2]):void 0};var VLd=/^\s*[-]{4,}$/,qLd=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,sjc=(e,t)=>{let r=e.match(qLd);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||QO,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:ojc(r[3]),colno:ojc(r[4]),in_app:GLd(c||"",u),platform:t}}if(e.match(VLd))return{filename:e,platform:t}};function GLd(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 ojc(e){return parseInt(e||"",10)||void 0}var ajc=/\(error: (.*)\)/,cjc=50;function ujc(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,cjc).map(r=>({...r,filename:r.filename||WLd(t).filename,function:r.function||QO}))}function WLd(e){return e[e.length-1]||{}}function HLd(){return ljc("web:javascript",Xwo,Zwo)}function ljc(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
3046
- `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=ajc.test(a)?a.replace(ajc,"$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>=cjc)break}}return ujc(i)}}var $wo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=JUt(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 vLe(t,"DOMException")}isDOMError(t){return vLe(t,"DOMError")}};var exo=class{match(t){return _wo(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 txo=class{constructor(){}match(t){return QNc(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 KLd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,rxo=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(KLd);return i&&(r=i[1],n=i[2]),[r,n]}};var pjc=["fatal","error","warning","log","info","debug"];function Q8r(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 nxo=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 Sit(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=Q8r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return JUt(t)&&!NNc(t)&&pjc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(XNc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var ixo=class{match(t){return Sit(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${Q8r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var oxo=class{match(t){return x8r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var sxo=class{match(t){return vLe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Sit(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 x8r(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 axo=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 mjc=require("fs"),hjc=require("readline"),M8r=new XQ.ReduceableCache(25),gjc=new XQ.ReduceableCache(20),cxo=7,JLd=1e3,YLd=1e4;async function Ajc(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"||ezd(s)||tzd(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(gjc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=nzd(o);if(s.every(c=>rzd(i,c)))continue;let a=izd(M8r,i,{});n.push(XLd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&ZLd(e,M8r),M8r.reduce(),e}function XLd(e,t,r){return new Promise(n=>{let i=(0,mjc.createReadStream)(e),o=(0,hjc.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(){gjc.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]=ozd(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 ZLd(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;$Ld(r.lineno,r,n)}}function $Ld(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=yjc(e);i<e;i++){let o=r[i];if(o===void 0)return void fjc(t);t.pre_context.push(o)}if(r[e]===void 0)return void fjc(t);t.context_line=r[e];let n=bjc(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 fjc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function ezd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function tzd(e){return e.lineno!==void 0&&e.lineno>YLd||e.colno!==void 0&&e.colno>JLd}function rzd(e,t){let r=M8r.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 nzd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=djc(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+cxo:(i.push(n),n=djc(o)),t++}return i}function djc(e){return[yjc(e),bjc(e)]}function yjc(e){return Math.max(1,e-cxo)}function bjc(e){return e+cxo}function izd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function ozd(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 szd(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 Ejc(e,t){globalThis.process?.on("uncaughtException",szd(e,t))}function vjc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var azd=2e3,_W=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new S8r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return Uwo(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()&&(Ejc(this.onException.bind(this),this.onFatalError.bind(this)),vjc(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(azd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var Ijc="5.29.1";var $Ut={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function Cjc(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 czd=6e4,uzd=1152921504606847e3,lzd=["is_not"],Pit=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Md=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},H$=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},L8r=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 H$||u instanceof Md?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 H$||u instanceof Md?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 Md("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 Md("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 Md(`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 Md("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Md(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Md(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Md(`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 Md(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Md(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Md(`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 H$)throw l;if(l instanceof Md)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Md("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"?Bjc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):Tjc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await wjc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await wjc(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(czd,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 Pit(`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 Pit(`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 Pit(`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 Pit&&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=sfe(()=>{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 wjc(e,t,r=""){let n=await Cjc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/uzd}function Tjc(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 Md("Operator is_not_set is not supported")}else throw new Md(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!lzd.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 xjc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return xjc(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 Md("Date operations cannot be performed on boolean values");let u=hzd(String(i));if(u==null&&(u=Sjc(i)),u==null)throw new Md(`Invalid date: ${i}`);let l=Sjc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return EV(MO(String(s)),MO(String(i)))===0;case"semver_neq":return EV(MO(String(s)),MO(String(i)))!==0;case"semver_gt":return EV(MO(String(s)),MO(String(i)))>0;case"semver_gte":return EV(MO(String(s)),MO(String(i)))>=0;case"semver_lt":return EV(MO(String(s)),MO(String(i)))<0;case"semver_lte":return EV(MO(String(s)),MO(String(i)))<=0;case"semver_tilde":{let u=MO(String(s)),{lower:l,upper:p}=fzd(String(i));return EV(u,l)>=0&&EV(u,p)<0}case"semver_caret":{let u=MO(String(s)),{lower:l,upper:p}=dzd(String(i));return EV(u,l)>=0&&EV(u,p)<0}case"semver_wildcard":{let u=MO(String(s)),{lower:l,upper:p}=mzd(String(i));return EV(u,l)>=0&&EV(u,p)<0}default:throw new Md(`Unknown operator: ${o}`)}}function pzd(e,t){if(!(e in t))throw new H$(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function Bjc(e,t,r,n=!1){let i=String(e.value);pzd(i,r);let o=r[i];return Ojc(o,t,r,n)}function Ojc(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=Ojc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof H$)throw c;if(c instanceof Md)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Md("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=Bjc(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=Tjc(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 H$)throw c;if(c instanceof Md)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Md("can't match cohort without a given cohort property value");return i==="AND"}function xjc(e){try{return new RegExp(e),!0}catch{return!1}}function MO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Md(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Md(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function EV(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 fzd(e){let t=MO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function dzd(e){let t=MO(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 mzd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Md(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Md(`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 Md(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function Sjc(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 Md(`${e} is in an invalid date format`)}throw new Md(`The date provided ${e} must be a string, number, or date object`)}function hzd(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 z8r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var gzd=100,Pjc=3e4,Azd=5e4,yzd=50,bzd=500,U8r=class extends ZUt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new z8r,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,gzd):Pjc,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 L8r({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 _W(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||Azd}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??bzd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??yzd;this._waitUntilCycle.timer=sfe(()=>{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 Ijc}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=Pjc){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 B=this._flagOverrides[t];if(B===void 0)return;let O=this._payloadOverrides?.[t];return{key:t,enabled:B!==!1,variant:typeof B=="string"?B:void 0,payload:O}}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,A,y,I,w,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let B=this.featureFlagsPoller?.featureFlagsByKey[t];if(B)try{let O=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(B,d,{matchValue:i});if(O){m=!0;let N=O.value;I=B.id,C="Evaluated locally",f={key:t,enabled:N!==!1,variant:typeof N=="string"?N:void 0,payload:O.payload??void 0}}}catch(O){if(O instanceof H$||O instanceof Md)this._logger?.info(`${O.name} when computing flag locally: ${t}: ${O.message}`);else throw O}}if(!m&&!c){let B=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(B===void 0)y=$Ut.UNKNOWN_ERROR;else{h=B.requestId,A=B.evaluatedAt;let O=[];B.errorsWhileComputingFlags&&O.push($Ut.ERRORS_WHILE_COMPUTING),B.quotaLimited?.includes("feature_flags")&&O.push($Ut.QUOTA_LIMITED);let N=B.flags[t];if(N===void 0)O.push($Ut.FLAG_MISSING);else{I=N.metadata?.id,w=N.metadata?.version,C=N.reason?.description??N.reason?.code;let P;if(N.metadata?.payload!==void 0)try{P=JSON.parse(N.metadata.payload)}catch{P=N.metadata.payload}f={key:t,enabled:N.enabled,variant:N.variant,payload:P}}O.length>0&&(y=O.join(","))}}if(o){let B=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,O=`${t}_${B}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(O)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(O):this.distinctIdHasSentFlagCalls[r]=[O];let N={$feature_flag:t,$feature_flag_response:B,$feature_flag_id:I,$feature_flag_version:w,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:B,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(N.$feature_flag_definitions_loaded_at=P)}y&&(N.$feature_flag_error=y),this.capture({distinctId:r,event:"$feature_flag_called",properties:N,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={},A=!0;if(f&&(m=f.response,h=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},h={...h,...y.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=sfe(()=>{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(MNc(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(!_W.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(_W.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!_W.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(_W.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=MIe(),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 A={};if(h)for(let[I,w]of Object.entries(h))A[`$feature/${I}`]=w;let y=Object.keys(h||{}).filter(I=>h?.[I]!==!1).sort();return y.length>0&&(A.$active_feature_flags=y),A}).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"&&FNc(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 Djc=require("async_hooks"),_8r=class{constructor(){this.storage=new Djc.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 Rjc="posthog-node";function Ezd(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[uxo.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 uxo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=Rjc,this.name=Rjc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(Ezd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};_W.errorPropertiesBuilder=new XQ.ErrorPropertiesBuilder([new XQ.EventCoercer,new XQ.ErrorCoercer,new XQ.ObjectCoercer,new XQ.StringCoercer,new XQ.PrimitiveCoercer],XQ.createStackParser("node:javascript",XQ.nodeStackLineParser),[BNc(),Ajc]);var LIe=class extends U8r{getLibraryId(){return"posthog-node"}initializeContext(){return new _8r}};var V8r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new LIe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.17.0",usingAccessToken:!0,...gFe()}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var e_t=class{async sendEvent(){}async identify(){}async flush(){}};rr();var Dit=require("fs/promises"),Fjc=require("os"),kjc=require("path");var vzd="id",Izd=".fern",t_t=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new LIe(r),this.userId=t==null?void 0:Sbo(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:"5.17.0",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{},...gFe()}})}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 Lf({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=nt(Yt.of((0,Fjc.homedir)()),Fe.of(Izd),Fe.of(vzd));await ar(t)||(await(0,Dit.mkdir)((0,kjc.dirname)(t),{recursive:!0}),await(0,Dit.writeFile)(t,NQ())),this.persistedDistinctId=(await(0,Dit.readFile)(t)).toString()}return this.persistedDistinctId}};var lxo;async function r_t(){return lxo==null&&(lxo=await Czd()),lxo}async function Czd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new e_t;let r=await $Lr();return r!=null?new t_t({token:r,posthogApiKey:e}):await O$()!=null?new V8r({posthogApiKey:e}):new t_t({token:void 0,posthogApiKey:e})}catch{return new e_t}}Ut();var n_t=xe(require("process"),1);rGe();var Qjc=xe(wlo(),1),Mjc=xe(jjc(),1);function $1(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=xG(e),e.length===0))return 0;e=e.replace((0,Mjc.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(Qjc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function q8r(e){let t=0;for(let r of e.split(`
3046
+ `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=ajc.test(a)?a.replace(ajc,"$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>=cjc)break}}return ujc(i)}}var $wo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=JUt(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 vLe(t,"DOMException")}isDOMError(t){return vLe(t,"DOMError")}};var exo=class{match(t){return _wo(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 txo=class{constructor(){}match(t){return QNc(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 KLd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,rxo=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(KLd);return i&&(r=i[1],n=i[2]),[r,n]}};var pjc=["fatal","error","warning","log","info","debug"];function Q8r(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 nxo=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 Sit(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=Q8r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return JUt(t)&&!NNc(t)&&pjc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(XNc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var ixo=class{match(t){return Sit(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${Q8r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var oxo=class{match(t){return x8r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var sxo=class{match(t){return vLe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Sit(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 x8r(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 axo=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 mjc=require("fs"),hjc=require("readline"),M8r=new XQ.ReduceableCache(25),gjc=new XQ.ReduceableCache(20),cxo=7,JLd=1e3,YLd=1e4;async function Ajc(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"||ezd(s)||tzd(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(gjc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=nzd(o);if(s.every(c=>rzd(i,c)))continue;let a=izd(M8r,i,{});n.push(XLd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&ZLd(e,M8r),M8r.reduce(),e}function XLd(e,t,r){return new Promise(n=>{let i=(0,mjc.createReadStream)(e),o=(0,hjc.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(){gjc.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]=ozd(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 ZLd(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;$Ld(r.lineno,r,n)}}function $Ld(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=yjc(e);i<e;i++){let o=r[i];if(o===void 0)return void fjc(t);t.pre_context.push(o)}if(r[e]===void 0)return void fjc(t);t.context_line=r[e];let n=bjc(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 fjc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function ezd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function tzd(e){return e.lineno!==void 0&&e.lineno>YLd||e.colno!==void 0&&e.colno>JLd}function rzd(e,t){let r=M8r.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 nzd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=djc(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+cxo:(i.push(n),n=djc(o)),t++}return i}function djc(e){return[yjc(e),bjc(e)]}function yjc(e){return Math.max(1,e-cxo)}function bjc(e){return e+cxo}function izd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function ozd(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 szd(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 Ejc(e,t){globalThis.process?.on("uncaughtException",szd(e,t))}function vjc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var azd=2e3,_W=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new S8r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return Uwo(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()&&(Ejc(this.onException.bind(this),this.onFatalError.bind(this)),vjc(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(azd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var Ijc="5.29.1";var $Ut={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function Cjc(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 czd=6e4,uzd=1152921504606847e3,lzd=["is_not"],Pit=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Md=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},H$=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},L8r=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 H$||u instanceof Md?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 H$||u instanceof Md?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 Md("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 Md("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 Md(`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 Md("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Md(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Md(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Md(`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 Md(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Md(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Md(`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 H$)throw l;if(l instanceof Md)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Md("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"?Bjc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):Tjc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await wjc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await wjc(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(czd,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 Pit(`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 Pit(`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 Pit(`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 Pit&&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=sfe(()=>{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 wjc(e,t,r=""){let n=await Cjc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/uzd}function Tjc(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 Md("Operator is_not_set is not supported")}else throw new Md(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!lzd.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 xjc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return xjc(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 Md("Date operations cannot be performed on boolean values");let u=hzd(String(i));if(u==null&&(u=Sjc(i)),u==null)throw new Md(`Invalid date: ${i}`);let l=Sjc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return EV(MO(String(s)),MO(String(i)))===0;case"semver_neq":return EV(MO(String(s)),MO(String(i)))!==0;case"semver_gt":return EV(MO(String(s)),MO(String(i)))>0;case"semver_gte":return EV(MO(String(s)),MO(String(i)))>=0;case"semver_lt":return EV(MO(String(s)),MO(String(i)))<0;case"semver_lte":return EV(MO(String(s)),MO(String(i)))<=0;case"semver_tilde":{let u=MO(String(s)),{lower:l,upper:p}=fzd(String(i));return EV(u,l)>=0&&EV(u,p)<0}case"semver_caret":{let u=MO(String(s)),{lower:l,upper:p}=dzd(String(i));return EV(u,l)>=0&&EV(u,p)<0}case"semver_wildcard":{let u=MO(String(s)),{lower:l,upper:p}=mzd(String(i));return EV(u,l)>=0&&EV(u,p)<0}default:throw new Md(`Unknown operator: ${o}`)}}function pzd(e,t){if(!(e in t))throw new H$(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function Bjc(e,t,r,n=!1){let i=String(e.value);pzd(i,r);let o=r[i];return Ojc(o,t,r,n)}function Ojc(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=Ojc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof H$)throw c;if(c instanceof Md)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Md("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=Bjc(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=Tjc(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 H$)throw c;if(c instanceof Md)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Md("can't match cohort without a given cohort property value");return i==="AND"}function xjc(e){try{return new RegExp(e),!0}catch{return!1}}function MO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Md(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Md(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function EV(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 fzd(e){let t=MO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function dzd(e){let t=MO(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 mzd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Md(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Md(`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 Md(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function Sjc(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 Md(`${e} is in an invalid date format`)}throw new Md(`The date provided ${e} must be a string, number, or date object`)}function hzd(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 z8r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var gzd=100,Pjc=3e4,Azd=5e4,yzd=50,bzd=500,U8r=class extends ZUt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new z8r,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,gzd):Pjc,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 L8r({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 _W(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||Azd}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??bzd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??yzd;this._waitUntilCycle.timer=sfe(()=>{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 Ijc}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=Pjc){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 B=this._flagOverrides[t];if(B===void 0)return;let O=this._payloadOverrides?.[t];return{key:t,enabled:B!==!1,variant:typeof B=="string"?B:void 0,payload:O}}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,A,y,I,w,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let B=this.featureFlagsPoller?.featureFlagsByKey[t];if(B)try{let O=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(B,d,{matchValue:i});if(O){m=!0;let N=O.value;I=B.id,C="Evaluated locally",f={key:t,enabled:N!==!1,variant:typeof N=="string"?N:void 0,payload:O.payload??void 0}}}catch(O){if(O instanceof H$||O instanceof Md)this._logger?.info(`${O.name} when computing flag locally: ${t}: ${O.message}`);else throw O}}if(!m&&!c){let B=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(B===void 0)y=$Ut.UNKNOWN_ERROR;else{h=B.requestId,A=B.evaluatedAt;let O=[];B.errorsWhileComputingFlags&&O.push($Ut.ERRORS_WHILE_COMPUTING),B.quotaLimited?.includes("feature_flags")&&O.push($Ut.QUOTA_LIMITED);let N=B.flags[t];if(N===void 0)O.push($Ut.FLAG_MISSING);else{I=N.metadata?.id,w=N.metadata?.version,C=N.reason?.description??N.reason?.code;let P;if(N.metadata?.payload!==void 0)try{P=JSON.parse(N.metadata.payload)}catch{P=N.metadata.payload}f={key:t,enabled:N.enabled,variant:N.variant,payload:P}}O.length>0&&(y=O.join(","))}}if(o){let B=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,O=`${t}_${B}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(O)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(O):this.distinctIdHasSentFlagCalls[r]=[O];let N={$feature_flag:t,$feature_flag_response:B,$feature_flag_id:I,$feature_flag_version:w,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:B,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(N.$feature_flag_definitions_loaded_at=P)}y&&(N.$feature_flag_error=y),this.capture({distinctId:r,event:"$feature_flag_called",properties:N,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={},A=!0;if(f&&(m=f.response,h=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},h={...h,...y.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=sfe(()=>{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(MNc(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(!_W.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(_W.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!_W.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(_W.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=MIe(),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 A={};if(h)for(let[I,w]of Object.entries(h))A[`$feature/${I}`]=w;let y=Object.keys(h||{}).filter(I=>h?.[I]!==!1).sort();return y.length>0&&(A.$active_feature_flags=y),A}).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"&&FNc(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 Djc=require("async_hooks"),_8r=class{constructor(){this.storage=new Djc.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 Rjc="posthog-node";function Ezd(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[uxo.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 uxo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=Rjc,this.name=Rjc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(Ezd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};_W.errorPropertiesBuilder=new XQ.ErrorPropertiesBuilder([new XQ.EventCoercer,new XQ.ErrorCoercer,new XQ.ObjectCoercer,new XQ.StringCoercer,new XQ.PrimitiveCoercer],XQ.createStackParser("node:javascript",XQ.nodeStackLineParser),[BNc(),Ajc]);var LIe=class extends U8r{getLibraryId(){return"posthog-node"}initializeContext(){return new _8r}};var V8r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new LIe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.17.1",usingAccessToken:!0,...gFe()}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var e_t=class{async sendEvent(){}async identify(){}async flush(){}};rr();var Dit=require("fs/promises"),Fjc=require("os"),kjc=require("path");var vzd="id",Izd=".fern",t_t=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new LIe(r),this.userId=t==null?void 0:Sbo(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:"5.17.1",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{},...gFe()}})}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 Lf({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=nt(Yt.of((0,Fjc.homedir)()),Fe.of(Izd),Fe.of(vzd));await ar(t)||(await(0,Dit.mkdir)((0,kjc.dirname)(t),{recursive:!0}),await(0,Dit.writeFile)(t,NQ())),this.persistedDistinctId=(await(0,Dit.readFile)(t)).toString()}return this.persistedDistinctId}};var lxo;async function r_t(){return lxo==null&&(lxo=await Czd()),lxo}async function Czd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new e_t;let r=await $Lr();return r!=null?new t_t({token:r,posthogApiKey:e}):await O$()!=null?new V8r({posthogApiKey:e}):new t_t({token:void 0,posthogApiKey:e})}catch{return new e_t}}Ut();var n_t=xe(require("process"),1);rGe();var Qjc=xe(wlo(),1),Mjc=xe(jjc(),1);function $1(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=xG(e),e.length===0))return 0;e=e.replace((0,Mjc.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(Qjc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function q8r(e){let t=0;for(let r of e.split(`
3047
3047
  `))t=Math.max(t,$1(r));return t}var iQc=xe(fxo(),1);var xzd=/[\p{Lu}]/u,Szd=/[\p{Ll}]/u,Ujc=/^[\p{Lu}](?![\p{Lu}])/gu,qjc=/([\p{Alpha}\p{N}_]|$)/u,dxo=/[_.\- ]+/,Tzd=new RegExp("^"+dxo.source),_jc=new RegExp(dxo.source+qjc.source,"gu"),Vjc=new RegExp("\\d+"+qjc.source,"gu"),Bzd=(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&&xzd.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&Szd.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},Ozd=(e,t)=>(Ujc.lastIndex=0,e.replace(Ujc,r=>t(r))),Pzd=(e,t)=>(_jc.lastIndex=0,Vjc.lastIndex=0,e.replace(_jc,(r,n)=>t(n)).replace(Vjc,r=>t(r)));function mxo(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?dxo.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=Bzd(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(Tzd,""),e=t.preserveConsecutiveUppercase?Ozd(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),Pzd(e,n))}var yxo=xe(Wjc(),1);rGe();var Hjc=(e=0)=>t=>`\x1B[${t+e}m`,Kjc=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,Jjc=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,H0={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]}},VH0=Object.keys(H0.modifier),kzd=Object.keys(H0.color),Nzd=Object.keys(H0.bgColor),qH0=[...kzd,...Nzd];function jzd(){let e=new Map;for(let[t,r]of Object.entries(H0)){for(let[n,i]of Object.entries(r))H0[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=H0[n],e.set(i[0],i[1]);Object.defineProperty(H0,t,{value:r,enumerable:!1})}return Object.defineProperty(H0,"codes",{value:e,enumerable:!1}),H0.color.close="\x1B[39m",H0.bgColor.close="\x1B[49m",H0.color.ansi=Hjc(),H0.color.ansi256=Kjc(),H0.color.ansi16m=Jjc(),H0.bgColor.ansi=Hjc(10),H0.bgColor.ansi256=Kjc(10),H0.bgColor.ansi16m=Jjc(10),Object.defineProperties(H0,{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=>H0.rgbToAnsi256(...H0.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)=>H0.ansi256ToAnsi(H0.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>H0.ansi256ToAnsi(H0.hexToAnsi256(t)),enumerable:!1}}),H0}var Qzd=jzd(),Yjc=Qzd;var G8r=new Set(["\x1B","\x9B"]),Mzd=39,gxo="\x07",$jc="[",Lzd="]",eQc="m",Axo=`${Lzd}8;;`,Xjc=e=>`${G8r.values().next().value}${$jc}${e}${eQc}`,Zjc=e=>`${G8r.values().next().value}${Axo}${e}${gxo}`,zzd=e=>e.split(" ").map(t=>$1(t)),hxo=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=$1(xG(e[e.length-1]));for(let[a,c]of n.entries()){let u=$1(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),G8r.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(Axo)),i){o?c===gxo&&(i=!1,o=!1):c===eQc&&(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())},Uzd=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!($1(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},_zd=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=zzd(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=$1(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(""),hxo(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){hxo(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){hxo(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>Uzd(u)));let c=[...a.join(`
3048
3048
  `)];for(let[u,l]of c.entries()){if(n+=l,G8r.has(l)){let{groups:d}=new RegExp(`(?:\\${$jc}(?<code>\\d+)m|\\${Axo}(?<uri>.*)${gxo})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===Mzd?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=Yjc.codes.get(Number(i));c[u+1]===`
3049
3049
  `?(o&&(n+=Zjc("")),i&&p&&(n+=Xjc(p))):l===`
@@ -3628,7 +3628,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
3628
3628
  Add a 'docs:' section to your fern.yml to get started.`,code:Q.Code.ConfigError});let o=await new $Oe({context:t}).check({workspace:n,strict:r.strict}),s=new Set(o.mdxParseErrors.map(l=>l.displayRelativeFilepath)),a=new Set(o.mdxParseErrors.map(l=>l.rawMessage)),c=o.violations.filter(l=>!(s.size>0&&iwm(l,s,a))),u=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let l=this.buildJsonResponse({result:o,filteredViolations:c,hasErrors:u});if(t.stdout.info(JSON.stringify(l,null,2)),u)throw new Q({code:Q.Code.ValidationError});return}if(c.length>0)for(let l of c){let p=l.severity==="warning"?ve.yellow:ve.red;process.stderr.write(`${p(`${l.displayRelativeFilepath}:${l.line}:${l.column}: ${l.message}`)}
3629
3629
  `)}if(o.mdxParseErrors.length>0){for(let p of o.mdxParseErrors)t.stderr.info(`
3630
3630
  ${p.toString()}
3631
- `);process.stdout.isTTY===!0&&!kKn()&&await $Xn(t,o.mdxParseErrors)}if(u)throw new Q({code:Q.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${En.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(`${En.success} ${ve.green("All checks passed")}`)}buildJsonResponse({result:t,filteredViolations:r,hasErrors:n}){let i={};return(r.length>0||t.mdxParseErrors.length>0)&&(i.docs=[...r.map(o=>X$(o)),...t.mdxParseErrors.map(o=>({severity:"error",rule:o.code.code,filepath:o.displayRelativeFilepath,...o.line!=null?{line:o.line}:{},...o.column!=null?{column:o.column}:{},message:`[${o.code.code}] ${o.code.title}: ${o.rawMessage}`}))]),{success:!n,results:i}}};function iwm(e,t,r){if(!/failed to parse|failed to initialize/i.test(e.message))return!1;for(let n of r)if(n.length>0&&e.message.includes(n))return!0;for(let n of t){if(e.message.includes(n))return!0;let i=n.split("/").filter(Boolean);for(let o=i.length;o>=2;o--){let s=i.slice(i.length-o).join("/");if(e.message.includes(s))return!0}if(i.length===1){let o=i[0];if(o!=null&&e.message.includes(o))return!0}}return!1}function pzo(e){let t=new lzo;fo(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 Uou=xe(require("net"),1),_ou=xe(require("os"),1),eZn=class extends Error{constructor(t){super(`${t} is locked`)}},wbt={old:new Set,young:new Set},owm=1e3*15,Vou=new Set;var c7t,swm=()=>{let e=_ou.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},Lou=e=>new Promise((t,r)=>{let n=Uou.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),zou=async(e,t)=>{if(e.host||e.port===0)return Lou(e);for(let r of t)try{await Lou({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},awm=e=>wbt.old.has(e)||wbt.young.has(e)||Vou.has(e),cwm=function*(e){e&&(yield*e),yield 0};async function tPe(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??{};c7t===void 0&&(c7t=setTimeout(()=>{c7t=void 0,wbt.old=wbt.young,wbt.young=new Set},owm),c7t.unref&&c7t.unref());let o=swm();for(let s of cwm(t))try{if(r.has(s))continue;let a=await zou({...i,port:s},o);for(;awm(a);){if(s!==0)throw new eZn(s);a=await zou({...i,port:s},o)}return n?Vou.add(a):wbt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof eZn))throw a}throw new Error("No available ports found")}var Wou=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,qou="docs.buildwithfern.com",Gou=62;function I4e(e){let t=e.toLowerCase().trim();t.startsWith("https://")?t=t.slice(8):t.startsWith("http://")&&(t=t.slice(7));let r=t.indexOf("/");return r!==-1&&(t=t.slice(0,r)),Wou.test(t)}function Hou(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function u7t({orgId:e,previewId:t}){let r=Hou(t),n=`${e}-preview-${r}.${qou}`;if(n.length<=Gou)return n;let i=`${e}-preview-`,o=Gou-i.length;if(o<8)throw new Q({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:Q.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${qou}`}Ut();ng();rr();Jx();var Y_o=require("child_process"),dyu=xe(mzo(),1),X_o=xe(zZn(),1),Z_o=xe(require("fs"),1),K4e=require("fs/promises"),myu=xe(require("http"),1),tVo=xe(require("path"),1);var Glu=require("events"),GZn=xe(require("fs"),1),R4e=xe(require("path"),1);var Tlu=xe(require("os"),1),Blu=300,cPe=20,k7t=1e7,Olu=Tlu.default.platform();var CPm=Olu==="darwin",F4o=Olu==="win32",uPe=CPm||F4o,Plu=3e3,Dlu=2e4,k4o=1250;var $ne;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})($ne||($ne={}));var D4e;(function(e){e.CHANGE="change",e.RENAME="rename"})(D4e||(D4e={}));var N7t;(function(e){e.CHANGE="change",e.ERROR="error"})(N7t||(N7t={}));var _c;(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"})(_c||(_c={}));var vN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(vN||(vN={}));var wPm=(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 C=Date.now(),x=C-c,B=C-u,O=x>=t||B>=o;return[C,O]},p=C=>{if(u=C,!s)return;let x=s;s=void 0,e.apply(void 0,x)},d=()=>{I(0)},f=()=>{a&&(d(),p(Date.now()))},m=C=>{if(u=C,n)return p(C)},h=C=>{if(i&&s)return p(C);s=void 0},A=()=>{a=void 0;let[C,x]=l();return x?h(C):y(C)},y=C=>{let x=C-c,B=C-u,O=t-x,N=o-B,P=Math.min(O,N);return I(P)},I=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},w=(...C)=>{let[x,B]=l(),O=!!a;if(s=C,c=x,(B||!a)&&I(t),B)return O?p(x):m(x)};return w.cancel=d,w.flush=f,w},UZn=wPm;var M4o=xe(require("fs"),1),VZn=xe(require("path"),1);var zd=xe(require("fs"),1),eP=require("util");var Tde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},eie=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var N4o=xe(require("process"),1),Rlu=N4o.default.getuid?!N4o.default.getuid():!1,Flu=1e4,dM=()=>{};var j7t={isChangeErrorOk:e=>{if(!j7t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!Rlu&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!j7t.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(!j7t.isNodeError(e))throw e;if(!j7t.isChangeErrorOk(e))throw e}},CC=j7t;var j4o=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=Flu,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()}}}}},klu=new j4o;var Bde=(e,t)=>function(n){return function i(...o){return klu.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)})}},Ode=(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 xPm={attempt:{chmod:Tde((0,eP.promisify)(zd.default.chmod),CC.onChangeError),chown:Tde((0,eP.promisify)(zd.default.chown),CC.onChangeError),close:Tde((0,eP.promisify)(zd.default.close),dM),fsync:Tde((0,eP.promisify)(zd.default.fsync),dM),mkdir:Tde((0,eP.promisify)(zd.default.mkdir),dM),realpath:Tde((0,eP.promisify)(zd.default.realpath),dM),stat:Tde((0,eP.promisify)(zd.default.stat),dM),unlink:Tde((0,eP.promisify)(zd.default.unlink),dM),chmodSync:eie(zd.default.chmodSync,CC.onChangeError),chownSync:eie(zd.default.chownSync,CC.onChangeError),closeSync:eie(zd.default.closeSync,dM),existsSync:eie(zd.default.existsSync,dM),fsyncSync:eie(zd.default.fsync,dM),mkdirSync:eie(zd.default.mkdirSync,dM),realpathSync:eie(zd.default.realpathSync,dM),statSync:eie(zd.default.statSync,dM),unlinkSync:eie(zd.default.unlinkSync,dM)},retry:{close:Bde((0,eP.promisify)(zd.default.close),CC.isRetriableError),fsync:Bde((0,eP.promisify)(zd.default.fsync),CC.isRetriableError),open:Bde((0,eP.promisify)(zd.default.open),CC.isRetriableError),readFile:Bde((0,eP.promisify)(zd.default.readFile),CC.isRetriableError),rename:Bde((0,eP.promisify)(zd.default.rename),CC.isRetriableError),stat:Bde((0,eP.promisify)(zd.default.stat),CC.isRetriableError),write:Bde((0,eP.promisify)(zd.default.write),CC.isRetriableError),writeFile:Bde((0,eP.promisify)(zd.default.writeFile),CC.isRetriableError),closeSync:Ode(zd.default.closeSync,CC.isRetriableError),fsyncSync:Ode(zd.default.fsyncSync,CC.isRetriableError),openSync:Ode(zd.default.openSync,CC.isRetriableError),readFileSync:Ode(zd.default.readFileSync,CC.isRetriableError),renameSync:Ode(zd.default.renameSync,CC.isRetriableError),statSync:Ode(zd.default.statSync,CC.isRetriableError),writeSync:Ode(zd.default.writeSync,CC.isRetriableError),writeFileSync:Ode(zd.default.writeFileSync,CC.isRetriableError)}},Nlu=xPm;var _Zn=xe(require("fs"),1),Q7t=xe(require("path"),1);var Q4o=()=>{};var SPm=()=>{let e=Q4o,t=Q4o,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}},jlu=SPm;var TPm=()=>{let{promise:e,resolve:t,isPending:r}=jlu(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},Qlu=TPm;var Mlu={then:e=>{e()}};var Llu=e=>Array.isArray(e)?e:[e],zlu=e=>typeof e=="function";var BPm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=Llu(o).map(oe=>zlu(oe)?oe:ae=>oe.test(ae)),a=oe=>s.some(ae=>ae(oe)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],y=new Set,I={},w={},C=new Set,x={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},B={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:y,symlinksNamesToPaths:I,map:w},{promise:O,increment:N,decrement:P}=Qlu(),U=0,X=(oe,ae,we,Ie)=>{C.has(ae)||U>=i||(U+=1,oe.directories.push(ae),oe.directoriesNames.add(we),l.push(ae),p.add(we),d.propertyIsEnumerable(we)||(d[we]=[]),d[we].push(ae),C.add(ae),!(Ie>=n)&&(U>=i||he(ae,Ie+1)))},$=(oe,ae,we)=>{C.has(ae)||U>=i||(U+=1,oe.files.push(ae),oe.filesNames.add(we),f.push(ae),m.add(we),h.propertyIsEnumerable(we)||(h[we]=[]),h[we].push(ae),C.add(ae))},ne=(oe,ae,we,Ie)=>{C.has(ae)||U>=i||(U+=1,oe.symlinks.push(ae),oe.symlinksNames.add(we),A.push(ae),y.add(we),I.propertyIsEnumerable(we)||(I[we]=[]),I[we].push(ae),C.add(ae),r&&(Ie>=n||U>=i||ke(ae,Ie+1)))},me=(oe,ae,we,Ie,Ne)=>{c.aborted||a(ae)||(Ie.isDirectory()?X(oe,ae,we,Ne):Ie.isFile()?$(oe,ae,we):Ie.isSymbolicLink()&&ne(oe,ae,we,Ne))},ye=(oe,ae,we,Ie)=>{if(c.aborted)return;let Ne=ae===Q7t.default.sep?"":Q7t.default.sep,qe=we.name,pt=`${ae}${Ne}${qe}`;a(pt)||(we.isDirectory()?X(oe,pt,qe,Ie):we.isFile()?$(oe,pt,qe):we.isSymbolicLink()&&ne(oe,pt,qe,Ie))},ce=(oe,ae,we,Ie)=>{for(let Ne=0,qe=we.length;Ne<qe;Ne++)ye(oe,ae,we[Ne],Ie)},he=(oe,ae)=>{c.aborted||ae>n||U>=i||(N(),_Zn.default.readdir(oe,{withFileTypes:!0},(we,Ie)=>{if(we||c.aborted||!Ie.length)return P();(u(Ie)||Mlu).then(()=>{let qe=w[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ce(qe,oe,Ie,ae),P()})}))},ke=(oe,ae)=>{N(),_Zn.default.realpath(oe,(we,Ie)=>{if(we||c.aborted)return P();_Zn.default.stat(Ie,(Ne,qe)=>{if(Ne||c.aborted)return P();let pt=Q7t.default.basename(Ie),it=w[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(it,Ie,pt,qe,ae),P()})})};return(async(oe,ae=1)=>(oe=Q7t.default.normalize(oe),C.add(oe),he(oe,ae),await O,c.aborted?x:B))(e)},Ulu=BPm;var tie={lang:{debounce:UZn,attempt:e=>{try{return e()}catch(t){return tie.lang.castError(t)}},castArray:e=>tie.lang.isArray(e)?e:[e],castError:e=>tie.lang.isError(e)?e:tie.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(tie.lang.isNaN(e))return tie.lang.isNaN(t);if(tie.lang.isPrimitive(e)||tie.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(VZn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?M4o.default.realpathSync.native(e):M4o.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===VZn.default.sep&&t.length-e.length>VZn.default.sep.length,poll:(e,t=Dlu)=>Nlu.retry.stat(t)(e,{bigint:!0}).catch(tie.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 Ulu(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},mp=tie;var qZn=xe(require("path"),1);var L4o=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||mp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=Blu){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=mp.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===_c.CHANGE&&a===_c.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===_c.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===_c.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??cPe:Math.min(1,this.options.depth??cPe),s=this.options.limit??k7t,[a,c]=await mp.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())mp.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(_c.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!uPe&&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(_c.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(_c.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(qZn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(qZn.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(_c.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===_c.ADD?this.onTargetAdd(n):r===_c.ADD_DIR?this.onTargetAddDir(n):r===_c.CHANGE?this.onTargetChange(n):r===_c.UNLINK?this.onTargetUnlink(n):r===_c.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=D4e.CHANGE,r){if(this.watcher.isClosed())return;let n=qZn.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){F4o&&t.code==="EPERM"?this.onWatcherChange(D4e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(N7t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(N7t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(D4e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&uPe&&this.options.native!==!1?this.options.depth??cPe:Math.min(1,this.options.depth??cPe),n=this.options.limit??k7t,[i,o]=await mp.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(D4e.CHANGE,a,t)}))}}},_lu=L4o;var IN={interval:100,intervalId:void 0,fns:new Map,init:()=>{IN.intervalId||(IN.intervalId=setInterval(IN.resolve,IN.interval))},reset:()=>{IN.intervalId&&(clearInterval(IN.intervalId),delete IN.intervalId)},add:(e,t)=>{IN.fns.set(e,Date.now()+t),IN.init()},remove:e=>{IN.fns.delete(e)},resolve:()=>{if(!IN.fns.size)return IN.reset();let e=Date.now();for(let[t,r]of IN.fns)r>=e||(IN.remove(t),t())}},M7t=IN;var L7t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=k4o){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(mp.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),M7t.remove(u)},u=()=>{c(),a()};M7t.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=k4o){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),M7t.remove(u)},u=()=>{c(),a()};M7t.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,_c.ADD,$ne.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,_c.ADD_DIR,$ne.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,_c.UNLINK,$ne.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,_c.UNLINK_DIR,$ne.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}}};L7t.DIR_EVENTS={add:_c.ADD_DIR,rename:_c.RENAME_DIR,unlink:_c.UNLINK_DIR};L7t.FILE_EVENTS={add:_c.ADD,change:_c.CHANGE,rename:_c.RENAME,unlink:_c.UNLINK};var Vlu=L7t;var z4o=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(mp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(mp.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(mp.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(mp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return mp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);mp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},U4o=z4o;var _4o=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}},qlu=_4o;var V4o=class{constructor(){this.inos={},this.paths=new U4o,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 mp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new qlu(n)}reset(){this.inos={},this.paths=new U4o,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,_c.ADD,i),[_c.ADD];if(i.isDirectory())return this.updateIno(t,_c.ADD_DIR,i),[_c.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,_c.UNLINK,n),[_c.UNLINK];if(n.isDirectory())return this.updateIno(t,_c.UNLINK_DIR,n),[_c.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,_c.CHANGE,i),[_c.CHANGE]);if(i.isDirectory())return this.updateIno(t,_c.UNLINK,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK,_c.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD,i),[_c.UNLINK_DIR,_c.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK_DIR,_c.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?$ne.FILE:$ne.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)}}},q4o=V4o;var G4o=class e extends Glu.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(vN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(vN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(vN.READY,i)),this._locker=new Vlu(this),this._roots=new Set,this._poller=new q4o,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&&(mp.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(vN.CLOSE))}error(t){if(this.isClosed())return!1;let r=mp.lang.castError(t);return this.emit(vN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(vN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(vN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&mp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&mp.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)mp.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 _lu(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=mp.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=R4e.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??cPe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&uPe&&l.options.native!==!1)))return!0;if(!uPe)break;let u=R4e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=mp.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||uPe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:GZn.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=R4e.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||uPe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??cPe,a=r.limit??k7t,[c]=await mp.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=mp.fs.getDepth(t);for(let p of c){let d=mp.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(vN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(vN.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=R4e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new q4o,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 mp.lang.noop;if(this.pollerExists(t,r))return mp.lang.noop;let i={...r,interval:r.pollingInterval??Plu},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(vN.CLOSE,a),GZn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(vN.CLOSE,a),GZn.default.unwatchFile(t,n)};return mp.lang.attempt(s),()=>mp.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=mp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!mp.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=R4e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await mp.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=R4e.default.dirname(t);return(await mp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=mp.lang.noop){if(mp.lang.isFunction(t))return this.watch([],{},t);if(mp.lang.isUndefined(t))return this.watch([],r,n);if(mp.lang.isFunction(r))return this.watch(t,{},r);if(mp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=mp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==mp.lang.noop&&this.on(vN.ALL,n),r.readdirMap=void 0,this.ready())}},WZn=G4o;a$n();rr();var w7=require("fs/promises"),Ypu=require("os"),mUo=xe(require("path"),1),eRm=".fern",tRm="logs",dUo=100*1024*1024;function rRm(){return"cli@5.17.0"}var M4e=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=nt(Yt.of((0,Ypu.homedir)()),Fe.of(eRm)),n=nt(r,Fe.of(tRm));await ar(n)||await(0,w7.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=nt(n,Fe.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${mUo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
3631
+ `);process.stdout.isTTY===!0&&!kKn()&&await $Xn(t,o.mdxParseErrors)}if(u)throw new Q({code:Q.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${En.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(`${En.success} ${ve.green("All checks passed")}`)}buildJsonResponse({result:t,filteredViolations:r,hasErrors:n}){let i={};return(r.length>0||t.mdxParseErrors.length>0)&&(i.docs=[...r.map(o=>X$(o)),...t.mdxParseErrors.map(o=>({severity:"error",rule:o.code.code,filepath:o.displayRelativeFilepath,...o.line!=null?{line:o.line}:{},...o.column!=null?{column:o.column}:{},message:`[${o.code.code}] ${o.code.title}: ${o.rawMessage}`}))]),{success:!n,results:i}}};function iwm(e,t,r){if(!/failed to parse|failed to initialize/i.test(e.message))return!1;for(let n of r)if(n.length>0&&e.message.includes(n))return!0;for(let n of t){if(e.message.includes(n))return!0;let i=n.split("/").filter(Boolean);for(let o=i.length;o>=2;o--){let s=i.slice(i.length-o).join("/");if(e.message.includes(s))return!0}if(i.length===1){let o=i[0];if(o!=null&&e.message.includes(o))return!0}}return!1}function pzo(e){let t=new lzo;fo(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 Uou=xe(require("net"),1),_ou=xe(require("os"),1),eZn=class extends Error{constructor(t){super(`${t} is locked`)}},wbt={old:new Set,young:new Set},owm=1e3*15,Vou=new Set;var c7t,swm=()=>{let e=_ou.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},Lou=e=>new Promise((t,r)=>{let n=Uou.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),zou=async(e,t)=>{if(e.host||e.port===0)return Lou(e);for(let r of t)try{await Lou({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},awm=e=>wbt.old.has(e)||wbt.young.has(e)||Vou.has(e),cwm=function*(e){e&&(yield*e),yield 0};async function tPe(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??{};c7t===void 0&&(c7t=setTimeout(()=>{c7t=void 0,wbt.old=wbt.young,wbt.young=new Set},owm),c7t.unref&&c7t.unref());let o=swm();for(let s of cwm(t))try{if(r.has(s))continue;let a=await zou({...i,port:s},o);for(;awm(a);){if(s!==0)throw new eZn(s);a=await zou({...i,port:s},o)}return n?Vou.add(a):wbt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof eZn))throw a}throw new Error("No available ports found")}var Wou=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,qou="docs.buildwithfern.com",Gou=62;function I4e(e){let t=e.toLowerCase().trim();t.startsWith("https://")?t=t.slice(8):t.startsWith("http://")&&(t=t.slice(7));let r=t.indexOf("/");return r!==-1&&(t=t.slice(0,r)),Wou.test(t)}function Hou(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function u7t({orgId:e,previewId:t}){let r=Hou(t),n=`${e}-preview-${r}.${qou}`;if(n.length<=Gou)return n;let i=`${e}-preview-`,o=Gou-i.length;if(o<8)throw new Q({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:Q.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${qou}`}Ut();ng();rr();Jx();var Y_o=require("child_process"),dyu=xe(mzo(),1),X_o=xe(zZn(),1),Z_o=xe(require("fs"),1),K4e=require("fs/promises"),myu=xe(require("http"),1),tVo=xe(require("path"),1);var Glu=require("events"),GZn=xe(require("fs"),1),R4e=xe(require("path"),1);var Tlu=xe(require("os"),1),Blu=300,cPe=20,k7t=1e7,Olu=Tlu.default.platform();var CPm=Olu==="darwin",F4o=Olu==="win32",uPe=CPm||F4o,Plu=3e3,Dlu=2e4,k4o=1250;var $ne;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})($ne||($ne={}));var D4e;(function(e){e.CHANGE="change",e.RENAME="rename"})(D4e||(D4e={}));var N7t;(function(e){e.CHANGE="change",e.ERROR="error"})(N7t||(N7t={}));var _c;(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"})(_c||(_c={}));var vN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(vN||(vN={}));var wPm=(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 C=Date.now(),x=C-c,B=C-u,O=x>=t||B>=o;return[C,O]},p=C=>{if(u=C,!s)return;let x=s;s=void 0,e.apply(void 0,x)},d=()=>{I(0)},f=()=>{a&&(d(),p(Date.now()))},m=C=>{if(u=C,n)return p(C)},h=C=>{if(i&&s)return p(C);s=void 0},A=()=>{a=void 0;let[C,x]=l();return x?h(C):y(C)},y=C=>{let x=C-c,B=C-u,O=t-x,N=o-B,P=Math.min(O,N);return I(P)},I=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},w=(...C)=>{let[x,B]=l(),O=!!a;if(s=C,c=x,(B||!a)&&I(t),B)return O?p(x):m(x)};return w.cancel=d,w.flush=f,w},UZn=wPm;var M4o=xe(require("fs"),1),VZn=xe(require("path"),1);var zd=xe(require("fs"),1),eP=require("util");var Tde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},eie=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var N4o=xe(require("process"),1),Rlu=N4o.default.getuid?!N4o.default.getuid():!1,Flu=1e4,dM=()=>{};var j7t={isChangeErrorOk:e=>{if(!j7t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!Rlu&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!j7t.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(!j7t.isNodeError(e))throw e;if(!j7t.isChangeErrorOk(e))throw e}},CC=j7t;var j4o=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=Flu,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()}}}}},klu=new j4o;var Bde=(e,t)=>function(n){return function i(...o){return klu.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)})}},Ode=(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 xPm={attempt:{chmod:Tde((0,eP.promisify)(zd.default.chmod),CC.onChangeError),chown:Tde((0,eP.promisify)(zd.default.chown),CC.onChangeError),close:Tde((0,eP.promisify)(zd.default.close),dM),fsync:Tde((0,eP.promisify)(zd.default.fsync),dM),mkdir:Tde((0,eP.promisify)(zd.default.mkdir),dM),realpath:Tde((0,eP.promisify)(zd.default.realpath),dM),stat:Tde((0,eP.promisify)(zd.default.stat),dM),unlink:Tde((0,eP.promisify)(zd.default.unlink),dM),chmodSync:eie(zd.default.chmodSync,CC.onChangeError),chownSync:eie(zd.default.chownSync,CC.onChangeError),closeSync:eie(zd.default.closeSync,dM),existsSync:eie(zd.default.existsSync,dM),fsyncSync:eie(zd.default.fsync,dM),mkdirSync:eie(zd.default.mkdirSync,dM),realpathSync:eie(zd.default.realpathSync,dM),statSync:eie(zd.default.statSync,dM),unlinkSync:eie(zd.default.unlinkSync,dM)},retry:{close:Bde((0,eP.promisify)(zd.default.close),CC.isRetriableError),fsync:Bde((0,eP.promisify)(zd.default.fsync),CC.isRetriableError),open:Bde((0,eP.promisify)(zd.default.open),CC.isRetriableError),readFile:Bde((0,eP.promisify)(zd.default.readFile),CC.isRetriableError),rename:Bde((0,eP.promisify)(zd.default.rename),CC.isRetriableError),stat:Bde((0,eP.promisify)(zd.default.stat),CC.isRetriableError),write:Bde((0,eP.promisify)(zd.default.write),CC.isRetriableError),writeFile:Bde((0,eP.promisify)(zd.default.writeFile),CC.isRetriableError),closeSync:Ode(zd.default.closeSync,CC.isRetriableError),fsyncSync:Ode(zd.default.fsyncSync,CC.isRetriableError),openSync:Ode(zd.default.openSync,CC.isRetriableError),readFileSync:Ode(zd.default.readFileSync,CC.isRetriableError),renameSync:Ode(zd.default.renameSync,CC.isRetriableError),statSync:Ode(zd.default.statSync,CC.isRetriableError),writeSync:Ode(zd.default.writeSync,CC.isRetriableError),writeFileSync:Ode(zd.default.writeFileSync,CC.isRetriableError)}},Nlu=xPm;var _Zn=xe(require("fs"),1),Q7t=xe(require("path"),1);var Q4o=()=>{};var SPm=()=>{let e=Q4o,t=Q4o,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}},jlu=SPm;var TPm=()=>{let{promise:e,resolve:t,isPending:r}=jlu(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},Qlu=TPm;var Mlu={then:e=>{e()}};var Llu=e=>Array.isArray(e)?e:[e],zlu=e=>typeof e=="function";var BPm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=Llu(o).map(oe=>zlu(oe)?oe:ae=>oe.test(ae)),a=oe=>s.some(ae=>ae(oe)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],y=new Set,I={},w={},C=new Set,x={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},B={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:y,symlinksNamesToPaths:I,map:w},{promise:O,increment:N,decrement:P}=Qlu(),U=0,X=(oe,ae,we,Ie)=>{C.has(ae)||U>=i||(U+=1,oe.directories.push(ae),oe.directoriesNames.add(we),l.push(ae),p.add(we),d.propertyIsEnumerable(we)||(d[we]=[]),d[we].push(ae),C.add(ae),!(Ie>=n)&&(U>=i||he(ae,Ie+1)))},$=(oe,ae,we)=>{C.has(ae)||U>=i||(U+=1,oe.files.push(ae),oe.filesNames.add(we),f.push(ae),m.add(we),h.propertyIsEnumerable(we)||(h[we]=[]),h[we].push(ae),C.add(ae))},ne=(oe,ae,we,Ie)=>{C.has(ae)||U>=i||(U+=1,oe.symlinks.push(ae),oe.symlinksNames.add(we),A.push(ae),y.add(we),I.propertyIsEnumerable(we)||(I[we]=[]),I[we].push(ae),C.add(ae),r&&(Ie>=n||U>=i||ke(ae,Ie+1)))},me=(oe,ae,we,Ie,Ne)=>{c.aborted||a(ae)||(Ie.isDirectory()?X(oe,ae,we,Ne):Ie.isFile()?$(oe,ae,we):Ie.isSymbolicLink()&&ne(oe,ae,we,Ne))},ye=(oe,ae,we,Ie)=>{if(c.aborted)return;let Ne=ae===Q7t.default.sep?"":Q7t.default.sep,qe=we.name,pt=`${ae}${Ne}${qe}`;a(pt)||(we.isDirectory()?X(oe,pt,qe,Ie):we.isFile()?$(oe,pt,qe):we.isSymbolicLink()&&ne(oe,pt,qe,Ie))},ce=(oe,ae,we,Ie)=>{for(let Ne=0,qe=we.length;Ne<qe;Ne++)ye(oe,ae,we[Ne],Ie)},he=(oe,ae)=>{c.aborted||ae>n||U>=i||(N(),_Zn.default.readdir(oe,{withFileTypes:!0},(we,Ie)=>{if(we||c.aborted||!Ie.length)return P();(u(Ie)||Mlu).then(()=>{let qe=w[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ce(qe,oe,Ie,ae),P()})}))},ke=(oe,ae)=>{N(),_Zn.default.realpath(oe,(we,Ie)=>{if(we||c.aborted)return P();_Zn.default.stat(Ie,(Ne,qe)=>{if(Ne||c.aborted)return P();let pt=Q7t.default.basename(Ie),it=w[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(it,Ie,pt,qe,ae),P()})})};return(async(oe,ae=1)=>(oe=Q7t.default.normalize(oe),C.add(oe),he(oe,ae),await O,c.aborted?x:B))(e)},Ulu=BPm;var tie={lang:{debounce:UZn,attempt:e=>{try{return e()}catch(t){return tie.lang.castError(t)}},castArray:e=>tie.lang.isArray(e)?e:[e],castError:e=>tie.lang.isError(e)?e:tie.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(tie.lang.isNaN(e))return tie.lang.isNaN(t);if(tie.lang.isPrimitive(e)||tie.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(VZn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?M4o.default.realpathSync.native(e):M4o.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===VZn.default.sep&&t.length-e.length>VZn.default.sep.length,poll:(e,t=Dlu)=>Nlu.retry.stat(t)(e,{bigint:!0}).catch(tie.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 Ulu(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},mp=tie;var qZn=xe(require("path"),1);var L4o=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||mp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=Blu){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=mp.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===_c.CHANGE&&a===_c.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===_c.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===_c.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??cPe:Math.min(1,this.options.depth??cPe),s=this.options.limit??k7t,[a,c]=await mp.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())mp.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(_c.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!uPe&&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(_c.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(_c.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(qZn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(qZn.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(_c.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===_c.ADD?this.onTargetAdd(n):r===_c.ADD_DIR?this.onTargetAddDir(n):r===_c.CHANGE?this.onTargetChange(n):r===_c.UNLINK?this.onTargetUnlink(n):r===_c.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=D4e.CHANGE,r){if(this.watcher.isClosed())return;let n=qZn.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){F4o&&t.code==="EPERM"?this.onWatcherChange(D4e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(N7t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(N7t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(D4e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&uPe&&this.options.native!==!1?this.options.depth??cPe:Math.min(1,this.options.depth??cPe),n=this.options.limit??k7t,[i,o]=await mp.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(D4e.CHANGE,a,t)}))}}},_lu=L4o;var IN={interval:100,intervalId:void 0,fns:new Map,init:()=>{IN.intervalId||(IN.intervalId=setInterval(IN.resolve,IN.interval))},reset:()=>{IN.intervalId&&(clearInterval(IN.intervalId),delete IN.intervalId)},add:(e,t)=>{IN.fns.set(e,Date.now()+t),IN.init()},remove:e=>{IN.fns.delete(e)},resolve:()=>{if(!IN.fns.size)return IN.reset();let e=Date.now();for(let[t,r]of IN.fns)r>=e||(IN.remove(t),t())}},M7t=IN;var L7t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=k4o){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(mp.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),M7t.remove(u)},u=()=>{c(),a()};M7t.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=k4o){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),M7t.remove(u)},u=()=>{c(),a()};M7t.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,_c.ADD,$ne.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,_c.ADD_DIR,$ne.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,_c.UNLINK,$ne.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,_c.UNLINK_DIR,$ne.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}}};L7t.DIR_EVENTS={add:_c.ADD_DIR,rename:_c.RENAME_DIR,unlink:_c.UNLINK_DIR};L7t.FILE_EVENTS={add:_c.ADD,change:_c.CHANGE,rename:_c.RENAME,unlink:_c.UNLINK};var Vlu=L7t;var z4o=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(mp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(mp.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(mp.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(mp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return mp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);mp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},U4o=z4o;var _4o=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}},qlu=_4o;var V4o=class{constructor(){this.inos={},this.paths=new U4o,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 mp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new qlu(n)}reset(){this.inos={},this.paths=new U4o,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,_c.ADD,i),[_c.ADD];if(i.isDirectory())return this.updateIno(t,_c.ADD_DIR,i),[_c.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,_c.UNLINK,n),[_c.UNLINK];if(n.isDirectory())return this.updateIno(t,_c.UNLINK_DIR,n),[_c.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,_c.CHANGE,i),[_c.CHANGE]);if(i.isDirectory())return this.updateIno(t,_c.UNLINK,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK,_c.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD,i),[_c.UNLINK_DIR,_c.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK_DIR,_c.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?$ne.FILE:$ne.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)}}},q4o=V4o;var G4o=class e extends Glu.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(vN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(vN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(vN.READY,i)),this._locker=new Vlu(this),this._roots=new Set,this._poller=new q4o,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&&(mp.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(vN.CLOSE))}error(t){if(this.isClosed())return!1;let r=mp.lang.castError(t);return this.emit(vN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(vN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(vN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&mp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&mp.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)mp.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 _lu(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=mp.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=R4e.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??cPe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&uPe&&l.options.native!==!1)))return!0;if(!uPe)break;let u=R4e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=mp.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||uPe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:GZn.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=R4e.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||uPe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??cPe,a=r.limit??k7t,[c]=await mp.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=mp.fs.getDepth(t);for(let p of c){let d=mp.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(vN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(vN.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=R4e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new q4o,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 mp.lang.noop;if(this.pollerExists(t,r))return mp.lang.noop;let i={...r,interval:r.pollingInterval??Plu},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(vN.CLOSE,a),GZn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(vN.CLOSE,a),GZn.default.unwatchFile(t,n)};return mp.lang.attempt(s),()=>mp.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=mp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!mp.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=R4e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await mp.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=R4e.default.dirname(t);return(await mp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=mp.lang.noop){if(mp.lang.isFunction(t))return this.watch([],{},t);if(mp.lang.isUndefined(t))return this.watch([],r,n);if(mp.lang.isFunction(r))return this.watch(t,{},r);if(mp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=mp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==mp.lang.noop&&this.on(vN.ALL,n),r.readdirMap=void 0,this.ready())}},WZn=G4o;a$n();rr();var w7=require("fs/promises"),Ypu=require("os"),mUo=xe(require("path"),1),eRm=".fern",tRm="logs",dUo=100*1024*1024;function rRm(){return"cli@5.17.1"}var M4e=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=nt(Yt.of((0,Ypu.homedir)()),Fe.of(eRm)),n=nt(r,Fe.of(tRm));await ar(n)||await(0,w7.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=nt(n,Fe.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${mUo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
3632
3632
  `);await(0,w7.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)+`
3633
3633
  `;try{await(0,w7.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:rRm(),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,w7.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=mUo.default.join(t,c);try{let l=await(0,w7.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=dUo/1024/1024;if(o<=dUo){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<=dUo)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,w7.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 c$n={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function Xpu(e){let t=nRm();if(t==null)return;let{port:r,debugLogger:n,getDocsLoadResponse:i,extractLocaleFromPath:o}=e,s=new Map;function a(u){let l=JSON.stringify(u),p=[];for(let[d]of s)try{d.send(l)}catch{p.push(d)}for(let d of p){let f=s.get(d);f&&(clearInterval(f.pingInterval),s.delete(d))}}let c=t.serve({port:r,async fetch(u,l){if(u.method==="OPTIONS")return new Response(null,{status:204,headers:c$n});let p=new URL(u.url);if(u.headers.get("upgrade")?.toLowerCase()==="websocket"){l.upgrade(u,{data:{connectionId:`${Date.now()}`}});return}if(u.method==="POST"&&p.pathname==="/v2/registry/docs/load-with-url")try{let f=await u.json(),m=o?.(f?.url);return new Response(JSON.stringify(i(m)),{headers:{"Content-Type":"application/json",...c$n}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...c$n}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:c$n}):new Response("Not Found",{status:404})},websocket:{open(u){let{connectionId:l}=u.data,p=setInterval(()=>{let d=s.get(u);if(!d)return;let f=Date.now();if(f-d.lastPong>9e4){u.close();return}try{u.send(JSON.stringify({type:"ping",timestamp:f}))}catch{u.close()}},3e4);s.set(u,{pingInterval:p,lastPong:Date.now()});try{u.send(JSON.stringify({type:"connected",connectionId:l}))}catch{}},message(u,l){try{let p=JSON.parse(l.toString());if(p.type==="pong"){let d=s.get(u);d&&(d.lastPong=Date.now())}else M4e.isMetricsMessage(p)&&n.logFrontendMetrics(p)}catch{}},close(u){let l=s.get(u);l&&(clearInterval(l.pingInterval),s.delete(u))}}});return{sendData:a,stop:u=>c.stop(u)}}function nRm(){return globalThis.Bun}rr();Jx();var eyu=require("child_process"),vei=xe(wfu(),1),tyu=xe(N_o(),1),dI=require("fs"),hM=require("fs/promises"),ryu=require("os"),mM=xe(require("path"),1),nyu=xe(wx(),1),iyu=xe($Au(),1),H4e=process.platform==="win32",Eei=ve.cyan("[docs]:"),FNm="etag",kNm=23,W_o=e=>e.padEnd(kNm," "),NNm="preview",jNm="app-preview",QNm="bundle",MNm=".next",LNm="standalone",zNm=".fern",UNm="packages/fern-docs/bundle/.next/server/instrumentation.js",_Nm='Cannot find matching keyid: {"signatures":';function VNm(e){try{let r=(0,eyu.execSync)('reg query "HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem" /v LongPathsEnabled',{encoding:"utf-8",timeout:5e3}).match(/LongPathsEnabled\s+REG_DWORD\s+0x(\d+)/i);if(r!=null&&r[1]==="1")return}catch(t){e.debug(`Registry query for LongPathsEnabled failed: ${t}`)}throw new Q({message:`Windows long path support is not enabled. The docs bundle contains deeply nested .pnpm paths that exceed the 260-character MAX_PATH limit.
3634
3634
 
@@ -3813,7 +3813,7 @@ For more information, see https://buildwithfern.com/learn/api-definition/introdu
3813
3813
  ${i.error?.message??"Unknown error"}`,code:Q.Code.ParseError})}rr();var Ryu=require("fs"),Dei=require("fs/promises"),Fyu=require("stream/promises");async function kyu({snippetsS3PreSignedReadUrl:e,absolutePathToLocalSnippetJSON:t,context:r}){try{await kjm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(ve.green(`Downloaded to ${t}`))}catch{r.logger.debug(ve.yellow("Failed to download snippet.json from output."))}}async function kjm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await Ly.get(e,{responseType:"stream"});await ar(t)&&await(0,Dei.rm)(t,{recursive:!0}),await(0,Dei.mkdir)(Pn(t),{recursive:!0}),await(0,Fyu.pipeline)(r.data,(0,Ryu.createWriteStream)(t))}rr();async function Nyu({generatorInvocation:e,context:t}){if(e.absolutePathToLocalOutput==null)return;let r=nt(e.absolutePathToLocalOutput,Fe.of($P));if(await ar(r))return t.logger.debug(`Auto-discovered ${$P} at ${r}`),r}Ut();ng();var rwu=xe(tUe(),1);rr();var Vyu=xe(c3t(),1),Nei=require("fs/promises");Ds();var qyu=xe(Hm(),1),Gyu=require("util"),Wyu=require("zlib");var Xjm=2e3,Uyu=12e4,EVo=5,Zjm=.5,rUe=class e extends Error{retryAfterSeconds;constructor(t){super("Received 429 Too Many Requests"),Object.setPrototypeOf(this,e.prototype),this.retryAfterSeconds=t}};async function _yu({fn:e,retryRateLimited:t,logger:r,onRateLimitedWithoutRetry:n,delayFn:i=o=>new Promise(s=>setTimeout(s,o))}){if(!t)try{return await e()}catch(o){if(o instanceof rUe)return n();throw o}for(let o=0;o<=EVo;o++)try{return await e()}catch(s){if(s instanceof rUe&&o<EVo){let a=Math.min(Xjm*2**o,Uyu),c=s.retryAfterSeconds!=null?s.retryAfterSeconds*1e3:void 0,u=c!=null?Math.max(a,c):a,l=1+(Math.random()-.5)*Zjm,p=Math.round(Math.min(Math.max(u*l,c??0),Uyu));r.warn(`Received 429 Too Many Requests. Retrying in ${(p/1e3).toFixed(1)}s (attempt ${o+1}/${EVo})...`),await i(p)}else throw s}throw new Q({message:"Exceeded maximum retries for 429 Too Many Requests.",code:Q.Code.InternalError})}var $jm=(0,Gyu.promisify)(Wyu.gzip);async function Hyu({projectConfig:e,workspace:t,organization:r,intermediateRepresentation:n,generatorInvocation:i,version:o,context:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignorePath:h,skipFernignore:A,retryRateLimited:y,automationMode:I,autoMerge:w,skipIfNoDiff:C,loginCommand:x="fern login"}){let B;if(A)B="";else if(h!=null)try{B=await(0,Nei.readFile)(h,"utf-8")}catch(N){s.failAndThrow(`Failed to read fernignore file at ${h}: ${N}`,void 0,{code:Q.Code.ConfigError})}let O=await _yu({fn:()=>eQm({projectConfig:e,workspace:t,organization:r,generatorInvocation:i,version:o,context:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,absolutePathToPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignoreContents:B,automationMode:I,autoMerge:w,skipIfNoDiff:C,loginCommand:x}),retryRateLimited:y,logger:s.logger,onRateLimitedWithoutRetry:()=>s.failAndThrow("Received 429 Too Many Requests. Re-run with --retry-rate-limited to automatically retry.",void 0,{code:Q.Code.NetworkError})});return await tQm({intermediateRepresentation:n,job:O,context:s,generatorInvocation:i,irVersionOverride:p}),O}async function eQm({projectConfig:e,workspace:t,organization:r,generatorInvocation:n,version:i,context:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,fiddlePreview:p,pushPreviewBranch:d,fernignoreContents:f,skipIfNoDiff:m,loginCommand:h}){let A=gpe({token:a.value}),y={id:n.name,version:n.version,outputMode:n.outputMode,customConfig:n.config,publishMetadata:n.publishMetadata},I={apiName:t.definition.rootApiFile.contents.name,version:i,organizationName:r,generators:[y],uploadToS3:sQm({outputMode:n.outputMode,generatorInvocation:n,absolutePathToPreview:l,shouldLogS3Url:s}),whitelabel:c,replay:u!=null?{enabled:u.enabled}:void 0,preview:p??l!=null,pushPreviewBranch:d,fernignoreContents:f,skipIfNoDiff:m},w=await A.remoteGen.createJobV3(I);if(!w.ok){let C=w.error;if(C?.content?.reason==="status-code"&&C.content.statusCode===429){let B=iQm(C);throw new rUe(B)}let x=nQm(C);return x!=null?o.failAndThrow(x,void 0,{code:Q.Code.ConfigError}):oQm(C)._visit({illegalApiNameError:()=>o.failAndThrow("API name is invalid: "+t.definition.rootApiFile.contents.name,void 0,{code:Q.Code.ConfigError}),illegalApiVersionError:()=>o.failAndThrow("API version is invalid: "+i,void 0,{code:Q.Code.ConfigError}),cannotPublishToNpmScope:({validScope:B,invalidScope:O})=>o.failAndThrow(`You do not have permission to publish to ${O} (expected ${B})`,void 0,{code:Q.Code.AuthError}),cannotPublishToMavenGroup:({validGroup:B,invalidGroup:O})=>o.failAndThrow(`You do not have permission to publish to ${O} (expected ${B})`,void 0,{code:Q.Code.AuthError}),cannotPublishPypiPackage:({validPrefix:B,invalidPackageName:O})=>o.failAndThrow(`You do not have permission to publish to ${O} (expected ${B})`,void 0,{code:Q.Code.AuthError}),generatorsDoNotExistError:B=>o.failAndThrow("Generators do not exist: "+B.nonExistentGenerators.map(O=>`${O.id}@${O.version}`).join(", "),void 0,{code:Q.Code.ConfigError}),insufficientPermissions:()=>o.failAndThrow(`You do not have permission to run this generator for organization '${r}'. Please run '${h}' to ensure you are logged in with the correct account.
3814
3814
 
3815
3815
  Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`,void 0,{code:Q.Code.AuthError}),orgNotConfiguredForWhitelabel:()=>o.failAndThrow("Your org is not configured for white-labeling. Please reach out to support@buildwithfern.com.",void 0,{code:Q.Code.AuthError}),branchDoesNotExist:B=>o.failAndThrow(`Branch ${B.branch} does not exist in repository ${B.repositoryOwner}/${B.repositoryName}`,void 0,{code:Q.Code.ConfigError}),rateLimitExceeded:()=>{throw new rUe},_other:B=>{o.logger.debug(`Failed to create job: ${JSON.stringify(B)}`);let O=rQm(B);return O!=null?o.failAndThrow(O,void 0,{code:Q.Code.NetworkError}):o.failAndThrow("Failed to create job. Please try again or contact support@buildwithfern.com for assistance.",void 0,{code:Q.Code.NetworkError})}})}return w.body}async function tQm({intermediateRepresentation:e,generatorInvocation:t,job:r,context:n,irVersionOverride:i}){let o=await UMe(t).then(f=>f==null?void 0:"v"+f.toString()),s=i??o,a=s==null?await D5t({intermediateRepresentation:e,context:n,targetGenerator:{name:t.name,version:t.version}}):await ONo({intermediateRepresentation:e,context:n,irVersion:s,targetGenerator:{name:t.name,version:t.version}}),c=new Vyu.default,u=await Uor(a,{onWrite:f=>{n.logger.debug("Wrote IR to disk: "+f)}}),l=new TextEncoder().encode(u),p=await $jm(l);n.logger.debug(`Compressed IR from ${l.byteLength} bytes to ${p.length} bytes (${((1-p.length/l.byteLength)*100).toFixed(1)}% reduction)`),c.append("file",p,{filename:"ir.json",contentType:"application/octet-stream"});let d=(0,qyu.default)(_Me(),`/api/remote-gen/jobs/${r.jobId}/start`);try{await Ly.post(d,c,{headers:c.getHeaders(),maxBodyLength:1/0})}catch(f){let m=f instanceof fmc?f.response?.data:f;n.logger.debug(`POST ${d} failed with ${JSON.stringify(f)}`),n.failAndThrow("Failed to start job",m,{code:Q.Code.NetworkError})}}function rQm(e){let t;if(e?.reason==="status-code"?t=e.body:e?.content?.reason==="status-code"&&(t=e.content.body),typeof t?.content?.message=="string")return t.content.message;if(typeof t?.message=="string")return t.message}function nQm(e){let t=e?.content?.reason==="status-code"?e.content.body:void 0;return t?.error!=="GithubAppNotInstalled"?void 0:typeof t?.content?.message=="string"?t.content.message:`The Fern GitHub App is not installed on ${typeof t?.content?.repositoryName=="string"?t.content.repositoryName:"the target repository"}. Please install it (https://github.com/apps/fern-api) and try again.`}function iQm(e){let t=e?.content?.body?.content?.retryAfter;return typeof t=="number"&&t>0?t:void 0}function oQm(e){if(e?.content?.reason==="status-code"){let t=e.content.body;switch(t?.error){case"IllegalApiNameError":return Kr.remoteGen.createJobV3.Error.illegalApiNameError();case"IllegalApiVersionError":return Kr.remoteGen.createJobV3.Error.illegalApiVersionError(t.content);case"GeneratorsDoNotExistError":return Kr.remoteGen.createJobV3.Error.generatorsDoNotExistError(t.content);case"CannotPublishToNpmScope":return Kr.remoteGen.createJobV3.Error.cannotPublishToNpmScope(t.content);case"CannotPublishToMavenScope":return Kr.remoteGen.createJobV3.Error.cannotPublishToMavenGroup(t.content);case"CannotPublishPypiPackage":return Kr.remoteGen.createJobV3.Error.cannotPublishPypiPackage(t.content);case"InsufficientPermissions":return Kr.remoteGen.createJobV3.Error.insufficientPermissions(t.content);case"OrgNotConfiguredForWhitelabel":return Kr.remoteGen.createJobV3.Error.orgNotConfiguredForWhitelabel(t.content);case"BranchDoesNotExist":return Kr.remoteGen.createJobV3.Error.branchDoesNotExist(t.content)}}return e}function sQm({outputMode:e,generatorInvocation:t,absolutePathToPreview:r,shouldLogS3Url:n}){return e.type==="downloadFiles"||t.absolutePathToLocalSnippets!=null||r!=null||n}var Kyu=gpe();var aQm=3;function Jyu({job:e,taskId:t,taskHandler:r,context:n}){let i=0,o=async()=>{let s=await Kyu.remoteGen.getJobStatus(e.jobId);if(s.ok)return s.body[t];n.logger.debug("Failed to get job status.",JSON.stringify(s.error.content))};return new Promise((s,a)=>{c();async function c(){try{let u=await o();if(u==null)i++,i===aQm&&n.failAndThrow(`Failed to get job status after ${i} attempts.`,void 0,{code:Q.Code.NetworkError}),setTimeout(c,2e3+1e3*i);else{i=0;let l=await r.processUpdate(u);r.isFinished?s(l):setTimeout(c,2e3)}}catch(u){a(u)}}})}Ut();rr();var JCu=xe(x8o(),1);Jx();var Vti=require("fs"),vM=require("fs/promises"),dUe=xe(require("path"),1),B8o=require("stream/promises");var Uti=xe(KCu(),1);function Gde(e,t,{target:r="stdout",...n}={}){return Uti.default[r]?nW.link(e,t):n.fallback===!1?e:typeof n.fallback=="function"?n.fallback(e,t):`${e} (\u200B${t}\u200B)`}Gde.isSupported=Uti.default.stdout;Gde.stderr=(e,t,r={})=>Gde(e,t,{target:"stderr",...r});Gde.stderr.isSupported=Uti.default.stderr;var qti=xe(wx(),1),YCu=xe(rei(),1);var wUm=/^Pipeline: raw result \(\d+ bytes\): (\{.*\})$/,_ti=class{context;generatorInvocation;absolutePathToPreview;telemetryContext;lengthOfLastLogs=0;cachedReplayResult;replayEventEmitted=!1;taskStartedAtMs=Date.now();constructor({interactiveTaskContext:t,generatorInvocation:r,absolutePathToPreview:n,telemetryContext:i}){this.context=t,this.generatorInvocation=r,this.absolutePathToPreview=n,this.telemetryContext=i}async processUpdate(t){t==null&&this.context.failAndThrow("Task is missing on job status",void 0,{code:Q.Code.InternalError});let r=t.packages.map(i=>i.coordinate._visit({npm:o=>`${o.name}@${o.version}`,maven:o=>`${o.group}:${o.artifact}:${o.version}`,pypi:o=>`${o.name} ${o.version}`,ruby:o=>`${o.name}:${o.version}`,nuget:o=>`${o.name} ${o.version}`,crates:o=>`${o.name} ${o.version}`,_other:()=>"<unknown package>"}));t.packages.length>0&&this.#n==null&&(this.#n=t.packages[0]?.coordinate._visit({npm:i=>i.version,maven:i=>i.version,pypi:i=>i.version,ruby:i=>i.version,nuget:i=>i.version,crates:i=>i.version,_other:()=>{}})),this.#i==null&&(this.#i=Eyu(t.packages)),this.absolutePathToPreview==null&&this.context.setSubtitle(r.length>0?r.map(i=>`\u25E6 ${i}`).join(`
3816
- `):void 0);for(let i of t.logs.slice(this.lengthOfLastLogs))this.context.logger.log(RUm(i.level),i.message),this.#n==null&&(this.#n=SUm(i.message)??this.#n),this.cachedReplayResult==null&&(this.cachedReplayResult=TUm(i.message));this.lengthOfLastLogs=t.logs.length;let n=i=>{this.context.logger.debug(`Generated files. ${Gde("View here",i,{fallback:(o,s)=>`${o}: ${s}`})}`)};return await t.status._visit({notStarted:vt,running:vt,failed:({message:i,s3PreSignedReadUrl:o})=>{o!=null&&n(o),this.context.failAndThrow(i,void 0,{code:Q.Code.ContainerError})},finished:async i=>{if(i.s3PreSignedReadUrlV2!=null){n(i.s3PreSignedReadUrlV2);let o=this.getAbsolutePathToLocalOutput();o!=null&&await PUm({s3PreSignedReadUrl:i.s3PreSignedReadUrlV2,absolutePathToLocalOutput:o,context:this.context})}if(this.absolutePathToPreview==null)for(let o of r)this.context.logger.info(`Published ${o}`);this.#e=!0,this.#t=i.createdSnippets!=null?i.createdSnippets:!1,this.#r=i.snippetsS3PreSignedReadUrl,this.#o=i.pullRequestUrl,this.#s=i.noChangesDetected,i.actualVersion!=null&&(this.#n=i.actualVersion),this.emitReplayTelemetryIfReady()},_other:()=>{this.context.logger.warn("Received unknown update type: "+t.status.type)}}),this.#e?{createdSnippets:this.#t,snippetsS3PreSignedReadUrl:this.#r,actualVersion:this.#n,pullRequestUrl:this.#o,noChangesDetected:this.#s,publishTarget:this.#i}:void 0}getAbsolutePathToLocalOutput(){return this.absolutePathToPreview!=null?nt(this.absolutePathToPreview,Fe.of(dUe.default.basename(this.generatorInvocation.name))):this.generatorInvocation.absolutePathToLocalOutput}emitReplayTelemetryIfReady(){if(!this.replayEventEmitted&&this.cachedReplayResult!=null&&!this.telemetryContext.disableTelemetry)try{let t={success:!0,steps:{replay:this.cachedReplayResult},warnings:[]},n={...(0,JCu.buildReplayTelemetryProps)({pipelineResult:t,generatorName:this.generatorInvocation.name,generatorVersion:this.generatorInvocation.version,cliVersion:this.telemetryContext.cliVersion,repoUri:BUm(this.generatorInvocation),automationMode:this.telemetryContext.automationMode,autoMerge:this.telemetryContext.autoMerge,skipIfNoDiff:this.telemetryContext.skipIfNoDiff,hasBreakingChanges:!1,versionArg:this.telemetryContext.versionArg,versionBump:this.telemetryContext.versionBump,replayConfigEnabled:this.telemetryContext.replayConfigEnabled,noReplayFlag:this.telemetryContext.noReplayFlag,githubMode:OUm(this.generatorInvocation),previewMode:this.absolutePathToPreview!=null,durationMs:Date.now()-this.taskStartedAtMs}),surface:"fiddle",org_id:this.telemetryContext.orgId};this.context.instrumentPostHogEvent({command:"replay",properties:n}),this.context.logger.debug(`[telemetry] replay event sent: ${JSON.stringify(n)}`),this.replayEventEmitted=!0}catch(t){this.context.logger.debug(`[telemetry] failed to send replay event: ${String(t)}`)}}#e=!1;get isFinished(){return this.#e}#t=!1;get createdSnippets(){return this.#t}#r=void 0;get snippetsS3PreSignedReadUrl(){return this.#r}#n=void 0;get actualVersion(){return this.#n}#i=void 0;get publishTarget(){return this.#i}#o=void 0;get pullRequestUrl(){return this.#o}#s=void 0;get noChangesDetected(){return this.#s}},xUm=/Tagging release (v?\d+\.\d+\.\d+(?:-[\w.-]+)?)/;function SUm(e){let t=e.match(xUm);if(t?.[1]!=null)return t[1].replace(/^v/,"")}function TUm(e){let t=e.match(wUm);if(t?.[1]!=null)try{return JSON.parse(t[1])?.steps?.replay}catch{return}}function BUm(e){let t=e.raw?.github;return t==null?"":"uri"in t&&typeof t.uri=="string"?t.uri:"repository"in t&&typeof t.repository=="string"?t.repository:""}function OUm(e){let t=e.raw?.github;return t!=null&&"mode"in t&&t.mode==="pull-request"?"pull-request":"push"}async function PUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){try{let n=await FUm(t),i=await kUm(t);n&&i?await NUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):n&&!i?await jUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):await DUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(ve.green(`Downloaded to ${t}`))}catch(n){r.failAndThrow("Failed to download files",n,{code:Q.Code.NetworkError})}}async function DUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await Ly.get(e,{responseType:"stream"}),n=await qti.default.dir({prefix:"fern",unsafeCleanup:!0}),i=dUe.default.join(n.path,"output.zip");await(0,B8o.pipeline)(r.data,(0,Vti.createWriteStream)(i)),await T8o(t),await(0,vM.mkdir)(t,{recursive:!0}),await $Cu(i,t)}async function T8o(e){await ar(e)&&(await XCu(e),await(0,vM.rm)(e,{recursive:!0,force:!0}))}async function XCu(e){try{let t=await(0,vM.readdir)(e,{withFileTypes:!0});for(let r of t){let n=Yt.of(dUe.default.join(e,r.name));r.isDirectory()&&await XCu(n);try{await(0,vM.chmod)(n,493)}catch{}}await(0,vM.chmod)(e,493)}catch{}}function RUm(e){switch(e){case"DEBUG":return _n.Debug;case"INFO":return _n.Info;case"WARN":return _n.Warn;case"ERROR":return _n.Error;default:return _n.Info}}async function FUm(e){let t=nt(e,Fe.of($P));return await ar(t)}async function kUm(e){let t=nt(e,Fe.of(".git"));return await ar(t)}async function GH(e,t,r){return(await Fl(r.logger,"git",e,{cwd:t,doNotPipeOutput:!0})).stdout}async function NUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=nt(t,Fe.of($P)),i=await bye({absolutePathToFernignore:n});await GH(["rm","-rf","."],t,r),await ZCu({s3PreSignedReadUrl:e,outputPath:t}),await GH(["add","."],t,r),await GH(["reset","--",...i],t,r),await GH(["restore","."],t,r)}async function jUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Yt.of((await qti.default.dir({})).path),i=nt(t,Fe.of($P)),o=await bye({absolutePathToFernignore:i});await(0,vM.cp)(t,n,{recursive:!0}),await GH(["init"],n,r),await GH(["add","."],n,r),await GH(["-c","user.name=fern","-c","user.email=hey@buildwithfern.com","-c","commit.gpgsign=false","commit","--allow-empty","--no-verify","-m","init"],n,r),await GH(["rm","-rf","."],n,r),await ZCu({s3PreSignedReadUrl:e,outputPath:n}),await GH(["add","."],n,r),await GH(["reset","--",...o],n,r),await GH(["restore","."],n,r),await T8o(nt(n,Fe.of(".git"))),await T8o(t),await(0,vM.cp)(n,t,{recursive:!0})}async function ZCu({s3PreSignedReadUrl:e,outputPath:t}){let r=await Ly.get(e,{responseType:"stream"}),n=await qti.default.dir({prefix:"fern",unsafeCleanup:!0}),i=dUe.default.join(n.path,"output.zip");await(0,B8o.pipeline)(r.data,(0,Vti.createWriteStream)(i)),await $Cu(i,t)}async function $Cu(e,t){return new Promise((r,n)=>{YCu.default.open(e,{lazyEntries:!0},(i,o)=>{if(i||!o){n(i??new Error("Failed to open zip file"));return}o.on("error",n),o.on("end",r),o.on("entry",s=>{let a=dUe.default.join(t,s.fileName);if(s.fileName.endsWith("/")){(0,vM.mkdir)(a,{recursive:!0}).then(()=>o.readEntry()).catch(n);return}(0,vM.mkdir)(dUe.default.dirname(a),{recursive:!0}).then(()=>{o.openReadStream(s,(c,u)=>{if(c||!u){n(c??new Error("Failed to open read stream"));return}u.pipe((0,Vti.createWriteStream)(a)).on("finish",()=>o.readEntry()).on("error",n)})}).catch(n)}),o.readEntry()})})}rr();Jx();var Gti=require("fs/promises"),ewu=xe(wx(),1),QUm="proto.zip",Gqt=class{sourceTypes;context;sources;constructor(t,r){this.context=t,this.sources=Object.fromEntries(r.map(n=>[n.id,n])),this.sourceTypes=new Set(Object.values(this.sources).map(n=>n.type))}async uploadSources(t){for(let[r,n]of Object.entries(t)){let i=this.getSourceOrThrow(r);await this.uploadSource(i,n.uploadUrl)}return this.convertFdrSourceUploadsToSourceConfig(t)}async uploadSource(t,r){let n=await this.getUploadCommand(t),i=await(0,Gti.readFile)(n.absoluteFilePath),o=await fetch(r,{method:"PUT",body:i,headers:{"Content-Type":"application/octet-stream"}});await n.cleanup(),o.ok||this.context.failAndThrow(`Failed to upload source file: ${t.absoluteFilePath}. Status: ${o.status}, ${o.statusText}`,void 0,{code:Q.Code.NetworkError})}async getUploadCommand(t){if(t.type==="protobuf"){let r=await this.zipSource(t.absoluteFilePath);return{absoluteFilePath:r,cleanup:async()=>{this.context.logger.debug(`Removing ${r}`),await(0,Gti.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await ewu.default.dir(),n=nt(Yt.of(r.path),Fe.of(QUm));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Fl(this.context.logger,"zip",["-r",n,"."],{cwd:t,doNotPipeOutput:!0}),n}convertFdrSourceUploadsToSourceConfig(t){let r=[];for(let[n,i]of Object.entries(t))switch(this.getSourceOrThrow(n).type){case"protobuf":r.push(Pj.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(Pj.openapi());continue;case"asyncapi":continue}return{sources:r}}getSourceOrThrow(t){let r=this.sources[t];return r==null&&this.context.failAndThrow(`Internal error; server responded with source id "${t}" which does not exist in the workspace.`,void 0,{code:Q.Code.InternalError}),r}};async function nwu({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,readme:A,fernignorePath:y,skipFernignore:I,dynamicIrOnly:w,retryRateLimited:C,requireEnvVars:x,automationMode:B,autoMerge:O,skipIfNoDiff:N,noReplay:P,disableTelemetry:U,loginCommand:X}){let $=ak({token:c.value}),me=await Ozt("https://registry.buildwithfern.com/health",n.logger),ye=Qn.getPackageName({generatorInvocation:i}),ce=f??d!=null,he=Me=>wy(Me,{onError:et=>{!ce&&x&&n.failAndThrow(void 0,et,{code:Q.Code.EnvironmentError})}},{substituteAsEmpty:ce}),ke=he(i),Le=Z4e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:ke}),oe=o??await kDt({packageName:ye,generatorInvocation:i});o!=null&&(ce?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await Vmr({version:o,packageName:ye,generatorInvocation:i,context:n}));let ae=Yg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:A,packageName:ye,version:oe,context:n,sourceResolver:new Uh(n,r),dynamicGeneratorConfig:Le,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:eY(),originGitCommitIsDirty:tY(),invokedBy:ZJ(),requestedVersion:o,ciProvider:$J()}}),we=Lf({token:c.value});if(!me){let Me=await we.organization.get(e.organization);Me.ok&&(Me.body.isWhitelabled&&(ae.readmeConfig==null&&(ae.readmeConfig=zUm),ae.readmeConfig.whiteLabel=!0),ae.selfHosted=Me.body.selfHostedSdKs)}let Ie=r.getSources(),Ne,qe,pt=fN({ir:ae,snippetsConfig:{typescriptSdk:void 0,pythonSdk:void 0,javaSdk:void 0,rubySdk:void 0,goSdk:void 0,csharpSdk:void 0,phpSdk:void 0,swiftSdk:void 0,rustSdk:void 0},context:n});try{let Me=await $.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Ur(ae.apiName)),definition:pt,sources:Ie.length>0?LUm(Ie):void 0});Ne=Me.apiDefinitionId,qe=Me.sources??void 0}catch(Me){new Gqt(n,Ie).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(Me)}`)}let it=new Gqt(n,Ie);if(qe==null&&it.sourceTypes.has("protobuf")&&n.failAndThrow("Did not successfully upload Protobuf source files.",void 0,{code:Q.Code.NetworkError}),qe!=null){n.logger.debug("Uploading source files ...");let Me=await it.uploadSources(qe);n.logger.debug("Setting IR source configuration ..."),ae.sourceConfig=Me}if(w){if(n.logger.info("Dynamic IR only mode: skipping SDK generation and uploading dynamic IR only"),o==null){n.failAndThrow("Version is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}if(i.language==null){n.failAndThrow("Language is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}if(ye==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}try{await twu({fdr:$,organization:t,version:o,language:i.language,packageName:ye,ir:ae,smartCasing:i.smartCasing,dynamicGeneratorConfig:Le,context:n})}catch(Me){n.failAndThrow(`Failed to upload dynamic IR: ${ni(Me)}`,void 0,{code:Q.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let at=await Hyu({projectConfig:e,workspace:r,organization:t,generatorInvocation:ke,context:n,version:oe,intermediateRepresentation:{...ae,fdrApiDefinitionId:Ne,publishConfig:MUm({generatorInvocation:ke})},shouldLogS3Url:a,token:c,whitelabel:u!=null?he(u):void 0,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:h,fernignorePath:y,skipFernignore:I,retryRateLimited:C,automationMode:B,autoMerge:O,skipIfNoDiff:N,loginCommand:X});n.logger.debug(`Job ID: ${at.jobId}`);let Bt=at.taskIds[0];if(Bt==null){n.failAndThrow("Did not receive a task ID.",void 0,{code:Q.Code.NetworkError});return}n.logger.debug(`Task ID: ${Bt}`);let qt=new _ti({job:at,taskId:Bt,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d,telemetryContext:{cliVersion:r.cliVersion,orgId:e.organization,automationMode:B===!0,autoMerge:O===!0,skipIfNoDiff:N===!0,versionArg:o==null?"none":(0,rwu.isAutoVersion)(o)?"auto":"explicit",versionBump:void 0,replayConfigEnabled:l?.enabled===!0,noReplayFlag:P===!0,disableTelemetry:U===!0}}),be=await Jyu({job:at,taskHandler:qt,taskId:Bt,context:n});if(be!=null&&be.actualVersion==null){let Me=UUm(oe);Me!=null&&(be={...be,actualVersion:Me})}let ue=be?.actualVersion??oe;if(be!=null&&ue!=null&&i.language!=null&&ye!=null&&!ce)try{await twu({fdr:$,organization:t,version:ue,language:i.language,packageName:ye,ir:ae,smartCasing:i.smartCasing,dynamicGeneratorConfig:Le,context:n})}catch(Me){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${ni(Me)}`)}return be}function MUm({generatorInvocation:e}){return e.outputMode._visit({downloadFiles:()=>{},github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:t=>t._visit({mavenOverride:()=>{},pypiOverride:()=>{},nugetOverride:()=>{},npmOverride:()=>{},rubyGemsOverride:()=>{},cratesOverride:()=>{},postman:r=>{let n;return e.raw?.output?.location==="postman"&&(n=e.raw.output?.["collection-id"]),ir.PublishingConfig.direct({target:ir.PublishTarget.postman({apiKey:r.apiKey,workspaceId:r.workspaceId,collectionId:n})})},_other:()=>{}}),_other:()=>{}})}function LUm(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var zUm={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};async function twu({fdr:e,organization:t,version:r,language:n,packageName:i,ir:o,smartCasing:s,dynamicGeneratorConfig:a,context:c}){c.logger.debug(`Uploading dynamic IR for ${n} SDK...`);let u;try{u=await e.api.register.getSdkDynamicIrUploadUrls({orgId:fn.OrgId(t),version:r,snippetConfiguration:{[n]:i}})}catch(m){c.logger.warn(`Failed to get dynamic IR upload URLs (non-fatal, dynamic snippets may be stale): ${m}`);return}let l=u.uploadUrls[n]?.uploadUrl;if(l==null){c.logger.warn(`No upload URL returned for ${n}`);return}let p=xMe({ir:o,disableExamples:!0,smartCasing:s,generationLanguage:n,generatorConfig:a}),d=JSON.stringify(p),f=await fetch(l,{method:"PUT",body:d,headers:{"Content-Type":"application/octet-stream","Content-Length":d.length.toString()}});f.ok?c.logger.debug(`Uploaded dynamic IR for ${n}:${i} (${r})`):c.logger.warn(`Failed to upload dynamic IR for ${n}: ${f.status}`)}function UUm(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function BPe({projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:h,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:I,retryRateLimited:w,requireEnvVars:C,automationMode:x,autoMerge:B,skipIfNoDiff:O,noReplay:N,disableTelemetry:P,automation:U,occurrenceTracker:X,loginCommand:$}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let ne=[],me=X??new J4e;X==null&&me.recordOccurrences(i.generators);let ye=r.generatorsConfiguration?.absolutePathToConfiguration,ce=await Promise.all(i.generators.map(he=>n.runInteractiveTask({name:he.name},ke=>_Um({generatorInvocation:he,interactiveTaskContext:ke,projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:h,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:I,retryRateLimited:w,requireEnvVars:C,automationMode:x,autoMerge:B,skipIfNoDiff:O,noReplay:N,disableTelemetry:P,automation:U,generatorsYmlAbsolutePath:ye,occurrenceTracker:me,loginCommand:$,onSnippetsProduced:Le=>ne.push(Le)}))));if(U==null&&ce.some(he=>!he))throw new bu;return{snippetsProducedBy:ne}}async function _Um({generatorInvocation:e,interactiveTaskContext:t,projectConfig:r,organization:n,workspace:i,context:o,generatorGroup:s,version:a,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,mode:A,fernignorePath:y,skipFernignore:I,dynamicIrOnly:w,validateWorkspace:C,retryRateLimited:x,requireEnvVars:B,automationMode:O,autoMerge:N,skipIfNoDiff:P,noReplay:U,disableTelemetry:X,automation:$,generatorsYmlAbsolutePath:ne,occurrenceTracker:me,loginCommand:ye,onSnippetsProduced:ce}){let he=Date.now();try{let ke=GYe(e),Le=await i.toFernWorkspace({context:o},ke,e.apiOverride?.specs);C&&await _H({workspace:Le,context:o,logWarnings:!1,ossWorkspace:i instanceof Nd?i:void 0});let oe=I?void 0:y??await Nyu({generatorInvocation:e,context:t}),ae=await nwu({projectConfig:r,organization:n,workspace:Le,interactiveTaskContext:t,generatorInvocation:{...e,outputMode:e.outputMode._visit({downloadFiles:()=>e.outputMode,github:we=>Kr.OutputMode.github({...we,makePr:A==="pull-request"}),githubV2:we=>A==="pull-request"?Kr.OutputMode.githubV2(Kr.GithubOutputModeV2.pullRequest(we)):e.outputMode,publish:()=>e.outputMode,publishV2:()=>e.outputMode,_other:()=>e.outputMode})},version:a,audiences:s.audiences,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,readme:e.readme,irVersionOverride:e.irVersionOverride,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,fernignorePath:oe,skipFernignore:I,dynamicIrOnly:w,retryRateLimited:x,requireEnvVars:B,automationMode:O,autoMerge:N,skipIfNoDiff:P,noReplay:U,disableTelemetry:X,loginCommand:ye});if(ae?.createdSnippets&&(ce(e),e.absolutePathToLocalSnippets!=null&&ae.snippetsS3PreSignedReadUrl!=null&&await kyu({snippetsS3PreSignedReadUrl:ae.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:t})),$!=null){let we=ne!=null?await X4e(ne,e.name,me.lookup(e)):void 0;$.recorder.recordSuccess({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,version:ae?.actualVersion??null,durationMs:Date.now()-he,pullRequestUrl:ae?.pullRequestUrl,noChangesDetected:ae?.noChangesDetected,publishTarget:ae?.publishTarget,outputRepoUrl:Y4e(e),generatorsYmlAbsolutePath:ne,generatorsYmlLineNumber:we})}}catch(ke){if($==null)throw ke;if(ke instanceof bu){let ae=ne!=null?await X4e(ne,e.name,me.lookup(e)):void 0;throw $.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:t.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-he,outputRepoUrl:Y4e(e),generatorsYmlAbsolutePath:ne,generatorsYmlLineNumber:ae}),ke}let Le=ni(ke),oe=ne!=null?await X4e(ne,e.name,me.lookup(e)):void 0;$.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:Le,durationMs:Date.now()-he,outputRepoUrl:Y4e(e),generatorsYmlAbsolutePath:ne,generatorsYmlLineNumber:oe}),t.failWithoutThrowing(Le)}}Ut();Ut();ng();rr();var Zwu=require("crypto"),Kqt=require("fs/promises");no();var X8o=xe(zMe(),1);Ut();var Vwu=xe(_wu(),1);no();var qwu=require("util"),OVm=(0,qwu.promisify)(Vwu.default);async function Gwu(e,t,r){let n=vOt(e,t),i=[];for(let o of n){let s=await Promise.all(o.map(async a=>{try{let c=await OVm(a);return c==null||c.height==null||c.width==null?void 0:{filePath:a,width:c.width,height:c.height,blurDataUrl:void 0}}catch(c){r.logger.error(`Failed to measure image size for ${a}. ${c?.message}`);return}}));i.push(...s.filter(qa))}return new Map(i.map(o=>[o.filePath,o]))}async function J8o(e,t,r){let n=new Array(t.length),i=new Set;for(let o=0;o<t.length;o++){let s=t[o];if(s===void 0)continue;let a=(async()=>{let c=await r(s,o);n[o]=c})().then(()=>{i.delete(a)});i.add(a),i.size>=e&&await Promise.race(i)}return await Promise.all(i),n}var PVm=10,Wwu=10,Iri=parseInt(process.env.FERN_DOCS_ASSET_HASH_CONCURRENCY??"32",10);function DVm(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}var N0t=class extends Error{constructor(){super("Another docs publish is currently in progress for this domain."),this.name="DocsPublishConflictError"}};async function Hwu({fdrOrigin:e,token:t,domain:r,basepath:n}){try{await Ly.post(`${e}/docs-deployment/unlock`,{domain:r,basepath:n},{headers:{Authorization:`Bearer ${t}`}})}catch{}}async function Kwu(e){let t=await(0,Kqt.readFile)(e);return(0,Zwu.createHash)("sha256").update(new Uint8Array(t)).digest("hex")}function RVm(e){return e.replace(/\.\.\//g,"_dot_dot_/")}async function $wu({token:e,organization:t,docsWorkspace:r,domain:n,customDomains:i,apiWorkspaces:o,ossWorkspaces:s,context:a,preview:c,previewId:u,editThisPage:l,disableTemplates:p=!1,skipUpload:d=!1,withAiExamples:f=!0,excludeApis:m=!1,targetAudiences:h,docsUrl:A,cliVersion:y,ciSource:I,deployerAuthor:w,loginCommand:C="fern login",multiSource:x=!1}){let B="https://registry.buildwithfern.com";await Ozt(`${B}/health`,a.logger)&&a.logger.debug("Detected air-gapped environment - skipping external FDR service calls");let N={};y!=null&&(N["X-CLI-Version"]=y),I!=null&&(N["X-CI-Source"]=JSON.stringify(I),a.logger.debug(`CI source detected: ${I.type} (${I.repo??"unknown repo"})`)),w?.username!=null&&(N["X-Deployer-Author"]=w.username),w?.email!=null&&(N["X-Deployer-Author-Email"]=w.email);let P=ak({token:e.value,...Object.keys(N).length>0&&{headers:N}}),U={type:"public"};m&&a.logger.debug("Experimental flag 'exclude-apis' is enabled - API references will be excluded from S3 upload");let X,$=i[0]??n,ne=zVm(n),me=r.config.experimental&&r.config.experimental.dynamicSnippets===!1;r.config.experimental?.basepathAware===!0&&a.logger.warn("experimental.basepath-aware is deprecated. Use 'multi-source: true' on the instance instead.");let ye=x||r.config.experimental?.basepathAware===!0;ye&&a.logger.debug("Basepath-aware mode is enabled - using basepath-aware S3 key format");let ce=!1,he=()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to early exit..."),Hwu({fdrOrigin:B,token:e.value,domain:n,basepath:ne}))},ke=async()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to signal..."),await Hwu({fdrOrigin:B,token:e.value,domain:n,basepath:ne})),process.exit(1)};process.on("SIGINT",ke),process.on("SIGTERM",ke);try{let Le=await w8t({docsWorkspace:r,organization:t,fdrOrigin:B,token:e.value,taskContext:a}),oe=new Ez({domain:n,docsWorkspace:Le,ossWorkspaces:s,apiWorkspaces:o,taskContext:a,editThisPage:l,uploadFiles:async et=>{let Se=et.map(T=>({...T,sanitizedPath:RVm(T.relativeFilePath)})),je=new Map(Se.map(T=>[T.absoluteFilePath,T])),Ot=new Map(Se.map(T=>[T.sanitizedPath,T.absoluteFilePath])),We=Se.map(T=>({...T,mediaType:X8o.lookup(T.absoluteFilePath)})).filter(T=>T.mediaType!==!1).filter(T=>id.parse(T.mediaType)?.isImage()??!1).map(T=>T.absoluteFilePath),er=await Gwu(We,PVm,a);a.logger.debug(`Hashing ${er.size} image files with concurrency ${Iri}...`);let jt=performance.now(),sr=Array.from(er.values()),nr=(await J8o(Iri,sr,async T=>{let _=je.get(T.filePath);if(_==null)return null;let te=_.sanitizedPath;return{filePath:fn.docs.v1.write.FilePath(gPt(te)),width:T.width,height:T.height,blurDataUrl:T.blurDataUrl,alt:void 0,fileHash:await Kwu(_.absoluteFilePath)}})).filter(T=>T!=null),Oi=performance.now()-jt;a.logger.debug(`Hashed ${nr.length} images in ${Oi.toFixed(0)}ms`);let g=Se.filter(({absoluteFilePath:T})=>!er.has(T));a.logger.debug(`Hashing ${g.length} non-image files with concurrency ${Iri}...`);let b=performance.now(),E=await J8o(Iri,g,async T=>({path:fn.docs.v1.write.FilePath(gPt(T.sanitizedPath)),fileHash:await Kwu(T.absoluteFilePath)})),S=performance.now()-b;if(a.logger.debug(`Hashed ${E.length} non-image files in ${S.toFixed(0)}ms`),c){let T;try{T=await P.docs.v2.write.startDocsPreviewRegister({orgId:fn.OrgId(t),authConfig:U,filepaths:E,images:nr,basePath:ne,previewId:u!=null?DVm(u):void 0})}catch(_){return await Xwu(_,a,t,n,C)}if($=T.previewUrl,X=T.docsRegistrationId,a.logger.debug(`Received preview registration ID: ${X}`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs preview");else{let _=new Set(T.skippedFiles||[]),te=Object.fromEntries(Object.entries(T.uploadUrls).filter(([ft])=>!_.has(ft))),Ge=Object.keys(te).length,Ct=_.size;Ge>0?(a.logger.debug(`Uploading ${Ge} files (${Ct} skipped)...`),await Jwu(te,r.absoluteFilePath,a,Wwu,Ot)):a.logger.debug(`No files to upload (all ${Ct} up to date)`)}return Ywu(T.uploadUrls,r.absoluteFilePath,Ot)}else{let T;try{T=await P.docs.v2.write.startDocsRegister({domain:n,customDomains:i,authConfig:U,orgId:fn.OrgId(t),filepaths:E,images:nr,...ye&&{basepathAware:!0}})}catch(te){return Xwu(te,a,t,n,C)}X=T.docsRegistrationId,ce=!0,a.logger.debug(`Received production registration ID: ${X}`);let _=T.skippedFiles?.length||0;if(_>0&&a.logger.info(`Skipped ${_} unchanged file${_===1?"":"s"} (already uploaded)`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs");else{let te=new Set(T.skippedFiles||[]),Ge=Object.fromEntries(Object.entries(T.uploadUrls).filter(([ft])=>!te.has(ft))),Ct=Object.keys(Ge).length;Ct>0?(a.logger.info(`\u2191 Uploading ${Ct} files...`),await Jwu(Ge,r.absoluteFilePath,a,Wwu,Ot)):a.logger.info("No files to upload (all up to date)")}return Ywu(T.uploadUrls,r.absoluteFilePath,Ot)}},registerApi:async({ir:et,snippetsConfig:Se,playgroundConfig:je,apiName:Ot,workspace:xt,graphqlOperations:We,graphqlTypes:er})=>{let jt=fN({ir:et,snippetsConfig:Se,playgroundConfig:je,graphqlOperations:We,graphqlTypes:er,context:a,apiNameOverride:Ot}),sr=HVm(f,r.config.aiExamples?.style??r.config.experimental?.aiExampleStyleInstructions);if(sr){let b=xt?.getSources()?.filter(E=>E.type==="openapi").map(E=>({absoluteFilePath:E.absoluteFilePath,absoluteFilePathToOverrides:E.absoluteFilePathToOverrides}));b==null||b.length===0?a.logger.debug("Skipping AI example enhancement: no OpenAPI source file paths available"):jt=await Jyt(jt,sr,a,e,t,b)}let zn,nr=new Set;if(Object.keys(Se).length===0)a.logger.debug("No snippets configuration defined, skipping snippet generation...");else if(!me){let g=await UVm({fdr:P,workspace:xt,organization:t,context:a,snippetsConfig:Se});g&&Object.keys(g).length>0&&(zn=g,nr=new Set(Object.keys(g)),a.logger.debug(`Using existing SDK dynamic IRs for: ${Object.keys(g).join(", ")}`));let b=await qVm({workspace:xt,organization:t,context:a,snippetsConfig:Se,skipLanguages:nr});b&&(zn={...zn,...b})}let Oi;try{Oi=await P.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Ot??Ur(et.apiName)),definition:jt,dynamicIRs:zn})}catch(g){let b=rxu(g);return a.logger.error(`FDR registerApiDefinition failed. Error details:
3816
+ `):void 0);for(let i of t.logs.slice(this.lengthOfLastLogs))this.context.logger.log(RUm(i.level),i.message),this.#n==null&&(this.#n=SUm(i.message)??this.#n),this.cachedReplayResult==null&&(this.cachedReplayResult=TUm(i.message));this.lengthOfLastLogs=t.logs.length;let n=i=>{this.context.logger.debug(`Generated files. ${Gde("View here",i,{fallback:(o,s)=>`${o}: ${s}`})}`)};return await t.status._visit({notStarted:vt,running:vt,failed:({message:i,s3PreSignedReadUrl:o})=>{o!=null&&n(o),this.context.failAndThrow(i,void 0,{code:Q.Code.ContainerError})},finished:async i=>{if(i.s3PreSignedReadUrlV2!=null){n(i.s3PreSignedReadUrlV2);let o=this.getAbsolutePathToLocalOutput();o!=null&&await PUm({s3PreSignedReadUrl:i.s3PreSignedReadUrlV2,absolutePathToLocalOutput:o,context:this.context})}if(this.absolutePathToPreview==null)for(let o of r)this.context.logger.info(`Published ${o}`);this.#e=!0,this.#t=i.createdSnippets!=null?i.createdSnippets:!1,this.#r=i.snippetsS3PreSignedReadUrl,this.#o=i.pullRequestUrl,this.#s=i.noChangesDetected,i.actualVersion!=null&&(this.#n=i.actualVersion),this.emitReplayTelemetryIfReady()},_other:()=>{this.context.logger.warn("Received unknown update type: "+t.status.type)}}),this.#e?{createdSnippets:this.#t,snippetsS3PreSignedReadUrl:this.#r,actualVersion:this.#n,pullRequestUrl:this.#o,noChangesDetected:this.#s,publishTarget:this.#i}:void 0}getAbsolutePathToLocalOutput(){return this.absolutePathToPreview!=null?nt(this.absolutePathToPreview,Fe.of(dUe.default.basename(this.generatorInvocation.name))):this.generatorInvocation.absolutePathToLocalOutput}emitReplayTelemetryIfReady(){if(!this.replayEventEmitted&&this.cachedReplayResult!=null&&!this.telemetryContext.disableTelemetry)try{let t={success:!0,steps:{replay:this.cachedReplayResult},warnings:[]},n={...(0,JCu.buildReplayTelemetryProps)({pipelineResult:t,generatorName:this.generatorInvocation.name,generatorVersion:this.generatorInvocation.version,cliVersion:this.telemetryContext.cliVersion,repoUri:BUm(this.generatorInvocation),automationMode:this.telemetryContext.automationMode,autoMerge:this.telemetryContext.autoMerge,skipIfNoDiff:this.telemetryContext.skipIfNoDiff,hasBreakingChanges:!1,versionArg:this.telemetryContext.versionArg,versionBump:this.telemetryContext.versionBump,replayConfigEnabled:this.telemetryContext.replayConfigEnabled,noReplayFlag:this.telemetryContext.noReplayFlag,githubMode:OUm(this.generatorInvocation),previewMode:this.absolutePathToPreview!=null,durationMs:Date.now()-this.taskStartedAtMs}),surface:"fiddle",org_id:this.telemetryContext.orgId};this.context.instrumentPostHogEvent({command:"replay",properties:n}),this.context.logger.debug(`[telemetry] replay event sent: ${JSON.stringify(n)}`),this.replayEventEmitted=!0}catch(t){this.context.logger.debug(`[telemetry] failed to send replay event: ${String(t)}`)}}#e=!1;get isFinished(){return this.#e}#t=!1;get createdSnippets(){return this.#t}#r=void 0;get snippetsS3PreSignedReadUrl(){return this.#r}#n=void 0;get actualVersion(){return this.#n}#i=void 0;get publishTarget(){return this.#i}#o=void 0;get pullRequestUrl(){return this.#o}#s=void 0;get noChangesDetected(){return this.#s}},xUm=/Tagging release (v?\d+\.\d+\.\d+(?:-[\w.-]+)?)/;function SUm(e){let t=e.match(xUm);if(t?.[1]!=null)return t[1].replace(/^v/,"")}function TUm(e){let t=e.match(wUm);if(t?.[1]!=null)try{return JSON.parse(t[1])?.steps?.replay}catch{return}}function BUm(e){let t=e.raw?.github;return t==null?"":"uri"in t&&typeof t.uri=="string"?t.uri:"repository"in t&&typeof t.repository=="string"?t.repository:""}function OUm(e){let t=e.raw?.github;return t!=null&&"mode"in t&&t.mode==="pull-request"?"pull-request":"push"}async function PUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){try{let n=await FUm(t),i=await kUm(t);n&&i?await NUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):n&&!i?await jUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):await DUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(ve.green(`Downloaded to ${t}`))}catch(n){r.failAndThrow("Failed to download files",n,{code:Q.Code.NetworkError})}}async function DUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await Ly.get(e,{responseType:"stream"}),n=await qti.default.dir({prefix:"fern",unsafeCleanup:!0}),i=dUe.default.join(n.path,"output.zip");await(0,B8o.pipeline)(r.data,(0,Vti.createWriteStream)(i)),await T8o(t),await(0,vM.mkdir)(t,{recursive:!0}),await $Cu(i,t)}async function T8o(e){await ar(e)&&(await XCu(e),await(0,vM.rm)(e,{recursive:!0,force:!0}))}async function XCu(e){try{let t=await(0,vM.readdir)(e,{withFileTypes:!0});for(let r of t){let n=Yt.of(dUe.default.join(e,r.name));r.isDirectory()&&await XCu(n);try{await(0,vM.chmod)(n,493)}catch{}}await(0,vM.chmod)(e,493)}catch{}}function RUm(e){switch(e){case"DEBUG":return _n.Debug;case"INFO":return _n.Info;case"WARN":return _n.Warn;case"ERROR":return _n.Error;default:return _n.Info}}async function FUm(e){let t=nt(e,Fe.of($P));return await ar(t)}async function kUm(e){let t=nt(e,Fe.of(".git"));return await ar(t)}async function GH(e,t,r){return(await Fl(r.logger,"git",e,{cwd:t,doNotPipeOutput:!0})).stdout}async function NUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=nt(t,Fe.of($P)),i=await bye({absolutePathToFernignore:n});await GH(["rm","-rf","."],t,r),await ZCu({s3PreSignedReadUrl:e,outputPath:t}),await GH(["add","."],t,r),await GH(["reset","--",...i],t,r),await GH(["restore","."],t,r)}async function jUm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Yt.of((await qti.default.dir({})).path),i=nt(t,Fe.of($P)),o=await bye({absolutePathToFernignore:i});await(0,vM.cp)(t,n,{recursive:!0}),await GH(["init"],n,r),await GH(["add","."],n,r),await GH(["-c","user.name=fern","-c","user.email=hey@buildwithfern.com","-c","commit.gpgsign=false","commit","--allow-empty","--no-verify","-m","init"],n,r),await GH(["rm","-rf","."],n,r),await ZCu({s3PreSignedReadUrl:e,outputPath:n}),await GH(["add","."],n,r),await GH(["reset","--",...o],n,r),await GH(["restore","."],n,r),await T8o(nt(n,Fe.of(".git"))),await T8o(t),await(0,vM.cp)(n,t,{recursive:!0})}async function ZCu({s3PreSignedReadUrl:e,outputPath:t}){let r=await Ly.get(e,{responseType:"stream"}),n=await qti.default.dir({prefix:"fern",unsafeCleanup:!0}),i=dUe.default.join(n.path,"output.zip");await(0,B8o.pipeline)(r.data,(0,Vti.createWriteStream)(i)),await $Cu(i,t)}async function $Cu(e,t){return new Promise((r,n)=>{YCu.default.open(e,{lazyEntries:!0},(i,o)=>{if(i||!o){n(i??new Error("Failed to open zip file"));return}o.on("error",n),o.on("end",r),o.on("entry",s=>{let a=dUe.default.join(t,s.fileName);if(s.fileName.endsWith("/")){(0,vM.mkdir)(a,{recursive:!0}).then(()=>o.readEntry()).catch(n);return}(0,vM.mkdir)(dUe.default.dirname(a),{recursive:!0}).then(()=>{o.openReadStream(s,(c,u)=>{if(c||!u){n(c??new Error("Failed to open read stream"));return}u.pipe((0,Vti.createWriteStream)(a)).on("finish",()=>o.readEntry()).on("error",n)})}).catch(n)}),o.readEntry()})})}rr();Jx();var Gti=require("fs/promises"),ewu=xe(wx(),1),QUm="proto.zip",Gqt=class{sourceTypes;context;sources;constructor(t,r){this.context=t,this.sources=Object.fromEntries(r.map(n=>[n.id,n])),this.sourceTypes=new Set(Object.values(this.sources).map(n=>n.type))}async uploadSources(t){for(let[r,n]of Object.entries(t)){let i=this.getSourceOrThrow(r);await this.uploadSource(i,n.uploadUrl)}return this.convertFdrSourceUploadsToSourceConfig(t)}async uploadSource(t,r){let n=await this.getUploadCommand(t),i=await(0,Gti.readFile)(n.absoluteFilePath),o=await fetch(r,{method:"PUT",body:i,headers:{"Content-Type":"application/octet-stream"}});await n.cleanup(),o.ok||this.context.failAndThrow(`Failed to upload source file: ${t.absoluteFilePath}. Status: ${o.status}, ${o.statusText}`,void 0,{code:Q.Code.NetworkError})}async getUploadCommand(t){if(t.type==="protobuf"){let r=await this.zipSource(t.absoluteFilePath);return{absoluteFilePath:r,cleanup:async()=>{this.context.logger.debug(`Removing ${r}`),await(0,Gti.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await ewu.default.dir(),n=nt(Yt.of(r.path),Fe.of(QUm));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Fl(this.context.logger,"zip",["-r",n,"."],{cwd:t,doNotPipeOutput:!0}),n}convertFdrSourceUploadsToSourceConfig(t){let r=[];for(let[n,i]of Object.entries(t))switch(this.getSourceOrThrow(n).type){case"protobuf":r.push(Pj.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(Pj.openapi());continue;case"asyncapi":continue}return{sources:r}}getSourceOrThrow(t){let r=this.sources[t];return r==null&&this.context.failAndThrow(`Internal error; server responded with source id "${t}" which does not exist in the workspace.`,void 0,{code:Q.Code.InternalError}),r}};async function nwu({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,readme:A,fernignorePath:y,skipFernignore:I,dynamicIrOnly:w,retryRateLimited:C,requireEnvVars:x,automationMode:B,autoMerge:O,skipIfNoDiff:N,noReplay:P,disableTelemetry:U,loginCommand:X}){let $=ak({token:c.value}),me=await Ozt("https://registry.buildwithfern.com/health",n.logger),ye=Qn.getPackageName({generatorInvocation:i}),ce=f??d!=null,he=Me=>wy(Me,{onError:et=>{!ce&&x&&n.failAndThrow(void 0,et,{code:Q.Code.EnvironmentError})}},{substituteAsEmpty:ce}),ke=he(i),Le=Z4e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:ke}),oe=o??await kDt({packageName:ye,generatorInvocation:i});o!=null&&(ce?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await Vmr({version:o,packageName:ye,generatorInvocation:i,context:n}));let ae=Yg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:A,packageName:ye,version:oe,context:n,sourceResolver:new Uh(n,r),dynamicGeneratorConfig:Le,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:eY(),originGitCommitIsDirty:tY(),invokedBy:ZJ(),requestedVersion:o,ciProvider:$J()}}),we=Lf({token:c.value});if(!me){let Me=await we.organization.get(e.organization);Me.ok&&(Me.body.isWhitelabled&&(ae.readmeConfig==null&&(ae.readmeConfig=zUm),ae.readmeConfig.whiteLabel=!0),ae.selfHosted=Me.body.selfHostedSdKs)}let Ie=r.getSources(),Ne,qe,pt=fN({ir:ae,snippetsConfig:{typescriptSdk:void 0,pythonSdk:void 0,javaSdk:void 0,rubySdk:void 0,goSdk:void 0,csharpSdk:void 0,phpSdk:void 0,swiftSdk:void 0,rustSdk:void 0},context:n});try{let Me=await $.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Ur(ae.apiName)),definition:pt,sources:Ie.length>0?LUm(Ie):void 0});Ne=Me.apiDefinitionId,qe=Me.sources??void 0}catch(Me){new Gqt(n,Ie).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(Me)}`)}let it=new Gqt(n,Ie);if(qe==null&&it.sourceTypes.has("protobuf")&&n.failAndThrow("Did not successfully upload Protobuf source files.",void 0,{code:Q.Code.NetworkError}),qe!=null){n.logger.debug("Uploading source files ...");let Me=await it.uploadSources(qe);n.logger.debug("Setting IR source configuration ..."),ae.sourceConfig=Me}if(w){if(n.logger.info("Dynamic IR only mode: skipping SDK generation and uploading dynamic IR only"),o==null){n.failAndThrow("Version is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}if(i.language==null){n.failAndThrow("Language is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}if(ye==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}try{await twu({fdr:$,organization:t,version:o,language:i.language,packageName:ye,ir:ae,smartCasing:i.smartCasing,dynamicGeneratorConfig:Le,context:n})}catch(Me){n.failAndThrow(`Failed to upload dynamic IR: ${ni(Me)}`,void 0,{code:Q.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let at=await Hyu({projectConfig:e,workspace:r,organization:t,generatorInvocation:ke,context:n,version:oe,intermediateRepresentation:{...ae,fdrApiDefinitionId:Ne,publishConfig:MUm({generatorInvocation:ke})},shouldLogS3Url:a,token:c,whitelabel:u!=null?he(u):void 0,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:h,fernignorePath:y,skipFernignore:I,retryRateLimited:C,automationMode:B,autoMerge:O,skipIfNoDiff:N,loginCommand:X});n.logger.debug(`Job ID: ${at.jobId}`);let Bt=at.taskIds[0];if(Bt==null){n.failAndThrow("Did not receive a task ID.",void 0,{code:Q.Code.NetworkError});return}n.logger.debug(`Task ID: ${Bt}`);let qt=new _ti({job:at,taskId:Bt,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d,telemetryContext:{cliVersion:r.cliVersion,orgId:e.organization,automationMode:B===!0,autoMerge:O===!0,skipIfNoDiff:N===!0,versionArg:o==null?"none":(0,rwu.isAutoVersion)(o)?"auto":"explicit",versionBump:void 0,replayConfigEnabled:l?.enabled===!0,noReplayFlag:P===!0,disableTelemetry:U===!0}}),be=await Jyu({job:at,taskHandler:qt,taskId:Bt,context:n});if(be!=null&&be.actualVersion==null){let Me=UUm(oe);Me!=null&&(be={...be,actualVersion:Me})}let ue=be?.actualVersion??oe;if(be!=null&&ue!=null&&i.language!=null&&ye!=null&&!ce)try{await twu({fdr:$,organization:t,version:ue,language:i.language,packageName:ye,ir:ae,smartCasing:i.smartCasing,dynamicGeneratorConfig:Le,context:n})}catch(Me){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${ni(Me)}`)}return be}function MUm({generatorInvocation:e}){return e.outputMode._visit({downloadFiles:()=>{},github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:t=>t._visit({mavenOverride:()=>{},pypiOverride:()=>{},nugetOverride:()=>{},npmOverride:()=>{},rubyGemsOverride:()=>{},cratesOverride:()=>{},postman:r=>{let n;return e.raw?.output?.location==="postman"&&(n=e.raw.output?.["collection-id"]),ir.PublishingConfig.direct({target:ir.PublishTarget.postman({apiKey:r.apiKey,workspaceId:r.workspaceId,collectionId:n})})},_other:()=>{}}),_other:()=>{}})}function LUm(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var zUm={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};async function twu({fdr:e,organization:t,version:r,language:n,packageName:i,ir:o,smartCasing:s,dynamicGeneratorConfig:a,context:c}){c.logger.debug(`Uploading dynamic IR for ${n} SDK...`);let u;try{u=await e.api.register.getSdkDynamicIrUploadUrls({orgId:fn.OrgId(t),version:r,snippetConfiguration:{[n]:i}})}catch(m){c.logger.warn(`Failed to get dynamic IR upload URLs (non-fatal, dynamic snippets may be stale): ${m}`);return}let l=u.uploadUrls[n]?.uploadUrl;if(l==null){c.logger.warn(`No upload URL returned for ${n}`);return}let p=xMe({ir:o,disableExamples:!0,smartCasing:s,generationLanguage:n,generatorConfig:a}),d=JSON.stringify(p),f=await fetch(l,{method:"PUT",body:d,headers:{"Content-Type":"application/octet-stream","Content-Length":d.length.toString()}});f.ok?c.logger.debug(`Uploaded dynamic IR for ${n}:${i} (${r})`):c.logger.warn(`Failed to upload dynamic IR for ${n}: ${f.status}`)}function UUm(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function BPe({projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:h,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:I,retryRateLimited:w,requireEnvVars:C,automationMode:x,autoMerge:B,skipIfNoDiff:O,noReplay:N,disableTelemetry:P,automation:U,occurrenceTracker:X,loginCommand:$}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let ne=[],me=X??new J4e;X==null&&me.recordOccurrences(i.generators);let ye=r.generatorsConfiguration?.absolutePathToConfiguration,ce=await Promise.all(i.generators.map(he=>n.runInteractiveTask({name:he.name},ke=>_Um({generatorInvocation:he,interactiveTaskContext:ke,projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:h,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:I,retryRateLimited:w,requireEnvVars:C,automationMode:x,autoMerge:B,skipIfNoDiff:O,noReplay:N,disableTelemetry:P,automation:U,generatorsYmlAbsolutePath:ye,occurrenceTracker:me,loginCommand:$,onSnippetsProduced:Le=>ne.push(Le)}))));if(U==null&&ce.some(he=>!he))throw new bu;return{snippetsProducedBy:ne}}async function _Um({generatorInvocation:e,interactiveTaskContext:t,projectConfig:r,organization:n,workspace:i,context:o,generatorGroup:s,version:a,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,mode:A,fernignorePath:y,skipFernignore:I,dynamicIrOnly:w,validateWorkspace:C,retryRateLimited:x,requireEnvVars:B,automationMode:O,autoMerge:N,skipIfNoDiff:P,noReplay:U,disableTelemetry:X,automation:$,generatorsYmlAbsolutePath:ne,occurrenceTracker:me,loginCommand:ye,onSnippetsProduced:ce}){let he=Date.now();try{let ke=GYe(e),Le=await i.toFernWorkspace({context:o},ke,e.apiOverride?.specs);C&&await _H({workspace:Le,context:o,logWarnings:!1,ossWorkspace:i instanceof Nd?i:void 0});let oe=I?void 0:y??await Nyu({generatorInvocation:e,context:t}),ae=await nwu({projectConfig:r,organization:n,workspace:Le,interactiveTaskContext:t,generatorInvocation:{...e,outputMode:e.outputMode._visit({downloadFiles:()=>e.outputMode,github:we=>Kr.OutputMode.github({...we,makePr:A==="pull-request"}),githubV2:we=>A==="pull-request"?Kr.OutputMode.githubV2(Kr.GithubOutputModeV2.pullRequest(we)):e.outputMode,publish:()=>e.outputMode,publishV2:()=>e.outputMode,_other:()=>e.outputMode})},version:a,audiences:s.audiences,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,readme:e.readme,irVersionOverride:e.irVersionOverride,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,fernignorePath:oe,skipFernignore:I,dynamicIrOnly:w,retryRateLimited:x,requireEnvVars:B,automationMode:O,autoMerge:N,skipIfNoDiff:P,noReplay:U,disableTelemetry:X,loginCommand:ye});if(ae?.createdSnippets&&(ce(e),e.absolutePathToLocalSnippets!=null&&ae.snippetsS3PreSignedReadUrl!=null&&await kyu({snippetsS3PreSignedReadUrl:ae.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:t})),$!=null){let we=ne!=null?await X4e(ne,e.name,me.lookup(e)):void 0;$.recorder.recordSuccess({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,version:ae?.actualVersion??null,durationMs:Date.now()-he,pullRequestUrl:ae?.pullRequestUrl,noChangesDetected:ae?.noChangesDetected,publishTarget:ae?.publishTarget,outputRepoUrl:Y4e(e),generatorsYmlAbsolutePath:ne,generatorsYmlLineNumber:we})}}catch(ke){if($==null)throw ke;if(ke instanceof bu){let ae=ne!=null?await X4e(ne,e.name,me.lookup(e)):void 0;throw $.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:t.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-he,outputRepoUrl:Y4e(e),generatorsYmlAbsolutePath:ne,generatorsYmlLineNumber:ae}),ke}let Le=ni(ke),oe=ne!=null?await X4e(ne,e.name,me.lookup(e)):void 0;$.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:Le,durationMs:Date.now()-he,outputRepoUrl:Y4e(e),generatorsYmlAbsolutePath:ne,generatorsYmlLineNumber:oe}),t.failWithoutThrowing(Le)}}Ut();Ut();ng();rr();var Zwu=require("crypto"),Kqt=require("fs/promises");no();var X8o=xe(zMe(),1);Ut();var Vwu=xe(_wu(),1);no();var qwu=require("util"),OVm=(0,qwu.promisify)(Vwu.default);async function Gwu(e,t,r){let n=vOt(e,t),i=[];for(let o of n){let s=await Promise.all(o.map(async a=>{try{let c=await OVm(a);return c==null||c.height==null||c.width==null?void 0:{filePath:a,width:c.width,height:c.height,blurDataUrl:void 0}}catch(c){r.logger.error(`Failed to measure image size for ${a}. ${c?.message}`);return}}));i.push(...s.filter(qa))}return new Map(i.map(o=>[o.filePath,o]))}async function J8o(e,t,r){let n=new Array(t.length),i=new Set;for(let o=0;o<t.length;o++){let s=t[o];if(s===void 0)continue;let a=(async()=>{let c=await r(s,o);n[o]=c})().then(()=>{i.delete(a)});i.add(a),i.size>=e&&await Promise.race(i)}return await Promise.all(i),n}var PVm=10,Wwu=10,Iri=parseInt(process.env.FERN_DOCS_ASSET_HASH_CONCURRENCY??"32",10);function DVm(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}var N0t=class extends Error{constructor(){super("Another docs publish is currently in progress for this domain."),this.name="DocsPublishConflictError"}};async function Hwu({fdrOrigin:e,token:t,domain:r,basepath:n}){try{await Ly.post(`${e}/docs-deployment/unlock`,{domain:r,basepath:n},{headers:{Authorization:`Bearer ${t}`}})}catch{}}async function Kwu(e){let t=await(0,Kqt.readFile)(e);return(0,Zwu.createHash)("sha256").update(new Uint8Array(t)).digest("hex")}function RVm(e){return e.replace(/\.\.\//g,"_dot_dot_/")}async function $wu({token:e,organization:t,docsWorkspace:r,domain:n,customDomains:i,apiWorkspaces:o,ossWorkspaces:s,context:a,preview:c,previewId:u,editThisPage:l,disableTemplates:p=!1,skipUpload:d=!1,withAiExamples:f=!0,excludeApis:m=!1,targetAudiences:h,docsUrl:A,cliVersion:y,ciSource:I,deployerAuthor:w,loginCommand:C="fern login",multiSource:x=!1}){let B=process.env.FERN_FDR_ORIGIN??process.env.OVERRIDE_FDR_ORIGIN??"https://registry.buildwithfern.com"??"https://registry.buildwithfern.com";await Ozt(`${B}/health`,a.logger)&&a.logger.debug("Detected air-gapped environment - skipping external FDR service calls");let N={};y!=null&&(N["X-CLI-Version"]=y),I!=null&&(N["X-CI-Source"]=JSON.stringify(I),a.logger.debug(`CI source detected: ${I.type} (${I.repo??"unknown repo"})`)),w?.username!=null&&(N["X-Deployer-Author"]=w.username),w?.email!=null&&(N["X-Deployer-Author-Email"]=w.email);let P=ak({token:e.value,...Object.keys(N).length>0&&{headers:N}}),U={type:"public"};m&&a.logger.debug("Experimental flag 'exclude-apis' is enabled - API references will be excluded from S3 upload");let X,$=i[0]??n,ne=zVm(n),me=r.config.experimental&&r.config.experimental.dynamicSnippets===!1;r.config.experimental?.basepathAware===!0&&a.logger.warn("experimental.basepath-aware is deprecated. Use 'multi-source: true' on the instance instead.");let ye=x||r.config.experimental?.basepathAware===!0;ye&&a.logger.debug("Basepath-aware mode is enabled - using basepath-aware S3 key format");let ce=!1,he=()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to early exit..."),Hwu({fdrOrigin:B,token:e.value,domain:n,basepath:ne}))},ke=async()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to signal..."),await Hwu({fdrOrigin:B,token:e.value,domain:n,basepath:ne})),process.exit(1)};process.on("SIGINT",ke),process.on("SIGTERM",ke);try{let Le=await w8t({docsWorkspace:r,organization:t,fdrOrigin:B,token:e.value,taskContext:a}),oe=new Ez({domain:n,docsWorkspace:Le,ossWorkspaces:s,apiWorkspaces:o,taskContext:a,editThisPage:l,uploadFiles:async et=>{let Se=et.map(T=>({...T,sanitizedPath:RVm(T.relativeFilePath)})),je=new Map(Se.map(T=>[T.absoluteFilePath,T])),Ot=new Map(Se.map(T=>[T.sanitizedPath,T.absoluteFilePath])),We=Se.map(T=>({...T,mediaType:X8o.lookup(T.absoluteFilePath)})).filter(T=>T.mediaType!==!1).filter(T=>id.parse(T.mediaType)?.isImage()??!1).map(T=>T.absoluteFilePath),er=await Gwu(We,PVm,a);a.logger.debug(`Hashing ${er.size} image files with concurrency ${Iri}...`);let jt=performance.now(),sr=Array.from(er.values()),nr=(await J8o(Iri,sr,async T=>{let _=je.get(T.filePath);if(_==null)return null;let te=_.sanitizedPath;return{filePath:fn.docs.v1.write.FilePath(gPt(te)),width:T.width,height:T.height,blurDataUrl:T.blurDataUrl,alt:void 0,fileHash:await Kwu(_.absoluteFilePath)}})).filter(T=>T!=null),Oi=performance.now()-jt;a.logger.debug(`Hashed ${nr.length} images in ${Oi.toFixed(0)}ms`);let g=Se.filter(({absoluteFilePath:T})=>!er.has(T));a.logger.debug(`Hashing ${g.length} non-image files with concurrency ${Iri}...`);let b=performance.now(),E=await J8o(Iri,g,async T=>({path:fn.docs.v1.write.FilePath(gPt(T.sanitizedPath)),fileHash:await Kwu(T.absoluteFilePath)})),S=performance.now()-b;if(a.logger.debug(`Hashed ${E.length} non-image files in ${S.toFixed(0)}ms`),c){let T;try{T=await P.docs.v2.write.startDocsPreviewRegister({orgId:fn.OrgId(t),authConfig:U,filepaths:E,images:nr,basePath:ne,previewId:u!=null?DVm(u):void 0})}catch(_){return await Xwu(_,a,t,n,C)}if($=T.previewUrl,X=T.docsRegistrationId,a.logger.debug(`Received preview registration ID: ${X}`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs preview");else{let _=new Set(T.skippedFiles||[]),te=Object.fromEntries(Object.entries(T.uploadUrls).filter(([ft])=>!_.has(ft))),Ge=Object.keys(te).length,Ct=_.size;Ge>0?(a.logger.debug(`Uploading ${Ge} files (${Ct} skipped)...`),await Jwu(te,r.absoluteFilePath,a,Wwu,Ot)):a.logger.debug(`No files to upload (all ${Ct} up to date)`)}return Ywu(T.uploadUrls,r.absoluteFilePath,Ot)}else{let T;try{T=await P.docs.v2.write.startDocsRegister({domain:n,customDomains:i,authConfig:U,orgId:fn.OrgId(t),filepaths:E,images:nr,...ye&&{basepathAware:!0}})}catch(te){return Xwu(te,a,t,n,C)}X=T.docsRegistrationId,ce=!0,a.logger.debug(`Received production registration ID: ${X}`);let _=T.skippedFiles?.length||0;if(_>0&&a.logger.info(`Skipped ${_} unchanged file${_===1?"":"s"} (already uploaded)`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs");else{let te=new Set(T.skippedFiles||[]),Ge=Object.fromEntries(Object.entries(T.uploadUrls).filter(([ft])=>!te.has(ft))),Ct=Object.keys(Ge).length;Ct>0?(a.logger.info(`\u2191 Uploading ${Ct} files...`),await Jwu(Ge,r.absoluteFilePath,a,Wwu,Ot)):a.logger.info("No files to upload (all up to date)")}return Ywu(T.uploadUrls,r.absoluteFilePath,Ot)}},registerApi:async({ir:et,snippetsConfig:Se,playgroundConfig:je,apiName:Ot,workspace:xt,graphqlOperations:We,graphqlTypes:er})=>{let jt=fN({ir:et,snippetsConfig:Se,playgroundConfig:je,graphqlOperations:We,graphqlTypes:er,context:a,apiNameOverride:Ot}),sr=HVm(f,r.config.aiExamples?.style??r.config.experimental?.aiExampleStyleInstructions);if(sr){let b=xt?.getSources()?.filter(E=>E.type==="openapi").map(E=>({absoluteFilePath:E.absoluteFilePath,absoluteFilePathToOverrides:E.absoluteFilePathToOverrides}));b==null||b.length===0?a.logger.debug("Skipping AI example enhancement: no OpenAPI source file paths available"):jt=await Jyt(jt,sr,a,e,t,b)}let zn,nr=new Set;if(Object.keys(Se).length===0)a.logger.debug("No snippets configuration defined, skipping snippet generation...");else if(!me){let g=await UVm({fdr:P,workspace:xt,organization:t,context:a,snippetsConfig:Se});g&&Object.keys(g).length>0&&(zn=g,nr=new Set(Object.keys(g)),a.logger.debug(`Using existing SDK dynamic IRs for: ${Object.keys(g).join(", ")}`));let b=await qVm({workspace:xt,organization:t,context:a,snippetsConfig:Se,skipLanguages:nr});b&&(zn={...zn,...b})}let Oi;try{Oi=await P.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Ot??Ur(et.apiName)),definition:jt,dynamicIRs:zn})}catch(g){let b=rxu(g);return a.logger.error(`FDR registerApiDefinition failed. Error details:
3817
3817
  ${JSON.stringify(b,void 0,2)}`),Ot!=null?a.failAndThrow(`Failed to publish docs because API definition (${Ot}) could not be uploaded. Please contact support@buildwithfern.com`,b,{code:Q.Code.NetworkError}):a.failAndThrow("Failed to publish docs because API definition could not be uploaded. Please contact support@buildwithfern.com",b,{code:Q.Code.NetworkError})}return a.logger.debug(`Registered API Definition ${Ot}: ${Oi.apiDefinitionId}`),Oi.dynamicIRs&&zn&&(d?a.logger.debug("Skip-upload mode: skipping dynamic IR uploads"):await GVm({dynamicIRs:zn,dynamicIRUploadUrls:Oi.dynamicIRs,context:a,apiId:Oi.apiDefinitionId})),Oi.apiDefinitionId},targetAudiences:h});a.logger.info("Resolving docs definition...");let ae=performance.now(),we=await oe.resolve(),Ie=performance.now()-ae;if(r.config.settings?.substituteEnvVars){a.logger.debug("Applying environment variable substitution to docs definition...");let{jsFiles:et,...Se}=we;we={...wy(Se,{onError:Ot=>a.failAndThrow(void 0,Ot,{code:Q.Code.EnvironmentError})},{substituteAsEmpty:!1}),jsFiles:et}}let Ne=Object.keys(we.pages).length,qe=o.length,pt=process.memoryUsage();if(a.logger.info(`Resolved docs definition in ${Ie.toFixed(0)}ms: ${Ne} pages${qe?`, ${qe} API workspaces`:""}`),a.logger.debug(`Memory after resolve: RSS=${(pt.rss/1024/1024).toFixed(2)}MB, Heap=${(pt.heapUsed/1024/1024).toFixed(2)}MB`),X==null)return he(),a.failAndThrow("Failed to publish docs.","Docs registration ID is missing.",{code:Q.Code.InternalError});a.logger.info("Publishing docs to FDR...");let it=performance.now();try{await P.docs.v2.write.finishDocsRegister({docsRegistrationId:X,docsDefinition:we,excludeApis:m,...ye&&!c&&{basepathAware:!0}})}catch(et){return a.failAndThrow("Failed to publish docs to "+n,et,{code:Q.Code.NetworkError})}let at=performance.now()-it;a.logger.debug(`Docs published to FDR in ${at.toFixed(0)}ms`);let Bt=oe.getTranslationPages(),qt=oe.getTranslationNavigationOverlays(),be=c?$:n;Bt!=null&&Object.keys(Bt).length>0&&(a.logger.info(`Registering translations for ${Object.keys(Bt).length} locale(s)...`),await Promise.all(Object.entries(Bt).map(async([et,Se])=>{try{let je=oe.getCollectedFileIds(),Ot=oe.getDocsWorkspacePath(),xt=async T=>{let _=Es(Ot,T),te=qi(Ot,Fe.of(`translations/${et}/${_}`));return await ar(te)?te:T},We=async T=>{let _=await xt(T),te=await(0,Kqt.readFile)(_,"utf-8"),Ge=te.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return Ge!=null?te.slice(Ge[0].length):te},er=async T=>{let _=await xt(T);return(0,Kqt.readFile)(_,"utf-8")},jt=await Promise.all(Object.entries(Se).map(async([T,_])=>{try{let te=we.pages[T],Ge=qi(Ot,Fe.of(T)),{markdown:Ct}=await yF({markdown:_,absolutePathToFernFolder:Ot,absolutePathToMarkdownFile:Ge,context:a,markdownLoader:We}),ft=await Az({markdown:Ct,absolutePathToFernFolder:Ot,absolutePathToMarkdownFile:Ge,context:a,fileLoader:er}),ht=yz({markdown:ft,absolutePathToFernFolder:Ot,absolutePathToMarkdownFile:Ge}),Vt=$O(ht);Vt=gz(Vt,je,{},{absolutePathToMarkdownFile:Ge,absolutePathToFernFolder:Ot},a);let cs=te?.editThisPageUrl;if(cs!=null){let Af=`/fern/${T}`,Sr=`/fern/translations/${et}/${T}`;cs=cs.replace(Af,Sr)}return[T,{markdown:Vt,rawMarkdown:Vt,editThisPageUrl:cs,editThisPageLaunch:te?.editThisPageLaunch}]}catch(te){a.logger.warn(`Failed to process translated page "${T}" for locale "${et}": ${String(te)}. Falling back to base page.`);return}})),sr={...we.pages,...Object.fromEntries(jt.filter(T=>T!=null))},zn=Zze(we.config.root,Se,a),nr=qt?.[et],Oi=we.config.announcement,g=we.config.navbarLinks;nr!=null&&(zn=$ze(zn,nr),Oi=e4e(nr)??Oi,nr.navbarLinks!=null&&(g=nr.navbarLinks));let b={...we,pages:sr,config:{...we.config,root:zn,announcement:Oi,navbarLinks:g}},E=Object.keys(Se).length;a.logger.debug(`Sending translation for locale "${et}" (${E} page${E===1?"":"s"})`);let S=await fetch(`${B}/v2/registry/docs/translations/register`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.value}`,...N},body:JSON.stringify({domain:be,customDomains:c?[]:i,orgId:t,locale:et,docsDefinition:b})});if(!S.ok){let T=await S.text();throw new Error(`HTTP ${S.status}: ${T}`)}a.logger.debug(`Registered translations for locale "${et}"`)}catch(je){a.logger.warn(`Failed to register translations for locale "${et}": ${String(je)}`)}})));let ue=dN($);await WVm({docsDefinition:we,isPreview:c,context:a});let Me=Gde(ue,ue);return a.logger.info(ve.green(`Published docs to ${Me}`)),ue}catch(Le){throw he(),Le}finally{ce=!1,process.removeListener("SIGINT",ke),process.removeListener("SIGTERM",ke)}}function exu(e){return typeof e=="object"&&e!==null&&"uploadUrl"in e&&typeof e.uploadUrl=="string"&&"fileId"in e&&typeof e.fileId=="string"}function FVm(e){if(typeof e=="string")return e;if(exu(e))return e.uploadUrl;throw new Error(`Unexpected upload URL value: ${JSON.stringify(e)}`)}function kVm(e,t){return exu(t)?Ux.FileId(t.fileId):Ux.FileId(e)}async function Jwu(e,t,r,n,i){let o=Date.now(),s=Object.keys(e).length;r.logger.debug(`Start uploading ${s} files...`);let a=vOt(Object.entries(e),n),c=0;for(let l of a){await Promise.all(l.map(async([d,f])=>{let m=i.get(d)||qi(t,Fe.of(d));try{let h=FVm(f),A=X8o.lookup(m);await Ly.put(h,await(0,Kqt.readFile)(m),{headers:{"Content-Type":A===!1?"application/octet-stream":A,"Cache-Control":"public, max-age=31536000, immutable"}})}catch(h){r.failAndThrow(`Failed to upload ${m}`,h,{code:Q.Code.NetworkError})}}));let p=Date.now();c+=l.length,r.logger.debug(`Uploaded ${c}/${s} files in ${p-o}ms`)}let u=Date.now();r.logger.debug(`Finished uploading ${s} files in ${u-o}ms`)}function Ywu(e,t,r){let n=[];for(let[i,o]of Object.entries(e)){let s=Fe.of(i),a=r?.get(i)||qi(t,s);n.push({relativeFilePath:s,absoluteFilePath:a,fileId:kVm(i,o)})}return n}async function Xwu(e,t,r,n,i){t.instrumentPostHogEvent({command:"docs-generation",properties:{error:JSON.stringify(e)}});let o=rxu(e);t.logger.debug(`startDocsRegister failed for domain '${n}', org '${r}'. Error details:
3818
3818
  ${JSON.stringify(o,void 0,2)}`);let s=e,a=s?.content;if(a?.reason==="status-code"&&a?.statusCode===409)throw new N0t;let c=NVm(e,r,n,i);if(c!=null)return t.failAndThrow(c,void 0,{code:Q.Code.AuthError});switch(s?.error){case"InvalidCustomDomainError":return t.failAndThrow("Your docs domain should end with docs.buildwithfern.com",void 0,{code:Q.Code.ConfigError});case"InvalidDomainError":return t.failAndThrow("Please make sure that none of your custom domains are not overlapping (i.e. one is a substring of another)",void 0,{code:Q.Code.ConfigError});case"UnauthorizedError":return t.failAndThrow(txu(n,r,a,i),void 0,{code:Q.Code.AuthError});case"UserNotInOrgError":return t.failAndThrow(`You do not belong to organization '${r}'. Please run '${i}' to ensure you are logged in with the correct account.
3819
3819
 
@@ -3821,7 +3821,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
3821
3821
 
3822
3822
  Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`:r}function MVm(e,t,r){return t!=null&&t.includes("Invalid authorization token")?`Your authentication token is invalid or expired. Please run '${r}' to re-authenticate.`:`You are not authorized to publish docs under organization '${e}'. Please run '${r}' to ensure you are logged in with the correct account.
3823
3823
 
3824
- Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function LVm(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 zVm(e){try{return new URL(dN(e)).pathname}catch{return}}async function UVm({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await _Vm({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=Object.fromEntries(Object.entries(o).map(([l,p])=>[l,{packageName:p.packageName,version:p.version}])),c=(await e.api.register.checkSdkDynamicIrExists({orgId:fn.OrgId(r),snippetConfiguration:s})).existingDynamicIrs??{};if(Object.keys(c).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[l,p]of Object.entries(c??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${l}...`);let d=await fetch(p.downloadUrl);if(d.ok){let f=await d.json();u[l]={dynamicIR:f},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${l}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${l}: ${d.status}`)}catch(d){n.logger.warn(`Error downloading SDK dynamic IR for ${l}: ${d}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function Y8o(e){return e.replace(/^https:\/\//,"")}async function _Vm({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package??void 0,explicitVersion:r.typescriptSdk?.version??void 0},{language:"python",snippetName:r.pythonSdk?.package??void 0,explicitVersion:r.pythonSdk?.version??void 0},{language:"java",snippetName:r.javaSdk?.coordinate??void 0,explicitVersion:r.javaSdk?.version??void 0},{language:"go",snippetName:r.goSdk?.githubRepo&&Y8o(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version??void 0},{language:"csharp",snippetName:r.csharpSdk?.package??void 0,explicitVersion:r.csharpSdk?.version??void 0},{language:"ruby",snippetName:r.rubySdk?.gem??void 0,explicitVersion:r.rubySdk?.version??void 0},{language:"php",snippetName:r.phpSdk?.package??void 0,explicitVersion:r.phpSdk?.version??void 0},{language:"swift",snippetName:r.swiftSdk?.package??void 0,explicitVersion:r.swiftSdk?.version??void 0},{language:"rust",snippetName:r.rustSdk?.package??void 0,explicitVersion:r.rustSdk?.version??void 0}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion??void 0;a||(a=(await VVm({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 VVm({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=Qn.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.computeSemanticVersion({githubRepository:s,language:o,package:a});return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${u.version} for package "${a}"`),{version:u.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function qVm({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&&Y8o(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=Z4e({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=Y8o(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=Yg({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=xMe({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 GVm({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 WVm({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 HVm(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 rxu(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 Jqt=[60*1e3,300*1e3,300*1e3];async function Yqt({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,loginCommand:m}){let h=a&&!n.config.settings?.substituteEnvVars;n.config=wy(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:Q.Code.EnvironmentError})},{substituteAsEmpty:h});let A=n.config.instances;if(A.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.",void 0,{code:Q.Code.ConfigError});return}if(A.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${A[0]?.url})`,void 0,{code:Q.Code.ConfigError});return}let y=A.find(C=>C.url===s)??A[0];if(y==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:Q.Code.ConfigError});return}let I=[];y.customDomain!=null&&(typeof y.customDomain=="string"?I.push(y.customDomain):Array.isArray(y.customDomain)&&I.push(...y.customDomain)),y.multiSource===!0&&KVm(y.url,I,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let w;return await i.runInteractiveTask({name:y.url},async()=>{let C=performance.now(),x=()=>$wu({docsWorkspace:n,customDomains:I,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let O=0;;O++)try{w=await x();break}catch(N){if(!(N instanceof N0t)||O>=Jqt.length){if(N instanceof N0t)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:Q.Code.NetworkError});throw N}let P=Jqt[O]??Jqt[Jqt.length-1]??6e4,U=P/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${U} minute${U===1?"":"s"} (attempt ${O+1}/${Jqt.length})...`),await new Promise(X=>setTimeout(X,P))}let B=performance.now()-C;i.logger.debug(`Docs publishing completed in ${B.toFixed(0)}ms`)}),w}function nxu(e){try{let t=e.startsWith("https://")||e.startsWith("http://")?e:`https://${e}`;return new URL(t).pathname}catch{return"/"}}function KVm(e,t,r){let n=nxu(e);for(let i of t){let o=nxu(i);o!=="/"&&n!==o&&r.failAndThrow(`When multi-source is enabled, the url and custom-domain must share the same basepath. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:Q.Code.ConfigError})}}var Cri=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 gm({context:this.context,task:this.task});try{let s=await Yqt({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:"5.17.0",loginCommand:"fern auth login"});return o.getResult()===Hf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:ni(s)}}}};Ut();var j0t=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(`
3824
+ Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function LVm(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 zVm(e){try{return new URL(dN(e)).pathname}catch{return}}async function UVm({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await _Vm({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=Object.fromEntries(Object.entries(o).map(([l,p])=>[l,{packageName:p.packageName,version:p.version}])),c=(await e.api.register.checkSdkDynamicIrExists({orgId:fn.OrgId(r),snippetConfiguration:s})).existingDynamicIrs??{};if(Object.keys(c).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[l,p]of Object.entries(c??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${l}...`);let d=await fetch(p.downloadUrl);if(d.ok){let f=await d.json();u[l]={dynamicIR:f},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${l}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${l}: ${d.status}`)}catch(d){n.logger.warn(`Error downloading SDK dynamic IR for ${l}: ${d}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function Y8o(e){return e.replace(/^https:\/\//,"")}async function _Vm({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package??void 0,explicitVersion:r.typescriptSdk?.version??void 0},{language:"python",snippetName:r.pythonSdk?.package??void 0,explicitVersion:r.pythonSdk?.version??void 0},{language:"java",snippetName:r.javaSdk?.coordinate??void 0,explicitVersion:r.javaSdk?.version??void 0},{language:"go",snippetName:r.goSdk?.githubRepo&&Y8o(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version??void 0},{language:"csharp",snippetName:r.csharpSdk?.package??void 0,explicitVersion:r.csharpSdk?.version??void 0},{language:"ruby",snippetName:r.rubySdk?.gem??void 0,explicitVersion:r.rubySdk?.version??void 0},{language:"php",snippetName:r.phpSdk?.package??void 0,explicitVersion:r.phpSdk?.version??void 0},{language:"swift",snippetName:r.swiftSdk?.package??void 0,explicitVersion:r.swiftSdk?.version??void 0},{language:"rust",snippetName:r.rustSdk?.package??void 0,explicitVersion:r.rustSdk?.version??void 0}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion??void 0;a||(a=(await VVm({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 VVm({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=Qn.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.computeSemanticVersion({githubRepository:s,language:o,package:a});return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${u.version} for package "${a}"`),{version:u.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function qVm({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&&Y8o(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=Z4e({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=Y8o(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=Yg({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=xMe({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 GVm({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 WVm({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 HVm(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 rxu(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 Jqt=[60*1e3,300*1e3,300*1e3];async function Yqt({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,loginCommand:m}){let h=a&&!n.config.settings?.substituteEnvVars;n.config=wy(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:Q.Code.EnvironmentError})},{substituteAsEmpty:h});let A=n.config.instances;if(A.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.",void 0,{code:Q.Code.ConfigError});return}if(A.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${A[0]?.url})`,void 0,{code:Q.Code.ConfigError});return}let y=A.find(C=>C.url===s)??A[0];if(y==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:Q.Code.ConfigError});return}let I=[];y.customDomain!=null&&(typeof y.customDomain=="string"?I.push(y.customDomain):Array.isArray(y.customDomain)&&I.push(...y.customDomain)),y.multiSource===!0&&KVm(y.url,I,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let w;return await i.runInteractiveTask({name:y.url},async()=>{let C=performance.now(),x=()=>$wu({docsWorkspace:n,customDomains:I,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let O=0;;O++)try{w=await x();break}catch(N){if(!(N instanceof N0t)||O>=Jqt.length){if(N instanceof N0t)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:Q.Code.NetworkError});throw N}let P=Jqt[O]??Jqt[Jqt.length-1]??6e4,U=P/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${U} minute${U===1?"":"s"} (attempt ${O+1}/${Jqt.length})...`),await new Promise(X=>setTimeout(X,P))}let B=performance.now()-C;i.logger.debug(`Docs publishing completed in ${B.toFixed(0)}ms`)}),w}function nxu(e){try{let t=e.startsWith("https://")||e.startsWith("http://")?e:`https://${e}`;return new URL(t).pathname}catch{return"/"}}function KVm(e,t,r){let n=nxu(e);for(let i of t){let o=nxu(i);o!=="/"&&n!==o&&r.failAndThrow(`When multi-source is enabled, the url and custom-domain must share the same basepath. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:Q.Code.ConfigError})}}var Cri=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 gm({context:this.context,task:this.task});try{let s=await Yqt({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:"5.17.1",loginCommand:"fern auth login"});return o.getResult()===Hf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:ni(s)}}}};Ut();var j0t=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(`
3825
3825
  `),this.stream.write(`${ve.cyan("\u25C6")} ${ve.bold(t.title)}
3826
3826
  `),t.subtitle!=null&&this.stream.write(` ${ve.dim(t.subtitle)}
3827
3827
  `),this.stream.write(`
@@ -4499,7 +4499,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
4499
4499
  Run ${ve.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
4500
4500
  Run ${ve.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),Rit(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function sAs({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!yXu(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+=`
4501
4501
  ${await c$h(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+ve.dim(a.currentVersion)+ve.reset(" \u2192 ")+ve.green(a.latestVersion);return i+=`
4502
- `,n?Rit(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function c$h(e){let r=await new AXu.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Q({message:`Generator ${e} not found`,code:Q.Code.ConfigError});return r.body.displayName}async function u$h({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await EXu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=G6e(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await zD({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 EXu({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=G6e(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await zD({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 EXu({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 DL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?iy(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 vXu(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;try{c=TQ(a.latestVersion,a.previousVersion)}catch{throw new Q({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:Q.Code.ConfigError})}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 Ohi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await u$h({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(...vXu(u,c,t.logger));else s.push(...vXu(a.versions,void 0,t.logger))}return s}async function ghe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await FDt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new Q({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:Q.Code.NetworkError})}}var IXu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Phi=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=_n.Info;isLocal;stdoutRedirector=new Bhi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await r_t();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new s3t(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 Thi({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"5.17.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,n){throw this.failWithoutThrowing(t,r,n),new bu}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof bu)&&(VMt({message:t,error:r,logger:this.logger}),Shi(this,r,{...n,message:t}))}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)+`
4502
+ `,n?Rit(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function c$h(e){let r=await new AXu.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Q({message:`Generator ${e} not found`,code:Q.Code.ConfigError});return r.body.displayName}async function u$h({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await EXu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=G6e(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await zD({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 EXu({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=G6e(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await zD({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 EXu({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 DL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?iy(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 vXu(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;try{c=TQ(a.latestVersion,a.previousVersion)}catch{throw new Q({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:Q.Code.ConfigError})}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 Ohi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await u$h({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(...vXu(u,c,t.logger));else s.push(...vXu(a.versions,void 0,t.logger))}return s}async function ghe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await FDt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new Q({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:Q.Code.NetworkError})}}var IXu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Phi=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=_n.Info;isLocal;stdoutRedirector=new Bhi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await r_t();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new s3t(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 Thi({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"5.17.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,n){throw this.failWithoutThrowing(t,r,n),new bu}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof bu)&&(VMt({message:t,error:r,logger:this.logger}),Shi(this,r,{...n,message:t}))}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)+`
4503
4503
  `),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 bXu({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
4504
4504
  `)||(r+=`
4505
4505
  `),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=ATi(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 vJt(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 n.failWithoutThrowing(void 0,o),new bu}finally{n.finish()}return i}instrumentPostHogEvent(t){this.isLocal||this.posthogManager.sendEvent(t)}captureException(t,r){this.sentryClient.captureException(t,r)}logger=MS((t,...r)=>this.log(t,...r));stderr=MS((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=CXu(r),i=1+(this.longestWorkspaceName!=null?CXu(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=IXu[this.numTasks++%IXu.length],a=ve.hex(s)(o);return{...this.constructTaskInit(),logPrefix:a,title:ve.hex(s).bold(r)}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Hf.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:t=>{this.instrumentPostHogEvent(t)},shouldBufferLogs:!1,captureException:(t,r)=>{this.sentryClient.captureException(t,r)}}}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=>QS.indexOf(i.level)>=QS.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===_n.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 ghe({cliEnvironment:this.environment,includePreReleases:t}),n=TQ(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await Ohi({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await iAs({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(`
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "5.17.0",
2
+ "version": "5.17.1",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",