fern-api 5.7.4 → 5.7.5

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
@@ -2692,7 +2692,7 @@ ${rRc.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&cvo(th
2692
2692
  `+K6e.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?K6e.default.cyan(pRc(t,this.opt.mask)):K6e.default.italic(K6e.default.dim("[hidden]")):this.opt.mask?pRc(t,this.opt.mask):K6e.default.italic(K6e.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 T5r=we($w(),1);var lFc=we(Vvo(),1),S5r=require("child_process"),Jnt=require("fs"),w5r=we(require("path"),1),pFc=we(require("os"),1),fFc=require("crypto"),_Co=we(cFc(),1);var v5r=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var uzt=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var C5r=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var x5r=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function _5r(e="",t,r){let n=new TCo(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 uFc(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function A2d(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 TCo=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=A2d(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??pFc.default.tmpdir(),r=(0,fFc.randomUUID)(),n=uFc(this.fileOptions.prefix),i=uFc(this.fileOptions.postfix),o=`${n}${r}${i}`,s=w5r.default.resolve(t,o),a=w5r.default.resolve(t)+w5r.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,Jnt.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new v5r(t)}}readTemporaryFile(){try{let t=(0,Jnt.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,lFc.detect)(t)??"utf8";_Co.default.encodingExists(r)||(r="utf8"),this.text=_Co.default.decode(t,r)}}catch(t){throw new C5r(t)}}removeTemporaryFile(){try{(0,Jnt.unlinkSync)(this.tempFile)}catch(t){throw new x5r(t)}}launchEditor(){try{let t=(0,S5r.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new uzt(t)}}launchEditorAsync(t){try{(0,S5r.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new uzt(r)}}};var dFc=we(WL(),1);var lzt=class extends Hw{_run(t){this.done=t,this.editorResult=new dFc.Subject;let r=_B(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"?T5r.default.dim("Received"):T5r.default.dim("Press <enter> to launch your preferred editor."),t&&(r=T5r.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),_5r(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 yFc=require("stream");var gFc=we(require("readline"),1),AFc=we(hFc(),1),Z6e=class{constructor(t){this.rl||=gFc.default.createInterface(b2d(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 b2d(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 AFc.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var pzt=class extends Z6e{constructor(t={}){super(t),this.log=new yFc.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return H3t(this.rl,this.bottomBar.split(`
2693
2693
  `).length),this}updateBottomBar(t){return H3t(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+`
2694
2694
  `}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&&JVr(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var Fd=we(WL(),1),IFc=we(w3t(),1);var B5r=we(WL(),1),bFc=we(w3t(),1),O5r=function(e,t,r){return typeof e[t]!="function"?(0,B5r.of)(e):(0,B5r.from)((0,bFc.default)(e[t])(r).then(n=>(e[t]=n,e)))};var EFc={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}},Ynt=class extends Z6e{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,Fd.from)(t):(0,Fd.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,Fd.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,Fd.from)([t]),this.process=n.pipe((0,Fd.concatMap)(this.processQuestion.bind(this)),(0,Fd.publish)()),this.process.connect(),this.process.pipe((0,Fd.reduce)((i,o)=>(EFc.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,Fd.defer)(()=>(0,Fd.of)(t).pipe((0,Fd.concatMap)(this.setDefaultType.bind(this)),(0,Fd.concatMap)(this.filterIfRunnable.bind(this)),(0,Fd.concatMap)(()=>O5r(t,"message",this.answers)),(0,Fd.concatMap)(()=>O5r(t,"default",this.answers)),(0,Fd.concatMap)(()=>O5r(t,"choices",this.answers)),(0,Fd.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,Fd.defer)(()=>(0,Fd.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,Fd.defer)(()=>(0,Fd.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&EFc.get(this.answers,t.name)!==void 0)return Fd.EMPTY;if(t.when===!1)return Fd.EMPTY;if(typeof t.when!="function")return(0,Fd.of)(t);let{answers:r}=this;return(0,Fd.defer)(()=>(0,Fd.from)((0,IFc.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,Fd.filter)(n=>n!=null)))}};function vFc(e){let t=function(r,n){let i;try{i=new Ynt(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",J3t),this.registerPrompt("input",H6e),this.registerPrompt("number",Y3t),this.registerPrompt("confirm",X3t),this.registerPrompt("rawlist",Z3t),this.registerPrompt("expand",ezt),this.registerPrompt("checkbox",tzt),this.registerPrompt("password",rzt),this.registerPrompt("editor",lzt)},t.restoreDefaultPrompts(),t}var OCo=vFc();function I2d(e,t){OCo.registerPrompt(e,t)}function v2d(){OCo.restoreDefaultPrompts()}var C2d={prompt:OCo,ui:{BottomBar:pzt,Prompt:Ynt},createPromptModule:vFc,registerPrompt:I2d,restoreDefaultPrompts:v2d,Separator:Vj},Yp=C2d;var Xnt=require("path");function xFc(){let e=x2d();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function x2d(e=process.argv[1]?(0,Xnt.dirname)(process.argv[1]):process.cwd(),t=Xnt.sep==="\\"){let r=t?CFc(e):e;return n=>{if(!n)return;let i=t?CFc(n):n,{dir:o,base:s,ext:a}=Xnt.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 CFc(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var PCo=e=>{if("flags"in e){let t=wFc(e.flags),r=SFc(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,DCo(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,w2d(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function w2d(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 wFc=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,fzt(r)]).filter(([,t])=>t!==void 0)),SFc=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?DCo(n):void 0]}))};var fzt=e=>e===void 0?void 0:e.variant??e.enabled,DCo=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};function _Fc(){return"CompressionStream"in globalThis}async function P5r(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 D5r="0123456789abcdef",R5r=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+=D5r.charAt(this.bytes[r]>>>4),t+=D5r.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+=D5r.charAt(this.bytes[r]>>>4),t+=D5r.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}},RCo=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??S2d()}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 R5r.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,R5r.ofInner(t)}},S2d=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),TFc,xve=()=>_2d().toString(),_2d=()=>(TFc||(TFc=new RCo)).generate();var Gj=(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 T2d=["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"],BFc=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return T2d.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var O2d=Array.isArray,OFc=Object.prototype,wz0=OFc.hasOwnProperty,FCo=OFc.toString,kCo=O2d||function(e){return FCo.call(e)==="[object Array]"};var NCo=e=>e===Object(e)&&!kCo(e);var dzt=e=>e===void 0,mzt=e=>FCo.call(e)=="[object String]",PFc=e=>mzt(e)&&e.trim().length===0;var DFc=e=>FCo.call(e)=="[object Number]"&&e===e;var jCo=e=>e instanceof Error;function F5r(e){return e===null||typeof e!="object"}function eLe(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function RFc(e){return eLe(e,"ErrorEvent")}function Znt(e){return typeof Event<"u"&&P2d(e,Event)}function FFc(e){return eLe(e,"Object")}function P2d(e,t){try{return e instanceof t}catch{return!1}}function hzt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),DFc(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),hzt(i||r,t,r,n))}var D2d=864e5,k5r=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=hzt(t.bucketSize,0,100,t._logger),this._refillRate=hzt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=hzt(t.refillInterval,0,D2d,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 N5r=class{add(t){let r=xve();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 R2d(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var kFc=(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=>kFc(`${e} ${o}`,t,r)}},F2d=e=>e();function NFc(e,t=F2d){return kFc(e,t,R2d())}var tit="Mobile",Q5r="iOS",eit="Android",jFc="Tablet",jz0=eit+" "+jFc;var k2d="Apple",Qz0=k2d+" Watch",QFc="Safari",M5r="BlackBerry",MFc="Samsung",N2d=MFc+"Browser",j2d=MFc+" Internet",L5r="Chrome",Q2d=L5r+" OS",M2d=L5r+" "+Q5r,LFc="Internet Explorer",L2d=LFc+" "+tit,MCo="Opera",Mz0=MCo+" Mini",zFc="Edge",z2d="Microsoft "+zFc,LCo="Firefox",U2d=LCo+" "+Q5r,zCo="Nintendo",UCo="PlayStation",j5r="Xbox",V2d=eit+" "+tit,q2d=tit+" "+QFc,gzt="Windows",G2d=gzt+" Phone";var UFc="Generic",Lz0=UFc+" "+tit.toLowerCase(),zz0=UFc+" "+jFc.toLowerCase(),W2d="Konqueror",uk="(\\d+(\\.\\d+)?)",QCo=new RegExp("Version/"+uk),Uz0=new RegExp(j5r,"i"),Vz0=new RegExp(UCo+" \\w+","i"),qz0=new RegExp(zCo+" \\w+","i"),$2d=new RegExp(M5r+"|PlayBook|BB10","i"),H2d={"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 Gz0={[L2d]:[new RegExp("rv:"+uk)],[z2d]:[new RegExp(zFc+"?\\/"+uk)],[L5r]:[new RegExp("("+L5r+"|CrMo)\\/"+uk)],[M2d]:[new RegExp("CriOS\\/"+uk)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+uk)],[QFc]:[QCo],[q2d]:[QCo],[MCo]:[new RegExp("("+MCo+"|OPR)\\/"+uk)],[LCo]:[new RegExp(LCo+"\\/"+uk)],[U2d]:[new RegExp("FxiOS\\/"+uk)],[W2d]:[new RegExp("Konqueror[:/]?"+uk,"i")],[M5r]:[new RegExp(M5r+" "+uk),QCo],[V2d]:[new RegExp("android\\s"+uk,"i")],[j2d]:[new RegExp(N2d+"\\/"+uk)],[LFc]:[new RegExp("(rv:|MSIE )"+uk)],Mozilla:[new RegExp("rv:"+uk)]};var Wz0=[[new RegExp(j5r+"; "+j5r+" (.*?)[);]","i"),e=>[j5r,e&&e[1]||""]],[new RegExp(zCo,"i"),[zCo,""]],[new RegExp(UCo,"i"),[UCo,""]],[$2d,[M5r,""]],[new RegExp(gzt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[G2d,""];if(new RegExp(tit).test(t)&&!/IEMobile\b/.test(t))return[gzt+" "+tit,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=H2d[n]||"";return/arm/i.test(t)&&(i="RT"),[gzt,i]}return[gzt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[Q5r,t.join(".")]}return[Q5r,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=dzt(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+eit+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+eit+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[eit,t.join(".")]}return[eit,""]}],[/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/,[Q2d,""]],[/Linux|debian/i,["Linux",""]]];var VFc="utf8";function qFc(e,t){if(!e||typeof e!="string"||K2d(e))throw new Error(t)}function K2d(e){return e.trim().length===0}function GFc(e){return e?.replace(/\/+$/,"")}async function WFc(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 z5r(){return new Date().toISOString()}function $pe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var $Fc=e=>e instanceof Error;function VCo(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var U5r=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 tLe=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()}},rit=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function HFc(e){if(e instanceof tLe){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 qCo(e){return typeof e=="object"&&(e instanceof tLe||e instanceof rit)}function KFc(e){return typeof e=="object"&&e instanceof tLe&&e.status===413}var Azt=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new N5r,this._events=new U5r,this._isInitialized=!1,qFc(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=GFc(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:qCo},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=NFc("[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=!_Fc()||(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(Gj.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(Gj.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(Gj.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:PCo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof tLe)return{type:"api_error",statusCode:t.status};if(t instanceof rit){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=fzt(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(Gj.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(Gj.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(Gj.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(Gj.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(Gj.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=$pe(()=>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:z5r()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await P5r(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:z5r(),uuid:n?.uuid?n.uuid:xve()};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 HFc(t)})}async flush(){let t=VCo([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),VCo([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(Gj.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(Gj.Queue)||[]).slice(i.length);this.setPersistedProperty(Gj.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:z5r()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await P5r(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>KFc(f)?!1:qCo(f)};try{await this.fetchWithRetry(u,p,d)}catch(f){if(KFc(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 rit||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,VFc)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await WFc(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=$pe(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new rit(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new tLe(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(Gj.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!qCo(o))throw o;await HFc(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=$pe(()=>{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 Wj={};re(Wj,{DOMExceptionCoercer:()=>HCo,ErrorCoercer:()=>KCo,ErrorEventCoercer:()=>JCo,ErrorPropertiesBuilder:()=>GCo,EventCoercer:()=>ZCo,ObjectCoercer:()=>XCo,PrimitiveCoercer:()=>exo,PromiseRejectionEventCoercer:()=>txo,ReduceableCache:()=>rxo,StringCoercer:()=>YCo,chromeStackLineParser:()=>WCo,createDefaultStackParser:()=>lNd,createStackParser:()=>skc,geckoStackLineParser:()=>$Co,nodeStackLineParser:()=>rkc,opera10StackLineParser:()=>ZFc,opera11StackLineParser:()=>ekc,reverseAndStripFrames:()=>okc,winjsStackLineParser:()=>XFc});var V5r,JFc,q5r;function YFc(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return q5r&&r.length===JFc||(JFc=r.length,q5r=r.reduce((n,i)=>{V5r||(V5r={});let o=V5r[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,V5r[i]=[u,l];break}}}return n},{})),q5r}var Y2d=4,GCo=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&&kCo(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:YFc(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=Y2d){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 BB="?";function RZ(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?BB:r,in_app:!0};return dzt(n)||(o.lineno=n),dzt(i)||(o.colno=i),o}var G5r=(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]:BB,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var X2d=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Z2d=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,eNd=/\((\S*)(?::(\d+))(?::(\d+))\)/,WCo=(e,t)=>{let r=X2d.exec(e);if(r){let[,i,o,s]=r;return RZ(t,i,BB,+o,+s)}let n=Z2d.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=eNd.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=G5r(n[1]||BB,n[2]);return RZ(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var tNd=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,rNd=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,$Co=(e,t)=>{let r=tNd.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=rNd.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]||BB;return[o,i]=G5r(o,i),RZ(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var nNd=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,XFc=(e,t)=>{let r=nNd.exec(e);return r?RZ(t,r[2],r[1]||BB,+r[3],r[4]?+r[4]:void 0):void 0};var iNd=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,ZFc=(e,t)=>{let r=iNd.exec(e);return r?RZ(t,r[2],r[3]||BB,+r[1]):void 0},oNd=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,ekc=(e,t)=>{let r=oNd.exec(e);return r?RZ(t,r[5],r[3]||r[4]||BB,+r[1],+r[2]):void 0};var sNd=/^\s*[-]{4,}$/,aNd=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,rkc=(e,t)=>{let r=e.match(aNd);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||BB,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:tkc(r[3]),colno:tkc(r[4]),in_app:cNd(c||"",u),platform:t}}if(e.match(sNd))return{filename:e,platform:t}};function cNd(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 tkc(e){return parseInt(e||"",10)||void 0}var nkc=/\(error: (.*)\)/,ikc=50;function okc(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,ikc).map(r=>({...r,filename:r.filename||uNd(t).filename,function:r.function||BB}))}function uNd(e){return e[e.length-1]||{}}function lNd(){return skc("web:javascript",WCo,$Co)}function skc(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
2695
- `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=nkc.test(a)?a.replace(nkc,"$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>=ikc)break}}return okc(i)}}var HCo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=mzt(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 eLe(t,"DOMException")}isDOMError(t){return eLe(t,"DOMError")}};var KCo=class{match(t){return jCo(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 JCo=class{constructor(){}match(t){return RFc(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 pNd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,YCo=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(pNd);return i&&(r=i[1],n=i[2]),[r,n]}};var akc=["fatal","error","warning","log","info","debug"];function W5r(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 XCo=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 Znt(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=W5r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return mzt(t)&&!PFc(t)&&akc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if($Fc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var ZCo=class{match(t){return Znt(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${W5r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var exo=class{match(t){return F5r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var txo=class{match(t){return eLe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Znt(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 F5r(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 rxo=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 lkc=require("fs"),pkc=require("readline"),$5r=new Wj.ReduceableCache(25),fkc=new Wj.ReduceableCache(20),nxo=7,fNd=1e3,dNd=1e4;async function dkc(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"||ANd(s)||yNd(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(fkc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=ENd(o);if(s.every(c=>bNd(i,c)))continue;let a=INd($5r,i,{});n.push(mNd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&hNd(e,$5r),$5r.reduce(),e}function mNd(e,t,r){return new Promise(n=>{let i=(0,lkc.createReadStream)(e),o=(0,pkc.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(){fkc.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]=vNd(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 hNd(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;gNd(r.lineno,r,n)}}function gNd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=mkc(e);i<e;i++){let o=r[i];if(o===void 0)return void ckc(t);t.pre_context.push(o)}if(r[e]===void 0)return void ckc(t);t.context_line=r[e];let n=hkc(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 ckc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function ANd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function yNd(e){return e.lineno!==void 0&&e.lineno>dNd||e.colno!==void 0&&e.colno>fNd}function bNd(e,t){let r=$5r.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 ENd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=ukc(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+nxo:(i.push(n),n=ukc(o)),t++}return i}function ukc(e){return[mkc(e),hkc(e)]}function mkc(e){return Math.max(1,e-nxo)}function hkc(e){return e+nxo}function INd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function vNd(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 CNd(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 gkc(e,t){globalThis.process?.on("uncaughtException",CNd(e,t))}function Akc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var xNd=2e3,_W=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new k5r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return NCo(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()&&(gkc(this.onException.bind(this),this.onFatalError.bind(this)),Akc(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(xNd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var ykc="5.29.1";var yzt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function bkc(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 wNd=6e4,SNd=1152921504606847e3,_Nd=["is_not"],nit=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},kd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},FZ=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},H5r=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 FZ||u instanceof kd?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 FZ||u instanceof kd?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 kd("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 kd("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 kd(`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 kd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new kd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new kd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new kd(`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 kd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new kd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new kd(`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 FZ)throw l;if(l instanceof kd)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new kd("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"?xkc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):Ckc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await Ekc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await Ekc(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(wNd,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 nit(`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 nit(`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 nit(`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 nit&&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=$pe(()=>{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 Ekc(e,t,r=""){let n=await bkc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/SNd}function Ckc(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 kd("Operator is_not_set is not supported")}else throw new kd(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!_Nd.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 Ikc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return Ikc(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 kd("Date operations cannot be performed on boolean values");let u=DNd(String(i));if(u==null&&(u=vkc(i)),u==null)throw new kd(`Invalid date: ${i}`);let l=vkc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return cV(OB(String(s)),OB(String(i)))===0;case"semver_neq":return cV(OB(String(s)),OB(String(i)))!==0;case"semver_gt":return cV(OB(String(s)),OB(String(i)))>0;case"semver_gte":return cV(OB(String(s)),OB(String(i)))>=0;case"semver_lt":return cV(OB(String(s)),OB(String(i)))<0;case"semver_lte":return cV(OB(String(s)),OB(String(i)))<=0;case"semver_tilde":{let u=OB(String(s)),{lower:l,upper:p}=BNd(String(i));return cV(u,l)>=0&&cV(u,p)<0}case"semver_caret":{let u=OB(String(s)),{lower:l,upper:p}=ONd(String(i));return cV(u,l)>=0&&cV(u,p)<0}case"semver_wildcard":{let u=OB(String(s)),{lower:l,upper:p}=PNd(String(i));return cV(u,l)>=0&&cV(u,p)<0}default:throw new kd(`Unknown operator: ${o}`)}}function TNd(e,t){if(!(e in t))throw new FZ(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function xkc(e,t,r,n=!1){let i=String(e.value);TNd(i,r);let o=r[i];return wkc(o,t,r,n)}function wkc(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=wkc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof FZ)throw c;if(c instanceof kd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new kd("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=xkc(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=Ckc(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 FZ)throw c;if(c instanceof kd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new kd("can't match cohort without a given cohort property value");return i==="AND"}function Ikc(e){try{return new RegExp(e),!0}catch{return!1}}function OB(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new kd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new kd(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function cV(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 BNd(e){let t=OB(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function ONd(e){let t=OB(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 PNd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new kd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new kd(`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 kd(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function vkc(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 kd(`${e} is in an invalid date format`)}throw new kd(`The date provided ${e} must be a string, number, or date object`)}function DNd(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 K5r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var RNd=100,Skc=3e4,FNd=5e4,kNd=50,NNd=500,J5r=class extends Azt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new K5r,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,RNd):Skc,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 H5r({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||FNd}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??NNd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??kNd;this._waitUntilCycle.timer=$pe(()=>{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 ykc}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=Skc){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 T=this._flagOverrides[t];if(T===void 0)return;let B=this._payloadOverrides?.[t];return{key:t,enabled:T!==!1,variant:typeof T=="string"?T:void 0,payload:B}}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,b,v,x,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let T=this.featureFlagsPoller?.featureFlagsByKey[t];if(T)try{let B=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(T,d,{matchValue:i});if(B){m=!0;let R=B.value;v=T.id,C="Evaluated locally",f={key:t,enabled:R!==!1,variant:typeof R=="string"?R:void 0,payload:B.payload??void 0}}}catch(B){if(B instanceof FZ||B instanceof kd)this._logger?.info(`${B.name} when computing flag locally: ${t}: ${B.message}`);else throw B}}if(!m&&!c){let T=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(T===void 0)b=yzt.UNKNOWN_ERROR;else{h=T.requestId,A=T.evaluatedAt;let B=[];T.errorsWhileComputingFlags&&B.push(yzt.ERRORS_WHILE_COMPUTING),T.quotaLimited?.includes("feature_flags")&&B.push(yzt.QUOTA_LIMITED);let R=T.flags[t];if(R===void 0)B.push(yzt.FLAG_MISSING);else{v=R.metadata?.id,x=R.metadata?.version,C=R.reason?.description??R.reason?.code;let O;if(R.metadata?.payload!==void 0)try{O=JSON.parse(R.metadata.payload)}catch{O=R.metadata.payload}f={key:t,enabled:R.enabled,variant:R.variant,payload:O}}B.length>0&&(b=B.join(","))}}if(o){let T=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,B=`${t}_${T}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(B)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(B):this.distinctIdHasSentFlagCalls[r]=[B];let R={$feature_flag:t,$feature_flag_response:T,$feature_flag_id:v,$feature_flag_version:x,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:T,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let O=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();O!==void 0&&(R.$feature_flag_definitions_loaded_at=O)}b&&(R.$feature_flag_error=b),this.capture({distinctId:r,event:"$feature_flag_called",properties:R,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 b=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...b.flags||{}},h={...h,...b.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=$pe(()=>{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(FFc(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=xve(),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[v,x]of Object.entries(h))A[`$feature/${v}`]=x;let b=Object.keys(h||{}).filter(v=>h?.[v]!==!1).sort();return b.length>0&&(A.$active_feature_flags=b),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"&&BFc(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 _kc=require("async_hooks"),Y5r=class{constructor(){this.storage=new _kc.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 Tkc="posthog-node";function jNd(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[ixo.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 ixo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=Tkc,this.name=Tkc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(jNd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};_W.errorPropertiesBuilder=new Wj.ErrorPropertiesBuilder([new Wj.EventCoercer,new Wj.ErrorCoercer,new Wj.ObjectCoercer,new Wj.StringCoercer,new Wj.PrimitiveCoercer],Wj.createStackParser("node:javascript",Wj.nodeStackLineParser),[xFc(),dkc]);var wve=class extends J5r{getLibraryId(){return"posthog-node"}initializeContext(){return new Y5r}};var X5r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new wve(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.7.4",usingAccessToken:!0}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var bzt=class{async sendEvent(){}async identify(){}async flush(){}};Zt();var iit=require("fs/promises"),Bkc=require("os"),Okc=require("path");var QNd="id",MNd=".fern",Ezt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new wve(r),this.userId=t==null?void 0:Iyo(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.7.4",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await jf({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=Xe(Jt.of((0,Bkc.homedir)()),Re.of(MNd),Re.of(QNd));await ar(t)||(await(0,iit.mkdir)((0,Okc.dirname)(t),{recursive:!0}),await(0,iit.writeFile)(t,FP())),this.persistedDistinctId=(await(0,iit.readFile)(t)).toString()}return this.persistedDistinctId}};var oxo;async function Izt(){return oxo==null&&(oxo=await LNd()),oxo}async function LNd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new bzt;let r=await uLr();return r!=null?new Ezt({token:r,posthogApiKey:e}):await gZ()!=null?new X5r({posthogApiKey:e}):new Ezt({token:void 0,posthogApiKey:e})}catch{return new bzt}}Lt();var vzt=we(require("process"),1);BGe();var Rkc=we(Iuo(),1),Fkc=we(Dkc(),1);function H_(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=l7(e),e.length===0))return 0;e=e.replace((0,Fkc.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(Rkc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function Z5r(e){let t=0;for(let r of e.split(`
2695
+ `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=nkc.test(a)?a.replace(nkc,"$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>=ikc)break}}return okc(i)}}var HCo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=mzt(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 eLe(t,"DOMException")}isDOMError(t){return eLe(t,"DOMError")}};var KCo=class{match(t){return jCo(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 JCo=class{constructor(){}match(t){return RFc(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 pNd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,YCo=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(pNd);return i&&(r=i[1],n=i[2]),[r,n]}};var akc=["fatal","error","warning","log","info","debug"];function W5r(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 XCo=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 Znt(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=W5r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return mzt(t)&&!PFc(t)&&akc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if($Fc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var ZCo=class{match(t){return Znt(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${W5r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var exo=class{match(t){return F5r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var txo=class{match(t){return eLe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Znt(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 F5r(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 rxo=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 lkc=require("fs"),pkc=require("readline"),$5r=new Wj.ReduceableCache(25),fkc=new Wj.ReduceableCache(20),nxo=7,fNd=1e3,dNd=1e4;async function dkc(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"||ANd(s)||yNd(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(fkc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=ENd(o);if(s.every(c=>bNd(i,c)))continue;let a=INd($5r,i,{});n.push(mNd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&hNd(e,$5r),$5r.reduce(),e}function mNd(e,t,r){return new Promise(n=>{let i=(0,lkc.createReadStream)(e),o=(0,pkc.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(){fkc.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]=vNd(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 hNd(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;gNd(r.lineno,r,n)}}function gNd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=mkc(e);i<e;i++){let o=r[i];if(o===void 0)return void ckc(t);t.pre_context.push(o)}if(r[e]===void 0)return void ckc(t);t.context_line=r[e];let n=hkc(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 ckc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function ANd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function yNd(e){return e.lineno!==void 0&&e.lineno>dNd||e.colno!==void 0&&e.colno>fNd}function bNd(e,t){let r=$5r.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 ENd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=ukc(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+nxo:(i.push(n),n=ukc(o)),t++}return i}function ukc(e){return[mkc(e),hkc(e)]}function mkc(e){return Math.max(1,e-nxo)}function hkc(e){return e+nxo}function INd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function vNd(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 CNd(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 gkc(e,t){globalThis.process?.on("uncaughtException",CNd(e,t))}function Akc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var xNd=2e3,_W=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new k5r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return NCo(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()&&(gkc(this.onException.bind(this),this.onFatalError.bind(this)),Akc(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(xNd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var ykc="5.29.1";var yzt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function bkc(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 wNd=6e4,SNd=1152921504606847e3,_Nd=["is_not"],nit=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},kd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},FZ=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},H5r=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 FZ||u instanceof kd?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 FZ||u instanceof kd?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 kd("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 kd("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 kd(`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 kd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new kd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new kd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new kd(`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 kd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new kd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new kd(`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 FZ)throw l;if(l instanceof kd)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new kd("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"?xkc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):Ckc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await Ekc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await Ekc(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(wNd,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 nit(`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 nit(`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 nit(`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 nit&&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=$pe(()=>{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 Ekc(e,t,r=""){let n=await bkc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/SNd}function Ckc(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 kd("Operator is_not_set is not supported")}else throw new kd(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!_Nd.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 Ikc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return Ikc(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 kd("Date operations cannot be performed on boolean values");let u=DNd(String(i));if(u==null&&(u=vkc(i)),u==null)throw new kd(`Invalid date: ${i}`);let l=vkc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return cV(OB(String(s)),OB(String(i)))===0;case"semver_neq":return cV(OB(String(s)),OB(String(i)))!==0;case"semver_gt":return cV(OB(String(s)),OB(String(i)))>0;case"semver_gte":return cV(OB(String(s)),OB(String(i)))>=0;case"semver_lt":return cV(OB(String(s)),OB(String(i)))<0;case"semver_lte":return cV(OB(String(s)),OB(String(i)))<=0;case"semver_tilde":{let u=OB(String(s)),{lower:l,upper:p}=BNd(String(i));return cV(u,l)>=0&&cV(u,p)<0}case"semver_caret":{let u=OB(String(s)),{lower:l,upper:p}=ONd(String(i));return cV(u,l)>=0&&cV(u,p)<0}case"semver_wildcard":{let u=OB(String(s)),{lower:l,upper:p}=PNd(String(i));return cV(u,l)>=0&&cV(u,p)<0}default:throw new kd(`Unknown operator: ${o}`)}}function TNd(e,t){if(!(e in t))throw new FZ(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function xkc(e,t,r,n=!1){let i=String(e.value);TNd(i,r);let o=r[i];return wkc(o,t,r,n)}function wkc(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=wkc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof FZ)throw c;if(c instanceof kd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new kd("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=xkc(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=Ckc(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 FZ)throw c;if(c instanceof kd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new kd("can't match cohort without a given cohort property value");return i==="AND"}function Ikc(e){try{return new RegExp(e),!0}catch{return!1}}function OB(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new kd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new kd(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function cV(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 BNd(e){let t=OB(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function ONd(e){let t=OB(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 PNd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new kd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new kd(`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 kd(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function vkc(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 kd(`${e} is in an invalid date format`)}throw new kd(`The date provided ${e} must be a string, number, or date object`)}function DNd(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 K5r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var RNd=100,Skc=3e4,FNd=5e4,kNd=50,NNd=500,J5r=class extends Azt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new K5r,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,RNd):Skc,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 H5r({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||FNd}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??NNd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??kNd;this._waitUntilCycle.timer=$pe(()=>{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 ykc}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=Skc){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 T=this._flagOverrides[t];if(T===void 0)return;let B=this._payloadOverrides?.[t];return{key:t,enabled:T!==!1,variant:typeof T=="string"?T:void 0,payload:B}}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,b,v,x,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let T=this.featureFlagsPoller?.featureFlagsByKey[t];if(T)try{let B=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(T,d,{matchValue:i});if(B){m=!0;let R=B.value;v=T.id,C="Evaluated locally",f={key:t,enabled:R!==!1,variant:typeof R=="string"?R:void 0,payload:B.payload??void 0}}}catch(B){if(B instanceof FZ||B instanceof kd)this._logger?.info(`${B.name} when computing flag locally: ${t}: ${B.message}`);else throw B}}if(!m&&!c){let T=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(T===void 0)b=yzt.UNKNOWN_ERROR;else{h=T.requestId,A=T.evaluatedAt;let B=[];T.errorsWhileComputingFlags&&B.push(yzt.ERRORS_WHILE_COMPUTING),T.quotaLimited?.includes("feature_flags")&&B.push(yzt.QUOTA_LIMITED);let R=T.flags[t];if(R===void 0)B.push(yzt.FLAG_MISSING);else{v=R.metadata?.id,x=R.metadata?.version,C=R.reason?.description??R.reason?.code;let O;if(R.metadata?.payload!==void 0)try{O=JSON.parse(R.metadata.payload)}catch{O=R.metadata.payload}f={key:t,enabled:R.enabled,variant:R.variant,payload:O}}B.length>0&&(b=B.join(","))}}if(o){let T=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,B=`${t}_${T}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(B)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(B):this.distinctIdHasSentFlagCalls[r]=[B];let R={$feature_flag:t,$feature_flag_response:T,$feature_flag_id:v,$feature_flag_version:x,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:T,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let O=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();O!==void 0&&(R.$feature_flag_definitions_loaded_at=O)}b&&(R.$feature_flag_error=b),this.capture({distinctId:r,event:"$feature_flag_called",properties:R,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 b=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...b.flags||{}},h={...h,...b.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=$pe(()=>{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(FFc(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=xve(),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[v,x]of Object.entries(h))A[`$feature/${v}`]=x;let b=Object.keys(h||{}).filter(v=>h?.[v]!==!1).sort();return b.length>0&&(A.$active_feature_flags=b),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"&&BFc(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 _kc=require("async_hooks"),Y5r=class{constructor(){this.storage=new _kc.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 Tkc="posthog-node";function jNd(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[ixo.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 ixo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=Tkc,this.name=Tkc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(jNd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};_W.errorPropertiesBuilder=new Wj.ErrorPropertiesBuilder([new Wj.EventCoercer,new Wj.ErrorCoercer,new Wj.ObjectCoercer,new Wj.StringCoercer,new Wj.PrimitiveCoercer],Wj.createStackParser("node:javascript",Wj.nodeStackLineParser),[xFc(),dkc]);var wve=class extends J5r{getLibraryId(){return"posthog-node"}initializeContext(){return new Y5r}};var X5r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new wve(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.7.5",usingAccessToken:!0}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var bzt=class{async sendEvent(){}async identify(){}async flush(){}};Zt();var iit=require("fs/promises"),Bkc=require("os"),Okc=require("path");var QNd="id",MNd=".fern",Ezt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new wve(r),this.userId=t==null?void 0:Iyo(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.7.5",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await jf({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=Xe(Jt.of((0,Bkc.homedir)()),Re.of(MNd),Re.of(QNd));await ar(t)||(await(0,iit.mkdir)((0,Okc.dirname)(t),{recursive:!0}),await(0,iit.writeFile)(t,FP())),this.persistedDistinctId=(await(0,iit.readFile)(t)).toString()}return this.persistedDistinctId}};var oxo;async function Izt(){return oxo==null&&(oxo=await LNd()),oxo}async function LNd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new bzt;let r=await uLr();return r!=null?new Ezt({token:r,posthogApiKey:e}):await gZ()!=null?new X5r({posthogApiKey:e}):new Ezt({token:void 0,posthogApiKey:e})}catch{return new bzt}}Lt();var vzt=we(require("process"),1);BGe();var Rkc=we(Iuo(),1),Fkc=we(Dkc(),1);function H_(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=l7(e),e.length===0))return 0;e=e.replace((0,Fkc.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(Rkc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function Z5r(e){let t=0;for(let r of e.split(`
2696
2696
  `))t=Math.max(t,H_(r));return t}var e2c=we(axo(),1);var UNd=/[\p{Lu}]/u,VNd=/[\p{Ll}]/u,jkc=/^[\p{Lu}](?![\p{Lu}])/gu,Lkc=/([\p{Alpha}\p{N}_]|$)/u,cxo=/[_.\- ]+/,qNd=new RegExp("^"+cxo.source),Qkc=new RegExp(cxo.source+Lkc.source,"gu"),Mkc=new RegExp("\\d+"+Lkc.source,"gu"),GNd=(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&&UNd.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&VNd.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},WNd=(e,t)=>(jkc.lastIndex=0,e.replace(jkc,r=>t(r))),$Nd=(e,t)=>(Qkc.lastIndex=0,Mkc.lastIndex=0,e.replace(Qkc,(r,n)=>t(n)).replace(Mkc,r=>t(r)));function uxo(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?cxo.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=GNd(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(qNd,""),e=t.preserveConsecutiveUppercase?WNd(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),$Nd(e,n))}var dxo=we(Ukc(),1);BGe();var Vkc=(e=0)=>t=>`\x1B[${t+e}m`,qkc=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,Gkc=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,V0={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]}},e80=Object.keys(V0.modifier),YNd=Object.keys(V0.color),XNd=Object.keys(V0.bgColor),t80=[...YNd,...XNd];function ZNd(){let e=new Map;for(let[t,r]of Object.entries(V0)){for(let[n,i]of Object.entries(r))V0[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=V0[n],e.set(i[0],i[1]);Object.defineProperty(V0,t,{value:r,enumerable:!1})}return Object.defineProperty(V0,"codes",{value:e,enumerable:!1}),V0.color.close="\x1B[39m",V0.bgColor.close="\x1B[49m",V0.color.ansi=Vkc(),V0.color.ansi256=qkc(),V0.color.ansi16m=Gkc(),V0.bgColor.ansi=Vkc(10),V0.bgColor.ansi256=qkc(10),V0.bgColor.ansi16m=Gkc(10),Object.defineProperties(V0,{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=>V0.rgbToAnsi256(...V0.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)=>V0.ansi256ToAnsi(V0.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>V0.ansi256ToAnsi(V0.hexToAnsi256(t)),enumerable:!1}}),V0}var ejd=ZNd(),Wkc=ejd;var e8r=new Set(["\x1B","\x9B"]),tjd=39,pxo="\x07",Kkc="[",rjd="]",Jkc="m",fxo=`${rjd}8;;`,$kc=e=>`${e8r.values().next().value}${Kkc}${e}${Jkc}`,Hkc=e=>`${e8r.values().next().value}${fxo}${e}${pxo}`,njd=e=>e.split(" ").map(t=>H_(t)),lxo=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=H_(l7(e[e.length-1]));for(let[a,c]of n.entries()){let u=H_(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),e8r.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(fxo)),i){o?c===pxo&&(i=!1,o=!1):c===Jkc&&(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())},ijd=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(H_(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},ojd=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=njd(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=H_(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(""),lxo(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){lxo(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){lxo(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>ijd(u)));let c=[...a.join(`
2697
2697
  `)];for(let[u,l]of c.entries()){if(n+=l,e8r.has(l)){let{groups:d}=new RegExp(`(?:\\${Kkc}(?<code>\\d+)m|\\${fxo}(?<uri>.*)${pxo})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===tjd?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=Wkc.codes.get(Number(i));c[u+1]===`
2698
2698
  `?(o&&(n+=Hkc("")),i&&p&&(n+=$kc(p))):l===`
@@ -3245,7 +3245,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
3245
3245
  `)}var b8t=class{cwd;logger;deleteOriginals;constructor(t){this.cwd=t.cwd,this.logger=t.logger,this.deleteOriginals=t.deleteOriginals??!0}async migrate(){let t=[],r=[],n=await this.findFernDirectory();if(n==null)return{success:!1,warnings:[{type:"conflict",message:"Could not find fern directory",suggestion:"Run this command from a directory containing a 'fern' folder"}],migratedFiles:r};let o=await new y8t({cwd:n}).migrate();if(t.push(...o.warnings),!o.success||o.org==null)return{success:!1,warnings:[...t,{type:"conflict",message:"Failed to migrate fern.config.json - organization is required"}],migratedFiles:r};o.absoluteFilePath!=null&&r.push(o.absoluteFilePath);let s=Xe(n,Re.of(yF)),a=await ar(s,"directory"),c;if(a){let d=await this.migrateMultiApi({fernDir:n,apisDir:s,org:o.org,warnings:t,migratedFiles:r});if(!d.success)return{success:!1,warnings:t,migratedFiles:r};c=d.fernYml}else{let d=await this.migrateSingleApi({fernDir:n,org:o.org,warnings:t,migratedFiles:r});if(!d.success)return{success:!1,warnings:t,migratedFiles:r};c=d.fernYml}let u=await n6o(n);u.docsRef!=null&&(c.docs=u.docsRef);let l=Xe(this.cwd,Re.of(fC)),p=this.serializeFernYml(c);if(await(0,Uyt.writeFile)(l,p,"utf-8"),this.deleteOriginals)for(let d of r)try{await(0,Uyt.rm)(d),this.logger.debug(`Deleted ${d}`)}catch{t.push({type:"info",message:`Could not delete ${d}`})}return this.logger.info(`Created ${l}`),t.push(...await i6o(this.cwd)),{success:!0,warnings:t,migratedFiles:r,outputPath:l}}async migrateSingleApi(t){let{fernDir:r,org:n,warnings:i,migratedFiles:o}=t,a=await new K4e({cwd:r}).migrate();i.push(...a.warnings),a.absoluteFilePath!=null&&o.push(a.absoluteFilePath);let c=await t6o({fernDir:r,generatorsYmlApi:a.rawApi});i.push(...c.warnings);let u={org:n};return c.api!=null&&(u.api=c.api),a.sdks!=null&&(u.sdks=a.sdks),{success:!0,fernYml:u}}async migrateMultiApi(t){let{fernDir:r,apisDir:n,org:i,warnings:o,migratedFiles:s}=t,c=(await(0,Uyt.readdir)(n,{withFileTypes:!0})).filter(A=>A.isDirectory()).map(A=>A.name);if(c.length===0)return o.push({type:"conflict",message:"No API directories found in fern/apis/"}),{success:!1,fernYml:{org:i}};let u={},l={targets:{}},p;for(let A of c){let b=Xe(n,Re.of(A)),x=await new K4e({cwd:b,apiName:A}).migrate();if(o.push(...x.warnings),x.absoluteFilePath!=null&&s.push(x.absoluteFilePath),u[A]=x.rawApi,x.sdks!=null){for(let[C,w]of Object.entries(x.sdks.targets))l.targets[C]=w;x.sdks.autorelease!=null&&p==null&&(p=x.sdks.autorelease)}}let d=await r6o({fernDir:r,apisDir:n,generatorsYmlApis:u});o.push(...d.warnings);let f={org:i,apis:d.apis};Object.keys(l.targets).length>0&&(p!=null&&(l.autorelease=p),f.sdks=l);let h=await new K4e({cwd:r}).detect();return h.found&&h.absoluteFilePath!=null&&(o.push({type:"info",message:"Found generators.yml in fern root alongside apis/ directory",suggestion:"Review the migrated configuration to ensure it's correct"}),s.push(h.absoluteFilePath)),{success:!0,fernYml:f}}async findFernDirectory(){if(this.cwd.split("/").pop()===Lg)return this.cwd;let r=Xe(this.cwd,Re.of(Lg));if(await ar(r,"directory"))return r}serializeFernYml(t){let r={edition:t.edition,org:t.org};return t.api!=null&&(r.api=t.api),t.apis!=null&&(r.apis=t.apis),t.ai!=null&&(r.ai=t.ai),t.cli!=null&&(r.cli=t.cli),t.docs!=null&&(r.docs=t.docs),t.sdks!=null&&(r.sdks=this.simplifySdks(t.sdks)),Tr.dump(r,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"',forceQuotes:!1})}simplifySdks(t){let r={...t},n={};for(let[i,o]of Object.entries(t.targets)){let s=o.output;if(typeof s=="string"){n[i]=o;continue}if(s.git==null&&s.path!=null){n[i]={...o,output:s.path};continue}n[i]=o}return r.targets=n,r}};var o6o=class{async handle(t,r){let i=await new b8t({cwd:t.cwd,logger:t.stdout,deleteOriginals:r.delete}).migrate();for(let o of i.warnings){switch(o.type){case"deprecated":t.stdout.warn(`Deprecated: ${o.message}`);break;case"unsupported":t.stdout.warn(`Unsupported: ${o.message}`);break;case"conflict":t.stderr.error(`Error: ${o.message}`);break;case"info":t.stdout.info(o.message);break}o.suggestion!=null&&t.stdout.info(` Suggestion: ${o.suggestion}`)}if(i.success){i.outputPath!=null&&t.stdout.debug(`Created: ${i.outputPath}`);return}throw new j({message:"Migration failed",code:j.Code.ConfigError})}};function s6o(e){let t=new o6o;_o(e,"migrate","Migrate legacy configuration files to fern.yml",(r,n)=>t.handle(r,n),r=>r.option("delete",{type:"boolean",description:"Keep original files after migration",default:!0}))}function a6o(e){xI(e,"config","Configure, edit, and inspect your settings",[s6o])}var c6o=class{async handle(t,r){let n=await t.loadWorkspaceOrThrow();if(n.docs==null)throw new j({message:`No docs configuration found in fern.yml.
3246
3246
 
3247
3247
  Add a 'docs:' section to your fern.yml to get started.`,code:j.Code.ConfigError});let o=await new QBe({context:t}).check({workspace:n,strict:r.strict}),s=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let a=this.buildJsonResponse({result:o,hasErrors:s});if(t.stdout.info(JSON.stringify(a,null,2)),s)throw new j({code:j.Code.ValidationError});return}if(o.violations.length>0)for(let a of o.violations){let c=a.severity==="warning"?xe.yellow:xe.red;process.stderr.write(`${c(`${a.displayRelativeFilepath}:${a.line}:${a.column}: ${a.message}`)}
3248
- `)}if(s)throw new j({code:j.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${_n.warning} ${xe.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(xe.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${_n.success} ${xe.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>QZ(i))),{success:!r,results:n}}};function u6o(e){let t=new c6o;_o(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 _eu=we(require("net"),1),Teu=we(require("os"),1),YJn=class extends Error{constructor(t){super(`${t} is locked`)}},Vyt={old:new Set,young:new Set},Yym=1e3*15,Beu=new Set;var E8t,Xym=()=>{let e=Teu.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},weu=e=>new Promise((t,r)=>{let n=_eu.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),Seu=async(e,t)=>{if(e.host||e.port===0)return weu(e);for(let r of t)try{await weu({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},Zym=e=>Vyt.old.has(e)||Vyt.young.has(e)||Beu.has(e),ebm=function*(e){e&&(yield*e),yield 0};async function MBe(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??{};E8t===void 0&&(E8t=setTimeout(()=>{E8t=void 0,Vyt.old=Vyt.young,Vyt.young=new Set},Yym),E8t.unref&&E8t.unref());let o=Xym();for(let s of ebm(t))try{if(r.has(s))continue;let a=await Seu({...i,port:s},o);for(;Zym(a);){if(s!==0)throw new YJn(s);a=await Seu({...i,port:s},o)}return n?Beu.add(a):Vyt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof YJn))throw a}throw new Error("No available ports found")}var Deu=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Oeu="docs.buildwithfern.com",Peu=62;function J4e(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)),Deu.test(t)}function Reu(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function I8t({orgId:e,previewId:t}){let r=Reu(t),n=`${e}-preview-${r}.${Oeu}`;if(n.length<=Peu)return n;let i=`${e}-preview-`,o=Peu-i.length;if(o<8)throw new j({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:j.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Oeu}`}Lt();tg();Zt();Vw();var K3o=require("child_process"),Xfu=we(f6o(),1),J3o=we(jYn(),1),Y3o=we(require("fs"),1),v3e=require("fs/promises"),Zfu=we(require("http"),1),ezo=we(require("path"),1);var Pou=require("events"),UYn=we(require("fs"),1),s3e=we(require("path"),1);var dou=we(require("os"),1),mou=300,WBe=20,W8t=1e7,hou=dou.default.platform();var hwm=hou==="darwin",PLo=hou==="win32",$Be=hwm||PLo,gou=3e3,Aou=2e4,DLo=1250;var zne;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(zne||(zne={}));var o3e;(function(e){e.CHANGE="change",e.RENAME="rename"})(o3e||(o3e={}));var $8t;(function(e){e.CHANGE="change",e.ERROR="error"})($8t||($8t={}));var Uc;(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"})(Uc||(Uc={}));var g2;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(g2||(g2={}));var gwm=(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(),w=C-c,T=C-u,B=w>=t||T>=o;return[C,B]},p=C=>{if(u=C,!s)return;let w=s;s=void 0,e.apply(void 0,w)},d=()=>{v(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,w]=l();return w?h(C):b(C)},b=C=>{let w=C-c,T=C-u,B=t-w,R=o-T,O=Math.min(B,R);return v(O)},v=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},x=(...C)=>{let[w,T]=l(),B=!!a;if(s=C,c=w,(T||!a)&&v(t),T)return B?p(w):m(w)};return x.cancel=d,x.flush=f,x},QYn=gwm;var NLo=we(require("fs"),1),LYn=we(require("path"),1);var jd=we(require("fs"),1),GB=require("util");var dde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},Une=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var RLo=we(require("process"),1),you=RLo.default.getuid?!RLo.default.getuid():!1,bou=1e4,cM=()=>{};var H8t={isChangeErrorOk:e=>{if(!H8t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!you&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!H8t.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(!H8t.isNodeError(e))throw e;if(!H8t.isChangeErrorOk(e))throw e}},yC=H8t;var FLo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=bou,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()}}}}},Eou=new FLo;var mde=(e,t)=>function(n){return function i(...o){return Eou.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)})}},hde=(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 Awm={attempt:{chmod:dde((0,GB.promisify)(jd.default.chmod),yC.onChangeError),chown:dde((0,GB.promisify)(jd.default.chown),yC.onChangeError),close:dde((0,GB.promisify)(jd.default.close),cM),fsync:dde((0,GB.promisify)(jd.default.fsync),cM),mkdir:dde((0,GB.promisify)(jd.default.mkdir),cM),realpath:dde((0,GB.promisify)(jd.default.realpath),cM),stat:dde((0,GB.promisify)(jd.default.stat),cM),unlink:dde((0,GB.promisify)(jd.default.unlink),cM),chmodSync:Une(jd.default.chmodSync,yC.onChangeError),chownSync:Une(jd.default.chownSync,yC.onChangeError),closeSync:Une(jd.default.closeSync,cM),existsSync:Une(jd.default.existsSync,cM),fsyncSync:Une(jd.default.fsync,cM),mkdirSync:Une(jd.default.mkdirSync,cM),realpathSync:Une(jd.default.realpathSync,cM),statSync:Une(jd.default.statSync,cM),unlinkSync:Une(jd.default.unlinkSync,cM)},retry:{close:mde((0,GB.promisify)(jd.default.close),yC.isRetriableError),fsync:mde((0,GB.promisify)(jd.default.fsync),yC.isRetriableError),open:mde((0,GB.promisify)(jd.default.open),yC.isRetriableError),readFile:mde((0,GB.promisify)(jd.default.readFile),yC.isRetriableError),rename:mde((0,GB.promisify)(jd.default.rename),yC.isRetriableError),stat:mde((0,GB.promisify)(jd.default.stat),yC.isRetriableError),write:mde((0,GB.promisify)(jd.default.write),yC.isRetriableError),writeFile:mde((0,GB.promisify)(jd.default.writeFile),yC.isRetriableError),closeSync:hde(jd.default.closeSync,yC.isRetriableError),fsyncSync:hde(jd.default.fsyncSync,yC.isRetriableError),openSync:hde(jd.default.openSync,yC.isRetriableError),readFileSync:hde(jd.default.readFileSync,yC.isRetriableError),renameSync:hde(jd.default.renameSync,yC.isRetriableError),statSync:hde(jd.default.statSync,yC.isRetriableError),writeSync:hde(jd.default.writeSync,yC.isRetriableError),writeFileSync:hde(jd.default.writeFileSync,yC.isRetriableError)}},Iou=Awm;var MYn=we(require("fs"),1),K8t=we(require("path"),1);var kLo=()=>{};var ywm=()=>{let e=kLo,t=kLo,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}},vou=ywm;var bwm=()=>{let{promise:e,resolve:t,isPending:r}=vou(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},Cou=bwm;var xou={then:e=>{e()}};var wou=e=>Array.isArray(e)?e:[e],Sou=e=>typeof e=="function";var Ewm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=wou(o).map(ie=>Sou(ie)?ie:se=>ie.test(se)),a=ie=>s.some(se=>se(ie)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],b=new Set,v={},x={},C=new Set,w={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},T={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:b,symlinksNamesToPaths:v,map:x},{promise:B,increment:R,decrement:O}=Cou(),z=0,J=(ie,se,Ce,Ie)=>{C.has(se)||z>=i||(z+=1,ie.directories.push(se),ie.directoriesNames.add(Ce),l.push(se),p.add(Ce),d.propertyIsEnumerable(Ce)||(d[Ce]=[]),d[Ce].push(se),C.add(se),!(Ie>=n)&&(z>=i||he(se,Ie+1)))},X=(ie,se,Ce)=>{C.has(se)||z>=i||(z+=1,ie.files.push(se),ie.filesNames.add(Ce),f.push(se),m.add(Ce),h.propertyIsEnumerable(Ce)||(h[Ce]=[]),h[Ce].push(se),C.add(se))},Z=(ie,se,Ce,Ie)=>{C.has(se)||z>=i||(z+=1,ie.symlinks.push(se),ie.symlinksNames.add(Ce),A.push(se),b.add(Ce),v.propertyIsEnumerable(Ce)||(v[Ce]=[]),v[Ce].push(se),C.add(se),r&&(Ie>=n||z>=i||Fe(se,Ie+1)))},me=(ie,se,Ce,Ie,ke)=>{c.aborted||a(se)||(Ie.isDirectory()?J(ie,se,Ce,ke):Ie.isFile()?X(ie,se,Ce):Ie.isSymbolicLink()&&Z(ie,se,Ce,ke))},ge=(ie,se,Ce,Ie)=>{if(c.aborted)return;let ke=se===K8t.default.sep?"":K8t.default.sep,Ve=Ce.name,ct=`${se}${ke}${Ve}`;a(ct)||(Ce.isDirectory()?J(ie,ct,Ve,Ie):Ce.isFile()?X(ie,ct,Ve):Ce.isSymbolicLink()&&Z(ie,ct,Ve,Ie))},ce=(ie,se,Ce,Ie)=>{for(let ke=0,Ve=Ce.length;ke<Ve;ke++)ge(ie,se,Ce[ke],Ie)},he=(ie,se)=>{c.aborted||se>n||z>=i||(R(),MYn.default.readdir(ie,{withFileTypes:!0},(Ce,Ie)=>{if(Ce||c.aborted||!Ie.length)return O();(u(Ie)||xou).then(()=>{let Ve=x[ie]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ce(Ve,ie,Ie,se),O()})}))},Fe=(ie,se)=>{R(),MYn.default.realpath(ie,(Ce,Ie)=>{if(Ce||c.aborted)return O();MYn.default.stat(Ie,(ke,Ve)=>{if(ke||c.aborted)return O();let ct=K8t.default.basename(Ie),At=x[ie]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(At,Ie,ct,Ve,se),O()})})};return(async(ie,se=1)=>(ie=K8t.default.normalize(ie),C.add(ie),he(ie,se),await B,c.aborted?w:T))(e)},_ou=Ewm;var Vne={lang:{debounce:QYn,attempt:e=>{try{return e()}catch(t){return Vne.lang.castError(t)}},castArray:e=>Vne.lang.isArray(e)?e:[e],castError:e=>Vne.lang.isError(e)?e:Vne.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(Vne.lang.isNaN(e))return Vne.lang.isNaN(t);if(Vne.lang.isPrimitive(e)||Vne.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(LYn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?NLo.default.realpathSync.native(e):NLo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===LYn.default.sep&&t.length-e.length>LYn.default.sep.length,poll:(e,t=Aou)=>Iou.retry.stat(t)(e,{bigint:!0}).catch(Vne.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 _ou(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},fp=Vne;var zYn=we(require("path"),1);var jLo=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||fp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=mou){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=fp.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===Uc.CHANGE&&a===Uc.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===Uc.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Uc.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??WBe:Math.min(1,this.options.depth??WBe),s=this.options.limit??W8t,[a,c]=await fp.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())fp.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(Uc.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!$Be&&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(Uc.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Uc.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(zYn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Uc.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(zYn.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(Uc.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Uc.ADD?this.onTargetAdd(n):r===Uc.ADD_DIR?this.onTargetAddDir(n):r===Uc.CHANGE?this.onTargetChange(n):r===Uc.UNLINK?this.onTargetUnlink(n):r===Uc.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=o3e.CHANGE,r){if(this.watcher.isClosed())return;let n=zYn.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){PLo&&t.code==="EPERM"?this.onWatcherChange(o3e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on($8t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on($8t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(o3e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&$Be&&this.options.native!==!1?this.options.depth??WBe:Math.min(1,this.options.depth??WBe),n=this.options.limit??W8t,[i,o]=await fp.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(o3e.CHANGE,a,t)}))}}},Tou=jLo;var A2={interval:100,intervalId:void 0,fns:new Map,init:()=>{A2.intervalId||(A2.intervalId=setInterval(A2.resolve,A2.interval))},reset:()=>{A2.intervalId&&(clearInterval(A2.intervalId),delete A2.intervalId)},add:(e,t)=>{A2.fns.set(e,Date.now()+t),A2.init()},remove:e=>{A2.fns.delete(e)},resolve:()=>{if(!A2.fns.size)return A2.reset();let e=Date.now();for(let[t,r]of A2.fns)r>=e||(A2.remove(t),t())}},J8t=A2;var Y8t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=DLo){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(fp.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),J8t.remove(u)},u=()=>{c(),a()};J8t.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=DLo){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),J8t.remove(u)},u=()=>{c(),a()};J8t.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,Uc.ADD,zne.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,Uc.ADD_DIR,zne.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,Uc.UNLINK,zne.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,Uc.UNLINK_DIR,zne.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}}};Y8t.DIR_EVENTS={add:Uc.ADD_DIR,rename:Uc.RENAME_DIR,unlink:Uc.UNLINK_DIR};Y8t.FILE_EVENTS={add:Uc.ADD,change:Uc.CHANGE,rename:Uc.RENAME,unlink:Uc.UNLINK};var Bou=Y8t;var QLo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(fp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(fp.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(fp.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(fp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return fp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);fp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},MLo=QLo;var LLo=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}},Oou=LLo;var zLo=class{constructor(){this.inos={},this.paths=new MLo,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 fp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new Oou(n)}reset(){this.inos={},this.paths=new MLo,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,Uc.ADD,i),[Uc.ADD];if(i.isDirectory())return this.updateIno(t,Uc.ADD_DIR,i),[Uc.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Uc.UNLINK,n),[Uc.UNLINK];if(n.isDirectory())return this.updateIno(t,Uc.UNLINK_DIR,n),[Uc.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Uc.CHANGE,i),[Uc.CHANGE]);if(i.isDirectory())return this.updateIno(t,Uc.UNLINK,n),this.updateIno(t,Uc.ADD_DIR,i),[Uc.UNLINK,Uc.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Uc.UNLINK_DIR,n),this.updateIno(t,Uc.ADD,i),[Uc.UNLINK_DIR,Uc.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Uc.UNLINK_DIR,n),this.updateIno(t,Uc.ADD_DIR,i),[Uc.UNLINK_DIR,Uc.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?zne.FILE:zne.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)}}},ULo=zLo;var VLo=class e extends Pou.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(g2.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(g2.CLOSE,i)),this._readyWait=new Promise(i=>this.on(g2.READY,i)),this._locker=new Bou(this),this._roots=new Set,this._poller=new ULo,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&&(fp.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(g2.CLOSE))}error(t){if(this.isClosed())return!1;let r=fp.lang.castError(t);return this.emit(g2.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(g2.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(g2.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&fp.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)fp.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 Tou(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=fp.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=s3e.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??WBe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&$Be&&l.options.native!==!1)))return!0;if(!$Be)break;let u=s3e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=fp.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||$Be&&r.native!==!1?r:{...r,recursive:!1},l={watcher:UYn.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=s3e.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||$Be&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??WBe,a=r.limit??W8t,[c]=await fp.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=fp.fs.getDepth(t);for(let p of c){let d=fp.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(g2.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(g2.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=s3e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new ULo,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 fp.lang.noop;if(this.pollerExists(t,r))return fp.lang.noop;let i={...r,interval:r.pollingInterval??gou},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(g2.CLOSE,a),UYn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(g2.CLOSE,a),UYn.default.unwatchFile(t,n)};return fp.lang.attempt(s),()=>fp.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=fp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!fp.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=s3e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await fp.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=s3e.default.dirname(t);return(await fp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=fp.lang.noop){if(fp.lang.isFunction(t))return this.watch([],{},t);if(fp.lang.isUndefined(t))return this.watch([],r,n);if(fp.lang.isFunction(r))return this.watch(t,{},r);if(fp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=fp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==fp.lang.noop&&this.on(g2.ALL,n),r.readdirMap=void 0,this.ready())}},VYn=VLo;iXn();Zt();var fq=require("fs/promises"),Nsu=require("os"),f4o=we(require("path"),1),WSm=".fern",$Sm="logs",p4o=100*1024*1024;function HSm(){return"cli@5.7.4"}var f3e=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=Xe(Jt.of((0,Nsu.homedir)()),Re.of(WSm)),n=Xe(r,Re.of($Sm));await ar(n)||await(0,fq.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=Xe(n,Re.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${f4o.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
3248
+ `)}if(s)throw new j({code:j.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${_n.warning} ${xe.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(xe.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${_n.success} ${xe.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>QZ(i))),{success:!r,results:n}}};function u6o(e){let t=new c6o;_o(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 _eu=we(require("net"),1),Teu=we(require("os"),1),YJn=class extends Error{constructor(t){super(`${t} is locked`)}},Vyt={old:new Set,young:new Set},Yym=1e3*15,Beu=new Set;var E8t,Xym=()=>{let e=Teu.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},weu=e=>new Promise((t,r)=>{let n=_eu.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),Seu=async(e,t)=>{if(e.host||e.port===0)return weu(e);for(let r of t)try{await weu({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},Zym=e=>Vyt.old.has(e)||Vyt.young.has(e)||Beu.has(e),ebm=function*(e){e&&(yield*e),yield 0};async function MBe(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??{};E8t===void 0&&(E8t=setTimeout(()=>{E8t=void 0,Vyt.old=Vyt.young,Vyt.young=new Set},Yym),E8t.unref&&E8t.unref());let o=Xym();for(let s of ebm(t))try{if(r.has(s))continue;let a=await Seu({...i,port:s},o);for(;Zym(a);){if(s!==0)throw new YJn(s);a=await Seu({...i,port:s},o)}return n?Beu.add(a):Vyt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof YJn))throw a}throw new Error("No available ports found")}var Deu=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Oeu="docs.buildwithfern.com",Peu=62;function J4e(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)),Deu.test(t)}function Reu(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function I8t({orgId:e,previewId:t}){let r=Reu(t),n=`${e}-preview-${r}.${Oeu}`;if(n.length<=Peu)return n;let i=`${e}-preview-`,o=Peu-i.length;if(o<8)throw new j({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:j.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Oeu}`}Lt();tg();Zt();Vw();var K3o=require("child_process"),Xfu=we(f6o(),1),J3o=we(jYn(),1),Y3o=we(require("fs"),1),v3e=require("fs/promises"),Zfu=we(require("http"),1),ezo=we(require("path"),1);var Pou=require("events"),UYn=we(require("fs"),1),s3e=we(require("path"),1);var dou=we(require("os"),1),mou=300,WBe=20,W8t=1e7,hou=dou.default.platform();var hwm=hou==="darwin",PLo=hou==="win32",$Be=hwm||PLo,gou=3e3,Aou=2e4,DLo=1250;var zne;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(zne||(zne={}));var o3e;(function(e){e.CHANGE="change",e.RENAME="rename"})(o3e||(o3e={}));var $8t;(function(e){e.CHANGE="change",e.ERROR="error"})($8t||($8t={}));var Uc;(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"})(Uc||(Uc={}));var g2;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(g2||(g2={}));var gwm=(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(),w=C-c,T=C-u,B=w>=t||T>=o;return[C,B]},p=C=>{if(u=C,!s)return;let w=s;s=void 0,e.apply(void 0,w)},d=()=>{v(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,w]=l();return w?h(C):b(C)},b=C=>{let w=C-c,T=C-u,B=t-w,R=o-T,O=Math.min(B,R);return v(O)},v=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},x=(...C)=>{let[w,T]=l(),B=!!a;if(s=C,c=w,(T||!a)&&v(t),T)return B?p(w):m(w)};return x.cancel=d,x.flush=f,x},QYn=gwm;var NLo=we(require("fs"),1),LYn=we(require("path"),1);var jd=we(require("fs"),1),GB=require("util");var dde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},Une=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var RLo=we(require("process"),1),you=RLo.default.getuid?!RLo.default.getuid():!1,bou=1e4,cM=()=>{};var H8t={isChangeErrorOk:e=>{if(!H8t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!you&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!H8t.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(!H8t.isNodeError(e))throw e;if(!H8t.isChangeErrorOk(e))throw e}},yC=H8t;var FLo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=bou,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()}}}}},Eou=new FLo;var mde=(e,t)=>function(n){return function i(...o){return Eou.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)})}},hde=(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 Awm={attempt:{chmod:dde((0,GB.promisify)(jd.default.chmod),yC.onChangeError),chown:dde((0,GB.promisify)(jd.default.chown),yC.onChangeError),close:dde((0,GB.promisify)(jd.default.close),cM),fsync:dde((0,GB.promisify)(jd.default.fsync),cM),mkdir:dde((0,GB.promisify)(jd.default.mkdir),cM),realpath:dde((0,GB.promisify)(jd.default.realpath),cM),stat:dde((0,GB.promisify)(jd.default.stat),cM),unlink:dde((0,GB.promisify)(jd.default.unlink),cM),chmodSync:Une(jd.default.chmodSync,yC.onChangeError),chownSync:Une(jd.default.chownSync,yC.onChangeError),closeSync:Une(jd.default.closeSync,cM),existsSync:Une(jd.default.existsSync,cM),fsyncSync:Une(jd.default.fsync,cM),mkdirSync:Une(jd.default.mkdirSync,cM),realpathSync:Une(jd.default.realpathSync,cM),statSync:Une(jd.default.statSync,cM),unlinkSync:Une(jd.default.unlinkSync,cM)},retry:{close:mde((0,GB.promisify)(jd.default.close),yC.isRetriableError),fsync:mde((0,GB.promisify)(jd.default.fsync),yC.isRetriableError),open:mde((0,GB.promisify)(jd.default.open),yC.isRetriableError),readFile:mde((0,GB.promisify)(jd.default.readFile),yC.isRetriableError),rename:mde((0,GB.promisify)(jd.default.rename),yC.isRetriableError),stat:mde((0,GB.promisify)(jd.default.stat),yC.isRetriableError),write:mde((0,GB.promisify)(jd.default.write),yC.isRetriableError),writeFile:mde((0,GB.promisify)(jd.default.writeFile),yC.isRetriableError),closeSync:hde(jd.default.closeSync,yC.isRetriableError),fsyncSync:hde(jd.default.fsyncSync,yC.isRetriableError),openSync:hde(jd.default.openSync,yC.isRetriableError),readFileSync:hde(jd.default.readFileSync,yC.isRetriableError),renameSync:hde(jd.default.renameSync,yC.isRetriableError),statSync:hde(jd.default.statSync,yC.isRetriableError),writeSync:hde(jd.default.writeSync,yC.isRetriableError),writeFileSync:hde(jd.default.writeFileSync,yC.isRetriableError)}},Iou=Awm;var MYn=we(require("fs"),1),K8t=we(require("path"),1);var kLo=()=>{};var ywm=()=>{let e=kLo,t=kLo,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}},vou=ywm;var bwm=()=>{let{promise:e,resolve:t,isPending:r}=vou(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},Cou=bwm;var xou={then:e=>{e()}};var wou=e=>Array.isArray(e)?e:[e],Sou=e=>typeof e=="function";var Ewm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=wou(o).map(ie=>Sou(ie)?ie:se=>ie.test(se)),a=ie=>s.some(se=>se(ie)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],b=new Set,v={},x={},C=new Set,w={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},T={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:b,symlinksNamesToPaths:v,map:x},{promise:B,increment:R,decrement:O}=Cou(),z=0,J=(ie,se,Ce,Ie)=>{C.has(se)||z>=i||(z+=1,ie.directories.push(se),ie.directoriesNames.add(Ce),l.push(se),p.add(Ce),d.propertyIsEnumerable(Ce)||(d[Ce]=[]),d[Ce].push(se),C.add(se),!(Ie>=n)&&(z>=i||he(se,Ie+1)))},X=(ie,se,Ce)=>{C.has(se)||z>=i||(z+=1,ie.files.push(se),ie.filesNames.add(Ce),f.push(se),m.add(Ce),h.propertyIsEnumerable(Ce)||(h[Ce]=[]),h[Ce].push(se),C.add(se))},Z=(ie,se,Ce,Ie)=>{C.has(se)||z>=i||(z+=1,ie.symlinks.push(se),ie.symlinksNames.add(Ce),A.push(se),b.add(Ce),v.propertyIsEnumerable(Ce)||(v[Ce]=[]),v[Ce].push(se),C.add(se),r&&(Ie>=n||z>=i||Fe(se,Ie+1)))},me=(ie,se,Ce,Ie,ke)=>{c.aborted||a(se)||(Ie.isDirectory()?J(ie,se,Ce,ke):Ie.isFile()?X(ie,se,Ce):Ie.isSymbolicLink()&&Z(ie,se,Ce,ke))},ge=(ie,se,Ce,Ie)=>{if(c.aborted)return;let ke=se===K8t.default.sep?"":K8t.default.sep,Ve=Ce.name,ct=`${se}${ke}${Ve}`;a(ct)||(Ce.isDirectory()?J(ie,ct,Ve,Ie):Ce.isFile()?X(ie,ct,Ve):Ce.isSymbolicLink()&&Z(ie,ct,Ve,Ie))},ce=(ie,se,Ce,Ie)=>{for(let ke=0,Ve=Ce.length;ke<Ve;ke++)ge(ie,se,Ce[ke],Ie)},he=(ie,se)=>{c.aborted||se>n||z>=i||(R(),MYn.default.readdir(ie,{withFileTypes:!0},(Ce,Ie)=>{if(Ce||c.aborted||!Ie.length)return O();(u(Ie)||xou).then(()=>{let Ve=x[ie]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ce(Ve,ie,Ie,se),O()})}))},Fe=(ie,se)=>{R(),MYn.default.realpath(ie,(Ce,Ie)=>{if(Ce||c.aborted)return O();MYn.default.stat(Ie,(ke,Ve)=>{if(ke||c.aborted)return O();let ct=K8t.default.basename(Ie),At=x[ie]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(At,Ie,ct,Ve,se),O()})})};return(async(ie,se=1)=>(ie=K8t.default.normalize(ie),C.add(ie),he(ie,se),await B,c.aborted?w:T))(e)},_ou=Ewm;var Vne={lang:{debounce:QYn,attempt:e=>{try{return e()}catch(t){return Vne.lang.castError(t)}},castArray:e=>Vne.lang.isArray(e)?e:[e],castError:e=>Vne.lang.isError(e)?e:Vne.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(Vne.lang.isNaN(e))return Vne.lang.isNaN(t);if(Vne.lang.isPrimitive(e)||Vne.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(LYn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?NLo.default.realpathSync.native(e):NLo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===LYn.default.sep&&t.length-e.length>LYn.default.sep.length,poll:(e,t=Aou)=>Iou.retry.stat(t)(e,{bigint:!0}).catch(Vne.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 _ou(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},fp=Vne;var zYn=we(require("path"),1);var jLo=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||fp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=mou){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=fp.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===Uc.CHANGE&&a===Uc.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===Uc.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Uc.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??WBe:Math.min(1,this.options.depth??WBe),s=this.options.limit??W8t,[a,c]=await fp.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())fp.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(Uc.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!$Be&&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(Uc.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Uc.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(zYn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Uc.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(zYn.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(Uc.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Uc.ADD?this.onTargetAdd(n):r===Uc.ADD_DIR?this.onTargetAddDir(n):r===Uc.CHANGE?this.onTargetChange(n):r===Uc.UNLINK?this.onTargetUnlink(n):r===Uc.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=o3e.CHANGE,r){if(this.watcher.isClosed())return;let n=zYn.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){PLo&&t.code==="EPERM"?this.onWatcherChange(o3e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on($8t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on($8t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(o3e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&$Be&&this.options.native!==!1?this.options.depth??WBe:Math.min(1,this.options.depth??WBe),n=this.options.limit??W8t,[i,o]=await fp.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(o3e.CHANGE,a,t)}))}}},Tou=jLo;var A2={interval:100,intervalId:void 0,fns:new Map,init:()=>{A2.intervalId||(A2.intervalId=setInterval(A2.resolve,A2.interval))},reset:()=>{A2.intervalId&&(clearInterval(A2.intervalId),delete A2.intervalId)},add:(e,t)=>{A2.fns.set(e,Date.now()+t),A2.init()},remove:e=>{A2.fns.delete(e)},resolve:()=>{if(!A2.fns.size)return A2.reset();let e=Date.now();for(let[t,r]of A2.fns)r>=e||(A2.remove(t),t())}},J8t=A2;var Y8t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=DLo){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(fp.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),J8t.remove(u)},u=()=>{c(),a()};J8t.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=DLo){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),J8t.remove(u)},u=()=>{c(),a()};J8t.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,Uc.ADD,zne.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,Uc.ADD_DIR,zne.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,Uc.UNLINK,zne.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,Uc.UNLINK_DIR,zne.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}}};Y8t.DIR_EVENTS={add:Uc.ADD_DIR,rename:Uc.RENAME_DIR,unlink:Uc.UNLINK_DIR};Y8t.FILE_EVENTS={add:Uc.ADD,change:Uc.CHANGE,rename:Uc.RENAME,unlink:Uc.UNLINK};var Bou=Y8t;var QLo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(fp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(fp.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(fp.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(fp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return fp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);fp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},MLo=QLo;var LLo=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}},Oou=LLo;var zLo=class{constructor(){this.inos={},this.paths=new MLo,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 fp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new Oou(n)}reset(){this.inos={},this.paths=new MLo,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,Uc.ADD,i),[Uc.ADD];if(i.isDirectory())return this.updateIno(t,Uc.ADD_DIR,i),[Uc.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Uc.UNLINK,n),[Uc.UNLINK];if(n.isDirectory())return this.updateIno(t,Uc.UNLINK_DIR,n),[Uc.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Uc.CHANGE,i),[Uc.CHANGE]);if(i.isDirectory())return this.updateIno(t,Uc.UNLINK,n),this.updateIno(t,Uc.ADD_DIR,i),[Uc.UNLINK,Uc.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Uc.UNLINK_DIR,n),this.updateIno(t,Uc.ADD,i),[Uc.UNLINK_DIR,Uc.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Uc.UNLINK_DIR,n),this.updateIno(t,Uc.ADD_DIR,i),[Uc.UNLINK_DIR,Uc.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?zne.FILE:zne.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)}}},ULo=zLo;var VLo=class e extends Pou.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(g2.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(g2.CLOSE,i)),this._readyWait=new Promise(i=>this.on(g2.READY,i)),this._locker=new Bou(this),this._roots=new Set,this._poller=new ULo,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&&(fp.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(g2.CLOSE))}error(t){if(this.isClosed())return!1;let r=fp.lang.castError(t);return this.emit(g2.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(g2.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(g2.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&fp.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)fp.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 Tou(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=fp.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=s3e.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??WBe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&$Be&&l.options.native!==!1)))return!0;if(!$Be)break;let u=s3e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=fp.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||$Be&&r.native!==!1?r:{...r,recursive:!1},l={watcher:UYn.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=s3e.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||$Be&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??WBe,a=r.limit??W8t,[c]=await fp.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=fp.fs.getDepth(t);for(let p of c){let d=fp.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(g2.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(g2.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=s3e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new ULo,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 fp.lang.noop;if(this.pollerExists(t,r))return fp.lang.noop;let i={...r,interval:r.pollingInterval??gou},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(g2.CLOSE,a),UYn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(g2.CLOSE,a),UYn.default.unwatchFile(t,n)};return fp.lang.attempt(s),()=>fp.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=fp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!fp.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=s3e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await fp.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=s3e.default.dirname(t);return(await fp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=fp.lang.noop){if(fp.lang.isFunction(t))return this.watch([],{},t);if(fp.lang.isUndefined(t))return this.watch([],r,n);if(fp.lang.isFunction(r))return this.watch(t,{},r);if(fp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=fp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==fp.lang.noop&&this.on(g2.ALL,n),r.readdirMap=void 0,this.ready())}},VYn=VLo;iXn();Zt();var fq=require("fs/promises"),Nsu=require("os"),f4o=we(require("path"),1),WSm=".fern",$Sm="logs",p4o=100*1024*1024;function HSm(){return"cli@5.7.5"}var f3e=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=Xe(Jt.of((0,Nsu.homedir)()),Re.of(WSm)),n=Xe(r,Re.of($Sm));await ar(n)||await(0,fq.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=Xe(n,Re.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${f4o.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
3249
3249
  `);await(0,fq.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)+`
3250
3250
  `;try{await(0,fq.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:HSm(),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,fq.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=f4o.default.join(t,c);try{let l=await(0,fq.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=p4o/1024/1024;if(o<=p4o){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<=p4o)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,fq.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 oXn={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function jsu(e){let t=KSm();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:oXn});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",...oXn}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...oXn}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:oXn}):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 f3e.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 KSm(){return globalThis.Bun}Zt();Vw();var Mfu=require("child_process"),yZn=we(I4o(),1),Lfu=we(F3o(),1),b2=require("fs"),uM=require("fs/promises"),zfu=require("os"),_$=we(require("path"),1),Ufu=we(bw(),1),Vfu=we(Qfu(),1),I3e=process.platform==="win32",AZn=xe.cyan("[docs]:"),wOm="etag",SOm=23,G3o=e=>e.padEnd(SOm," "),_Om="preview",TOm="app-preview",BOm="bundle",OOm=".next",POm="standalone",DOm=".fern",ROm="packages/fern-docs/bundle/.next/server/instrumentation.js",FOm='Cannot find matching keyid: {"signatures":';function kOm(e){try{let r=(0,Mfu.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 j({message:`Windows long path support is not enabled. The docs bundle contains deeply nested .pnpm paths that exceed the 260-character MAX_PATH limit.
3251
3251
 
@@ -3431,14 +3431,14 @@ ${i.error?.message??"Unknown error"}`,code:j.Code.ParseError})}Zt();var Adu=requ
3431
3431
 
3432
3432
  Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`,void 0,{code:j.Code.AuthError}),orgNotConfiguredForWhitelabel:()=>o.failAndThrow("Your org is not configured for white-labeling. Please reach out to support@buildwithfern.com.",void 0,{code:j.Code.AuthError}),branchDoesNotExist:x=>o.failAndThrow(`Branch ${x.branch} does not exist in repository ${x.repositoryOwner}/${x.repositoryName}`,void 0,{code:j.Code.ConfigError}),rateLimitExceeded:()=>{throw new T3e},_other:x=>{o.logger.debug(`Failed to create job: ${JSON.stringify(x)}`);let C=RPm(x);return C!=null?o.failAndThrow(C,void 0,{code:j.Code.NetworkError}):o.failAndThrow("Failed to create job. Please try again or contact support@buildwithfern.com for assistance.",void 0,{code:j.Code.NetworkError})}})}return b.body}async function DPm({intermediateRepresentation:e,generatorInvocation:t,job:r,context:n,irVersionOverride:i}){let o=await bMe(t).then(f=>f==null?void 0:"v"+f.toString()),s=i??o,a=s==null?await YVt({intermediateRepresentation:e,context:n,targetGenerator:{name:t.name,version:t.version}}):await xko({intermediateRepresentation:e,context:n,irVersion:s,targetGenerator:{name:t.name,version:t.version}}),c=new vdu.default,u=await Xir(a,{onWrite:f=>{n.logger.debug("Wrote IR to disk: "+f)}}),l=new TextEncoder().encode(u),p=await OPm(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,Cdu.default)(EMe(),`/api/remote-gen/jobs/${r.jobId}/start`);try{await Ny.post(d,c,{headers:c.getHeaders(),maxBodyLength:1/0})}catch(f){let m=f instanceof lfc?f.response?.data:f;n.logger.debug(`POST ${d} failed with ${JSON.stringify(f)}`),n.failAndThrow("Failed to start job",m,{code:j.Code.NetworkError})}}function RPm(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 FPm(e){if(e?.content?.reason==="status-code"){let t=e.content.body;switch(t?.error){case"IllegalApiNameError":return Hr.remoteGen.createJobV3.Error.illegalApiNameError();case"IllegalApiVersionError":return Hr.remoteGen.createJobV3.Error.illegalApiVersionError(t.content);case"GeneratorsDoNotExistError":return Hr.remoteGen.createJobV3.Error.generatorsDoNotExistError(t.content);case"CannotPublishToNpmScope":return Hr.remoteGen.createJobV3.Error.cannotPublishToNpmScope(t.content);case"CannotPublishToMavenScope":return Hr.remoteGen.createJobV3.Error.cannotPublishToMavenGroup(t.content);case"CannotPublishPypiPackage":return Hr.remoteGen.createJobV3.Error.cannotPublishPypiPackage(t.content);case"InsufficientPermissions":return Hr.remoteGen.createJobV3.Error.insufficientPermissions(t.content);case"OrgNotConfiguredForWhitelabel":return Hr.remoteGen.createJobV3.Error.orgNotConfiguredForWhitelabel(t.content);case"BranchDoesNotExist":return Hr.remoteGen.createJobV3.Error.branchDoesNotExist(t.content)}}return e}function kPm({outputMode:e,generatorInvocation:t,absolutePathToPreview:r,shouldLogS3Url:n}){return e.type==="downloadFiles"||t.absolutePathToLocalSnippets!=null||r!=null||n}var _du=ipe();var NPm=3;function Tdu({job:e,taskId:t,taskHandler:r,context:n}){let i=0,o=async()=>{let s=await _du.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===NPm&&n.failAndThrow(`Failed to get job status after ${i} attempts.`,void 0,{code:j.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)}}})}Lt();Zt();Vw();var DZn=require("fs"),lM=require("fs/promises"),B3e=we(require("path"),1),gzo=require("stream/promises");var OZn=we(Pdu(),1);function Ode(e,t,{target:r="stdout",...n}={}){return OZn.default[r]?z9.link(e,t):n.fallback===!1?e:typeof n.fallback=="function"?n.fallback(e,t):`${e} (\u200B${t}\u200B)`}Ode.isSupported=OZn.default.stdout;Ode.stderr=(e,t,r={})=>Ode(e,t,{target:"stderr",...r});Ode.stderr.isSupported=OZn.default.stderr;var RZn=we(bw(),1),Ddu=we(ZXn(),1);var PZn=class{context;generatorInvocation;absolutePathToPreview;lengthOfLastLogs=0;constructor({interactiveTaskContext:t,generatorInvocation:r,absolutePathToPreview:n}){this.context=t,this.generatorInvocation=r,this.absolutePathToPreview=n}async processUpdate(t){t==null&&this.context.failAndThrow("Task is missing on job status",void 0,{code:j.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=odu(t.packages)),this.absolutePathToPreview==null&&this.context.setSubtitle(r.length>0?r.map(i=>`\u25E6 ${i}`).join(`
3433
3433
  `):void 0);for(let i of t.logs.slice(this.lengthOfLastLogs))this.context.logger.log(UPm(i.level),i.message),this.#n==null&&(this.#n=MPm(i.message)??this.#n);this.lengthOfLastLogs=t.logs.length;let n=i=>{this.context.logger.debug(`Generated files. ${Ode("View here",i,{fallback:(o,s)=>`${o}: ${s}`})}`)};return await t.status._visit({notStarted:Et,running:Et,failed:({message:i,s3PreSignedReadUrl:o})=>{o!=null&&n(o),this.context.failAndThrow(i,void 0,{code:j.Code.ContainerError})},finished:async i=>{if(i.s3PreSignedReadUrlV2!=null){n(i.s3PreSignedReadUrlV2);let o=this.getAbsolutePathToLocalOutput();o!=null&&await LPm({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)},_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?Xe(this.absolutePathToPreview,Re.of(B3e.default.basename(this.generatorInvocation.name))):this.generatorInvocation.absolutePathToLocalOutput}#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}},QPm=/Tagging release (v?\d+\.\d+\.\d+(?:-[\w.-]+)?)/;function MPm(e){let t=e.match(QPm);if(t?.[1]!=null)return t[1].replace(/^v/,"")}async function LPm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){try{let n=await VPm(t),i=await qPm(t);n&&i?await GPm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):n&&!i?await WPm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):await zPm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(xe.green(`Downloaded to ${t}`))}catch(n){r.failAndThrow("Failed to download files",n,{code:j.Code.NetworkError})}}async function zPm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await Ny.get(e,{responseType:"stream"}),n=await RZn.default.dir({prefix:"fern",unsafeCleanup:!0}),i=B3e.default.join(n.path,"output.zip");await(0,gzo.pipeline)(r.data,(0,DZn.createWriteStream)(i)),await hzo(t),await(0,lM.mkdir)(t,{recursive:!0}),await kdu(i,t)}async function hzo(e){await ar(e)&&(await Rdu(e),await(0,lM.rm)(e,{recursive:!0,force:!0}))}async function Rdu(e){try{let t=await(0,lM.readdir)(e,{withFileTypes:!0});for(let r of t){let n=Jt.of(B3e.default.join(e,r.name));r.isDirectory()&&await Rdu(n);try{await(0,lM.chmod)(n,493)}catch{}}await(0,lM.chmod)(e,493)}catch{}}function UPm(e){switch(e){case"DEBUG":return Xn.Debug;case"INFO":return Xn.Info;case"WARN":return Xn.Warn;case"ERROR":return Xn.Error;default:return Xn.Info}}async function VPm(e){let t=Xe(e,Re.of(qO));return await ar(t)}async function qPm(e){let t=Xe(e,Re.of(".git"));return await ar(t)}async function B$(e,t,r){return(await Rl(r.logger,"git",e,{cwd:t,doNotPipeOutput:!0})).stdout}async function GPm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Xe(t,Re.of(qO)),i=await iye({absolutePathToFernignore:n});await B$(["rm","-rf","."],t,r),await Fdu({s3PreSignedReadUrl:e,outputPath:t}),await B$(["add","."],t,r),await B$(["reset","--",...i],t,r),await B$(["restore","."],t,r)}async function WPm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Jt.of((await RZn.default.dir({})).path),i=Xe(t,Re.of(qO)),o=await iye({absolutePathToFernignore:i});await(0,lM.cp)(t,n,{recursive:!0}),await B$(["init"],n,r),await B$(["add","."],n,r),await B$(["-c","user.name=fern","-c","user.email=hey@buildwithfern.com","-c","commit.gpgsign=false","commit","--allow-empty","--no-verify","-m","init"],n,r),await B$(["rm","-rf","."],n,r),await Fdu({s3PreSignedReadUrl:e,outputPath:n}),await B$(["add","."],n,r),await B$(["reset","--",...o],n,r),await B$(["restore","."],n,r),await hzo(Xe(n,Re.of(".git"))),await hzo(t),await(0,lM.cp)(n,t,{recursive:!0})}async function Fdu({s3PreSignedReadUrl:e,outputPath:t}){let r=await Ny.get(e,{responseType:"stream"}),n=await RZn.default.dir({prefix:"fern",unsafeCleanup:!0}),i=B3e.default.join(n.path,"output.zip");await(0,gzo.pipeline)(r.data,(0,DZn.createWriteStream)(i)),await kdu(i,t)}async function kdu(e,t){return new Promise((r,n)=>{Ddu.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=B3e.default.join(t,s.fileName);if(s.fileName.endsWith("/")){(0,lM.mkdir)(a,{recursive:!0}).then(()=>o.readEntry()).catch(n);return}(0,lM.mkdir)(B3e.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,DZn.createWriteStream)(a)).on("finish",()=>o.readEntry()).on("error",n)})}).catch(n)}),o.readEntry()})})}Zt();Vw();var FZn=require("fs/promises"),Ndu=we(bw(),1),$Pm="proto.zip",Dqt=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,FZn.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:j.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,FZn.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await Ndu.default.dir(),n=Xe(Jt.of(r.path),Re.of($Pm));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Rl(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(SN.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(SN.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:j.Code.InternalError}),r}};async function Qdu({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,irVersionOverride:l,absolutePathToPreview:p,isPreview:d,fiddlePreview:f,pushPreviewBranch:m,readme:h,fernignorePath:A,skipFernignore:b,dynamicIrOnly:v,retryRateLimited:x,requireEnvVars:C,automationMode:w,autoMerge:T,skipIfNoDiff:B,loginCommand:R}){let O=ZF({token:c.value}),J=await KLt("https://registry.buildwithfern.com/health",n.logger),X=jn.getPackageName({generatorInvocation:i}),Z=d??p!=null,me=Vt=>Iy(Vt,{onError:Ee=>{!Z&&C&&n.failAndThrow(void 0,Ee,{code:j.Code.EnvironmentError})}},{substituteAsEmpty:Z}),ge=me(i),ce=S3e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:ge}),he=o??await rPt({packageName:X,generatorInvocation:i});o!=null&&(Z?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await tmr({version:o,packageName:X,generatorInvocation:i,context:n}));let Fe=Hg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:h,packageName:X,version:he,context:n,sourceResolver:new Mh(n,r),dynamicGeneratorConfig:ce,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:zK(),originGitCommitIsDirty:UK(),invokedBy:MK(),requestedVersion:o,ciProvider:LK()}}),Qe=jf({token:c.value});if(!J){let Vt=await Qe.organization.get(e.organization);Vt.ok&&(Vt.body.isWhitelabled&&(Fe.readmeConfig==null&&(Fe.readmeConfig=JPm),Fe.readmeConfig.whiteLabel=!0),Fe.selfHosted=Vt.body.selfHostedSdKs)}let ie=r.getSources(),se,Ce,Ie=a2({ir:Fe,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 Vt=await O.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(zr(Fe.apiName)),definition:Ie,sources:ie.length>0?KPm(ie):void 0});se=Vt.apiDefinitionId,Ce=Vt.sources??void 0}catch(Vt){new Dqt(n,ie).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(Vt)}`)}let ke=new Dqt(n,ie);if(Ce==null&&ke.sourceTypes.has("protobuf")&&n.failAndThrow("Did not successfully upload Protobuf source files.",void 0,{code:j.Code.NetworkError}),Ce!=null){n.logger.debug("Uploading source files ...");let Vt=await ke.uploadSources(Ce);n.logger.debug("Setting IR source configuration ..."),Fe.sourceConfig=Vt}if(v){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:j.Code.ConfigError});return}if(i.language==null){n.failAndThrow("Language is required for dynamic IR only mode",void 0,{code:j.Code.ConfigError});return}if(X==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:j.Code.ConfigError});return}try{await jdu({fdr:O,organization:t,version:o,language:i.language,packageName:X,ir:Fe,smartCasing:i.smartCasing,dynamicGeneratorConfig:ce,context:n})}catch(Vt){n.failAndThrow(`Failed to upload dynamic IR: ${Zn(Vt)}`,void 0,{code:j.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let Ve=await Sdu({projectConfig:e,workspace:r,organization:t,generatorInvocation:ge,context:n,version:he,intermediateRepresentation:{...Fe,fdrApiDefinitionId:se,publishConfig:HPm({generatorInvocation:ge})},shouldLogS3Url:a,token:c,whitelabel:u!=null?me(u):void 0,irVersionOverride:l,absolutePathToPreview:p,fiddlePreview:f,pushPreviewBranch:m,fernignorePath:A,skipFernignore:b,retryRateLimited:x,automationMode:w,autoMerge:T,skipIfNoDiff:B,loginCommand:R});n.logger.debug(`Job ID: ${Ve.jobId}`);let ct=Ve.taskIds[0];if(ct==null){n.failAndThrow("Did not receive a task ID.",void 0,{code:j.Code.NetworkError});return}n.logger.debug(`Task ID: ${ct}`);let At=new PZn({job:Ve,taskId:ct,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:p}),kt=await Tdu({job:Ve,taskHandler:At,taskId:ct,context:n});if(kt!=null&&kt.actualVersion==null){let Vt=YPm(he);Vt!=null&&(kt={...kt,actualVersion:Vt})}let zt=kt?.actualVersion??he;if(kt!=null&&zt!=null&&i.language!=null&&X!=null&&!Z)try{await jdu({fdr:O,organization:t,version:zt,language:i.language,packageName:X,ir:Fe,smartCasing:i.smartCasing,dynamicGeneratorConfig:ce,context:n})}catch(Vt){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${Zn(Vt)}`)}return kt}function HPm({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"]),rr.PublishingConfig.direct({target:rr.PublishTarget.postman({apiKey:r.apiKey,workspaceId:r.workspaceId,collectionId:n})})},_other:()=>{}}),_other:()=>{}})}function KPm(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var JPm={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 jdu({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),apiId:"",irVersions:[]})}catch(m){c.logger.warn(`Failed to get dynamic IR upload URLs: ${m}`);return}let l=u.uploadUrls[n]?.uploadUrl;if(l==null){c.logger.warn(`No upload URL returned for ${n}`);return}let p=nMe({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 YPm(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function oOe({projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,absolutePathToPreview:u,isPreview:l,fiddlePreview:p,pushPreviewBranch:d,mode:f,fernignorePath:m,skipFernignore:h,dynamicIrOnly:A,validateWorkspace:b,retryRateLimited:v,requireEnvVars:x,automationMode:C,autoMerge:w,skipIfNoDiff:T,automation:B,occurrenceTracker:R,loginCommand:O}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let z=[],J=R??new C3e;R==null&&J.recordOccurrences(i.generators);let X=r.generatorsConfiguration?.absolutePathToConfiguration,Z=await Promise.all(i.generators.map(me=>n.runInteractiveTask({name:me.name},ge=>XPm({generatorInvocation:me,interactiveTaskContext:ge,projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,absolutePathToPreview:u,isPreview:l,fiddlePreview:p,pushPreviewBranch:d,mode:f,fernignorePath:m,skipFernignore:h,dynamicIrOnly:A,validateWorkspace:b,retryRateLimited:v,requireEnvVars:x,automationMode:C,autoMerge:w,skipIfNoDiff:T,automation:B,generatorsYmlAbsolutePath:X,occurrenceTracker:J,loginCommand:O,onSnippetsProduced:ce=>z.push(ce)}))));if(B==null&&Z.some(me=>!me))throw new bu;return{snippetsProducedBy:z}}async function XPm({generatorInvocation:e,interactiveTaskContext:t,projectConfig:r,organization:n,workspace:i,context:o,generatorGroup:s,version:a,shouldLogS3Url:c,token:u,whitelabel:l,absolutePathToPreview:p,isPreview:d,fiddlePreview:f,pushPreviewBranch:m,mode:h,fernignorePath:A,skipFernignore:b,dynamicIrOnly:v,validateWorkspace:x,retryRateLimited:C,requireEnvVars:w,automationMode:T,autoMerge:B,skipIfNoDiff:R,automation:O,generatorsYmlAbsolutePath:z,occurrenceTracker:J,loginCommand:X,onSnippetsProduced:Z}){let me=Date.now();try{let ge=yJe(e),ce=await i.toFernWorkspace({context:o},ge,e.apiOverride?.specs);x&&await T$({workspace:ce,context:o,logWarnings:!1,ossWorkspace:i instanceof Dd?i:void 0});let he=b?void 0:A??await Edu({generatorInvocation:e,context:t}),Fe=await Qdu({projectConfig:r,organization:n,workspace:ce,interactiveTaskContext:t,generatorInvocation:{...e,outputMode:e.outputMode._visit({downloadFiles:()=>e.outputMode,github:Qe=>Hr.OutputMode.github({...Qe,makePr:h==="pull-request"}),githubV2:Qe=>h==="pull-request"?Hr.OutputMode.githubV2(Hr.GithubOutputModeV2.pullRequest(Qe)):e.outputMode,publish:()=>e.outputMode,publishV2:()=>e.outputMode,_other:()=>e.outputMode})},version:a,audiences:s.audiences,shouldLogS3Url:c,token:u,whitelabel:l,readme:e.readme,irVersionOverride:e.irVersionOverride,absolutePathToPreview:p,isPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignorePath:he,skipFernignore:b,dynamicIrOnly:v,retryRateLimited:C,requireEnvVars:w,automationMode:T,autoMerge:B,skipIfNoDiff:R,loginCommand:X});if(Fe?.createdSnippets&&(Z(e),e.absolutePathToLocalSnippets!=null&&Fe.snippetsS3PreSignedReadUrl!=null&&await bdu({snippetsS3PreSignedReadUrl:Fe.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:t})),O!=null){let Qe=z!=null?await w3e(z,e.name,J.lookup(e)):void 0;O.recorder.recordSuccess({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,version:Fe?.actualVersion??null,durationMs:Date.now()-me,pullRequestUrl:Fe?.pullRequestUrl,noChangesDetected:Fe?.noChangesDetected,publishTarget:Fe?.publishTarget,outputRepoUrl:x3e(e),generatorsYmlAbsolutePath:z,generatorsYmlLineNumber:Qe})}}catch(ge){if(O==null)throw ge;if(ge instanceof bu){let Fe=z!=null?await w3e(z,e.name,J.lookup(e)):void 0;throw O.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:t.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-me,outputRepoUrl:x3e(e),generatorsYmlAbsolutePath:z,generatorsYmlLineNumber:Fe}),ge}let ce=Zn(ge),he=z!=null?await w3e(z,e.name,J.lookup(e)):void 0;O.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:ce,durationMs:Date.now()-me,outputRepoUrl:x3e(e),generatorsYmlAbsolutePath:z,generatorsYmlLineNumber:he}),t.failWithoutThrowing(ce)}}Lt();Lt();tg();Zt();var Rmu=require("crypto"),kqt=require("fs/promises");ro();var Mzo=we(yMe(),1);Lt();var xmu=we(Cmu(),1);ro();var wmu=require("util"),MRm=(0,wmu.promisify)(xmu.default);async function Smu(e,t,r){let n=GTt(e,t),i=[];for(let o of n){let s=await Promise.all(o.map(async a=>{try{let c=await MRm(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 jzo(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 LRm=10,_mu=10,pei=parseInt(process.env.FERN_DOCS_ASSET_HASH_CONCURRENCY??"32",10);function zRm(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}var Nbt=class extends Error{constructor(){super("Another docs publish is currently in progress for this domain."),this.name="DocsPublishConflictError"}};async function Tmu({fdrOrigin:e,token:t,domain:r,basepath:n}){try{await Ny.post(`${e}/docs-deployment/unlock`,{domain:r,basepath:n},{headers:{Authorization:`Bearer ${t}`}})}catch{}}async function Bmu(e){let t=await(0,kqt.readFile)(e);return(0,Rmu.createHash)("sha256").update(new Uint8Array(t)).digest("hex")}function URm(e){return e.replace(/\.\.\//g,"_dot_dot_/")}async function Fmu({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:b,ciSource:v,deployerAuthor:x,loginCommand:C="fern login",multiSource:w=!1}){let T="https://registry.buildwithfern.com";await KLt(`${T}/health`,a.logger)&&a.logger.debug("Detected air-gapped environment - skipping external FDR service calls");let R={};b!=null&&(R["X-CLI-Version"]=b),v!=null&&(R["X-CI-Source"]=JSON.stringify(v),a.logger.debug(`CI source detected: ${v.type} (${v.repo??"unknown repo"})`)),x?.username!=null&&(R["X-Deployer-Author"]=x.username),x?.email!=null&&(R["X-Deployer-Author-Email"]=x.email);let O=ZF({token:e.value,...Object.keys(R).length>0&&{headers:R}}),z={type:"public"};m&&a.logger.debug("Experimental flag 'exclude-apis' is enabled - API references will be excluded from S3 upload");let J,X=i[0]??n,Z=JRm(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 ge=w||r.config.experimental?.basepathAware===!0;ge&&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..."),Tmu({fdrOrigin:T,token:e.value,domain:n,basepath:Z}))},Fe=async()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to signal..."),await Tmu({fdrOrigin:T,token:e.value,domain:n,basepath:Z})),process.exit(1)};process.on("SIGINT",Fe),process.on("SIGTERM",Fe);try{let Qe=await N5t({docsWorkspace:r,organization:t,fdrOrigin:T,token:e.value,taskContext:a}),ie=new p4({domain:n,docsWorkspace:Qe,ossWorkspaces:s,apiWorkspaces:o,taskContext:a,editThisPage:l,uploadFiles:async ut=>{let _e=ut.map(_=>({..._,sanitizedPath:URm(_.relativeFilePath)})),Ne=new Map(_e.map(_=>[_.absoluteFilePath,_])),Rt=new Map(_e.map(_=>[_.sanitizedPath,_.absoluteFilePath])),et=_e.map(_=>({..._,mediaType:Mzo.lookup(_.absoluteFilePath)})).filter(_=>_.mediaType!==!1).filter(_=>rd.parse(_.mediaType)?.isImage()??!1).map(_=>_.absoluteFilePath),tr=await Smu(et,LRm,a);a.logger.debug(`Hashing ${tr.size} image files with concurrency ${pei}...`);let Ft=performance.now(),or=Array.from(tr.values()),ir=(await jzo(pei,or,async _=>{let U=Ne.get(_.filePath);if(U==null)return null;let ee=U.sanitizedPath;return{filePath:fn.docs.v1.write.FilePath(LBt(ee)),width:_.width,height:_.height,blurDataUrl:_.blurDataUrl,alt:void 0,fileHash:await Bmu(U.absoluteFilePath)}})).filter(_=>_!=null),ti=performance.now()-Ft;a.logger.debug(`Hashed ${ir.length} images in ${ti.toFixed(0)}ms`);let g=_e.filter(({absoluteFilePath:_})=>!tr.has(_));a.logger.debug(`Hashing ${g.length} non-image files with concurrency ${pei}...`);let y=performance.now(),E=await jzo(pei,g,async _=>({path:fn.docs.v1.write.FilePath(LBt(_.sanitizedPath)),fileHash:await Bmu(_.absoluteFilePath)})),S=performance.now()-y;if(a.logger.debug(`Hashed ${E.length} non-image files in ${S.toFixed(0)}ms`),c){let _;try{_=await O.docs.v2.write.startDocsPreviewRegister({orgId:fn.OrgId(t),authConfig:z,filepaths:E,images:ir,basePath:Z,previewId:u!=null?zRm(u):void 0})}catch(U){return await Dmu(U,a,t,n,C)}if(X=_.previewUrl,J=_.docsRegistrationId,a.logger.debug(`Received preview registration ID: ${J}`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs preview");else{let U=new Set(_.skippedFiles||[]),ee=Object.fromEntries(Object.entries(_.uploadUrls).filter(([pt])=>!U.has(pt))),Ge=Object.keys(ee).length,vt=U.size;Ge>0?(a.logger.debug(`Uploading ${Ge} files (${vt} skipped)...`),await Omu(ee,r.absoluteFilePath,a,_mu,Rt)):a.logger.debug(`No files to upload (all ${vt} up to date)`)}return Pmu(_.uploadUrls,r.absoluteFilePath,Rt)}else{let _;try{_=await O.docs.v2.write.startDocsRegister({domain:n,customDomains:i,authConfig:z,orgId:fn.OrgId(t),filepaths:E,images:ir,...ge&&{basepathAware:!0}})}catch(ee){return Dmu(ee,a,t,n,C)}J=_.docsRegistrationId,ce=!0,a.logger.debug(`Received production registration ID: ${J}`);let U=_.skippedFiles?.length||0;if(U>0&&a.logger.info(`Skipped ${U} unchanged file${U===1?"":"s"} (already uploaded)`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs");else{let ee=new Set(_.skippedFiles||[]),Ge=Object.fromEntries(Object.entries(_.uploadUrls).filter(([pt])=>!ee.has(pt))),vt=Object.keys(Ge).length;vt>0?(a.logger.info(`\u2191 Uploading ${vt} files...`),await Omu(Ge,r.absoluteFilePath,a,_mu,Rt)):a.logger.info("No files to upload (all up to date)")}return Pmu(_.uploadUrls,r.absoluteFilePath,Rt)}},registerApi:async({ir:ut,snippetsConfig:_e,playgroundConfig:Ne,apiName:Rt,workspace:wt,graphqlOperations:et,graphqlTypes:tr})=>{let Ft=a2({ir:ut,snippetsConfig:_e,playgroundConfig:Ne,graphqlOperations:et,graphqlTypes:tr,context:a,apiNameOverride:Rt}),or=nFm(f,r.config.aiExamples?.style??r.config.experimental?.aiExampleStyleInstructions);if(or){let y=wt?.getSources()?.filter(E=>E.type==="openapi").map(E=>({absoluteFilePath:E.absoluteFilePath,absoluteFilePathToOverrides:E.absoluteFilePathToOverrides}));y==null||y.length===0?a.logger.debug("Skipping AI example enhancement: no OpenAPI source file paths available"):Ft=await yyt(Ft,or,a,e,t,y)}let zn,ir=new Set;if(Object.keys(_e).length===0)a.logger.debug("No snippets configuration defined, skipping snippet generation...");else if(!me){let g=await YRm({fdr:O,workspace:wt,organization:t,context:a,snippetsConfig:_e});g&&Object.keys(g).length>0&&(zn=g,ir=new Set(Object.keys(g)),a.logger.debug(`Using existing SDK dynamic IRs for: ${Object.keys(g).join(", ")}`));let y=await eFm({workspace:wt,organization:t,context:a,snippetsConfig:_e,skipLanguages:ir});y&&(zn={...zn,...y})}let ti;try{ti=await O.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Rt??zr(ut.apiName)),definition:Ft,dynamicIRs:zn})}catch(g){let y=jmu(g);return a.logger.error(`FDR registerApiDefinition failed. Error details:
3434
- ${JSON.stringify(y,void 0,2)}`),Rt!=null?a.failAndThrow(`Failed to publish docs because API definition (${Rt}) could not be uploaded. Please contact support@buildwithfern.com`,y,{code:j.Code.NetworkError}):a.failAndThrow("Failed to publish docs because API definition could not be uploaded. Please contact support@buildwithfern.com",y,{code:j.Code.NetworkError})}return a.logger.debug(`Registered API Definition ${Rt}: ${ti.apiDefinitionId}`),ti.dynamicIRs&&zn&&(d?a.logger.debug("Skip-upload mode: skipping dynamic IR uploads"):await tFm({dynamicIRs:zn,dynamicIRUploadUrls:ti.dynamicIRs,context:a,apiId:ti.apiDefinitionId})),ti.apiDefinitionId},targetAudiences:h});a.logger.info("Resolving docs definition...");let se=performance.now(),Ce=await ie.resolve(),Ie=performance.now()-se;if(r.config.settings?.substituteEnvVars){a.logger.debug("Applying environment variable substitution to docs definition...");let{jsFiles:ut,..._e}=Ce;Ce={...Iy(_e,{onError:Rt=>a.failAndThrow(void 0,Rt,{code:j.Code.EnvironmentError})},{substituteAsEmpty:!1}),jsFiles:ut}}let ke=Object.keys(Ce.pages).length,Ve=o.length,ct=process.memoryUsage();if(a.logger.info(`Resolved docs definition in ${Ie.toFixed(0)}ms: ${ke} pages${Ve?`, ${Ve} API workspaces`:""}`),a.logger.debug(`Memory after resolve: RSS=${(ct.rss/1024/1024).toFixed(2)}MB, Heap=${(ct.heapUsed/1024/1024).toFixed(2)}MB`),J==null)return he(),a.failAndThrow("Failed to publish docs.","Docs registration ID is missing.",{code:j.Code.InternalError});a.logger.info("Publishing docs to FDR...");let At=performance.now();try{await O.docs.v2.write.finishDocsRegister({docsRegistrationId:J,docsDefinition:Ce,excludeApis:m,...ge&&!c&&{basepathAware:!0}})}catch(ut){return a.failAndThrow("Failed to publish docs to "+n,ut,{code:j.Code.NetworkError})}let kt=performance.now()-At;a.logger.debug(`Docs published to FDR in ${kt.toFixed(0)}ms`);let zt=ie.getTranslationPages(),Vt=ie.getTranslationNavigationOverlays(),Ee=c?X:n;zt!=null&&Object.keys(zt).length>0&&(a.logger.info(`Registering translations for ${Object.keys(zt).length} locale(s)...`),await Promise.all(Object.entries(zt).map(async([ut,_e])=>{try{let Ne=ie.getCollectedFileIds(),Rt=ie.getDocsWorkspacePath(),wt=async _=>{let U=Es(Rt,_),ee=Vi(Rt,Re.of(`translations/${ut}/${U}`));return await ar(ee)?ee:_},et=async _=>{let U=await wt(_),ee=await(0,kqt.readFile)(U,"utf-8"),Ge=ee.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return Ge!=null?ee.slice(Ge[0].length):ee},tr=async _=>{let U=await wt(_);return(0,kqt.readFile)(U,"utf-8")},Ft=await Promise.all(Object.entries(_e).map(async([_,U])=>{try{let ee=Ce.pages[_],Ge=Vi(Rt,Re.of(_)),{markdown:vt}=await o2({markdown:U,absolutePathToFernFolder:Rt,absolutePathToMarkdownFile:Ge,context:a,markdownLoader:et}),pt=await Z8({markdown:vt,absolutePathToFernFolder:Rt,absolutePathToMarkdownFile:Ge,context:a,fileLoader:tr}),dt=eq({markdown:pt,absolutePathToFernFolder:Rt,absolutePathToMarkdownFile:Ge}),qt=lR(dt);qt=X8(qt,Ne,{},{absolutePathToMarkdownFile:Ge,absolutePathToFernFolder:Rt},a);let cs=ee?.editThisPageUrl;if(cs!=null){let hf=`/fern/${_}`,Sr=`/fern/translations/${ut}/${_}`;cs=cs.replace(hf,Sr)}return[_,{markdown:qt,rawMarkdown:qt,editThisPageUrl:cs,editThisPageLaunch:ee?.editThisPageLaunch}]}catch(ee){a.logger.warn(`Failed to process translated page "${_}" for locale "${ut}": ${String(ee)}. Falling back to base page.`);return}})),or={...Ce.pages,...Object.fromEntries(Ft.filter(_=>_!=null))},zn=_4e(Ce.config.root,_e,a),ir=Vt?.[ut],ti=Ce.config.announcement,g=Ce.config.navbarLinks;ir!=null&&(zn=T4e(zn,ir),ti=B4e(ir)??ti,ir.navbarLinks!=null&&(g=ir.navbarLinks));let y={...Ce,pages:or,config:{...Ce.config,root:zn,announcement:ti,navbarLinks:g}},E=Object.keys(_e).length;a.logger.debug(`Sending translation for locale "${ut}" (${E} page${E===1?"":"s"})`);let S=await fetch(`${T}/v2/registry/docs/translations/register`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.value}`,...R},body:JSON.stringify({domain:Ee,orgId:t,locale:ut,docsDefinition:y})});if(!S.ok){let _=await S.text();throw new Error(`HTTP ${S.status}: ${_}`)}a.logger.debug(`Registered translations for locale "${ut}"`)}catch(Ne){a.logger.warn(`Failed to register translations for locale "${ut}": ${String(Ne)}`)}})));let le=c2(X);await rFm({docsDefinition:Ce,isPreview:c,context:a});let qe=Ode(le,le);return a.logger.info(xe.green(`Published docs to ${qe}`)),le}catch(Qe){throw he(),Qe}finally{ce=!1,process.removeListener("SIGINT",Fe),process.removeListener("SIGTERM",Fe)}}function kmu(e){return typeof e=="object"&&e!==null&&"uploadUrl"in e&&typeof e.uploadUrl=="string"&&"fileId"in e&&typeof e.fileId=="string"}function VRm(e){if(typeof e=="string")return e;if(kmu(e))return e.uploadUrl;throw new Error(`Unexpected upload URL value: ${JSON.stringify(e)}`)}function qRm(e,t){return kmu(t)?kw.FileId(t.fileId):kw.FileId(e)}async function Omu(e,t,r,n,i){let o=Date.now(),s=Object.keys(e).length;r.logger.debug(`Start uploading ${s} files...`);let a=GTt(Object.entries(e),n),c=0;for(let l of a){await Promise.all(l.map(async([d,f])=>{let m=i.get(d)||Vi(t,Re.of(d));try{let h=VRm(f),A=Mzo.lookup(m);await Ny.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:j.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 Pmu(e,t,r){let n=[];for(let[i,o]of Object.entries(e)){let s=Re.of(i),a=r?.get(i)||Vi(t,s);n.push({relativeFilePath:s,absoluteFilePath:a,fileId:qRm(i,o)})}return n}async function Dmu(e,t,r,n,i){t.instrumentPostHogEvent({command:"docs-generation",properties:{error:JSON.stringify(e)}});let o=jmu(e);t.logger.debug(`startDocsRegister failed for domain '${n}', org '${r}'. Error details:
3434
+ ${JSON.stringify(y,void 0,2)}`),Rt!=null?a.failAndThrow(`Failed to publish docs because API definition (${Rt}) could not be uploaded. Please contact support@buildwithfern.com`,y,{code:j.Code.NetworkError}):a.failAndThrow("Failed to publish docs because API definition could not be uploaded. Please contact support@buildwithfern.com",y,{code:j.Code.NetworkError})}return a.logger.debug(`Registered API Definition ${Rt}: ${ti.apiDefinitionId}`),ti.dynamicIRs&&zn&&(d?a.logger.debug("Skip-upload mode: skipping dynamic IR uploads"):await tFm({dynamicIRs:zn,dynamicIRUploadUrls:ti.dynamicIRs,context:a,apiId:ti.apiDefinitionId})),ti.apiDefinitionId},targetAudiences:h});a.logger.info("Resolving docs definition...");let se=performance.now(),Ce=await ie.resolve(),Ie=performance.now()-se;if(r.config.settings?.substituteEnvVars){a.logger.debug("Applying environment variable substitution to docs definition...");let{jsFiles:ut,..._e}=Ce;Ce={...Iy(_e,{onError:Rt=>a.failAndThrow(void 0,Rt,{code:j.Code.EnvironmentError})},{substituteAsEmpty:!1}),jsFiles:ut}}let ke=Object.keys(Ce.pages).length,Ve=o.length,ct=process.memoryUsage();if(a.logger.info(`Resolved docs definition in ${Ie.toFixed(0)}ms: ${ke} pages${Ve?`, ${Ve} API workspaces`:""}`),a.logger.debug(`Memory after resolve: RSS=${(ct.rss/1024/1024).toFixed(2)}MB, Heap=${(ct.heapUsed/1024/1024).toFixed(2)}MB`),J==null)return he(),a.failAndThrow("Failed to publish docs.","Docs registration ID is missing.",{code:j.Code.InternalError});a.logger.info("Publishing docs to FDR...");let At=performance.now();try{await O.docs.v2.write.finishDocsRegister({docsRegistrationId:J,docsDefinition:Ce,excludeApis:m,...ge&&!c&&{basepathAware:!0}})}catch(ut){return a.failAndThrow("Failed to publish docs to "+n,ut,{code:j.Code.NetworkError})}let kt=performance.now()-At;a.logger.debug(`Docs published to FDR in ${kt.toFixed(0)}ms`);let zt=ie.getTranslationPages(),Vt=ie.getTranslationNavigationOverlays(),Ee=c?X:n;zt!=null&&Object.keys(zt).length>0&&(a.logger.info(`Registering translations for ${Object.keys(zt).length} locale(s)...`),await Promise.all(Object.entries(zt).map(async([ut,_e])=>{try{let Ne=ie.getCollectedFileIds(),Rt=ie.getDocsWorkspacePath(),wt=async _=>{let U=Es(Rt,_),ee=Vi(Rt,Re.of(`translations/${ut}/${U}`));return await ar(ee)?ee:_},et=async _=>{let U=await wt(_),ee=await(0,kqt.readFile)(U,"utf-8"),Ge=ee.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return Ge!=null?ee.slice(Ge[0].length):ee},tr=async _=>{let U=await wt(_);return(0,kqt.readFile)(U,"utf-8")},Ft=await Promise.all(Object.entries(_e).map(async([_,U])=>{try{let ee=Ce.pages[_],Ge=Vi(Rt,Re.of(_)),{markdown:vt}=await o2({markdown:U,absolutePathToFernFolder:Rt,absolutePathToMarkdownFile:Ge,context:a,markdownLoader:et}),pt=await Z8({markdown:vt,absolutePathToFernFolder:Rt,absolutePathToMarkdownFile:Ge,context:a,fileLoader:tr}),dt=eq({markdown:pt,absolutePathToFernFolder:Rt,absolutePathToMarkdownFile:Ge}),qt=lR(dt);qt=X8(qt,Ne,{},{absolutePathToMarkdownFile:Ge,absolutePathToFernFolder:Rt},a);let cs=ee?.editThisPageUrl;if(cs!=null){let hf=`/fern/${_}`,Sr=`/fern/translations/${ut}/${_}`;cs=cs.replace(hf,Sr)}return[_,{markdown:qt,rawMarkdown:qt,editThisPageUrl:cs,editThisPageLaunch:ee?.editThisPageLaunch}]}catch(ee){a.logger.warn(`Failed to process translated page "${_}" for locale "${ut}": ${String(ee)}. Falling back to base page.`);return}})),or={...Ce.pages,...Object.fromEntries(Ft.filter(_=>_!=null))},zn=_4e(Ce.config.root,_e,a),ir=Vt?.[ut],ti=Ce.config.announcement,g=Ce.config.navbarLinks;ir!=null&&(zn=T4e(zn,ir),ti=B4e(ir)??ti,ir.navbarLinks!=null&&(g=ir.navbarLinks));let y={...Ce,pages:or,config:{...Ce.config,root:zn,announcement:ti,navbarLinks:g}},E=Object.keys(_e).length;a.logger.debug(`Sending translation for locale "${ut}" (${E} page${E===1?"":"s"})`);let S=await fetch(`${T}/v2/registry/docs/translations/register`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.value}`,...R},body:JSON.stringify({domain:Ee,customDomains:c?[]:i,orgId:t,locale:ut,docsDefinition:y})});if(!S.ok){let _=await S.text();throw new Error(`HTTP ${S.status}: ${_}`)}a.logger.debug(`Registered translations for locale "${ut}"`)}catch(Ne){a.logger.warn(`Failed to register translations for locale "${ut}": ${String(Ne)}`)}})));let le=c2(X);await rFm({docsDefinition:Ce,isPreview:c,context:a});let qe=Ode(le,le);return a.logger.info(xe.green(`Published docs to ${qe}`)),le}catch(Qe){throw he(),Qe}finally{ce=!1,process.removeListener("SIGINT",Fe),process.removeListener("SIGTERM",Fe)}}function kmu(e){return typeof e=="object"&&e!==null&&"uploadUrl"in e&&typeof e.uploadUrl=="string"&&"fileId"in e&&typeof e.fileId=="string"}function VRm(e){if(typeof e=="string")return e;if(kmu(e))return e.uploadUrl;throw new Error(`Unexpected upload URL value: ${JSON.stringify(e)}`)}function qRm(e,t){return kmu(t)?kw.FileId(t.fileId):kw.FileId(e)}async function Omu(e,t,r,n,i){let o=Date.now(),s=Object.keys(e).length;r.logger.debug(`Start uploading ${s} files...`);let a=GTt(Object.entries(e),n),c=0;for(let l of a){await Promise.all(l.map(async([d,f])=>{let m=i.get(d)||Vi(t,Re.of(d));try{let h=VRm(f),A=Mzo.lookup(m);await Ny.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:j.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 Pmu(e,t,r){let n=[];for(let[i,o]of Object.entries(e)){let s=Re.of(i),a=r?.get(i)||Vi(t,s);n.push({relativeFilePath:s,absoluteFilePath:a,fileId:qRm(i,o)})}return n}async function Dmu(e,t,r,n,i){t.instrumentPostHogEvent({command:"docs-generation",properties:{error:JSON.stringify(e)}});let o=jmu(e);t.logger.debug(`startDocsRegister failed for domain '${n}', org '${r}'. Error details:
3435
3435
  ${JSON.stringify(o,void 0,2)}`);let s=e,a=s?.content;if(a?.reason==="status-code"&&a?.statusCode===409)throw new Nbt;let c=GRm(e,r,n,i);if(c!=null)return t.failAndThrow(c,void 0,{code:j.Code.AuthError});switch(s?.error){case"InvalidCustomDomainError":return t.failAndThrow("Your docs domain should end with docs.buildwithfern.com",void 0,{code:j.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:j.Code.ConfigError});case"UnauthorizedError":return t.failAndThrow(Nmu(n,r,a,i),void 0,{code:j.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.
3436
3436
 
3437
3437
  Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`,void 0,{code:j.Code.AuthError});case"UnavailableError":return t.failAndThrow("Failed to publish docs. Please try again later or reach out to Fern support at support@buildwithfern.com.",void 0,{code:j.Code.NetworkError});default:return t.failAndThrow("Failed to publish docs.",e,{code:j.Code.NetworkError})}}function GRm(e,t,r,n){if(typeof e!="object"||e==null)return;let i=e.content,o=typeof i=="object"&&i!=null?i:void 0;if(o?.reason==="status-code"){let s=typeof o.statusCode=="number"?o.statusCode:void 0;if(s===401||s===403)return Nmu(r,t,o,n)}}function Nmu(e,t,r,n){let{code:i,message:o}=KRm(r);switch(i){case"FORBIDDEN":return $Rm(e,t,o,n);case"UNAUTHORIZED":return HRm(t,o,n);case"INTERNAL_SERVER_ERROR":return`An internal server error occurred while publishing docs to '${e}'. Please try again or reach out to support@buildwithfern.com for assistance.`;default:return o??`Failed to publish docs to '${e}'. Please reach out to support@buildwithfern.com for assistance.`}}var WRm=["does not belong to organization","User does not belong"];function $Rm(e,t,r,n){return r==null?`You do not have permission to publish docs to '${e}' under organization '${t}'.`:WRm.some(i=>r.includes(i))?`You are not a member of organization '${t}'. Please run '${n}' to ensure you are logged in with the correct account.
3438
3438
 
3439
3439
  Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`:r}function HRm(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.
3440
3440
 
3441
- Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function KRm(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 JRm(e){try{return new URL(c2(e)).pathname}catch{return}}async function YRm({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await XRm({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 a=(await e.api.register.checkSdkDynamicIrExists({orgId:fn.OrgId(r),apiId:"",irVersions:[]})).existingDynamicIrs??{};if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let c={};for(let[u,l]of Object.entries(a??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${u}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();c[u]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${u}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${u}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${u}: ${p}`)}return Object.keys(c).length>0?c:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function Qzo(e){return e.replace(/^https:\/\//,"")}async function XRm({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&&Qzo(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 ZRm({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 ZRm({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=jn.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 eFm({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&&Qzo(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=S3e({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=Qzo(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=Hg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new Mh(r,e),dynamicGeneratorConfig:u}),d=nMe({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 tFm({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 rFm({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(xe.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function nFm(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 jmu(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 Nqt=[60*1e3,300*1e3,300*1e3];async function jqt({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=Iy(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:j.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:j.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:j.Code.ConfigError});return}let b=A.find(C=>C.url===s)??A[0];if(b==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:j.Code.ConfigError});return}let v=[];b.customDomain!=null&&(typeof b.customDomain=="string"?v.push(b.customDomain):Array.isArray(b.customDomain)&&v.push(...b.customDomain)),b.multiSource===!0&&iFm(b.url,v,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${b.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let x;return await i.runInteractiveTask({name:b.url},async()=>{let C=performance.now(),w=()=>Fmu({docsWorkspace:n,customDomains:v,domain:b.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:b.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:b.audiences?Array.isArray(b.audiences)?b.audiences:[b.audiences]:void 0,docsUrl:b.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:b.multiSource??!1});for(let B=0;;B++)try{x=await w();break}catch(R){if(!(R instanceof Nbt)||B>=Nqt.length){if(R instanceof Nbt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:j.Code.NetworkError});throw R}let O=Nqt[B]??Nqt[Nqt.length-1]??6e4,z=O/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${z} minute${z===1?"":"s"} (attempt ${B+1}/${Nqt.length})...`),await new Promise(J=>setTimeout(J,O))}let T=performance.now()-C;i.logger.debug(`Docs publishing completed in ${T.toFixed(0)}ms`)}),x}function Qmu(e){try{let t=e.startsWith("https://")||e.startsWith("http://")?e:`https://${e}`;return new URL(t).pathname}catch{return"/"}}function iFm(e,t,r){let n=Qmu(e);for(let i of t){let o=Qmu(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:j.Code.ConfigError})}}var fei=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 Qh({context:this.context,task:this.task});try{let s=await jqt({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.7.4",loginCommand:"fern auth login"});return o.getResult()===Gf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Zn(s)}}}};Lt();var jbt=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(`
3441
+ Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function KRm(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 JRm(e){try{return new URL(c2(e)).pathname}catch{return}}async function YRm({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await XRm({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 a=(await e.api.register.checkSdkDynamicIrExists({orgId:fn.OrgId(r),apiId:"",irVersions:[]})).existingDynamicIrs??{};if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let c={};for(let[u,l]of Object.entries(a??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${u}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();c[u]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${u}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${u}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${u}: ${p}`)}return Object.keys(c).length>0?c:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function Qzo(e){return e.replace(/^https:\/\//,"")}async function XRm({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&&Qzo(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 ZRm({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 ZRm({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=jn.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 eFm({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&&Qzo(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=S3e({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=Qzo(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=Hg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new Mh(r,e),dynamicGeneratorConfig:u}),d=nMe({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 tFm({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 rFm({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(xe.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function nFm(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 jmu(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 Nqt=[60*1e3,300*1e3,300*1e3];async function jqt({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=Iy(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:j.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:j.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:j.Code.ConfigError});return}let b=A.find(C=>C.url===s)??A[0];if(b==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:j.Code.ConfigError});return}let v=[];b.customDomain!=null&&(typeof b.customDomain=="string"?v.push(b.customDomain):Array.isArray(b.customDomain)&&v.push(...b.customDomain)),b.multiSource===!0&&iFm(b.url,v,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${b.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let x;return await i.runInteractiveTask({name:b.url},async()=>{let C=performance.now(),w=()=>Fmu({docsWorkspace:n,customDomains:v,domain:b.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:b.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:b.audiences?Array.isArray(b.audiences)?b.audiences:[b.audiences]:void 0,docsUrl:b.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:b.multiSource??!1});for(let B=0;;B++)try{x=await w();break}catch(R){if(!(R instanceof Nbt)||B>=Nqt.length){if(R instanceof Nbt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:j.Code.NetworkError});throw R}let O=Nqt[B]??Nqt[Nqt.length-1]??6e4,z=O/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${z} minute${z===1?"":"s"} (attempt ${B+1}/${Nqt.length})...`),await new Promise(J=>setTimeout(J,O))}let T=performance.now()-C;i.logger.debug(`Docs publishing completed in ${T.toFixed(0)}ms`)}),x}function Qmu(e){try{let t=e.startsWith("https://")||e.startsWith("http://")?e:`https://${e}`;return new URL(t).pathname}catch{return"/"}}function iFm(e,t,r){let n=Qmu(e);for(let i of t){let o=Qmu(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:j.Code.ConfigError})}}var fei=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 Qh({context:this.context,task:this.task});try{let s=await jqt({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.7.5",loginCommand:"fern auth login"});return o.getResult()===Gf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Zn(s)}}}};Lt();var jbt=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(`
3442
3442
  `),this.stream.write(`${xe.cyan("\u25C6")} ${xe.bold(t.title)}
3443
3443
  `),t.subtitle!=null&&this.stream.write(` ${xe.dim(t.subtitle)}
3444
3444
  `),this.stream.write(`
@@ -4114,7 +4114,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
4114
4114
  Run ${xe.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
4115
4115
  Run ${xe.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),oit(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function ihs({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!V9u(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+=`
4116
4116
  ${await IWh(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+xe.dim(a.currentVersion)+xe.reset(" \u2192 ")+xe.green(a.latestVersion);return i+=`
4117
- `,n?oit(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function IWh(e){let r=await new U9u.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new j({message:`Generator ${e} not found`,code:j.Code.ConfigError});return r.body.displayName}async function vWh({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await G9u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=CQe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await PP({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 G9u({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=CQe(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await PP({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 G9u({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 wL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?ty(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 W9u(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=Cj(a.latestVersion,a.previousVersion)}catch{throw new j({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:j.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 _mi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await vWh({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(...W9u(u,c,t.logger));else s.push(...W9u(a.versions,void 0,t.logger))}return s}async function ehe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await tPt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new j({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:j.Code.NetworkError})}}var $9u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Tmi=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=Xn.Info;isLocal;stdoutRedirector=new Smi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await Izt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new _Mt(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 wmi({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"5.7.4"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${xe.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)&&(uMt({message:t,error:r,logger:this.logger}),xmi(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)+`
4117
+ `,n?oit(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function IWh(e){let r=await new U9u.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new j({message:`Generator ${e} not found`,code:j.Code.ConfigError});return r.body.displayName}async function vWh({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await G9u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=CQe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await PP({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 G9u({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=CQe(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await PP({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 G9u({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 wL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?ty(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 W9u(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=Cj(a.latestVersion,a.previousVersion)}catch{throw new j({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:j.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 _mi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await vWh({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(...W9u(u,c,t.logger));else s.push(...W9u(a.versions,void 0,t.logger))}return s}async function ehe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await tPt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new j({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:j.Code.NetworkError})}}var $9u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Tmi=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=Xn.Info;isLocal;stdoutRedirector=new Smi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await Izt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new _Mt(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 wmi({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"5.7.5"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${xe.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)&&(uMt({message:t,error:r,logger:this.logger}),xmi(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)+`
4118
4118
  `),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 q9u({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
4119
4119
  `)||(r+=`
4120
4120
  `),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=b_i(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 DHt(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=DS((t,...r)=>this.log(t,...r));stderr=DS((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=H9u(r),i=1+(this.longestWorkspaceName!=null?H9u(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=$9u[this.numTasks++%$9u.length],a=xe.hex(s)(o);return{...this.constructTaskInit(),logPrefix:a,title:xe.hex(s).bold(r)}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Gf.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=>PS.indexOf(i.level)>=PS.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===Xn.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 ehe({cliEnvironment:this.environment,includePreReleases:t}),n=Cj(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await _mi({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await rhs({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:xe.yellow("?"),style:{answer:i=>xe.cyan(i),message:i=>xe.bold(i),highlight:i=>xe.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "5.7.4",
2
+ "version": "5.7.5",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",