fern-api 5.37.11 → 5.37.12
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.
- package/cli.cjs +6 -6
- package/package.json +1 -1
package/cli.cjs
CHANGED
|
@@ -3222,7 +3222,7 @@ ${qjc.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&rxo(th
|
|
|
3222
3222
|
`+uze.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?uze.default.cyan($jc(t,this.opt.mask)):uze.default.italic(uze.default.dim("[hidden]")):this.opt.mask?$jc(t,this.opt.mask):uze.default.italic(uze.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 W7r=we(lS(),1);var ZQc=we(Qxo(),1),q7r=require("child_process"),jot=require("fs"),V7r=we(require("path"),1),$Qc=we(require("os"),1),e6c=require("crypto"),vSo=we(YQc(),1);var z7r=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var J_t=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var U7r=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var _7r=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function G7r(e="",t,r){let n=new ISo(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 XQc(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function S_d(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 ISo=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=S_d(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??$Qc.default.tmpdir(),r=(0,e6c.randomUUID)(),n=XQc(this.fileOptions.prefix),i=XQc(this.fileOptions.postfix),o=`${n}${r}${i}`,s=V7r.default.resolve(t,o),a=V7r.default.resolve(t)+V7r.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,jot.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new z7r(t)}}readTemporaryFile(){try{let t=(0,jot.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,ZQc.detect)(t)??"utf8";vSo.default.encodingExists(r)||(r="utf8"),this.text=vSo.default.decode(t,r)}}catch(t){throw new U7r(t)}}removeTemporaryFile(){try{(0,jot.unlinkSync)(this.tempFile)}catch(t){throw new _7r(t)}}launchEditor(){try{let t=(0,q7r.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new J_t(t)}}launchEditorAsync(t){try{(0,q7r.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new J_t(r)}}};var t6c=we(gz(),1);var Y_t=class extends pS{_run(t){this.done=t,this.editorResult=new t6c.Subject;let r=WO(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"?W7r.default.dim("Received"):W7r.default.dim("Press <enter> to launch your preferred editor."),t&&(r=W7r.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),G7r(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 s6c=require("stream");var i6c=we(require("readline"),1),o6c=we(n6c(),1),dze=class{constructor(t){this.rl||=i6c.default.createInterface(B_d(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 B_d(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 o6c.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var X_t=class extends dze{constructor(t={}){super(t),this.log=new s6c.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return k_t(this.rl,this.bottomBar.split(`
|
|
3223
3223
|
`).length),this}updateBottomBar(t){return k_t(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+`
|
|
3224
3224
|
`}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&&m7r(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var qd=we(gz(),1),u6c=we(p_t(),1);var H7r=we(gz(),1),a6c=we(p_t(),1),K7r=function(e,t,r){return typeof e[t]!="function"?(0,H7r.of)(e):(0,H7r.from)((0,a6c.default)(e[t])(r).then(n=>(e[t]=n,e)))};var c6c={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}},Qot=class extends dze{constructor(t,r){super(r),this.prompts=t}run(t,r){this.answers=typeof r=="object"?{...r}:{};let n;return Array.isArray(t)?n=(0,qd.from)(t):(0,qd.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,qd.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,qd.from)([t]),this.process=n.pipe((0,qd.concatMap)(this.processQuestion.bind(this)),(0,qd.publish)()),this.process.connect(),this.process.pipe((0,qd.reduce)((i,o)=>(c6c.set(i,o.name,o.answer),i),this.answers)).toPromise(Promise).then(this.onCompletion.bind(this),this.onError.bind(this))}onCompletion(){return this.close(),this.answers}onError(t){return this.close(),Promise.reject(t)}processQuestion(t){return t={...t},(0,qd.defer)(()=>(0,qd.of)(t).pipe((0,qd.concatMap)(this.setDefaultType.bind(this)),(0,qd.concatMap)(this.filterIfRunnable.bind(this)),(0,qd.concatMap)(()=>K7r(t,"message",this.answers)),(0,qd.concatMap)(()=>K7r(t,"default",this.answers)),(0,qd.concatMap)(()=>K7r(t,"choices",this.answers)),(0,qd.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,qd.defer)(()=>(0,qd.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,qd.defer)(()=>(0,qd.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&c6c.get(this.answers,t.name)!==void 0)return qd.EMPTY;if(t.when===!1)return qd.EMPTY;if(typeof t.when!="function")return(0,qd.of)(t);let{answers:r}=this;return(0,qd.defer)(()=>(0,qd.from)((0,u6c.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,qd.filter)(n=>n!=null)))}};function l6c(e){let t=function(r,n){let i;try{i=new Qot(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",j_t),this.registerPrompt("input",cze),this.registerPrompt("number",Q_t),this.registerPrompt("confirm",M_t),this.registerPrompt("rawlist",L_t),this.registerPrompt("expand",z_t),this.registerPrompt("checkbox",U_t),this.registerPrompt("password",__t),this.registerPrompt("editor",Y_t)},t.restoreDefaultPrompts(),t}var wSo=l6c();function P_d(e,t){wSo.registerPrompt(e,t)}function D_d(){wSo.restoreDefaultPrompts()}var R_d={prompt:wSo,ui:{BottomBar:X_t,Prompt:Qot},createPromptModule:l6c,registerPrompt:P_d,restoreDefaultPrompts:D_d,Separator:a6},tp=R_d;var Mot=require("path");function f6c(){let e=F_d();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function F_d(e=process.argv[1]?(0,Mot.dirname)(process.argv[1]):process.cwd(),t=Mot.sep==="\\"){let r=t?p6c(e):e;return n=>{if(!n)return;let i=t?p6c(n):n,{dir:o,base:s,ext:a}=Mot.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 p6c(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var xSo=e=>{if("flags"in e){let t=d6c(e.flags),r=m6c(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,SSo(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,k_d(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function k_d(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 d6c=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,Z_t(r)]).filter(([,t])=>t!==void 0)),m6c=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?SSo(n):void 0]}))};var Z_t=e=>e===void 0?void 0:e.variant??e.enabled,SSo=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};function h6c(){return"CompressionStream"in globalThis}async function J7r(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 Y7r="0123456789abcdef",X7r=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+=Y7r.charAt(this.bytes[r]>>>4),t+=Y7r.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+=Y7r.charAt(this.bytes[r]>>>4),t+=Y7r.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}},TSo=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??N_d()}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 X7r.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,X7r.ofInner(t)}},N_d=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),g6c,mCe=()=>j_d().toString(),j_d=()=>(g6c||(g6c=new TSo)).generate();var u6=(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 Q_d=["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"],A6c=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return Q_d.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var L_d=Array.isArray,y6c=Object.prototype,veE=y6c.hasOwnProperty,BSo=y6c.toString,OSo=L_d||function(e){return BSo.call(e)==="[object Array]"};var PSo=e=>e===Object(e)&&!OSo(e);var $_t=e=>e===void 0,eVt=e=>BSo.call(e)=="[object String]",b6c=e=>eVt(e)&&e.trim().length===0;var E6c=e=>BSo.call(e)=="[object Number]"&&e===e;var DSo=e=>e instanceof Error;function Z7r(e){return e===null||typeof e!="object"}function mze(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function v6c(e){return mze(e,"ErrorEvent")}function Lot(e){return typeof Event<"u"&&z_d(e,Event)}function I6c(e){return mze(e,"Object")}function z_d(e,t){try{return e instanceof t}catch{return!1}}function tVt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),E6c(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),tVt(i||r,t,r,n))}var U_d=864e5,$7r=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=tVt(t.bucketSize,0,100,t._logger),this._refillRate=tVt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=tVt(t.refillInterval,0,U_d,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 eqr=class{add(t){let r=mCe();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 __d(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var C6c=(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=>C6c(`${e} ${o}`,t,r)}},V_d=e=>e();function w6c(e,t=V_d){return C6c(e,t,__d())}var Uot="Mobile",rqr="iOS",zot="Android",x6c="Tablet",FeE=zot+" "+x6c;var q_d="Apple",keE=q_d+" Watch",S6c="Safari",nqr="BlackBerry",T6c="Samsung",G_d=T6c+"Browser",W_d=T6c+" Internet",iqr="Chrome",H_d=iqr+" OS",K_d=iqr+" "+rqr,B6c="Internet Explorer",J_d=B6c+" "+Uot,FSo="Opera",NeE=FSo+" Mini",O6c="Edge",Y_d="Microsoft "+O6c,kSo="Firefox",X_d=kSo+" "+rqr,NSo="Nintendo",jSo="PlayStation",tqr="Xbox",Z_d=zot+" "+Uot,$_d=Uot+" "+S6c,rVt="Windows",eVd=rVt+" Phone";var P6c="Generic",jeE=P6c+" "+Uot.toLowerCase(),QeE=P6c+" "+x6c.toLowerCase(),tVd="Konqueror",B2="(\\d+(\\.\\d+)?)",RSo=new RegExp("Version/"+B2),MeE=new RegExp(tqr,"i"),LeE=new RegExp(jSo+" \\w+","i"),zeE=new RegExp(NSo+" \\w+","i"),rVd=new RegExp(nqr+"|PlayBook|BB10","i"),nVd={"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 UeE={[J_d]:[new RegExp("rv:"+B2)],[Y_d]:[new RegExp(O6c+"?\\/"+B2)],[iqr]:[new RegExp("("+iqr+"|CrMo)\\/"+B2)],[K_d]:[new RegExp("CriOS\\/"+B2)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+B2)],[S6c]:[RSo],[$_d]:[RSo],[FSo]:[new RegExp("("+FSo+"|OPR)\\/"+B2)],[kSo]:[new RegExp(kSo+"\\/"+B2)],[X_d]:[new RegExp("FxiOS\\/"+B2)],[tVd]:[new RegExp("Konqueror[:/]?"+B2,"i")],[nqr]:[new RegExp(nqr+" "+B2),RSo],[Z_d]:[new RegExp("android\\s"+B2,"i")],[W_d]:[new RegExp(G_d+"\\/"+B2)],[B6c]:[new RegExp("(rv:|MSIE )"+B2)],Mozilla:[new RegExp("rv:"+B2)]};var _eE=[[new RegExp(tqr+"; "+tqr+" (.*?)[);]","i"),e=>[tqr,e&&e[1]||""]],[new RegExp(NSo,"i"),[NSo,""]],[new RegExp(jSo,"i"),[jSo,""]],[rVd,[nqr,""]],[new RegExp(rVt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[eVd,""];if(new RegExp(Uot).test(t)&&!/IEMobile\b/.test(t))return[rVt+" "+Uot,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=nVd[n]||"";return/arm/i.test(t)&&(i="RT"),[rVt,i]}return[rVt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[rqr,t.join(".")]}return[rqr,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=$_t(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+zot+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+zot+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[zot,t.join(".")]}return[zot,""]}],[/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/,[H_d,""]],[/Linux|debian/i,["Linux",""]]];var D6c="utf8";function R6c(e,t){if(!e||typeof e!="string"||iVd(e))throw new Error(t)}function iVd(e){return e.trim().length===0}function F6c(e){return e?.replace(/\/+$/,"")}async function k6c(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 oqr(){return new Date().toISOString()}function Rfe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var N6c=e=>e instanceof Error;function QSo(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var sqr=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 hze=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()}},_ot=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function j6c(e){if(e instanceof hze){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 MSo(e){return typeof e=="object"&&(e instanceof hze||e instanceof _ot)}function Q6c(e){return typeof e=="object"&&e instanceof hze&&e.status===413}var nVt=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new eqr,this._events=new sqr,this._isInitialized=!1,R6c(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=F6c(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:MSo},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=w6c("[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=!h6c()||(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(u6.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(u6.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(u6.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:xSo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof hze)return{type:"api_error",statusCode:t.status};if(t instanceof _ot){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=Z_t(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(u6.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(u6.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(u6.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(u6.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(u6.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=Rfe(()=>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:oqr()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await J7r(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:oqr(),uuid:n?.uuid?n.uuid:mCe()};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 j6c(t)})}async flush(){let t=QSo([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),QSo([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(u6.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(u6.Queue)||[]).slice(i.length);this.setPersistedProperty(u6.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:oqr()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await J7r(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>Q6c(f)?!1:MSo(f)};try{await this.fetchWithRetry(u,p,d)}catch(f){if(Q6c(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 _ot||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,D6c)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await k6c(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=Rfe(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new _ot(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new hze(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(u6.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!MSo(o))throw o;await j6c(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=Rfe(()=>{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 l6={};re(l6,{DOMExceptionCoercer:()=>_So,ErrorCoercer:()=>VSo,ErrorEventCoercer:()=>qSo,ErrorPropertiesBuilder:()=>LSo,EventCoercer:()=>HSo,ObjectCoercer:()=>WSo,PrimitiveCoercer:()=>KSo,PromiseRejectionEventCoercer:()=>JSo,ReduceableCache:()=>YSo,StringCoercer:()=>GSo,chromeStackLineParser:()=>zSo,createDefaultStackParser:()=>bVd,createStackParser:()=>K6c,geckoStackLineParser:()=>USo,nodeStackLineParser:()=>q6c,opera10StackLineParser:()=>U6c,opera11StackLineParser:()=>_6c,reverseAndStripFrames:()=>H6c,winjsStackLineParser:()=>z6c});var aqr,M6c,cqr;function L6c(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return cqr&&r.length===M6c||(M6c=r.length,cqr=r.reduce((n,i)=>{aqr||(aqr={});let o=aqr[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,aqr[i]=[u,l];break}}}return n},{})),cqr}var sVd=4,LSo=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&&OSo(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:L6c(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=sVd){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 KO="?";function mee(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?KO:r,in_app:!0};return $_t(n)||(o.lineno=n),$_t(i)||(o.colno=i),o}var uqr=(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]:KO,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var aVd=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,cVd=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,uVd=/\((\S*)(?::(\d+))(?::(\d+))\)/,zSo=(e,t)=>{let r=aVd.exec(e);if(r){let[,i,o,s]=r;return mee(t,i,KO,+o,+s)}let n=cVd.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=uVd.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=uqr(n[1]||KO,n[2]);return mee(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var lVd=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,pVd=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,USo=(e,t)=>{let r=lVd.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=pVd.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]||KO;return[o,i]=uqr(o,i),mee(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var fVd=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,z6c=(e,t)=>{let r=fVd.exec(e);return r?mee(t,r[2],r[1]||KO,+r[3],r[4]?+r[4]:void 0):void 0};var dVd=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,U6c=(e,t)=>{let r=dVd.exec(e);return r?mee(t,r[2],r[3]||KO,+r[1]):void 0},mVd=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,_6c=(e,t)=>{let r=mVd.exec(e);return r?mee(t,r[5],r[3]||r[4]||KO,+r[1],+r[2]):void 0};var hVd=/^\s*[-]{4,}$/,gVd=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,q6c=(e,t)=>{let r=e.match(gVd);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||KO,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:V6c(r[3]),colno:V6c(r[4]),in_app:AVd(c||"",u),platform:t}}if(e.match(hVd))return{filename:e,platform:t}};function AVd(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 V6c(e){return parseInt(e||"",10)||void 0}var G6c=/\(error: (.*)\)/,W6c=50;function H6c(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,W6c).map(r=>({...r,filename:r.filename||yVd(t).filename,function:r.function||KO}))}function yVd(e){return e[e.length-1]||{}}function bVd(){return K6c("web:javascript",zSo,USo)}function K6c(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
|
|
3225
|
-
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=G6c.test(a)?a.replace(G6c,"$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>=W6c)break}}return H6c(i)}}var _So=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=eVt(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 mze(t,"DOMException")}isDOMError(t){return mze(t,"DOMError")}};var VSo=class{match(t){return DSo(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 qSo=class{constructor(){}match(t){return v6c(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 EVd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,GSo=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(EVd);return i&&(r=i[1],n=i[2]),[r,n]}};var J6c=["fatal","error","warning","log","info","debug"];function lqr(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 WSo=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 Lot(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=lqr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return eVt(t)&&!b6c(t)&&J6c.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(N6c(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var HSo=class{match(t){return Lot(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${lqr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var KSo=class{match(t){return Z7r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var JSo=class{match(t){return mze(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Lot(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 Z7r(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 YSo=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 Z6c=require("fs"),$6c=require("readline"),pqr=new l6.ReduceableCache(25),eMc=new l6.ReduceableCache(20),XSo=7,vVd=1e3,IVd=1e4;async function tMc(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"||SVd(s)||TVd(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(eMc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=OVd(o);if(s.every(c=>BVd(i,c)))continue;let a=PVd(pqr,i,{});n.push(CVd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&wVd(e,pqr),pqr.reduce(),e}function CVd(e,t,r){return new Promise(n=>{let i=(0,Z6c.createReadStream)(e),o=(0,$6c.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(){eMc.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]=DVd(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 wVd(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;xVd(r.lineno,r,n)}}function xVd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=rMc(e);i<e;i++){let o=r[i];if(o===void 0)return void Y6c(t);t.pre_context.push(o)}if(r[e]===void 0)return void Y6c(t);t.context_line=r[e];let n=nMc(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 Y6c(e){delete e.pre_context,delete e.context_line,delete e.post_context}function SVd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function TVd(e){return e.lineno!==void 0&&e.lineno>IVd||e.colno!==void 0&&e.colno>vVd}function BVd(e,t){let r=pqr.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 OVd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=X6c(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+XSo:(i.push(n),n=X6c(o)),t++}return i}function X6c(e){return[rMc(e),nMc(e)]}function rMc(e){return Math.max(1,e-XSo)}function nMc(e){return e+XSo}function PVd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function DVd(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 RVd(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 iMc(e,t){globalThis.process?.on("uncaughtException",RVd(e,t))}function oMc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var FVd=2e3,dH=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new $7r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return PSo(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()&&(iMc(this.onException.bind(this),this.onFatalError.bind(this)),oMc(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(FVd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var sMc="5.29.1";var iVt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function aMc(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 kVd=6e4,NVd=1152921504606847e3,jVd=["is_not"],Vot=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Gd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},hee=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},fqr=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 hee||u instanceof Gd?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 hee||u instanceof Gd?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 Gd("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 Gd("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 Gd(`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 Gd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Gd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Gd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Gd(`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 Gd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Gd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Gd(`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 hee)throw l;if(l instanceof Gd)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Gd("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"?fMc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):pMc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await cMc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await cMc(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(kVd,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 Vot(`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 Vot(`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 Vot(`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 Vot&&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=Rfe(()=>{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 cMc(e,t,r=""){let n=await aMc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/NVd}function pMc(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 Gd("Operator is_not_set is not supported")}else throw new Gd(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!jVd.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 uMc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return uMc(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 Gd("Date operations cannot be performed on boolean values");let u=UVd(String(i));if(u==null&&(u=lMc(i)),u==null)throw new Gd(`Invalid date: ${i}`);let l=lMc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return _V(JO(String(s)),JO(String(i)))===0;case"semver_neq":return _V(JO(String(s)),JO(String(i)))!==0;case"semver_gt":return _V(JO(String(s)),JO(String(i)))>0;case"semver_gte":return _V(JO(String(s)),JO(String(i)))>=0;case"semver_lt":return _V(JO(String(s)),JO(String(i)))<0;case"semver_lte":return _V(JO(String(s)),JO(String(i)))<=0;case"semver_tilde":{let u=JO(String(s)),{lower:l,upper:p}=MVd(String(i));return _V(u,l)>=0&&_V(u,p)<0}case"semver_caret":{let u=JO(String(s)),{lower:l,upper:p}=LVd(String(i));return _V(u,l)>=0&&_V(u,p)<0}case"semver_wildcard":{let u=JO(String(s)),{lower:l,upper:p}=zVd(String(i));return _V(u,l)>=0&&_V(u,p)<0}default:throw new Gd(`Unknown operator: ${o}`)}}function QVd(e,t){if(!(e in t))throw new hee(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function fMc(e,t,r,n=!1){let i=String(e.value);QVd(i,r);let o=r[i];return dMc(o,t,r,n)}function dMc(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=dMc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof hee)throw c;if(c instanceof Gd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Gd("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=fMc(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=pMc(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 hee)throw c;if(c instanceof Gd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Gd("can't match cohort without a given cohort property value");return i==="AND"}function uMc(e){try{return new RegExp(e),!0}catch{return!1}}function JO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Gd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Gd(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function _V(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 MVd(e){let t=JO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function LVd(e){let t=JO(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 zVd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Gd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Gd(`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 Gd(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function lMc(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 Gd(`${e} is in an invalid date format`)}throw new Gd(`The date provided ${e} must be a string, number, or date object`)}function UVd(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 dqr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var _Vd=100,mMc=3e4,VVd=5e4,qVd=50,GVd=500,mqr=class extends nVt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new dqr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,_Vd):mMc,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 fqr({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 dH(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||VVd}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??GVd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??qVd;this._waitUntilCycle.timer=Rfe(()=>{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 sMc}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=mMc){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let B=this._flagOverrides[t];if(B===void 0)return;let O=this._payloadOverrides?.[t];return{key:t,enabled:B!==!1,variant:typeof B=="string"?B:void 0,payload:O}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,h,A,y,I,w,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let B=this.featureFlagsPoller?.featureFlagsByKey[t];if(B)try{let O=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(B,d,{matchValue:i});if(O){m=!0;let k=O.value;I=B.id,C="Evaluated locally",f={key:t,enabled:k!==!1,variant:typeof k=="string"?k:void 0,payload:O.payload??void 0}}}catch(O){if(O instanceof hee||O instanceof Gd)this._logger?.info(`${O.name} when computing flag locally: ${t}: ${O.message}`);else throw O}}if(!m&&!c){let B=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(B===void 0)y=iVt.UNKNOWN_ERROR;else{h=B.requestId,A=B.evaluatedAt;let O=[];B.errorsWhileComputingFlags&&O.push(iVt.ERRORS_WHILE_COMPUTING),B.quotaLimited?.includes("feature_flags")&&O.push(iVt.QUOTA_LIMITED);let k=B.flags[t];if(k===void 0)O.push(iVt.FLAG_MISSING);else{I=k.metadata?.id,w=k.metadata?.version,C=k.reason?.description??k.reason?.code;let P;if(k.metadata?.payload!==void 0)try{P=JSON.parse(k.metadata.payload)}catch{P=k.metadata.payload}f={key:t,enabled:k.enabled,variant:k.variant,payload:P}}O.length>0&&(y=O.join(","))}}if(o){let B=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,O=`${t}_${B}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(O)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(O):this.distinctIdHasSentFlagCalls[r]=[O];let k={$feature_flag:t,$feature_flag_response:B,$feature_flag_id:I,$feature_flag_version:w,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:B,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(k.$feature_flag_definitions_loaded_at=P)}y&&(k.$feature_flag_error=y),this.capture({distinctId:r,event:"$feature_flag_called",properties:k,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},A=!0;if(f&&(m=f.response,h=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},h={...h,...y.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=Rfe(()=>{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(I6c(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(!dH.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(dH.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!dH.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(dH.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=mCe(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,c,h)}return f.event,{}}).then(h=>{let A={};if(h)for(let[I,w]of Object.entries(h))A[`$feature/${I}`]=w;let y=Object.keys(h||{}).filter(I=>h?.[I]!==!1).sort();return y.length>0&&(A.$active_feature_flags=y),A}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&A6c(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 hMc=require("async_hooks"),hqr=class{constructor(){this.storage=new hMc.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 gMc="posthog-node";function WVd(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[ZSo.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 ZSo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=gMc,this.name=gMc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(WVd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};dH.errorPropertiesBuilder=new l6.ErrorPropertiesBuilder([new l6.EventCoercer,new l6.ErrorCoercer,new l6.ObjectCoercer,new l6.StringCoercer,new l6.PrimitiveCoercer],l6.createStackParser("node:javascript",l6.nodeStackLineParser),[f6c(),tMc]);var hCe=class extends mqr{getLibraryId(){return"posthog-node"}initializeContext(){return new hqr}};var gqr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new hCe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.37.11",usingAccessToken:!0,...Zae()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var oVt=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};rr();var qot=require("fs/promises"),AMc=require("os"),yMc=require("path");var HVd="id",KVd=".fern",sVt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new hCe(r),this.userId=t==null?void 0:vEo(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.37.11",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{},...Zae()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}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 Hf({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=JQ(),r=$e(Ht.of((0,AMc.homedir)()),ke.of(KVd),ke.of(HVd));try{await sr(r)?this.persistedDistinctId=(await(0,qot.readFile)(r)).toString():(await(0,qot.mkdir)((0,yMc.dirname)(r),{recursive:!0}),await(0,qot.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var $So;async function aVt(){return $So==null&&($So=await JVd()),$So}async function JVd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new oVt;let r=await cit();return r!=null?new sVt({token:r,posthogApiKey:e}):await SV()!=null?new gqr({posthogApiKey:e}):new sVt({token:void 0,posthogApiKey:e})}catch{return new oVt}}jt();Ut();var cVt=we(require("process"),1);l9e();var vMc=we(pdo(),1),IMc=we(EMc(),1);function uT(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=KG(e),e.length===0))return 0;e=e.replace((0,IMc.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(vMc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function Aqr(e){let t=0;for(let r of e.split(`
|
|
3225
|
+
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=G6c.test(a)?a.replace(G6c,"$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>=W6c)break}}return H6c(i)}}var _So=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=eVt(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 mze(t,"DOMException")}isDOMError(t){return mze(t,"DOMError")}};var VSo=class{match(t){return DSo(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 qSo=class{constructor(){}match(t){return v6c(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 EVd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,GSo=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(EVd);return i&&(r=i[1],n=i[2]),[r,n]}};var J6c=["fatal","error","warning","log","info","debug"];function lqr(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 WSo=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 Lot(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=lqr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return eVt(t)&&!b6c(t)&&J6c.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(N6c(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var HSo=class{match(t){return Lot(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${lqr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var KSo=class{match(t){return Z7r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var JSo=class{match(t){return mze(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Lot(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 Z7r(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 YSo=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 Z6c=require("fs"),$6c=require("readline"),pqr=new l6.ReduceableCache(25),eMc=new l6.ReduceableCache(20),XSo=7,vVd=1e3,IVd=1e4;async function tMc(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"||SVd(s)||TVd(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(eMc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=OVd(o);if(s.every(c=>BVd(i,c)))continue;let a=PVd(pqr,i,{});n.push(CVd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&wVd(e,pqr),pqr.reduce(),e}function CVd(e,t,r){return new Promise(n=>{let i=(0,Z6c.createReadStream)(e),o=(0,$6c.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(){eMc.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]=DVd(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 wVd(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;xVd(r.lineno,r,n)}}function xVd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=rMc(e);i<e;i++){let o=r[i];if(o===void 0)return void Y6c(t);t.pre_context.push(o)}if(r[e]===void 0)return void Y6c(t);t.context_line=r[e];let n=nMc(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 Y6c(e){delete e.pre_context,delete e.context_line,delete e.post_context}function SVd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function TVd(e){return e.lineno!==void 0&&e.lineno>IVd||e.colno!==void 0&&e.colno>vVd}function BVd(e,t){let r=pqr.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 OVd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=X6c(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+XSo:(i.push(n),n=X6c(o)),t++}return i}function X6c(e){return[rMc(e),nMc(e)]}function rMc(e){return Math.max(1,e-XSo)}function nMc(e){return e+XSo}function PVd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function DVd(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 RVd(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 iMc(e,t){globalThis.process?.on("uncaughtException",RVd(e,t))}function oMc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var FVd=2e3,dH=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new $7r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return PSo(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()&&(iMc(this.onException.bind(this),this.onFatalError.bind(this)),oMc(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(FVd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var sMc="5.29.1";var iVt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function aMc(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 kVd=6e4,NVd=1152921504606847e3,jVd=["is_not"],Vot=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Gd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},hee=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},fqr=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 hee||u instanceof Gd?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 hee||u instanceof Gd?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 Gd("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 Gd("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 Gd(`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 Gd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Gd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Gd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Gd(`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 Gd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Gd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Gd(`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 hee)throw l;if(l instanceof Gd)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Gd("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"?fMc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):pMc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await cMc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await cMc(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(kVd,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 Vot(`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 Vot(`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 Vot(`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 Vot&&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=Rfe(()=>{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 cMc(e,t,r=""){let n=await aMc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/NVd}function pMc(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 Gd("Operator is_not_set is not supported")}else throw new Gd(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!jVd.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 uMc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return uMc(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 Gd("Date operations cannot be performed on boolean values");let u=UVd(String(i));if(u==null&&(u=lMc(i)),u==null)throw new Gd(`Invalid date: ${i}`);let l=lMc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return _V(JO(String(s)),JO(String(i)))===0;case"semver_neq":return _V(JO(String(s)),JO(String(i)))!==0;case"semver_gt":return _V(JO(String(s)),JO(String(i)))>0;case"semver_gte":return _V(JO(String(s)),JO(String(i)))>=0;case"semver_lt":return _V(JO(String(s)),JO(String(i)))<0;case"semver_lte":return _V(JO(String(s)),JO(String(i)))<=0;case"semver_tilde":{let u=JO(String(s)),{lower:l,upper:p}=MVd(String(i));return _V(u,l)>=0&&_V(u,p)<0}case"semver_caret":{let u=JO(String(s)),{lower:l,upper:p}=LVd(String(i));return _V(u,l)>=0&&_V(u,p)<0}case"semver_wildcard":{let u=JO(String(s)),{lower:l,upper:p}=zVd(String(i));return _V(u,l)>=0&&_V(u,p)<0}default:throw new Gd(`Unknown operator: ${o}`)}}function QVd(e,t){if(!(e in t))throw new hee(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function fMc(e,t,r,n=!1){let i=String(e.value);QVd(i,r);let o=r[i];return dMc(o,t,r,n)}function dMc(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=dMc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof hee)throw c;if(c instanceof Gd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Gd("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=fMc(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=pMc(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 hee)throw c;if(c instanceof Gd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Gd("can't match cohort without a given cohort property value");return i==="AND"}function uMc(e){try{return new RegExp(e),!0}catch{return!1}}function JO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Gd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Gd(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function _V(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 MVd(e){let t=JO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function LVd(e){let t=JO(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 zVd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Gd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Gd(`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 Gd(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function lMc(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 Gd(`${e} is in an invalid date format`)}throw new Gd(`The date provided ${e} must be a string, number, or date object`)}function UVd(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 dqr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var _Vd=100,mMc=3e4,VVd=5e4,qVd=50,GVd=500,mqr=class extends nVt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new dqr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,_Vd):mMc,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 fqr({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 dH(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||VVd}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??GVd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??qVd;this._waitUntilCycle.timer=Rfe(()=>{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 sMc}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=mMc){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let B=this._flagOverrides[t];if(B===void 0)return;let O=this._payloadOverrides?.[t];return{key:t,enabled:B!==!1,variant:typeof B=="string"?B:void 0,payload:O}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,h,A,y,I,w,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let B=this.featureFlagsPoller?.featureFlagsByKey[t];if(B)try{let O=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(B,d,{matchValue:i});if(O){m=!0;let k=O.value;I=B.id,C="Evaluated locally",f={key:t,enabled:k!==!1,variant:typeof k=="string"?k:void 0,payload:O.payload??void 0}}}catch(O){if(O instanceof hee||O instanceof Gd)this._logger?.info(`${O.name} when computing flag locally: ${t}: ${O.message}`);else throw O}}if(!m&&!c){let B=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(B===void 0)y=iVt.UNKNOWN_ERROR;else{h=B.requestId,A=B.evaluatedAt;let O=[];B.errorsWhileComputingFlags&&O.push(iVt.ERRORS_WHILE_COMPUTING),B.quotaLimited?.includes("feature_flags")&&O.push(iVt.QUOTA_LIMITED);let k=B.flags[t];if(k===void 0)O.push(iVt.FLAG_MISSING);else{I=k.metadata?.id,w=k.metadata?.version,C=k.reason?.description??k.reason?.code;let P;if(k.metadata?.payload!==void 0)try{P=JSON.parse(k.metadata.payload)}catch{P=k.metadata.payload}f={key:t,enabled:k.enabled,variant:k.variant,payload:P}}O.length>0&&(y=O.join(","))}}if(o){let B=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,O=`${t}_${B}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(O)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(O):this.distinctIdHasSentFlagCalls[r]=[O];let k={$feature_flag:t,$feature_flag_response:B,$feature_flag_id:I,$feature_flag_version:w,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:B,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(k.$feature_flag_definitions_loaded_at=P)}y&&(k.$feature_flag_error=y),this.capture({distinctId:r,event:"$feature_flag_called",properties:k,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},A=!0;if(f&&(m=f.response,h=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},h={...h,...y.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=Rfe(()=>{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(I6c(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(!dH.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(dH.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!dH.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(dH.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=mCe(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,c,h)}return f.event,{}}).then(h=>{let A={};if(h)for(let[I,w]of Object.entries(h))A[`$feature/${I}`]=w;let y=Object.keys(h||{}).filter(I=>h?.[I]!==!1).sort();return y.length>0&&(A.$active_feature_flags=y),A}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&A6c(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 hMc=require("async_hooks"),hqr=class{constructor(){this.storage=new hMc.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 gMc="posthog-node";function WVd(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[ZSo.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 ZSo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=gMc,this.name=gMc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(WVd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};dH.errorPropertiesBuilder=new l6.ErrorPropertiesBuilder([new l6.EventCoercer,new l6.ErrorCoercer,new l6.ObjectCoercer,new l6.StringCoercer,new l6.PrimitiveCoercer],l6.createStackParser("node:javascript",l6.nodeStackLineParser),[f6c(),tMc]);var hCe=class extends mqr{getLibraryId(){return"posthog-node"}initializeContext(){return new hqr}};var gqr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new hCe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.37.12",usingAccessToken:!0,...Zae()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var oVt=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};rr();var qot=require("fs/promises"),AMc=require("os"),yMc=require("path");var HVd="id",KVd=".fern",sVt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new hCe(r),this.userId=t==null?void 0:vEo(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.37.12",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{},...Zae()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}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 Hf({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=JQ(),r=$e(Ht.of((0,AMc.homedir)()),ke.of(KVd),ke.of(HVd));try{await sr(r)?this.persistedDistinctId=(await(0,qot.readFile)(r)).toString():(await(0,qot.mkdir)((0,yMc.dirname)(r),{recursive:!0}),await(0,qot.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var $So;async function aVt(){return $So==null&&($So=await JVd()),$So}async function JVd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new oVt;let r=await cit();return r!=null?new sVt({token:r,posthogApiKey:e}):await SV()!=null?new gqr({posthogApiKey:e}):new sVt({token:void 0,posthogApiKey:e})}catch{return new oVt}}jt();Ut();var cVt=we(require("process"),1);l9e();var vMc=we(pdo(),1),IMc=we(EMc(),1);function uT(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=KG(e),e.length===0))return 0;e=e.replace((0,IMc.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(vMc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function Aqr(e){let t=0;for(let r of e.split(`
|
|
3226
3226
|
`))t=Math.max(t,uT(r));return t}var _Mc=we(t1o(),1);var XVd=/[\p{Lu}]/u,ZVd=/[\p{Ll}]/u,xMc=/^[\p{Lu}](?![\p{Lu}])/gu,BMc=/([\p{Alpha}\p{N}_]|$)/u,r1o=/[_.\- ]+/,$Vd=new RegExp("^"+r1o.source),SMc=new RegExp(r1o.source+BMc.source,"gu"),TMc=new RegExp("\\d+"+BMc.source,"gu"),e5d=(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&&XVd.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&ZVd.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},t5d=(e,t)=>(xMc.lastIndex=0,e.replace(xMc,r=>t(r))),r5d=(e,t)=>(SMc.lastIndex=0,TMc.lastIndex=0,e.replace(SMc,(r,n)=>t(n)).replace(TMc,r=>t(r)));function n1o(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?r1o.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=e5d(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace($Vd,""),e=t.preserveConsecutiveUppercase?t5d(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),r5d(e,n))}var a1o=we(PMc(),1);l9e();var DMc=(e=0)=>t=>`\x1B[${t+e}m`,RMc=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,FMc=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,oE={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]}},ZnE=Object.keys(oE.modifier),s5d=Object.keys(oE.color),a5d=Object.keys(oE.bgColor),$nE=[...s5d,...a5d];function c5d(){let e=new Map;for(let[t,r]of Object.entries(oE)){for(let[n,i]of Object.entries(r))oE[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=oE[n],e.set(i[0],i[1]);Object.defineProperty(oE,t,{value:r,enumerable:!1})}return Object.defineProperty(oE,"codes",{value:e,enumerable:!1}),oE.color.close="\x1B[39m",oE.bgColor.close="\x1B[49m",oE.color.ansi=DMc(),oE.color.ansi256=RMc(),oE.color.ansi16m=FMc(),oE.bgColor.ansi=DMc(10),oE.bgColor.ansi256=RMc(10),oE.bgColor.ansi16m=FMc(10),Object.defineProperties(oE,{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=>oE.rgbToAnsi256(...oE.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)=>oE.ansi256ToAnsi(oE.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>oE.ansi256ToAnsi(oE.hexToAnsi256(t)),enumerable:!1}}),oE}var u5d=c5d(),kMc=u5d;var yqr=new Set(["\x1B","\x9B"]),l5d=39,o1o="\x07",QMc="[",p5d="]",MMc="m",s1o=`${p5d}8;;`,NMc=e=>`${yqr.values().next().value}${QMc}${e}${MMc}`,jMc=e=>`${yqr.values().next().value}${s1o}${e}${o1o}`,f5d=e=>e.split(" ").map(t=>uT(t)),i1o=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=uT(KG(e[e.length-1]));for(let[a,c]of n.entries()){let u=uT(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),yqr.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(s1o)),i){o?c===o1o&&(i=!1,o=!1):c===MMc&&(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())},d5d=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(uT(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},m5d=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=f5d(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=uT(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(""),i1o(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){i1o(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){i1o(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>d5d(u)));let c=[...a.join(`
|
|
3227
3227
|
`)];for(let[u,l]of c.entries()){if(n+=l,yqr.has(l)){let{groups:d}=new RegExp(`(?:\\${QMc}(?<code>\\d+)m|\\${s1o}(?<uri>.*)${o1o})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===l5d?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=kMc.codes.get(Number(i));c[u+1]===`
|
|
3228
3228
|
`?(o&&(n+=jMc("")),i&&p&&(n+=NMc(p))):l===`
|
|
@@ -3691,7 +3691,7 @@ https://buildwithfern.com/learn/docs/getting-started/project-structure#api-defin
|
|
|
3691
3691
|
`).filter(s=>!s.startsWith("#")).join(`
|
|
3692
3692
|
`);try{return Cr.load(o)??[]}catch(s){return this.taskContext.logger.warn(`Failed to parse _navigation.yml for library '${t}': ${Gn(s)}`),null}}async registerLibraryMdxPage(t,r){let n=$e(t,ke.of(r));if(!(0,h4o.existsSync)(n)){this.taskContext.logger.warn(`Library MDX file not found: ${n}`);return}let i=ds(this.docsWorkspace.absoluteFilePath,n),o=await(0,Xde.readFile)(n,"utf-8");return this.parsedDocsConfig.pages[i]=o,Ot.PageId(i)}async convertLibraryNavNodes(t,r,n){let i=[];for(let o of t)if(o.type==="page"&&o.pageId!=null){let s=await this.registerLibraryMdxPage(r,o.pageId);if(s==null)continue;let a=n.apply({fullSlug:o.slug.split("/"),urlSlug:qm(o.title)});i.push({id:this.#e.get(s),type:"page",collapsed:void 0,slug:a.get(),title:o.title,icon:void 0,hidden:!1,viewers:void 0,orphaned:void 0,pageId:s,authed:void 0,noindex:void 0,featureFlags:void 0,availability:void 0})}else if(o.type==="section"){let s=n.apply({fullSlug:o.slug.split("/"),urlSlug:qm(o.title)}),a=this.#e.get(`library-section/${o.slug}`),c=await this.registerLibraryMdxPage(r,`${o.slug}.mdx`),u=(o.children??[]).filter(p=>!(p.type==="page"&&p.slug===o.slug)),l=await this.convertLibraryNavNodes(u,r,s);i.push({id:a,type:"section",overviewPageId:c,slug:s.get(),title:o.title,icon:void 0,collapsed:void 0,collapsible:void 0,collapsedByDefault:void 0,hidden:!1,viewers:void 0,orphaned:void 0,children:l,authed:void 0,pointsTo:void 0,noindex:void 0,featureFlags:void 0,availability:void 0})}return i}async toPageNode({item:t,parentSlug:r,hideChildren:n,parentAvailability:i}){let o=Ot.PageId(this.toRelativeFilepath(t.absolutePath)),s=r.apply({urlSlug:t.slug??qm(t.title),fullSlug:this.markdownFilesToFullSlugs.get(t.absolutePath)?.split("/")}),a=this.#e.get(o),c=this.markdownFilesToAvailability.get(t.absolutePath);return{id:a,type:"page",collapsed:void 0,slug:s.get(),title:this.markdownFilesToSidebarTitle.get(t.absolutePath)??t.title,icon:this.resolveIconFileId(t.icon),hidden:n||t.hidden,viewers:t.viewers,orphaned:t.orphaned,pageId:o,authed:void 0,noindex:t.noindex||this.markdownFilesToNoIndex.get(t.absolutePath),featureFlags:t.featureFlags,availability:lA(c??t.availability??i)}}async toSectionNode({prefix:t,item:r,parentSlug:n,hideChildren:i,parentAvailability:o}){let s=this.toRelativeFilepath(r.overviewAbsolutePath),a=s?Ot.PageId(s):void 0,c=this.#e.get(a??`${t}/section`),u=r.overviewAbsolutePath?this.markdownFilesToFullSlugs.get(r.overviewAbsolutePath)?.split("/"):void 0,l=r.slug??qm(r.title),p,d;if(r.skipUrlSlug&&u!=null)p=n.apply({urlSlug:l,fullSlug:u}),d=n.apply({urlSlug:l,skipUrlSlug:!0});else{let I=n.apply({urlSlug:l,fullSlug:u,skipUrlSlug:r.skipUrlSlug});p=I,d=I}let f=r.overviewAbsolutePath!=null?this.markdownFilesToNoIndex.get(r.overviewAbsolutePath):void 0,m=r.overviewAbsolutePath!=null?this.markdownFilesToAvailability.get(r.overviewAbsolutePath):void 0,h=i||r.hidden,y=(await Promise.all(r.contents.map(I=>this.toNavigationChild({prefix:c,item:I,parentSlug:d,hideChildren:h,parentAvailability:r.availability??o})))).filter(I=>I!=null);if(a==null){let I=y.find(w=>w.type==="apiReference"&&w.hideTitle===!0&&w.overviewPageId!=null);I!=null&&(a=I.overviewPageId)}return{id:c,type:"section",overviewPageId:a,slug:p.get(),title:r.overviewAbsolutePath!=null?this.markdownFilesToSidebarTitle.get(r.overviewAbsolutePath)??r.title:r.title,icon:this.resolveIconFileId(r.icon),collapsed:r.collapsed,collapsible:r.collapsible,collapsedByDefault:r.collapsedByDefault,hidden:h,viewers:r.viewers,orphaned:r.orphaned,children:y,authed:void 0,pointsTo:void 0,noindex:f,featureFlags:r.featureFlags,availability:lA(m??r.availability??o)}}async convertTabbedNavigation(t,r,n){let i=this.#e.get(`${t}/tabbed`);return{type:"tabbed",id:i,collapsed:void 0,children:await Promise.all(r.map(o=>this.toTabChild(i,o,n)))}}async toTabChild(t,r,n){return jx(r.child)._visit({link:({href:i,target:o})=>this.toTabLinkNode(r,i,o),layout:({layout:i})=>this.toTabNode(t,r,i,n),changelog:({changelog:i})=>this.toTabChangelogNode(r,i,n),variants:({variants:i})=>this.toTabNodeWithVariants(t,r,i,n)})}async toTabChangelogNode(t,r,n){return new iUe(this.markdownFilesToFullSlugs,this.markdownFilesToNoIndex,this.markdownFilesToTags,r,this.docsWorkspace,this.#e).toChangelogNode({parentSlug:n,title:t.title,icon:this.resolveIconFileId(t.icon),viewers:t.viewers,hidden:t.hidden,slug:t.slug})}async toTabLinkNode(t,r,n){return{type:"link",id:this.#e.get(r),collapsed:void 0,title:t.title,url:Ot.V1.Url(r),target:n,icon:this.resolveIconFileId(t.icon)}}async toTabNode(t,r,n,i){let o=this.#e.get(`${t}/tab`),s=i.apply({urlSlug:r.slug??qm(r.title),skipUrlSlug:r.skipUrlSlug});return{type:"tab",id:o,collapsed:void 0,title:r.title,slug:s.get(),icon:this.resolveIconFileId(r.icon),hidden:r.hidden,authed:void 0,viewers:r.viewers,orphaned:r.orphaned,pointsTo:void 0,child:await this.toSidebarRootNode(o,n,s),featureFlags:r.featureFlags}}async toTabNodeWithVariants(t,r,n,i){let o=this.#e.get(`${t}/tab`),s=i.apply({urlSlug:r.slug??qm(r.title),skipUrlSlug:r.skipUrlSlug});return{type:"tab",id:o,collapsed:void 0,title:r.title,slug:s.get(),icon:this.resolveIconFileId(r.icon),hidden:r.hidden,authed:void 0,viewers:r.viewers,orphaned:r.orphaned,pointsTo:void 0,child:await this.toSidebarRootNodeWithVariants(o,n,s),featureFlags:r.featureFlags}}getFileId(t){if(t==null)return;let r=this.collectedFileIds.get(t);return r==null?this.taskContext.failAndThrow("Failed to locate file after uploading: "+t,void 0,{code:D.Code.InternalError}):$x.FileId(r)}resolveIconFileId(t){if(t!=null)return this.collectedFileIds.has(t)?`file:${this.getFileId(t)}`:t}resolveTranslationOverlayNavbarLinkIcons(){let t=this.parsedDocsConfig.translationNavigationOverlays;if(t!=null)for(let r of Object.values(t))r.navbarLinks!=null&&(r.navbarLinks=r.navbarLinks.map(n=>n.type==="github"?n:n.type==="dropdown"?{...n,icon:this.resolveIconFileId(n.icon),rightIcon:this.resolveIconFileId(n.rightIcon),links:n.links.map(i=>({...i,icon:this.resolveIconFileId(i.icon),rightIcon:this.resolveIconFileId(i.rightIcon)}))}:{...n,icon:this.resolveIconFileId(n.icon),rightIcon:this.resolveIconFileId(n.rightIcon)}))}convertPageActions(){if(this.parsedDocsConfig.pageActions!=null)return{default:this.parsedDocsConfig.pageActions.default,options:{askAi:this.parsedDocsConfig.pageActions.options.askAi,copyPage:this.parsedDocsConfig.pageActions.options.copyPage,viewAsMarkdown:this.parsedDocsConfig.pageActions.options.viewAsMarkdown,openAi:this.parsedDocsConfig.pageActions.options.openAi,claude:this.parsedDocsConfig.pageActions.options.claude,cursor:this.parsedDocsConfig.pageActions.options.cursor,claudeCode:this.parsedDocsConfig.pageActions.options.claudeCode,vscode:this.parsedDocsConfig.pageActions.options.vscode,custom:this.parsedDocsConfig.pageActions.options.custom.map(t=>({title:t.title,subtitle:t.subtitle,url:t.url,icon:this.resolveIconFileId(t.icon),default:t.default}))}}}convertColorConfigImageReferences(){let{colors:t}=this.parsedDocsConfig;if(t!=null)return t.type==="dark"?{...t,...this.convertLogoAndBackgroundImage({theme:"dark"})}:t.type==="light"?{...t,...this.convertLogoAndBackgroundImage({theme:"light"}),type:"light"}:{...t,dark:{...t.dark,...this.convertLogoAndBackgroundImage({theme:"dark"})},light:{...t.light,...this.convertLogoAndBackgroundImage({theme:"light"})}}}convertLogoAndBackgroundImage({theme:t}){let{logo:r,backgroundImage:n}=this.parsedDocsConfig,i=r?.[t],o=n?.[t];return{logo:this.getFileId(i),backgroundImage:this.getFileId(o)}}convertDocsTypographyConfiguration(){if(this.parsedDocsConfig.typography!=null)return{headingsFont:this.convertFont(this.parsedDocsConfig.typography.headingsFont,"headings"),bodyFont:this.convertFont(this.parsedDocsConfig.typography.bodyFont,"body"),codeFont:this.convertFont(this.parsedDocsConfig.typography.codeFont,"code")}}convertFont(t,r){if(t==null||t.variants[0]==null)return;let n=this.getFileId(t.variants[0].absolutePath);return{type:"custom",name:t.name??`font:${r}:${n}`,variants:t.variants.map(i=>({fontFile:this.getFileId(i.absolutePath),weight:i.weight,style:i.style!=null?[i.style]:void 0})),display:t.display,fallback:t.fallback,fontVariationSettings:t.fontVariationSettings}}convertJavascriptConfiguration(){if(this.parsedDocsConfig.js!=null)return{files:this.parsedDocsConfig.js.files.map(({absolutePath:t,strategy:r})=>({fileId:this.getFileId(t),strategy:r})).filter(Ka),remote:this.parsedDocsConfig.js.remote?.map(t=>({...t,url:$x.Url(t.url)})),inline:void 0}}convertMetadata(){if(this.parsedDocsConfig.metadata==null)return;let{"og:image":t,"og:logo":r,"twitter:image":n,"og:dynamic:background-image":i,...o}=this.parsedDocsConfig.metadata;return{...o,"og:image":this.convertFileIdOrUrl(t),"og:logo":this.convertFileIdOrUrl(r),"twitter:image":this.convertFileIdOrUrl(n),"og:dynamic:background-image":this.convertFileIdOrUrl(i)}}convertFileIdOrUrl(t){if(t!=null)return jx(t,"type")._visit({filepath:({value:r})=>({type:"fileId",value:this.getFileId(r)}),url:({value:r})=>({type:"url",value:$x.Url(r)}),_other:()=>this.taskContext.failAndThrow("Invalid metadata configuration",void 0,{code:D.Code.ConfigError})})}resolveLinksInIrDocs(t,r){let n={absolutePathToFernFolder:this.docsWorkspace.absoluteFilePath,absolutePathToMarkdownFile:this.docsWorkspace.absoluteFilePath};VZn(t,r,n)}};function Owm(e,t){let r=e?.launch;if(e?.github==null)return{url:void 0,launch:r};let{owner:n,repo:i,branch:o="main",host:s="https://github.com"}=e.github;return{url:`${xN(s)}/${n}/${i}/blob/${o}/fern/${t}?plain=1`,launch:r}}function Pwm(e){switch(e){case"beta":return Ot.V1.NavigationV1Availability.Beta;case"deprecated":return Ot.V1.NavigationV1Availability.Deprecated;case"ga":return Ot.V1.NavigationV1Availability.GenerallyAvailable;case"stable":return Ot.V1.NavigationV1Availability.Stable;case"alpha":return Ot.V1.NavigationV1Availability.Alpha;case"preview":return Ot.V1.NavigationV1Availability.Preview;case"legacy":return Ot.V1.NavigationV1Availability.Legacy;default:xe(e)}}jt();rr();Ut();var A4o=require("fs/promises"),Uou=we(BLe(),1),KZn=we(require("path"),1),_ou=we(fw(),1);function WZn(e){return(e.startsWith("http://")||e.startsWith("https://"))&&e.includes("X-Amz-")}function Dwm(e){return e.startsWith("http://")||e.startsWith("https://")}function Vou(e){if(e==null)return;let t=e.match(/filename\*?=(?:"([^"]+)"|([^;]+))/i),r=t?.[1]??t?.[2]?.trim();return r!=null&&KZn.default.extname(r)!==""?r:void 0}function Rwm(e){try{let r=new URL(e).searchParams.get("response-content-disposition");return Vou(r)}catch{return}}async function HZn(e,t,r){let n=Rwm(e),i=await fetch(e);if(!i.ok)throw new Error(`Failed to download theme asset: ${i.status} ${e}`);let o=Vou(i.headers.get("content-disposition")),s=n??o??(()=>{let u=(()=>{let l=i.headers.get("content-type")?.split(";")[0]?.trim();if(l){let p=Uou.default.extension(l);if(p)return`.${p}`}return""})()||(()=>{try{let l=new URL(e).pathname,p=l.lastIndexOf(".");return p>=0?l.slice(p):""}catch{return""}})();return`theme_asset_${r}${u}`})(),a=KZn.default.join(t,s),c=Buffer.from(await i.arrayBuffer());return await(0,A4o.writeFile)(a,c),a}async function Fwm(e,t){let r=0,n=JSON.parse(JSON.stringify(e));async function i(a){return typeof a=="string"&&WZn(a)?HZn(a,t,r++):a}if(n.logo!=null&&typeof n.logo=="object"){let a=n.logo;a.dark=await i(a.dark),a.light=await i(a.light)}if(n.favicon=await i(n.favicon),n["background-image"]!=null&&typeof n["background-image"]=="object"){let a=n["background-image"];a.dark=await i(a.dark),a.light=await i(a.light)}if(n.typography!=null&&typeof n.typography=="object"){let a=n.typography;for(let c of["bodyFont","headingsFont","codeFont"]){let u=a[c];if(u!=null&&typeof u=="object"){let l=u;if(Array.isArray(l.paths)){for(let p of l.paths)if(p!=null&&typeof p=="object"){let d=p;d.path=await i(d.path)}}}}}typeof n.css=="string"?n.css=WZn(n.css)?await HZn(n.css,t,r++):n.css:Array.isArray(n.css)&&(n.css=await Promise.all(n.css.map(async a=>typeof a=="string"&&WZn(a)?HZn(a,t,r++):a)));let o=n.js,s=Array.isArray(o)?o:o!=null?[o]:[];if(n.js=await Promise.all(s.map(async a=>{if(a==null||typeof a!="object")return a;let c=a;return typeof c.url=="string"&&Dwm(c.url)?c:typeof c.path=="string"&&WZn(c.path)?{...c,path:await HZn(c.path,t,r++)}:c})),n.header=await i(n.header),n.footer=await i(n.footer),n.metadata!=null&&typeof n.metadata=="object"){let a=n.metadata;for(let c of["og:image","twitter:image","og:dynamic:background-image","og:logo"])a[c]=await i(a[c])}return n}function qou(e,t){let r={...e};for(let[n,i]of Object.entries(t)){let o=e[n];xo(i)&&xo(o)?r[n]=qou(o,i):r[n]=i}return r}var{THEME_ELIGIBLE_FIELDS:kwm,THEME_FIELD_POLICIES:Nwm}=Uh;function jwm(e){return e.replace(/-([a-z])/g,(t,r)=>r.toUpperCase())}function g4o(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(g4o);let t={};for(let[r,n]of Object.entries(e)){let i=jwm(r);t[i]=g4o(n)}return t}function Qwm(e){return g4o(e)}function Mwm(e,t){let r=Qwm(t),n=e,i={...n};for(let o of kwm){let s=r[o],a=n[o],c=Nwm[o]??"global",u=s!=null,l=a!=null;c==="global"?u&&(xo(s)&&xo(a)?i[o]=qou(a,s):i[o]=s):l?i[o]=a:u&&(i[o]=s)}return i}async function lqt({docsWorkspace:e,organization:t,fdrOrigin:r,token:n,taskContext:i}){let o=e.config.globalTheme;if(o==null)return e;i.logger.info(`Fetching global theme "${o}" for org "${t}"...`);let s=`${r}/v2/registry/themes/${encodeURIComponent(t)}/${encodeURIComponent(o)}`,a;try{let d=await fetch(s,{headers:{Authorization:`Bearer ${n}`,"Accept-Encoding":"identity"}}),f=await d.text();d.status===404&&i.failAndThrow(`Global theme "${o}" not found for org "${t}". Upload it first with: fern beta docs theme upload --name ${o}`,void 0,{code:D.Code.ConfigError}),d.ok||i.failAndThrow(`Failed to fetch global theme "${o}": HTTP ${d.status}`,void 0,{code:D.Code.ConfigError});let m;try{m=JSON.parse(f)}catch{i.failAndThrow(`Failed to fetch global theme "${o}": unexpected response from server`+(f.length>0?` \u2014 ${f.slice(0,200)}`:" (empty body)"),void 0,{code:D.Code.NetworkError})}let h=m;if(h.error!=null&&(h.error.code==="NOT_FOUND"&&i.failAndThrow(`Global theme "${o}" not found for org "${t}". Upload it first with: fern beta docs theme upload --name ${o}`,void 0,{code:D.Code.ConfigError}),i.failAndThrow(`Failed to fetch global theme "${o}": ${h.error.message??h.error.code??"unknown error"}`,void 0,{code:D.Code.ConfigError})),h.config==null)return i.failAndThrow(`Failed to fetch global theme "${o}": response missing "config" field`,void 0,{code:D.Code.NetworkError}),e;a=h.config}catch(d){throw d instanceof Error&&d.message.includes("fetch failed")&&i.failAndThrow(`Could not reach FDR at ${r} to fetch global theme "${o}"`,d,{code:D.Code.NetworkError}),d}let{path:c}=await _ou.default.dir({prefix:"fern-theme-",unsafeCleanup:!0});i.logger.debug(`Downloading theme assets to ${c}`);let u;try{u=await Fwm(a,c)}catch(d){let f=d instanceof Error?`: ${d.message}`:"";return i.failAndThrow(`Failed to download assets for global theme "${o}"${f}`,d,{code:D.Code.NetworkError}),e}let l=Mwm(e.config,u);i.logger.info(`Applied global theme "${o}" \u2014 ${Ht.of(c)} (cleaned up on exit)`);let p=KZn.default.join(c,"stitched-docs.yml.json");return await(0,A4o.writeFile)(p,JSON.stringify(l,null,2)),i.logger.debug(`Stitched docs.yml after importing theme written to: ${p}`),{...e,config:l}}jt();async function EI(e){return(await Promise.all(e.apiWorkspaces.map(async t=>t instanceof If?t:null))).filter(Ka)}async function y4o(e,t,r){if(e instanceof HQ){t.logger.info("Skipping, API is specified as a Fern Definition.");return}else if(!(e instanceof If))return;let n=await e.getIntermediateRepresentation({context:t,audiences:r,enableUniqueErrorsPerEndpoint:!0,generateV1Examples:!1,logWarnings:!1});return wN({ir:n,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},playgroundConfig:{oauth:!0},context:t})}jt();var b4o={};re(b4o,{additionalProperties:()=>_wm,default:()=>qwm,definitions:()=>Vwm,properties:()=>zwm,required:()=>Uwm,type:()=>Lwm});var Lwm="object",zwm={tabs:{oneOf:[{type:"object",additionalProperties:{$ref:"#/definitions/docs.TabConfig"}},{type:"null"}]},"landing-page":{oneOf:[{$ref:"#/definitions/docs.PageConfiguration"},{type:"null"}]},navigation:{$ref:"#/definitions/docs.NavigationConfig"}},Uwm=["navigation"],_wm=!1,Vwm={"docs.RoleId":{type:"string",description:"ID of role which is used to filter the content shown in Fern Docs."},"docs.Role":{anyOf:[{$ref:"#/definitions/docs.RoleId"},{type:"array",items:{$ref:"#/definitions/docs.RoleId"}}],description:"Audience can either be a string or list of strings\ni.e. `audience: internal` or `audience: [internal, beta]`"},"docs.FeatureFlag":{type:"object",properties:{flag:{type:"string",description:"The name of the feature flag to check."},"fallback-value":{oneOf:[{type:["string","number","boolean","object","array","null"]},{type:"null"}],description:"The default value to use if the feature flag is not set. If not specified, defaults to false."},match:{oneOf:[{type:["string","number","boolean","object","array","null"]},{type:"null"}],description:"The value that the feature flag should match for the content to be shown. If not specified, content is shown when the flag is true."}},required:["flag"],additionalProperties:!1},"docs.FeatureFlagConfiguration":{anyOf:[{type:"string",description:"The name of the feature flag, We assume that it is a boolean feature flag that needs to be evaluated to true."},{$ref:"#/definitions/docs.FeatureFlag",description:"A single feature flag with a configurable name, fallback value, and match value. Especially useful for non boolean feature flags."},{type:"array",items:{$ref:"#/definitions/docs.FeatureFlag"},description:"A list of feature flags. If any of the feature flags are satisfied, we will show all content."}]},"docs.Target":{type:"string",enum:["_blank","_self","_parent","_top"]},"docs.ChangelogFolderRelativePath":{type:"string",description:'The relative path to a folder containing markdown files broken down by date.\n\nExample:\n```\nchangelog: "changelog"\n```\n\nThis will look for markdown files in the `/fern/changelog` directory, which should contain files named like\n- `/fern/changelog/2024-04-29.mdx`.\n- `/fern/changelog/2023-01-02.mdx`.'},"docs.TabConfig":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},"display-name":{type:"string"},icon:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},href:{oneOf:[{type:"string"},{type:"null"}],description:"If `href` is set, clicking on the tab will redirect to the given URL.\n\nTabs with `href` must not have children in the navigation config."},target:{oneOf:[{$ref:"#/definitions/docs.Target"},{type:"null"}]},changelog:{oneOf:[{$ref:"#/definitions/docs.ChangelogFolderRelativePath"},{type:"null"}]}},required:["display-name"],additionalProperties:!1},"docs.Availability":{type:"string",enum:["stable","generally-available","in-development","pre-release","deprecated","beta","alpha","preview","legacy"]},"docs.PageConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},page:{type:"string"},path:{type:"string"},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},noindex:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["page","path"],additionalProperties:!1},"docs.CollapsedStringValue":{type:"string",enum:["open-by-default"]},"docs.CollapsedValue":{anyOf:[{type:"boolean"},{$ref:"#/definitions/docs.CollapsedStringValue"}]},"docs.SectionConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},section:{type:"string"},path:{oneOf:[{type:"string"},{type:"null"}],description:"The relative path to the markdown file that will be displayed when the section is clicked."},contents:{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}],description:"Deprecated. Use `collapsible` and `collapsed-by-default` instead."},collapsible:{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section can be expanded/collapsed by the user."},"collapsed-by-default":{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open)."},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["section","contents"],additionalProperties:!1},"docs.AudienceId":{type:"string",description:"ID of audience which is used to filter the API spec."},"docs.Audience":{anyOf:[{$ref:"#/definitions/docs.AudienceId"},{type:"array",items:{$ref:"#/definitions/docs.AudienceId"}}],description:"Audience can either be a string or list of strings\ni.e. `audiences: internal` or `audiences: [internal, beta]`"},"docs.VersionedSnippetLanguageConfiguration":{type:"object",properties:{version:{type:"string"},package:{type:"string"}},required:["version","package"],additionalProperties:!1},"docs.SnippetLanguageConfiguration":{anyOf:[{type:"string"},{$ref:"#/definitions/docs.VersionedSnippetLanguageConfiguration"}],description:`This snippets config object is meant to allow users to specify a specific package for the snippets,
|
|
3693
3693
|
and optionally a version for that package. If you pass in a string, that should be the name of the package.`},"docs.SnippetsConfiguration":{type:"object",properties:{python:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},typescript:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},go:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},java:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},ruby:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},csharp:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},php:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},swift:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},rust:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]}},additionalProperties:!1},"docs.PlaygroundButtonSettings":{type:"object",properties:{href:{oneOf:[{type:"string"},{type:"null"}]}},additionalProperties:!1},"docs.PlaygroundSettings":{type:"object",properties:{hidden:{oneOf:[{type:"boolean"},{type:"null"}]},environments:{oneOf:[{type:"array",items:{type:"string"}},{type:"null"}],description:"A list of environment IDs that are allowed to be used in the playground. If not provided, all environments are allowed. And if the provided list is empty, the playground should be disabled."},button:{oneOf:[{$ref:"#/definitions/docs.PlaygroundButtonSettings"},{type:"null"}]},oauth:{oneOf:[{type:"boolean"},{type:"null"}]},"limit-websocket-messages-per-connection":{oneOf:[{type:"integer"},{type:"null"}],description:"The maximum number of websocket messages per connection in the playground."}},additionalProperties:!1},"docs.ApiReferencePackageConfigurationWithOptions":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},title:{oneOf:[{type:"string"},{type:"null"}]},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file. This summary is displayed at the top of the API section."},contents:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that is applied only to descendants of this api package."}},additionalProperties:!1},"docs.ApiReferencePackageConfiguration":{anyOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{$ref:"#/definitions/docs.ApiReferencePackageConfigurationWithOptions"}]},"docs.ApiReferenceSectionConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},section:{type:"string",description:"The title of the api package that will be displayed in the sidebar."},"referenced-packages":{oneOf:[{type:"array",items:{type:"string"}},{type:"null"}],description:"This section will inherit the endpoints from the specified subpackage(s). If multiple packages are specified, they will be merged."},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file."},contents:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}],description:"Deprecated. Use `collapsible` and `collapsed-by-default` instead."},collapsible:{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section can be expanded/collapsed by the user in the sidebar."},"collapsed-by-default":{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section starts collapsed. Only meaningful when collapsible is true."},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affects all endpoints."}},required:["section"],additionalProperties:!1},"docs.ApiReferenceEndpointConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},endpoint:{type:"string"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affect this endpoint specifically."}},required:["endpoint"],additionalProperties:!1},"docs.ApiReferenceOperationConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},operation:{type:"string"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["operation"],additionalProperties:!1,description:"Defines a GraphQL-native schema for selecting operations (REST -> Endpoint === GraphQL -> Operation)"},"docs.LinkConfiguration":{type:"object",properties:{link:{type:"string"},href:{type:"string"},icon:{oneOf:[{type:"string"},{type:"null"}]},target:{oneOf:[{$ref:"#/definitions/docs.Target"},{type:"null"}]}},required:["link","href"],additionalProperties:!1},"docs.ApiReferenceLayoutItem":{anyOf:[{type:"string",description:"This should be either an endpoint, websocket, webhook, or subpackage ID"},{type:"object",additionalProperties:{$ref:"#/definitions/docs.ApiReferencePackageConfiguration"},description:"Keyed by subpackage name, this object allows you to group endpoints and pages together."},{$ref:"#/definitions/docs.ApiReferenceSectionConfiguration"},{$ref:"#/definitions/docs.ApiReferenceEndpointConfiguration"},{$ref:"#/definitions/docs.ApiReferenceOperationConfiguration"},{$ref:"#/definitions/docs.PageConfiguration"},{$ref:"#/definitions/docs.LinkConfiguration"}],description:"Use the `layout` object to customize the order that your API endpoints\nare displayed in the docs site."},"docs.ApiReferenceConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},api:{type:"string"},"api-name":{oneOf:[{type:"string"},{type:"null"}],description:"Name of API that we are referencing"},openrpc:{oneOf:[{type:"string"},{type:"null"}],description:"Path to an openrpc spec."},audiences:{oneOf:[{$ref:"#/definitions/docs.Audience"},{type:"null"}]},"display-errors":{oneOf:[{type:"boolean"},{type:"null"}],description:"Defaults to false"},"tag-description-pages":{oneOf:[{type:"boolean"},{type:"null"}],description:"If true, a page will be created for each tag in the OpenAPI spec that contains a description."},snippets:{oneOf:[{$ref:"#/definitions/docs.SnippetsConfiguration"},{type:"null"}]},postman:{oneOf:[{type:"string"},{type:"null"}],description:"URL to a Postman collection for this API reference"},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file"},layout:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}],description:"Advanced usage: when specified, this object will be used to customize the order that your API endpoints are displayed in the docs site, including subpackages, and additional markdown pages (to be rendered in between API endpoints). If not specified, the order will be inferred from the OpenAPI Spec or Fern Definition."},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},alphabetized:{oneOf:[{type:"boolean"},{type:"null"}],description:"If `alphabetized` is set to true, packages and endpoints will be sorted alphabetically, unless explicitly ordered in the `layout` object."},flattened:{oneOf:[{type:"boolean"},{type:"null"}],description:"If `flattened` is set to true, the title specified in `api` will be hidden, and its endpoints and subpackages won't be grouped under it.\n\nThis setting is useful if the API reference is short and you want to display all endpoints at the top level."},paginated:{oneOf:[{type:"boolean"},{type:"null"}],description:"If true, the API reference will be paginated rather than displayed in a single page (long-scrolling)."},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affects all endpoints."}},required:["api"],additionalProperties:!1},"docs.LibraryName":{type:"string",description:"The name identifier for a library. Used to reference the library in navigation."},"docs.LibraryReferenceConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},library:{$ref:"#/definitions/docs.LibraryName",description:"The name of the library to reference (must match a key in the `libraries` section)."},title:{oneOf:[{type:"string"},{type:"null"}],description:"Override the display title for this library reference."},slug:{oneOf:[{type:"string"},{type:"null"}],description:"Override the URL slug for this library reference."}},required:["library"],additionalProperties:!1,description:"References a library defined in the `libraries` section.\nThe library's generated navigation will be injected at this point."},"docs.ChangelogConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},changelog:{$ref:"#/definitions/docs.ChangelogFolderRelativePath"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]}},required:["changelog"],additionalProperties:!1},"docs.TitleSource":{type:"string",enum:["frontmatter","filename"]},"docs.FolderConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},folder:{type:"string",description:"The relative path to a folder containing markdown files. Fern will automatically discover and add all markdown files from this folder to the navigation."},title:{oneOf:[{type:"string"},{type:"null"}],description:"The title to display for this folder section. If not provided, the folder name will be used."},"title-source":{oneOf:[{$ref:"#/definitions/docs.TitleSource"},{type:"null"}],description:"Determines how page titles are derived for files in this folder. Options are `frontmatter` (use the `title` field from the file's frontmatter) or `filename` (derive title from the file name). Defaults to `filename`."},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}],description:"Deprecated. Use `collapsible` and `collapsed-by-default` instead."},collapsible:{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section can be expanded/collapsed by the user."},"collapsed-by-default":{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open)."},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["folder"],additionalProperties:!1},"docs.NavigationItem":{anyOf:[{$ref:"#/definitions/docs.PageConfiguration"},{$ref:"#/definitions/docs.SectionConfiguration"},{$ref:"#/definitions/docs.ApiReferenceConfiguration"},{$ref:"#/definitions/docs.LibraryReferenceConfiguration"},{$ref:"#/definitions/docs.LinkConfiguration"},{$ref:"#/definitions/docs.ChangelogConfiguration"},{$ref:"#/definitions/docs.FolderConfiguration"}]},"docs.UntabbedNavigationConfig":{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},"docs.TabId":{type:"string"},"docs.TabbedNavigationItemWithLayout":{type:"object",properties:{tab:{$ref:"#/definitions/docs.TabId"},layout:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},{type:"null"}],description:"If `href` is set, `layout` must be null."}},required:["tab"],additionalProperties:!1},"docs.TabVariant":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},title:{type:"string"},subtitle:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},layout:{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},slug:{oneOf:[{type:"string"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},default:{oneOf:[{type:"boolean"},{type:"null"}]}},required:["title","layout"],additionalProperties:!1},"docs.TabbedNavigationItemWithVariants":{type:"object",properties:{tab:{$ref:"#/definitions/docs.TabId"},variants:{type:"array",items:{$ref:"#/definitions/docs.TabVariant"}}},required:["tab","variants"],additionalProperties:!1},"docs.TabbedNavigationItem":{anyOf:[{$ref:"#/definitions/docs.TabbedNavigationItemWithLayout"},{$ref:"#/definitions/docs.TabbedNavigationItemWithVariants"}]},"docs.TabbedNavigationConfig":{type:"array",items:{$ref:"#/definitions/docs.TabbedNavigationItem"}},"docs.NavigationConfig":{anyOf:[{$ref:"#/definitions/docs.UntabbedNavigationConfig"},{$ref:"#/definitions/docs.TabbedNavigationConfig"}]}},qwm={type:Lwm,properties:zwm,required:Uwm,additionalProperties:_wm,definitions:Vwm};async function w0t({value:e}){let t=SU(e,b4o);if(t.success){let i=u3(e,[],[]);return{type:"success",contents:Uh.RawSchemas.Serializer.VersionFileConfig.parseOrThrow(i)}}let r=t.error?.instancePath?` at ${t?.error.instancePath}`:"";return{type:"failure",message:`${t.error?.message??"Failed to parse because JSON schema validation failed"}${r}`}}jt();rr();var C4o=require("fs/promises");Fs();jt();var E4o={};re(E4o,{additionalProperties:()=>Kwm,default:()=>Ywm,definitions:()=>Jwm,properties:()=>Wwm,required:()=>Hwm,type:()=>Gwm});var Gwm="object",Wwm={tabs:{oneOf:[{type:"object",additionalProperties:{$ref:"#/definitions/docs.TabConfig"}},{type:"null"}]},"landing-page":{oneOf:[{$ref:"#/definitions/docs.PageConfiguration"},{type:"null"}]},navigation:{$ref:"#/definitions/docs.NavigationConfig"}},Hwm=["navigation"],Kwm=!1,Jwm={"docs.RoleId":{type:"string",description:"ID of role which is used to filter the content shown in Fern Docs."},"docs.Role":{anyOf:[{$ref:"#/definitions/docs.RoleId"},{type:"array",items:{$ref:"#/definitions/docs.RoleId"}}],description:"Audience can either be a string or list of strings\ni.e. `audience: internal` or `audience: [internal, beta]`"},"docs.FeatureFlag":{type:"object",properties:{flag:{type:"string",description:"The name of the feature flag to check."},"fallback-value":{oneOf:[{type:["string","number","boolean","object","array","null"]},{type:"null"}],description:"The default value to use if the feature flag is not set. If not specified, defaults to false."},match:{oneOf:[{type:["string","number","boolean","object","array","null"]},{type:"null"}],description:"The value that the feature flag should match for the content to be shown. If not specified, content is shown when the flag is true."}},required:["flag"],additionalProperties:!1},"docs.FeatureFlagConfiguration":{anyOf:[{type:"string",description:"The name of the feature flag, We assume that it is a boolean feature flag that needs to be evaluated to true."},{$ref:"#/definitions/docs.FeatureFlag",description:"A single feature flag with a configurable name, fallback value, and match value. Especially useful for non boolean feature flags."},{type:"array",items:{$ref:"#/definitions/docs.FeatureFlag"},description:"A list of feature flags. If any of the feature flags are satisfied, we will show all content."}]},"docs.Target":{type:"string",enum:["_blank","_self","_parent","_top"]},"docs.ChangelogFolderRelativePath":{type:"string",description:'The relative path to a folder containing markdown files broken down by date.\n\nExample:\n```\nchangelog: "changelog"\n```\n\nThis will look for markdown files in the `/fern/changelog` directory, which should contain files named like\n- `/fern/changelog/2024-04-29.mdx`.\n- `/fern/changelog/2023-01-02.mdx`.'},"docs.TabConfig":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},"display-name":{type:"string"},icon:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},href:{oneOf:[{type:"string"},{type:"null"}],description:"If `href` is set, clicking on the tab will redirect to the given URL.\n\nTabs with `href` must not have children in the navigation config."},target:{oneOf:[{$ref:"#/definitions/docs.Target"},{type:"null"}]},changelog:{oneOf:[{$ref:"#/definitions/docs.ChangelogFolderRelativePath"},{type:"null"}]}},required:["display-name"],additionalProperties:!1},"docs.Availability":{type:"string",enum:["stable","generally-available","in-development","pre-release","deprecated","beta","alpha","preview","legacy"]},"docs.PageConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},page:{type:"string"},path:{type:"string"},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},noindex:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["page","path"],additionalProperties:!1},"docs.CollapsedStringValue":{type:"string",enum:["open-by-default"]},"docs.CollapsedValue":{anyOf:[{type:"boolean"},{$ref:"#/definitions/docs.CollapsedStringValue"}]},"docs.SectionConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},section:{type:"string"},path:{oneOf:[{type:"string"},{type:"null"}],description:"The relative path to the markdown file that will be displayed when the section is clicked."},contents:{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}],description:"Deprecated. Use `collapsible` and `collapsed-by-default` instead."},collapsible:{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section can be expanded/collapsed by the user."},"collapsed-by-default":{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open)."},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["section","contents"],additionalProperties:!1},"docs.AudienceId":{type:"string",description:"ID of audience which is used to filter the API spec."},"docs.Audience":{anyOf:[{$ref:"#/definitions/docs.AudienceId"},{type:"array",items:{$ref:"#/definitions/docs.AudienceId"}}],description:"Audience can either be a string or list of strings\ni.e. `audiences: internal` or `audiences: [internal, beta]`"},"docs.VersionedSnippetLanguageConfiguration":{type:"object",properties:{version:{type:"string"},package:{type:"string"}},required:["version","package"],additionalProperties:!1},"docs.SnippetLanguageConfiguration":{anyOf:[{type:"string"},{$ref:"#/definitions/docs.VersionedSnippetLanguageConfiguration"}],description:`This snippets config object is meant to allow users to specify a specific package for the snippets,
|
|
3694
|
-
and optionally a version for that package. If you pass in a string, that should be the name of the package.`},"docs.SnippetsConfiguration":{type:"object",properties:{python:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},typescript:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},go:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},java:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},ruby:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},csharp:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},php:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},swift:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},rust:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]}},additionalProperties:!1},"docs.PlaygroundButtonSettings":{type:"object",properties:{href:{oneOf:[{type:"string"},{type:"null"}]}},additionalProperties:!1},"docs.PlaygroundSettings":{type:"object",properties:{hidden:{oneOf:[{type:"boolean"},{type:"null"}]},environments:{oneOf:[{type:"array",items:{type:"string"}},{type:"null"}],description:"A list of environment IDs that are allowed to be used in the playground. If not provided, all environments are allowed. And if the provided list is empty, the playground should be disabled."},button:{oneOf:[{$ref:"#/definitions/docs.PlaygroundButtonSettings"},{type:"null"}]},oauth:{oneOf:[{type:"boolean"},{type:"null"}]},"limit-websocket-messages-per-connection":{oneOf:[{type:"integer"},{type:"null"}],description:"The maximum number of websocket messages per connection in the playground."}},additionalProperties:!1},"docs.ApiReferencePackageConfigurationWithOptions":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},title:{oneOf:[{type:"string"},{type:"null"}]},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file. This summary is displayed at the top of the API section."},contents:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that is applied only to descendants of this api package."}},additionalProperties:!1},"docs.ApiReferencePackageConfiguration":{anyOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{$ref:"#/definitions/docs.ApiReferencePackageConfigurationWithOptions"}]},"docs.ApiReferenceSectionConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},section:{type:"string",description:"The title of the api package that will be displayed in the sidebar."},"referenced-packages":{oneOf:[{type:"array",items:{type:"string"}},{type:"null"}],description:"This section will inherit the endpoints from the specified subpackage(s). If multiple packages are specified, they will be merged."},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file."},contents:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}],description:"Deprecated. Use `collapsible` and `collapsed-by-default` instead."},collapsible:{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section can be expanded/collapsed by the user in the sidebar."},"collapsed-by-default":{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section starts collapsed. Only meaningful when collapsible is true."},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affects all endpoints."}},required:["section"],additionalProperties:!1},"docs.ApiReferenceEndpointConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},endpoint:{type:"string"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affect this endpoint specifically."}},required:["endpoint"],additionalProperties:!1},"docs.ApiReferenceOperationConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},operation:{type:"string"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["operation"],additionalProperties:!1,description:"Defines a GraphQL-native schema for selecting operations (REST -> Endpoint === GraphQL -> Operation)"},"docs.LinkConfiguration":{type:"object",properties:{link:{type:"string"},href:{type:"string"},icon:{oneOf:[{type:"string"},{type:"null"}]},target:{oneOf:[{$ref:"#/definitions/docs.Target"},{type:"null"}]}},required:["link","href"],additionalProperties:!1},"docs.ApiReferenceLayoutItem":{anyOf:[{type:"string",description:"This should be either an endpoint, websocket, webhook, or subpackage ID"},{type:"object",additionalProperties:{$ref:"#/definitions/docs.ApiReferencePackageConfiguration"},description:"Keyed by subpackage name, this object allows you to group endpoints and pages together."},{$ref:"#/definitions/docs.ApiReferenceSectionConfiguration"},{$ref:"#/definitions/docs.ApiReferenceEndpointConfiguration"},{$ref:"#/definitions/docs.ApiReferenceOperationConfiguration"},{$ref:"#/definitions/docs.PageConfiguration"},{$ref:"#/definitions/docs.LinkConfiguration"}],description:"Use the `layout` object to customize the order that your API endpoints\nare displayed in the docs site."},"docs.ApiReferenceConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},api:{type:"string"},"api-name":{oneOf:[{type:"string"},{type:"null"}],description:"Name of API that we are referencing"},openrpc:{oneOf:[{type:"string"},{type:"null"}],description:"Path to an openrpc spec."},audiences:{oneOf:[{$ref:"#/definitions/docs.Audience"},{type:"null"}]},"display-errors":{oneOf:[{type:"boolean"},{type:"null"}],description:"Defaults to false"},"tag-description-pages":{oneOf:[{type:"boolean"},{type:"null"}],description:"If true, a page will be created for each tag in the OpenAPI spec that contains a description."},snippets:{oneOf:[{$ref:"#/definitions/docs.SnippetsConfiguration"},{type:"null"}]},postman:{oneOf:[{type:"string"},{type:"null"}],description:"URL to a Postman collection for this API reference"},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file"},layout:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}],description:"Advanced usage: when specified, this object will be used to customize the order that your API endpoints are displayed in the docs site, including subpackages, and additional markdown pages (to be rendered in between API endpoints). If not specified, the order will be inferred from the OpenAPI Spec or Fern Definition."},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},alphabetized:{oneOf:[{type:"boolean"},{type:"null"}],description:"If `alphabetized` is set to true, packages and endpoints will be sorted alphabetically, unless explicitly ordered in the `layout` object."},flattened:{oneOf:[{type:"boolean"},{type:"null"}],description:"If `flattened` is set to true, the title specified in `api` will be hidden, and its endpoints and subpackages won't be grouped under it.\n\nThis setting is useful if the API reference is short and you want to display all endpoints at the top level."},paginated:{oneOf:[{type:"boolean"},{type:"null"}],description:"If true, the API reference will be paginated rather than displayed in a single page (long-scrolling)."},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affects all endpoints."}},required:["api"],additionalProperties:!1},"docs.LibraryName":{type:"string",description:"The name identifier for a library. Used to reference the library in navigation."},"docs.LibraryReferenceConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},library:{$ref:"#/definitions/docs.LibraryName",description:"The name of the library to reference (must match a key in the `libraries` section)."},title:{oneOf:[{type:"string"},{type:"null"}],description:"Override the display title for this library reference."},slug:{oneOf:[{type:"string"},{type:"null"}],description:"Override the URL slug for this library reference."}},required:["library"],additionalProperties:!1,description:"References a library defined in the `libraries` section.\nThe library's generated navigation will be injected at this point."},"docs.ChangelogConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},changelog:{$ref:"#/definitions/docs.ChangelogFolderRelativePath"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]}},required:["changelog"],additionalProperties:!1},"docs.TitleSource":{type:"string",enum:["frontmatter","filename"]},"docs.FolderConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},folder:{type:"string",description:"The relative path to a folder containing markdown files. Fern will automatically discover and add all markdown files from this folder to the navigation."},title:{oneOf:[{type:"string"},{type:"null"}],description:"The title to display for this folder section. If not provided, the folder name will be used."},"title-source":{oneOf:[{$ref:"#/definitions/docs.TitleSource"},{type:"null"}],description:"Determines how page titles are derived for files in this folder. Options are `frontmatter` (use the `title` field from the file's frontmatter) or `filename` (derive title from the file name). Defaults to `filename`."},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}],description:"Deprecated. Use `collapsible` and `collapsed-by-default` instead."},collapsible:{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section can be expanded/collapsed by the user."},"collapsed-by-default":{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open)."},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["folder"],additionalProperties:!1},"docs.NavigationItem":{anyOf:[{$ref:"#/definitions/docs.PageConfiguration"},{$ref:"#/definitions/docs.SectionConfiguration"},{$ref:"#/definitions/docs.ApiReferenceConfiguration"},{$ref:"#/definitions/docs.LibraryReferenceConfiguration"},{$ref:"#/definitions/docs.LinkConfiguration"},{$ref:"#/definitions/docs.ChangelogConfiguration"},{$ref:"#/definitions/docs.FolderConfiguration"}]},"docs.UntabbedNavigationConfig":{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},"docs.TabId":{type:"string"},"docs.TabbedNavigationItemWithLayout":{type:"object",properties:{tab:{$ref:"#/definitions/docs.TabId"},layout:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},{type:"null"}],description:"If `href` is set, `layout` must be null."}},required:["tab"],additionalProperties:!1},"docs.TabVariant":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},title:{type:"string"},subtitle:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},layout:{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},slug:{oneOf:[{type:"string"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},default:{oneOf:[{type:"boolean"},{type:"null"}]}},required:["title","layout"],additionalProperties:!1},"docs.TabbedNavigationItemWithVariants":{type:"object",properties:{tab:{$ref:"#/definitions/docs.TabId"},variants:{type:"array",items:{$ref:"#/definitions/docs.TabVariant"}}},required:["tab","variants"],additionalProperties:!1},"docs.TabbedNavigationItem":{anyOf:[{$ref:"#/definitions/docs.TabbedNavigationItemWithLayout"},{$ref:"#/definitions/docs.TabbedNavigationItemWithVariants"}]},"docs.TabbedNavigationConfig":{type:"array",items:{$ref:"#/definitions/docs.TabbedNavigationItem"}},"docs.NavigationConfig":{anyOf:[{$ref:"#/definitions/docs.UntabbedNavigationConfig"},{$ref:"#/definitions/docs.TabbedNavigationConfig"}]}},Ywm={type:Gwm,properties:Wwm,required:Hwm,additionalProperties:Kwm,definitions:Jwm};async function S0t({value:e}){let t=SU(e,E4o);if(t.success){let i=u3(e,[],[]);return{type:"success",contents:Uh.RawSchemas.Serializer.ProductFileConfig.parseOrThrow(i)}}let r=t.error?.instancePath?` at ${t?.error.instancePath}`:"";return{type:"failure",message:`${t.error?.message??"Failed to parse because JSON schema validation failed"}${r}`}}rr();async function EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:t,visitor:r,nodePath:n,willBeUploaded:i=!0}){let o=Fi(yn(e),t);await r.filepath?.({absoluteFilepath:o,value:t,willBeUploaded:i},[o])}jt();N7();rr();var uie=require("fs/promises"),v4o=we(require("path"),1);async function OPe(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 PPe=parseInt(process.env.FERN_DOCS_VALIDATION_CONCURRENCY??"32",10);async function YZn({absolutePathToFernFolder:e,navigation:t,apiWorkspaces:r,visitor:n,absoluteFilepathToConfiguration:i,context:o,nodePath:s}){o.logger.debug(`Starting navigation validation with concurrency limit: ${PPe}`),rxm(t)?await OPe(PPe,t,async(a,c)=>{if(nxm(a))await OPe(PPe,a.layout,async(u,l)=>{await JZn({absolutePathToFernFolder:e,navigationItem:u,visitor:n,nodePath:[...s,`${c}`,"layout",`${l}`],absoluteFilepathToConfiguration:i,apiWorkspaces:r,context:o})});else if(ixm(a)){let u=a.variants.flatMap((l,p)=>l.layout.map((d,f)=>({item:d,variantIdx:p,itemIdx:f})));await OPe(PPe,u,async({item:l,variantIdx:p,itemIdx:d})=>{await JZn({absolutePathToFernFolder:e,navigationItem:l,visitor:n,nodePath:[...s,`${c}`,"variants",`${p}`,"layout",`${d}`],absoluteFilepathToConfiguration:i,apiWorkspaces:r,context:o})})}}):await OPe(PPe,t,async(a,c)=>{await JZn({absolutePathToFernFolder:e,navigationItem:a,visitor:n,nodePath:[...s,`${c}`],absoluteFilepathToConfiguration:i,apiWorkspaces:r,context:o})})}async function JZn({absolutePathToFernFolder:e,navigationItem:t,visitor:r,nodePath:n,absoluteFilepathToConfiguration:i,apiWorkspaces:o,context:s}){await bU(t,{alphabetized:vt,api:vt,apiName:vt,audiences:vt,folder:vt,titleSource:vt,collapsible:vt,collapsedByDefault:vt,openrpc:async c=>{c!=null&&await EE({absoluteFilepathToConfiguration:i,rawUnresolvedFilepath:c,visitor:r,nodePath:[...n,"openrpc"],willBeUploaded:!1})},displayErrors:vt,tagDescriptionPages:vt,snippets:vt,summary:vt,title:vt,layout:vt,collapsed:vt,icon:vt,slug:vt,hidden:vt,skipSlug:vt,paginated:vt,playground:vt,flattened:vt,featureFlag:vt,postman:vt,path:async c=>{c!=null&&await EE({absoluteFilepathToConfiguration:i,rawUnresolvedFilepath:c,visitor:r,nodePath:[...n,"path"],willBeUploaded:!1})},page:vt,contents:async c=>{c!=null&&await Promise.all(c.map(async(u,l)=>{await JZn({absolutePathToFernFolder:e,navigationItem:u,visitor:r,nodePath:[...n,"contents",`${l}`],absoluteFilepathToConfiguration:i,apiWorkspaces:o,context:s})}))},viewers:async c=>{c!=null&&c.length>0&&await r.permissions?.({viewers:c},[...n,"viewers"])},orphaned:vt,availability:vt});let a=$wm(t);if(a!=null){let c=Fi(yn(i),a);if(await sr(c)){let l=(await(0,uie.stat)(c)).size/(1024*1024);l>1&&s.logger.trace(`Processing large markdown file: ${a} (${l.toFixed(2)} MB)`);let p=performance.now(),d=(await(0,uie.readFile)(c,"utf8")).toString(),f=performance.now()-p;f>2e3&&s.logger.debug(`Slow file read: ${a} took ${f.toFixed(0)}ms`);let m=exm(t);await r.markdownPage?.({title:m,content:d,absoluteFilepath:c},[...n,a]);try{let h=performance.now(),{filepaths:A}=tK(d,{absolutePathToFernFolder:e,absolutePathToMarkdownFile:c}),y=performance.now()-h;y>2e3&&s.logger.debug(`Slow image path parsing: ${a} took ${y.toFixed(0)}ms`);for(let I of A)await r.filepath?.({absoluteFilepath:I,value:ds(e,I),willBeUploaded:!0},[...n,a])}catch(h){s.logger.trace(`Failed to parse image paths in ${a}: ${h}`)}}}if(txm(t)){let c=o.find(u=>u.workspaceName===t.apiName);c!=null&&await r.apiSection?.({config:t,workspace:c,context:s},[...n,"api"])}if(Xwm(t)){let c=Fi(yn(i),t.folder);await sr(c)&&await Gou({directoryPath:c,absolutePathToFernFolder:e,visitor:r,nodePath:[...n,"folder"],context:s})}if(Zwm(t)){let c=Fi(yn(i),t.changelog);if(s.logger.trace(`Starting changelog processing for directory: ${c}`),await sr(c)){let u=performance.now(),p=(await(0,uie.readdir)(c)).filter(f=>f.endsWith(".md")||f.endsWith(".mdx"));s.logger.debug(`Processing ${p.length} changelog files in ${c}`),await OPe(PPe,p,async f=>{let m=Fi(c,f),h=(await(0,uie.readFile)(m,"utf8")).toString();s.logger.trace(`Validating changelog file: ${f}`),await r.markdownPage?.({title:f,content:h,absoluteFilepath:m},[...n,"changelog",f])});let d=performance.now()-u;s.logger.debug(`Finished processing ${p.length} changelog files in ${d.toFixed(0)}ms`)}else s.logger.trace(`Changelog directory does not exist: ${c}`)}}function Xwm(e){return e?.folder!=null}async function Gou({directoryPath:e,absolutePathToFernFolder:t,visitor:r,nodePath:n,context:i}){let o=await(0,uie.readdir)(e,{withFileTypes:!0}),s=o.filter(c=>c.isFile()&&!c.name.startsWith("_")&&(c.name.toLowerCase().endsWith(".md")||c.name.toLowerCase().endsWith(".mdx"))),a=o.filter(c=>c.isDirectory()&&!c.name.startsWith("_"));await OPe(PPe,s,async c=>{let u=$e(e,ke.of(c.name)),p=(await(0,uie.stat)(u)).size/(1024*1024);p>1&&i.logger.trace(`Processing large markdown file in folder: ${c.name} (${p.toFixed(2)} MB)`);let d=(await(0,uie.readFile)(u,"utf8")).toString(),f=v4o.default.basename(c.name,v4o.default.extname(c.name));await r.markdownPage?.({title:f,content:d,absoluteFilepath:u},[...n,c.name]);try{let{filepaths:m}=tK(d,{absolutePathToFernFolder:t,absolutePathToMarkdownFile:u});for(let h of m)await r.filepath?.({absoluteFilepath:h,value:ds(t,h),willBeUploaded:!0},[...n,c.name])}catch(m){i.logger.trace(`Failed to parse image paths in folder file ${c.name}: ${m}`)}}),await OPe(PPe,a,async c=>{let u=$e(e,ke.of(c.name));await Gou({directoryPath:u,absolutePathToFernFolder:t,visitor:r,nodePath:[...n,c.name],context:i})})}function Zwm(e){return e?.changelog!=null}function Wou(e){return e?.page!=null}function Hou(e){return e?.section!=null}function $wm(e){if(Wou(e)||Hou(e)&&e.path!=null)return e.path}function exm(e){return Wou(e)?e.page:Hou(e)?e.section:"Unknown"}function txm(e){return e?.api!=null}function rxm(e){return e[0]?.tab!=null}function nxm(e){return"layout"in e&&Array.isArray(e.layout)}function ixm(e){return"variants"in e&&Array.isArray(e.variants)}async function Jou({contents:e,visitor:t,absoluteFilepathToConfiguration:r,context:n,apiWorkspaces:i,absolutePathToFernFolder:o}){await t.file?.({config:e},[]),await bU(e,{instances:vt,analytics:vt,aiChat:vt,aiSearch:vt,aiExamples:async s=>{s!=null&&typeof s=="object"&&await bU(s,{enabled:vt,style:vt})},pageActions:vt,announcement:vt,backgroundImage:async s=>{s!=null&&(typeof s=="string"?await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["background-image"]}):(s.dark!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.dark,visitor:t,nodePath:["background-image","dark"]}),s.light!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.light,visitor:t,nodePath:["background-image","light"]})))},colors:vt,css:async s=>{s!=null&&(Array.isArray(s)?await Promise.all(s.map((a,c)=>EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:a,visitor:t,nodePath:["css",`${c}`],willBeUploaded:!1}))):await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["css"],willBeUploaded:!1}))},defaultLanguage:vt,experimental:vt,favicon:async s=>{s!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["favicon"]})},footer:async s=>{s!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["footer"],willBeUploaded:!1})},footerLinks:vt,header:async s=>{s!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["header"],willBeUploaded:!1})},integrations:async s=>{s?.context7!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.context7,visitor:t,nodePath:["integrations","context7"],willBeUploaded:!0})},js:async s=>{s!=null&&(Array.isArray(s)?await Promise.all(s.map((a,c)=>Kou({absoluteFilepathToConfiguration:r,visitor:t,script:a,nodePath:["js",`${c}`]}))):await Kou({absoluteFilepathToConfiguration:r,visitor:t,script:s,nodePath:["js"]}))},landingPage:vt,layout:vt,agents:async s=>{s?.llmsTxt!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.llmsTxt,visitor:t,nodePath:["agents","llms-txt"],willBeUploaded:!0}),s?.robotsTxt!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.robotsTxt,visitor:t,nodePath:["agents","robots-txt"],willBeUploaded:!0}),s?.llmsFullTxt!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.llmsFullTxt,visitor:t,nodePath:["agents","llms-full-txt"],willBeUploaded:!0})},settings:vt,logo:async()=>{e.logo?.dark!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:e.logo.dark,visitor:t,nodePath:["logo","dark"]}),e.logo?.light!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:e.logo.light,visitor:t,nodePath:["logo","light"]})},metadata:vt,navbarLinks:vt,navigation:async s=>{if(s==null)return;let a=performance.now();n.logger.debug("[docs-ast] Starting main navigation traversal..."),await YZn({absolutePathToFernFolder:o,navigation:s,visitor:t,nodePath:["navigation"],absoluteFilepathToConfiguration:r,apiWorkspaces:i,context:n}),n.logger.debug(`[docs-ast] Main navigation traversal complete in ${(performance.now()-a).toFixed(0)}ms`)},products:async s=>{if(s==null)return;let a=performance.now();n.logger.debug(`[docs-ast] Processing ${s.length} products...`),await Promise.all(s.map(async(c,u)=>{if("path"in c){await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:c.path,visitor:t,nodePath:["products",`${u}`],willBeUploaded:!1});let l=Fi(yn(r),c.path),p=Cr.load((await(0,C4o.readFile)(l)).toString());await sr(l)&&await t.productFile?.({path:c.path,content:p},[c.path]);let d=await S0t({value:p});d.type==="success"&&await YZn({absolutePathToFernFolder:o,navigation:d.contents.navigation,visitor:t,nodePath:["navigation"],absoluteFilepathToConfiguration:l,apiWorkspaces:i,context:n})}})),n.logger.debug(`[docs-ast] Products processing complete in ${(performance.now()-a).toFixed(0)}ms`)},check:vt,redirects:vt,tabs:vt,title:vt,typography:async s=>{s!=null&&await bU(s,{bodyFont:async a=>{a!=null&&await I4o({absoluteFilepathToConfiguration:r,visitor:t,font:a,nodePath:["typography","bodyFont"]})},codeFont:async a=>{a!=null&&await I4o({absoluteFilepathToConfiguration:r,visitor:t,font:a,nodePath:["typography","codeFont"]})},headingsFont:async a=>{a!=null&&await I4o({absoluteFilepathToConfiguration:r,visitor:t,font:a,nodePath:["typography","headingsFont"]})}})},versions:async s=>{if(s==null)return;let a=performance.now();n.logger.debug(`[docs-ast] Processing ${s.length} versions...`),await Promise.all(s.map(async(c,u)=>{await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:c.path,visitor:t,nodePath:["versions",`${u}`],willBeUploaded:!1});let l=Fi(yn(r),c.path),p=Cr.load((await(0,C4o.readFile)(l)).toString());await sr(l)&&await t.versionFile?.({path:c.path,content:p},[c.path]);let d=await w0t({value:p});d.type==="success"&&await YZn({absolutePathToFernFolder:o,navigation:d.contents.navigation,visitor:t,nodePath:["navigation"],absoluteFilepathToConfiguration:l,apiWorkspaces:i,context:n})})),n.logger.debug(`[docs-ast] Versions processing complete in ${(performance.now()-a).toFixed(0)}ms`)},roles:vt,languages:vt,translations:vt,theme:vt,globalTheme:vt,libraries:vt})}async function I4o({absoluteFilepathToConfiguration:e,visitor:t,font:r,nodePath:n}){r.path!=null&&await EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:r.path,visitor:t,nodePath:n,willBeUploaded:!0});for(let i of r.paths??[])typeof i=="string"?await EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:i,visitor:t,nodePath:n,willBeUploaded:!0}):await EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:i.path,visitor:t,nodePath:n,willBeUploaded:!0})}async function Kou({absoluteFilepathToConfiguration:e,visitor:t,script:r,nodePath:n}){let i=typeof r=="string"?r:"path"in r?r.path:null;i&&await EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:i,visitor:t,nodePath:n,willBeUploaded:!0})}var V0t={};re(V0t,{AccentColorContrastRule:()=>w4o,AllRolesMustBeDeclaredRule:()=>x4o,CHANGELOG_FEED_ALLOWED_SLUGS:()=>s$n,FilepathsExistRule:()=>XZn,MissingRedirectsRule:()=>T0t,NoCircularRedirectsRule:()=>B0t,OnlyVersionedNavigation:()=>n$n,TabWithHrefRule:()=>Ixm,TranslationDirectoriesExistRule:()=>i$n,ValidChangelogSlugRule:()=>O0t,ValidDocsEndpoints:()=>P0t,ValidFileTypes:()=>h$n,ValidFrontmatter:()=>g$n,ValidMarkdownFileReferences:()=>Plu,ValidMarkdownLinks:()=>U7,ValidMarkdownRule:()=>Tlu,ValidTranslationsConfigRule:()=>gei,ValidateProductFileRule:()=>Aei,ValidateVersionFileRule:()=>yei,enforceBackgroundTheme:()=>You,getEffectiveChangelogSlugLastSegment:()=>usu,isAllowedChangelogSlug:()=>R4o,validateTheme:()=>pqt});yOr();var w4o={name:"accent-color-contrast",create:()=>({file:async({config:e})=>{if(e.colors==null)return[];let t=EOr(e.colors);return t==="dark"?pqt(e.colors,"dark"):t==="light"?pqt(e.colors,"light"):t==="darkAndLight"?[...pqt(e.colors,"dark"),...pqt(e.colors,"light")]:[]}})};function pqt(e,t){let r=nNt(e.accentPrimary??e.accentPrimaryDeprecated,"accent-primary",t),n=nNt(e.background,"background",t)??(t==="dark"?"#000":"#FFF"),i=[];if(!hs(n).isValid())i.push({severity:"fatal",message:`Invalid background color provided for colors.background.${t}: ${n}.`});else{let o=You(hs(n),t);hs(n).toHexString()!==o.toHexString()&&i.push({severity:"warning",message:`The provided background color for ${t} mode is not ${t} enough. It will be adjusted to ${o.toHexString()}.`}),n=o.toHexString()}if(r==null)i.push({severity:"warning",message:`No accent-color provided for ${t} mode. A random color will be used.`});else if(!hs(r).isValid())i.push({severity:"fatal",message:`Invalid accent-color provided for colors.accent-primary.${t}: ${r}.`});else{let o=hs.readability(r,n),s=`${o.toFixed(2)}:1`;o<3?i.push({severity:"warning",message:`The contrast ratio between the accent color and the background color for ${t} mode is ${s}. It should be at least 3:1.`}):o<4.5?i.push({severity:"warning",message:`The contrast ratio between the accent color and the background color for ${t} mode is ${s}. Fern will adjust the color to meet the minimum contrast ratio of 4.5:1 for WCAG AA and 7:1 for WCAG AAA.`}):o<7&&i.push({severity:"warning",message:`The contrast ratio between the accent color and the background color for ${t} mode is ${s}. Fern will adjust the color to meet the minimum contrast ratio of 7:1 for WCAG AAA.`})}return i}function You(e,t){return t==="dark"&&e.isDark()||t==="light"&&e.isLight()?e:oxm(e)}function oxm(e){if(e==null)return;let{h:t,s:r,v:n}=e.toHsv();return hs({h:t,s:r,v:1-n})}var x4o={name:"all-roles-must-be-declared",create:e=>{let t=e.workspace.config.roles;return{permissions:r=>{let n=[...r.viewers??[]],i=[];for(let o of n)(t==null||!t.includes(o))&&i.push({severity:"fatal",message:`Role "${o}" is used but not declared at the top level of the docs.yml file.`});return i}}}};rr();var XZn={name:"filepaths-exist",create:()=>({filepath:async({absoluteFilepath:e,value:t})=>await sr(e)?[]:[{severity:"fatal",message:`Path ${t} does not exist`}]})};pg();Hb();Ut();function ZZn(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{let t=JSON.stringify(e);if(t!=null&&t!=="{}")return t}catch{}return Object.prototype.toString.call(e)}function Xou(e){return e.split(/[?#]/)[0]??""}function DPe(e){return e.startsWith("/")?e.slice(1):e}function S4o(e){return e.startsWith("/")?e:`/${e}`}function $Zn(e){return e.endsWith("/")?e.slice(0,-1):e}function e$n(e){let t=[];return e.config.instances.forEach(r=>{t.push(r.url),typeof r.customDomain=="string"?t.push(r.customDomain):Array.isArray(r.customDomain)&&t.push(...r.customDomain)}),t}function fqt(e){let t=new URL(xN(e));return{domain:t.host,basePath:t.pathname==="/"||t.pathname===""?void 0:t.pathname}}function Zou(e,t){return t.some(r=>{try{let n=fqt(r);return e.host!==n.domain?!1:n.basePath!=null?e.pathname.startsWith(n.basePath):!0}catch{return!1}})}pg();function $ou(e){let t=Ot.NodeCollector.collect(e),r=new Map;for(let n of t.getSlugMapWithParents().values()){let{node:i,parents:o}=n;if(!Ot.isPage(i))continue;let s=Ot.getPageId(i);if(s==null)continue;let a=i.canonicalSlug??i.slug;if(i.type==="changelogEntry"){let c=o.findLast(u=>u.type==="changelog");c!=null&&Ot.hasMetadata(c)&&(a=c.canonicalSlug??c.slug)}r.set(s,a)}return r}function sxm(e){for(var t=[],r=0;r<e.length;){var n=e[r];if(n==="*"||n==="+"||n==="?"){t.push({type:"MODIFIER",index:r,value:e[r++]});continue}if(n==="\\"){t.push({type:"ESCAPED_CHAR",index:r++,value:e[r++]});continue}if(n==="{"){t.push({type:"OPEN",index:r,value:e[r++]});continue}if(n==="}"){t.push({type:"CLOSE",index:r,value:e[r++]});continue}if(n===":"){for(var i="",o=r+1;o<e.length;){var s=e.charCodeAt(o);if(s>=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||s===95){i+=e[o++];continue}break}if(!i)throw new TypeError("Missing parameter name at ".concat(r));t.push({type:"NAME",index:r,value:i}),r=o;continue}if(n==="("){var a=1,c="",o=r+1;if(e[o]==="?")throw new TypeError('Pattern cannot start with "?" at '.concat(o));for(;o<e.length;){if(e[o]==="\\"){c+=e[o++]+e[o++];continue}if(e[o]===")"){if(a--,a===0){o++;break}}else if(e[o]==="("&&(a++,e[o+1]!=="?"))throw new TypeError("Capturing groups are not allowed at ".concat(o));c+=e[o++]}if(a)throw new TypeError("Unbalanced pattern at ".concat(r));if(!c)throw new TypeError("Missing pattern at ".concat(r));t.push({type:"PATTERN",index:r,value:c}),r=o;continue}t.push({type:"CHAR",index:r,value:e[r++]})}return t.push({type:"END",index:r,value:""}),t}function esu(e,t){t===void 0&&(t={});for(var r=sxm(e),n=t.prefixes,i=n===void 0?"./":n,o=t.delimiter,s=o===void 0?"/#?":o,a=[],c=0,u=0,l="",p=function(P){if(u<r.length&&r[u].type===P)return r[u++].value},d=function(P){var U=p(P);if(U!==void 0)return U;var X=r[u],$=X.type,ne=X.index;throw new TypeError("Unexpected ".concat($," at ").concat(ne,", expected ").concat(P))},f=function(){for(var P="",U;U=p("CHAR")||p("ESCAPED_CHAR");)P+=U;return P},m=function(P){for(var U=0,X=s;U<X.length;U++){var $=X[U];if(P.indexOf($)>-1)return!0}return!1},h=function(P){var U=a[a.length-1],X=P||(U&&typeof U=="string"?U:"");if(U&&!X)throw new TypeError('Must have text between two parameters, missing text after "'.concat(U.name,'"'));return!X||m(X)?"[^".concat(RPe(s),"]+?"):"(?:(?!".concat(RPe(X),")[^").concat(RPe(s),"])+?")};u<r.length;){var A=p("CHAR"),y=p("NAME"),I=p("PATTERN");if(y||I){var w=A||"";i.indexOf(w)===-1&&(l+=w,w=""),l&&(a.push(l),l=""),a.push({name:y||c++,prefix:w,suffix:"",pattern:I||h(w),modifier:p("MODIFIER")||""});continue}var C=A||p("ESCAPED_CHAR");if(C){l+=C;continue}l&&(a.push(l),l="");var x=p("OPEN");if(x){var w=f(),B=p("NAME")||"",O=p("PATTERN")||"",k=f();d("CLOSE"),a.push({name:B||(O?c++:""),pattern:B&&!O?h(w):O,prefix:w,suffix:k,modifier:p("MODIFIER")||""});continue}d("END")}return a}function tsu(e,t){return axm(esu(e,t),t)}function axm(e,t){t===void 0&&(t={});var r=T4o(t),n=t.encode,i=n===void 0?function(c){return c}:n,o=t.validate,s=o===void 0?!0:o,a=e.map(function(c){if(typeof c=="object")return new RegExp("^(?:".concat(c.pattern,")$"),r)});return function(c){for(var u="",l=0;l<e.length;l++){var p=e[l];if(typeof p=="string"){u+=p;continue}var d=c?c[p.name]:void 0,f=p.modifier==="?"||p.modifier==="*",m=p.modifier==="*"||p.modifier==="+";if(Array.isArray(d)){if(!m)throw new TypeError('Expected "'.concat(p.name,'" to not repeat, but got an array'));if(d.length===0){if(f)continue;throw new TypeError('Expected "'.concat(p.name,'" to not be empty'))}for(var h=0;h<d.length;h++){var A=i(d[h],p);if(s&&!a[l].test(A))throw new TypeError('Expected all "'.concat(p.name,'" to match "').concat(p.pattern,'", but got "').concat(A,'"'));u+=p.prefix+A+p.suffix}continue}if(typeof d=="string"||typeof d=="number"){var A=i(String(d),p);if(s&&!a[l].test(A))throw new TypeError('Expected "'.concat(p.name,'" to match "').concat(p.pattern,'", but got "').concat(A,'"'));u+=p.prefix+A+p.suffix;continue}if(!f){var y=m?"an array":"a string";throw new TypeError('Expected "'.concat(p.name,'" to be ').concat(y))}}return u}}function t$n(e,t){var r=[],n=rsu(e,r,t);return cxm(n,r,t)}function cxm(e,t,r){r===void 0&&(r={});var n=r.decode,i=n===void 0?function(o){return o}:n;return function(o){var s=e.exec(o);if(!s)return!1;for(var a=s[0],c=s.index,u=Object.create(null),l=function(d){if(s[d]===void 0)return"continue";var f=t[d-1];f.modifier==="*"||f.modifier==="+"?u[f.name]=s[d].split(f.prefix+f.suffix).map(function(m){return i(m,f)}):u[f.name]=i(s[d],f)},p=1;p<s.length;p++)l(p);return{path:a,index:c,params:u}}}function RPe(e){return e.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1")}function T4o(e){return e&&e.sensitive?"":"i"}function uxm(e,t){if(!t)return e;for(var r=/\((?:\?<(.*?)>)?(?!\?)/g,n=0,i=r.exec(e.source);i;)t.push({name:i[1]||n++,prefix:"",suffix:"",modifier:"",pattern:""}),i=r.exec(e.source);return e}function lxm(e,t,r){var n=e.map(function(i){return rsu(i,t,r).source});return new RegExp("(?:".concat(n.join("|"),")"),T4o(r))}function pxm(e,t,r){return fxm(esu(e,r),t,r)}function fxm(e,t,r){r===void 0&&(r={});for(var n=r.strict,i=n===void 0?!1:n,o=r.start,s=o===void 0?!0:o,a=r.end,c=a===void 0?!0:a,u=r.encode,l=u===void 0?function(U){return U}:u,p=r.delimiter,d=p===void 0?"/#?":p,f=r.endsWith,m=f===void 0?"":f,h="[".concat(RPe(m),"]|$"),A="[".concat(RPe(d),"]"),y=s?"^":"",I=0,w=e;I<w.length;I++){var C=w[I];if(typeof C=="string")y+=RPe(l(C));else{var x=RPe(l(C.prefix)),B=RPe(l(C.suffix));if(C.pattern)if(t&&t.push(C),x||B)if(C.modifier==="+"||C.modifier==="*"){var O=C.modifier==="*"?"?":"";y+="(?:".concat(x,"((?:").concat(C.pattern,")(?:").concat(B).concat(x,"(?:").concat(C.pattern,"))*)").concat(B,")").concat(O)}else y+="(?:".concat(x,"(").concat(C.pattern,")").concat(B,")").concat(C.modifier);else{if(C.modifier==="+"||C.modifier==="*")throw new TypeError('Can not repeat "'.concat(C.name,'" without a prefix and suffix'));y+="(".concat(C.pattern,")").concat(C.modifier)}else y+="(?:".concat(x).concat(B,")").concat(C.modifier)}}if(c)i||(y+="".concat(A,"?")),y+=r.endsWith?"(?=".concat(h,")"):"$";else{var k=e[e.length-1],P=typeof k=="string"?A.indexOf(k[k.length-1])>-1:k===void 0;i||(y+="(?:".concat(A,"(?=").concat(h,"))?")),P||(y+="(?=".concat(A,"|").concat(h,")"))}return new RegExp(y,T4o(r))}function rsu(e,t,r){return e instanceof RegExp?uxm(e,t):Array.isArray(e)?lxm(e,t,r):pxm(e,t,r)}function nsu(e){let t=new Map;for(let r of e){let n=t.get(r.pageId);(n==null||Date.parse(r.lastUpdated)>=Date.parse(n.lastUpdated))&&t.set(r.pageId,r)}return Array.from(t.values())}function isu(e){return e.endsWith("/")?e.slice(0,-1):e}function dxm(e,t){return t==null||e.startsWith(t)?e:`${isu(t)}${e.startsWith("/")?"":"/"}${e}`}function mxm(e,t){if(e===t)return!0;try{return t$n(e)(t)!==!1}catch{return!1}}function hxm(e,t,r){let n=e.startsWith("/")?e:`/${e}`;return t.some(i=>{let o=isu(dxm(i.source,r));return mxm(o,n)})}function osu(e,t){let r=new Set(t.values()),n=[];for(let i of e){let o=t.get(i.pageId);if(o===void 0){if(r.has(i.slug))continue;n.push({pageId:i.pageId,oldSlug:i.slug,newSlug:void 0})}else if(o!==i.slug){if(r.has(i.slug))continue;n.push({pageId:i.pageId,oldSlug:i.slug,newSlug:o})}}return n}function ssu(e,t,r){let n=[];for(let i of e){if(hxm(i.oldSlug,t,r))continue;let o=i.oldSlug.startsWith("/")?i.oldSlug:`/${i.oldSlug}`;if(i.newSlug!=null){let s=i.newSlug.startsWith("/")?i.newSlug:`/${i.newSlug}`;n.push({severity:"warning",message:`Page "${i.pageId}" was moved from "${o}" to "${s}". The old URL will return 404 without a redirect. Add to docs.yml: redirects: [{source: "${o}", destination: "${s}"}]`})}else n.push({severity:"warning",message:`Page "${i.pageId}" was removed. The previously published URL "${o}" will return 404 without a redirect. Consider adding a redirect in docs.yml to preserve existing links.`})}return n}function gxm(){let e;return{context:U2e({logger:VI((r,...n)=>{r==="error"&&(e=n.join(" "))})}),getLastErrorMessage:()=>e}}function Axm(e){return"type"in e&&e.type==="root"}async function yxm(e,t,r,n){try{let i=await fetch(`${e}/slugs/markdowns`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({domain:t,basepath:r??""}),signal:AbortSignal.timeout(3e4)});return i.ok?{entries:(await i.json()).entries}:{error:`FDR returned ${i.status}`}}catch(i){return{error:i instanceof Error?i.message:String(i)}}}function bxm(){return process.env.FERN_FDR_ORIGIN??process.env.OVERRIDE_FDR_ORIGIN??"https://registry.buildwithfern.com"??"https://registry.buildwithfern.com"}var T0t={name:"missing-redirects",create:async({workspace:e,apiWorkspaces:t,ossWorkspaces:r,logger:n})=>{let o=e$n(e)[0];if(o==null)return dqt({type:"no-instance-url"});let s=fqt(o),a=await $W();if(a==null)return dqt({type:"no-token"});let c=await yxm(bxm(),s.domain,s.basePath,a.value);if("error"in c)return n.debug(`[missing-redirects] FDR fetch failed: ${c.error}`),dqt({type:"fetch-failed",reason:c.error});if(c.entries.length===0)return n.debug("[missing-redirects] No markdown entries found (first publish or empty slug table)"),dqt({type:"first-publish"});let u,{context:l,getLastErrorMessage:p}=gxm();try{let m=(await new zz({domain:o,docsWorkspace:e,ossWorkspaces:r,apiWorkspaces:t,taskContext:l,editThisPage:void 0,uploadFiles:void 0,registerApi:void 0,targetAudiences:void 0}).resolve()).config.root;if(!m||!Axm(m))return{};let h=Ot.migrate.FernNavigationV1ToLatest.create().root(m),A=$ou(h),y=nsu(c.entries);u=osu(y,A)}catch(d){let f=p()??ZZn(d);return n.debug(`[missing-redirects] Failed to resolve local docs navigation: ${f}`),dqt({type:"resolve-failed",reason:f})}return u.length===0?{}:{file:async({config:d})=>{let f=(d.redirects??[]).map(m=>({source:m.source,destination:m.destination}));return ssu(u,f,s.basePath)}}}};function dqt(e){switch(e.type){case"no-instance-url":case"first-publish":return{};case"no-token":return{file:()=>[{severity:"warning",message:"Missing redirects check skipped: not authenticated. Run 'fern login' or set the FERN_TOKEN environment variable to enable this check."}]};case"fetch-failed":return{file:()=>[{severity:"warning",message:`Missing redirects check skipped: could not reach FDR (${e.reason}). The check requires network access to compare against previously published docs.`}]};case"resolve-failed":return{file:()=>[{severity:"warning",message:`Missing redirects check skipped: failed to resolve local docs navigation (${e.reason}). Run \`fern check --log-level=debug\` for more detail.`}]}}}function r$n(e){return e!=="/"&&e.endsWith("/")?e.slice(0,-1):e}function Exm(e){return!e.source.includes(":")&&!e.destination.includes(":")}function vxm(e){let t=[],r=e.filter(Exm),n=new Map;for(let c=0;c<r.length;c++){let u=r[c];if(u){let l=r$n(u.source),p=r$n(u.destination);n.set(l,{destination:p,index:c})}}for(let c=0;c<e.length;c++){let u=e[c];if(u){let l=r$n(u.source),p=r$n(u.destination);l===p&&t.push({severity:"error",message:`redirects[${c}]: Redirect from "${u.source}" to "${u.destination}" creates an infinite loop (source equals destination)`})}}let i=new Set,o=new Set;function s(c,u){if(o.has(c)){let d=u.indexOf(c);return u.slice(d)}if(i.has(c))return null;let l=n.get(c);if(!l)return null;i.add(c),o.add(c),u.push(c);let p=s(l.destination,u);return o.delete(c),u.pop(),p}let a=new Set;for(let[c]of n){i.clear(),o.clear();let u=s(c,[]);if(u&&u.length>1){let p=[...u].sort().join(" -> ");if(!a.has(p)){a.add(p);let d=[...u,u[0]].join(" -> ");t.push({severity:"error",message:`Circular redirect chain detected: ${d}`})}}}return t}var B0t={name:"no-circular-redirects",create:()=>({file:async({config:e})=>{let t=[];if(!e.redirects||e.redirects.length===0)return t;let r=e.redirects.map(n=>({source:n.source,destination:n.destination,permanent:n.permanent}));return vxm(r)}})};var n$n={name:"only-versioned-navigation",create:()=>({file:async({config:e})=>e.navigation!=null&&e.versions!=null?[{severity:"fatal",message:"Cannot contain both navigation and versions. If you want versioned docs, use versions. Otherwise use navigation."}]:[]})};var Ixm={name:"tab-with-href",create:()=>({file:async({config:e})=>{let t=e.tabs??{};if(e.navigation==null)return[];let r=[];if(Cxm(e.navigation))for(let n of e.navigation){let i=t[n.tab];if(i==null){r.push({severity:"fatal",message:`Tab "${n.tab}" is missing from the tabs configuration.`});continue}let o=wxm(n),s=xxm(n);if(i.href!=null&&(o||s)){r.push({severity:"fatal",message:`Tab "${n.tab}" has both a href and ${o?"layout":"variants"}. Only one should be used.`});continue}if(i.href==null&&!o&&!s){r.push({severity:"fatal",message:`Tab "${n.tab}" is missing a href, layout, or variants.`});continue}}return[]}})};function Cxm(e){return Array.isArray(e)&&e.length>0&&e[0].tab!=null}function wxm(e){return"layout"in e&&Array.isArray(e.layout)}function xxm(e){return"variants"in e&&Array.isArray(e.variants)}rr();var i$n={name:"translation-directories-exist",create:({workspace:e})=>({file:async({config:t})=>{let r=[],n=t.translations;if(n==null||n.length===0)return r;let i=n.map(u=>Uh.DocsYmlSchemas.normalizeTranslationConfig(u)),o=(i.find(u=>u.default===!0)??i[0])?.lang,s=$e(e.absoluteFilePath,ke.of("translations")),a=await sr(s),c=[];for(let u of i){if(u.lang===o)continue;let l=$e(s,ke.of(u.lang));await sr(l)||c.push(u.lang)}if(c.length>0){let u=Sxm({translationsDirExists:a,missingDirs:c,fernFolderPath:e.absoluteFilePath}),l=" ",p=u.split(`
|
|
3694
|
+
and optionally a version for that package. If you pass in a string, that should be the name of the package.`},"docs.SnippetsConfiguration":{type:"object",properties:{python:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},typescript:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},go:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},java:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},ruby:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},csharp:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},php:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},swift:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]},rust:{oneOf:[{$ref:"#/definitions/docs.SnippetLanguageConfiguration"},{type:"null"}]}},additionalProperties:!1},"docs.PlaygroundButtonSettings":{type:"object",properties:{href:{oneOf:[{type:"string"},{type:"null"}]}},additionalProperties:!1},"docs.PlaygroundSettings":{type:"object",properties:{hidden:{oneOf:[{type:"boolean"},{type:"null"}]},environments:{oneOf:[{type:"array",items:{type:"string"}},{type:"null"}],description:"A list of environment IDs that are allowed to be used in the playground. If not provided, all environments are allowed. And if the provided list is empty, the playground should be disabled."},button:{oneOf:[{$ref:"#/definitions/docs.PlaygroundButtonSettings"},{type:"null"}]},oauth:{oneOf:[{type:"boolean"},{type:"null"}]},"limit-websocket-messages-per-connection":{oneOf:[{type:"integer"},{type:"null"}],description:"The maximum number of websocket messages per connection in the playground."}},additionalProperties:!1},"docs.ApiReferencePackageConfigurationWithOptions":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},title:{oneOf:[{type:"string"},{type:"null"}]},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file. This summary is displayed at the top of the API section."},contents:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that is applied only to descendants of this api package."}},additionalProperties:!1},"docs.ApiReferencePackageConfiguration":{anyOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{$ref:"#/definitions/docs.ApiReferencePackageConfigurationWithOptions"}]},"docs.ApiReferenceSectionConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},section:{type:"string",description:"The title of the api package that will be displayed in the sidebar."},"referenced-packages":{oneOf:[{type:"array",items:{type:"string"}},{type:"null"}],description:"This section will inherit the endpoints from the specified subpackage(s). If multiple packages are specified, they will be merged."},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file."},contents:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}],description:"Deprecated. Use `collapsible` and `collapsed-by-default` instead."},collapsible:{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section can be expanded/collapsed by the user in the sidebar."},"collapsed-by-default":{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section starts collapsed. Only meaningful when collapsible is true."},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affects all endpoints."}},required:["section"],additionalProperties:!1},"docs.ApiReferenceEndpointConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},endpoint:{type:"string"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affect this endpoint specifically."}},required:["endpoint"],additionalProperties:!1},"docs.ApiReferenceOperationConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},operation:{type:"string"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["operation"],additionalProperties:!1,description:"Defines a GraphQL-native schema for selecting operations (REST -> Endpoint === GraphQL -> Operation)"},"docs.LinkConfiguration":{type:"object",properties:{link:{type:"string"},href:{type:"string"},icon:{oneOf:[{type:"string"},{type:"null"}]},target:{oneOf:[{$ref:"#/definitions/docs.Target"},{type:"null"}]}},required:["link","href"],additionalProperties:!1},"docs.ApiReferenceLayoutItem":{anyOf:[{type:"string",description:"This should be either an endpoint, websocket, webhook, or subpackage ID"},{type:"object",additionalProperties:{$ref:"#/definitions/docs.ApiReferencePackageConfiguration"},description:"Keyed by subpackage name, this object allows you to group endpoints and pages together."},{$ref:"#/definitions/docs.ApiReferenceSectionConfiguration"},{$ref:"#/definitions/docs.ApiReferenceEndpointConfiguration"},{$ref:"#/definitions/docs.ApiReferenceOperationConfiguration"},{$ref:"#/definitions/docs.PageConfiguration"},{$ref:"#/definitions/docs.LinkConfiguration"}],description:"Use the `layout` object to customize the order that your API endpoints\nare displayed in the docs site."},"docs.ApiReferenceConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},api:{type:"string"},"api-name":{oneOf:[{type:"string"},{type:"null"}],description:"Name of API that we are referencing"},openrpc:{oneOf:[{type:"string"},{type:"null"}],description:"Path to an openrpc spec."},audiences:{oneOf:[{$ref:"#/definitions/docs.Audience"},{type:"null"}]},"display-errors":{oneOf:[{type:"boolean"},{type:"null"}],description:"Defaults to false"},"tag-description-pages":{oneOf:[{type:"boolean"},{type:"null"}],description:"If true, a page will be created for each tag in the OpenAPI spec that contains a description."},snippets:{oneOf:[{$ref:"#/definitions/docs.SnippetsConfiguration"},{type:"null"}]},postman:{oneOf:[{type:"string"},{type:"null"}],description:"URL to a Postman collection for this API reference"},summary:{oneOf:[{type:"string"},{type:"null"}],description:"Relative path to the markdown file"},layout:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.ApiReferenceLayoutItem"}},{type:"null"}],description:"Advanced usage: when specified, this object will be used to customize the order that your API endpoints are displayed in the docs site, including subpackages, and additional markdown pages (to be rendered in between API endpoints). If not specified, the order will be inferred from the OpenAPI Spec or Fern Definition."},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},alphabetized:{oneOf:[{type:"boolean"},{type:"null"}],description:"If `alphabetized` is set to true, packages and endpoints will be sorted alphabetically, unless explicitly ordered in the `layout` object."},flattened:{oneOf:[{type:"boolean"},{type:"null"}],description:"If `flattened` is set to true, the title specified in `api` will be hidden, and its endpoints and subpackages won't be grouped under it.\n\nThis setting is useful if the API reference is short and you want to display all endpoints at the top level."},paginated:{oneOf:[{type:"boolean"},{type:"null"}],description:"If true, the API reference will be paginated rather than displayed in a single page (long-scrolling)."},playground:{oneOf:[{$ref:"#/definitions/docs.PlaygroundSettings"},{type:"null"}],description:"Settings for the api playground that affects all endpoints."}},required:["api"],additionalProperties:!1},"docs.LibraryName":{type:"string",description:"The name identifier for a library. Used to reference the library in navigation."},"docs.LibraryReferenceConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},library:{$ref:"#/definitions/docs.LibraryName",description:"The name of the library to reference (must match a key in the `libraries` section)."},title:{oneOf:[{type:"string"},{type:"null"}],description:"Override the display title for this library reference."},slug:{oneOf:[{type:"string"},{type:"null"}],description:"Override the URL slug for this library reference."}},required:["library"],additionalProperties:!1,description:"References a library defined in the `libraries` section.\nThe library's generated navigation will be injected at this point."},"docs.ChangelogConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},changelog:{$ref:"#/definitions/docs.ChangelogFolderRelativePath"},title:{oneOf:[{type:"string"},{type:"null"}]},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]}},required:["changelog"],additionalProperties:!1},"docs.TitleSource":{type:"string",enum:["frontmatter","filename"]},"docs.FolderConfiguration":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},folder:{type:"string",description:"The relative path to a folder containing markdown files. Fern will automatically discover and add all markdown files from this folder to the navigation."},title:{oneOf:[{type:"string"},{type:"null"}],description:"The title to display for this folder section. If not provided, the folder name will be used."},"title-source":{oneOf:[{$ref:"#/definitions/docs.TitleSource"},{type:"null"}],description:"Determines how page titles are derived for files in this folder. Options are `frontmatter` (use the `title` field from the file's frontmatter) or `filename` (derive title from the file name). Defaults to `filename`."},slug:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},collapsed:{oneOf:[{$ref:"#/definitions/docs.CollapsedValue"},{type:"null"}],description:"Deprecated. Use `collapsible` and `collapsed-by-default` instead."},collapsible:{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section can be expanded/collapsed by the user."},"collapsed-by-default":{oneOf:[{type:"boolean"},{type:"null"}],description:"Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open)."},availability:{oneOf:[{$ref:"#/definitions/docs.Availability"},{type:"null"}]}},required:["folder"],additionalProperties:!1},"docs.NavigationItem":{anyOf:[{$ref:"#/definitions/docs.PageConfiguration"},{$ref:"#/definitions/docs.SectionConfiguration"},{$ref:"#/definitions/docs.ApiReferenceConfiguration"},{$ref:"#/definitions/docs.LibraryReferenceConfiguration"},{$ref:"#/definitions/docs.LinkConfiguration"},{$ref:"#/definitions/docs.ChangelogConfiguration"},{$ref:"#/definitions/docs.FolderConfiguration"}]},"docs.UntabbedNavigationConfig":{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},"docs.TabId":{type:"string"},"docs.TabbedNavigationItemWithLayout":{type:"object",properties:{tab:{$ref:"#/definitions/docs.TabId"},layout:{oneOf:[{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},{type:"null"}],description:"If `href` is set, `layout` must be null."}},required:["tab"],additionalProperties:!1},"docs.TabVariant":{type:"object",properties:{viewers:{oneOf:[{$ref:"#/definitions/docs.Role"},{type:"null"}]},orphaned:{oneOf:[{type:"boolean"},{type:"null"}],description:"When `orphaned` is set to `true`, the roles will not inherit from parents."},"feature-flag":{oneOf:[{$ref:"#/definitions/docs.FeatureFlagConfiguration"},{type:"null"}]},title:{type:"string"},subtitle:{oneOf:[{type:"string"},{type:"null"}]},icon:{oneOf:[{type:"string"},{type:"null"}]},layout:{type:"array",items:{$ref:"#/definitions/docs.NavigationItem"}},slug:{oneOf:[{type:"string"},{type:"null"}]},"skip-slug":{oneOf:[{type:"boolean"},{type:"null"}]},hidden:{oneOf:[{type:"boolean"},{type:"null"}]},default:{oneOf:[{type:"boolean"},{type:"null"}]}},required:["title","layout"],additionalProperties:!1},"docs.TabbedNavigationItemWithVariants":{type:"object",properties:{tab:{$ref:"#/definitions/docs.TabId"},variants:{type:"array",items:{$ref:"#/definitions/docs.TabVariant"}}},required:["tab","variants"],additionalProperties:!1},"docs.TabbedNavigationItem":{anyOf:[{$ref:"#/definitions/docs.TabbedNavigationItemWithLayout"},{$ref:"#/definitions/docs.TabbedNavigationItemWithVariants"}]},"docs.TabbedNavigationConfig":{type:"array",items:{$ref:"#/definitions/docs.TabbedNavigationItem"}},"docs.NavigationConfig":{anyOf:[{$ref:"#/definitions/docs.UntabbedNavigationConfig"},{$ref:"#/definitions/docs.TabbedNavigationConfig"}]}},Ywm={type:Gwm,properties:Wwm,required:Hwm,additionalProperties:Kwm,definitions:Jwm};async function S0t({value:e}){let t=SU(e,E4o);if(t.success){let i=u3(e,[],[]);return{type:"success",contents:Uh.RawSchemas.Serializer.ProductFileConfig.parseOrThrow(i)}}let r=t.error?.instancePath?` at ${t?.error.instancePath}`:"";return{type:"failure",message:`${t.error?.message??"Failed to parse because JSON schema validation failed"}${r}`}}rr();async function EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:t,visitor:r,nodePath:n,willBeUploaded:i=!0}){let o=Fi(yn(e),t);await r.filepath?.({absoluteFilepath:o,value:t,willBeUploaded:i},[o])}jt();N7();rr();var uie=require("fs/promises"),v4o=we(require("path"),1);async function OPe(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 PPe=parseInt(process.env.FERN_DOCS_VALIDATION_CONCURRENCY??"32",10);async function YZn({absolutePathToFernFolder:e,navigation:t,apiWorkspaces:r,visitor:n,absoluteFilepathToConfiguration:i,context:o,nodePath:s}){o.logger.debug(`Starting navigation validation with concurrency limit: ${PPe}`),rxm(t)?await OPe(PPe,t,async(a,c)=>{if(nxm(a))await OPe(PPe,a.layout,async(u,l)=>{await JZn({absolutePathToFernFolder:e,navigationItem:u,visitor:n,nodePath:[...s,`${c}`,"layout",`${l}`],absoluteFilepathToConfiguration:i,apiWorkspaces:r,context:o})});else if(ixm(a)){let u=a.variants.flatMap((l,p)=>l.layout.map((d,f)=>({item:d,variantIdx:p,itemIdx:f})));await OPe(PPe,u,async({item:l,variantIdx:p,itemIdx:d})=>{await JZn({absolutePathToFernFolder:e,navigationItem:l,visitor:n,nodePath:[...s,`${c}`,"variants",`${p}`,"layout",`${d}`],absoluteFilepathToConfiguration:i,apiWorkspaces:r,context:o})})}}):await OPe(PPe,t,async(a,c)=>{await JZn({absolutePathToFernFolder:e,navigationItem:a,visitor:n,nodePath:[...s,`${c}`],absoluteFilepathToConfiguration:i,apiWorkspaces:r,context:o})})}async function JZn({absolutePathToFernFolder:e,navigationItem:t,visitor:r,nodePath:n,absoluteFilepathToConfiguration:i,apiWorkspaces:o,context:s}){await bU(t,{alphabetized:vt,api:vt,apiName:vt,audiences:vt,folder:vt,titleSource:vt,collapsible:vt,collapsedByDefault:vt,openrpc:async c=>{c!=null&&await EE({absoluteFilepathToConfiguration:i,rawUnresolvedFilepath:c,visitor:r,nodePath:[...n,"openrpc"],willBeUploaded:!1})},displayErrors:vt,tagDescriptionPages:vt,snippets:vt,summary:vt,title:vt,layout:vt,collapsed:vt,icon:vt,slug:vt,hidden:vt,skipSlug:vt,paginated:vt,playground:vt,flattened:vt,featureFlag:vt,postman:vt,path:async c=>{c!=null&&await EE({absoluteFilepathToConfiguration:i,rawUnresolvedFilepath:c,visitor:r,nodePath:[...n,"path"],willBeUploaded:!1})},page:vt,contents:async c=>{c!=null&&await Promise.all(c.map(async(u,l)=>{await JZn({absolutePathToFernFolder:e,navigationItem:u,visitor:r,nodePath:[...n,"contents",`${l}`],absoluteFilepathToConfiguration:i,apiWorkspaces:o,context:s})}))},viewers:async c=>{c!=null&&c.length>0&&await r.permissions?.({viewers:c},[...n,"viewers"])},orphaned:vt,availability:vt});let a=$wm(t);if(a!=null){let c=Fi(yn(i),a);if(await sr(c)){let l=(await(0,uie.stat)(c)).size/(1024*1024);l>1&&s.logger.trace(`Processing large markdown file: ${a} (${l.toFixed(2)} MB)`);let p=performance.now(),d=(await(0,uie.readFile)(c,"utf8")).toString(),f=performance.now()-p;f>2e3&&s.logger.debug(`Slow file read: ${a} took ${f.toFixed(0)}ms`);let m=exm(t);await r.markdownPage?.({title:m,content:d,absoluteFilepath:c},[...n,a]);try{let h=performance.now(),{filepaths:A}=tK(d,{absolutePathToFernFolder:e,absolutePathToMarkdownFile:c}),y=performance.now()-h;y>2e3&&s.logger.debug(`Slow image path parsing: ${a} took ${y.toFixed(0)}ms`);for(let I of A)await r.filepath?.({absoluteFilepath:I,value:ds(e,I),willBeUploaded:!0},[...n,a])}catch(h){s.logger.trace(`Failed to parse image paths in ${a}: ${h}`)}}}if(txm(t)){let c=o.find(u=>u.workspaceName===t.apiName);c!=null&&await r.apiSection?.({config:t,workspace:c,context:s},[...n,"api"])}if(Xwm(t)){let c=Fi(yn(i),t.folder);await sr(c)&&await Gou({directoryPath:c,absolutePathToFernFolder:e,visitor:r,nodePath:[...n,"folder"],context:s})}if(Zwm(t)){let c=Fi(yn(i),t.changelog);if(s.logger.trace(`Starting changelog processing for directory: ${c}`),await sr(c)){let u=performance.now(),p=(await(0,uie.readdir)(c)).filter(f=>f.endsWith(".md")||f.endsWith(".mdx"));s.logger.debug(`Processing ${p.length} changelog files in ${c}`),await OPe(PPe,p,async f=>{let m=Fi(c,f),h=(await(0,uie.readFile)(m,"utf8")).toString();s.logger.trace(`Validating changelog file: ${f}`),await r.markdownPage?.({title:f,content:h,absoluteFilepath:m},[...n,"changelog",f])});let d=performance.now()-u;s.logger.debug(`Finished processing ${p.length} changelog files in ${d.toFixed(0)}ms`)}else s.logger.trace(`Changelog directory does not exist: ${c}`)}}function Xwm(e){return e?.folder!=null}async function Gou({directoryPath:e,absolutePathToFernFolder:t,visitor:r,nodePath:n,context:i}){let o=await(0,uie.readdir)(e,{withFileTypes:!0}),s=o.filter(c=>c.isFile()&&!c.name.startsWith("_")&&(c.name.toLowerCase().endsWith(".md")||c.name.toLowerCase().endsWith(".mdx"))),a=o.filter(c=>c.isDirectory()&&!c.name.startsWith("_"));await OPe(PPe,s,async c=>{let u=$e(e,ke.of(c.name)),p=(await(0,uie.stat)(u)).size/(1024*1024);p>1&&i.logger.trace(`Processing large markdown file in folder: ${c.name} (${p.toFixed(2)} MB)`);let d=(await(0,uie.readFile)(u,"utf8")).toString(),f=v4o.default.basename(c.name,v4o.default.extname(c.name));await r.markdownPage?.({title:f,content:d,absoluteFilepath:u},[...n,c.name]);try{let{filepaths:m}=tK(d,{absolutePathToFernFolder:t,absolutePathToMarkdownFile:u});for(let h of m)await r.filepath?.({absoluteFilepath:h,value:ds(t,h),willBeUploaded:!0},[...n,c.name])}catch(m){i.logger.trace(`Failed to parse image paths in folder file ${c.name}: ${m}`)}}),await OPe(PPe,a,async c=>{let u=$e(e,ke.of(c.name));await Gou({directoryPath:u,absolutePathToFernFolder:t,visitor:r,nodePath:[...n,c.name],context:i})})}function Zwm(e){return e?.changelog!=null}function Wou(e){return e?.page!=null}function Hou(e){return e?.section!=null}function $wm(e){if(Wou(e)||Hou(e)&&e.path!=null)return e.path}function exm(e){return Wou(e)?e.page:Hou(e)?e.section:"Unknown"}function txm(e){return e?.api!=null}function rxm(e){return e[0]?.tab!=null}function nxm(e){return"layout"in e&&Array.isArray(e.layout)}function ixm(e){return"variants"in e&&Array.isArray(e.variants)}async function Jou({contents:e,visitor:t,absoluteFilepathToConfiguration:r,context:n,apiWorkspaces:i,absolutePathToFernFolder:o}){await t.file?.({config:e},[]),await bU(e,{instances:vt,analytics:vt,aiChat:vt,aiSearch:vt,aiExamples:async s=>{s!=null&&typeof s=="object"&&await bU(s,{enabled:vt,style:vt})},pageActions:vt,announcement:vt,backgroundImage:async s=>{s!=null&&(typeof s=="string"?await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["background-image"]}):(s.dark!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.dark,visitor:t,nodePath:["background-image","dark"]}),s.light!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.light,visitor:t,nodePath:["background-image","light"]})))},colors:vt,css:async s=>{s!=null&&(Array.isArray(s)?await Promise.all(s.map((a,c)=>EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:a,visitor:t,nodePath:["css",`${c}`],willBeUploaded:!1}))):await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["css"],willBeUploaded:!1}))},defaultLanguage:vt,experimental:vt,favicon:async s=>{s!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["favicon"]})},footer:async s=>{s!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["footer"],willBeUploaded:!1})},footerLinks:vt,header:async s=>{s!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s,visitor:t,nodePath:["header"],willBeUploaded:!1})},integrations:async s=>{s?.context7!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.context7,visitor:t,nodePath:["integrations","context7"],willBeUploaded:!0})},js:async s=>{s!=null&&(Array.isArray(s)?await Promise.all(s.map((a,c)=>Kou({absoluteFilepathToConfiguration:r,visitor:t,script:a,nodePath:["js",`${c}`]}))):await Kou({absoluteFilepathToConfiguration:r,visitor:t,script:s,nodePath:["js"]}))},landingPage:vt,layout:vt,agents:async s=>{s?.llmsTxt!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.llmsTxt,visitor:t,nodePath:["agents","llms-txt"],willBeUploaded:!0}),s?.robotsTxt!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.robotsTxt,visitor:t,nodePath:["agents","robots-txt"],willBeUploaded:!0}),s?.llmsFullTxt!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:s.llmsFullTxt,visitor:t,nodePath:["agents","llms-full-txt"],willBeUploaded:!0})},settings:vt,logo:async()=>{e.logo?.dark!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:e.logo.dark,visitor:t,nodePath:["logo","dark"]}),e.logo?.light!=null&&await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:e.logo.light,visitor:t,nodePath:["logo","light"]})},metadata:vt,navbarLinks:vt,navigation:async s=>{if(s==null)return;let a=performance.now();n.logger.debug("[docs-ast] Starting main navigation traversal..."),await YZn({absolutePathToFernFolder:o,navigation:s,visitor:t,nodePath:["navigation"],absoluteFilepathToConfiguration:r,apiWorkspaces:i,context:n}),n.logger.debug(`[docs-ast] Main navigation traversal complete in ${(performance.now()-a).toFixed(0)}ms`)},products:async s=>{if(s==null)return;let a=performance.now();n.logger.debug(`[docs-ast] Processing ${s.length} products...`),await Promise.all(s.map(async(c,u)=>{if("path"in c){await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:c.path,visitor:t,nodePath:["products",`${u}`],willBeUploaded:!1});let l=Fi(yn(r),c.path),p=Cr.load((await(0,C4o.readFile)(l)).toString());await sr(l)&&await t.productFile?.({path:c.path,content:p},[c.path]);let d=await S0t({value:p});d.type==="success"&&await YZn({absolutePathToFernFolder:o,navigation:d.contents.navigation,visitor:t,nodePath:["navigation"],absoluteFilepathToConfiguration:l,apiWorkspaces:i,context:n})}})),n.logger.debug(`[docs-ast] Products processing complete in ${(performance.now()-a).toFixed(0)}ms`)},check:vt,redirects:vt,tabs:vt,title:vt,typography:async s=>{s!=null&&await bU(s,{bodyFont:async a=>{a!=null&&await I4o({absoluteFilepathToConfiguration:r,visitor:t,font:a,nodePath:["typography","bodyFont"]})},codeFont:async a=>{a!=null&&await I4o({absoluteFilepathToConfiguration:r,visitor:t,font:a,nodePath:["typography","codeFont"]})},headingsFont:async a=>{a!=null&&await I4o({absoluteFilepathToConfiguration:r,visitor:t,font:a,nodePath:["typography","headingsFont"]})}})},versions:async s=>{if(s==null)return;let a=performance.now();n.logger.debug(`[docs-ast] Processing ${s.length} versions...`),await Promise.all(s.map(async(c,u)=>{await EE({absoluteFilepathToConfiguration:r,rawUnresolvedFilepath:c.path,visitor:t,nodePath:["versions",`${u}`],willBeUploaded:!1});let l=Fi(yn(r),c.path),p=Cr.load((await(0,C4o.readFile)(l)).toString());await sr(l)&&await t.versionFile?.({path:c.path,content:p},[c.path]);let d=await w0t({value:p});d.type==="success"&&await YZn({absolutePathToFernFolder:o,navigation:d.contents.navigation,visitor:t,nodePath:["navigation"],absoluteFilepathToConfiguration:l,apiWorkspaces:i,context:n})})),n.logger.debug(`[docs-ast] Versions processing complete in ${(performance.now()-a).toFixed(0)}ms`)},roles:vt,languages:vt,translations:vt,theme:vt,globalTheme:vt,libraries:vt})}async function I4o({absoluteFilepathToConfiguration:e,visitor:t,font:r,nodePath:n}){r.path!=null&&await EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:r.path,visitor:t,nodePath:n,willBeUploaded:!0});for(let i of r.paths??[])typeof i=="string"?await EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:i,visitor:t,nodePath:n,willBeUploaded:!0}):await EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:i.path,visitor:t,nodePath:n,willBeUploaded:!0})}async function Kou({absoluteFilepathToConfiguration:e,visitor:t,script:r,nodePath:n}){let i=typeof r=="string"?r:"path"in r?r.path:null;i&&await EE({absoluteFilepathToConfiguration:e,rawUnresolvedFilepath:i,visitor:t,nodePath:n,willBeUploaded:!0})}var V0t={};re(V0t,{AccentColorContrastRule:()=>w4o,AllRolesMustBeDeclaredRule:()=>x4o,CHANGELOG_FEED_ALLOWED_SLUGS:()=>s$n,FilepathsExistRule:()=>XZn,MissingRedirectsRule:()=>T0t,NoCircularRedirectsRule:()=>B0t,OnlyVersionedNavigation:()=>n$n,TabWithHrefRule:()=>Ixm,TranslationDirectoriesExistRule:()=>i$n,ValidChangelogSlugRule:()=>O0t,ValidDocsEndpoints:()=>P0t,ValidFileTypes:()=>h$n,ValidFrontmatter:()=>g$n,ValidMarkdownFileReferences:()=>Plu,ValidMarkdownLinks:()=>U7,ValidMarkdownRule:()=>Tlu,ValidTranslationsConfigRule:()=>gei,ValidateProductFileRule:()=>Aei,ValidateVersionFileRule:()=>yei,enforceBackgroundTheme:()=>You,getEffectiveChangelogSlugLastSegment:()=>usu,isAllowedChangelogSlug:()=>R4o,validateTheme:()=>pqt});yOr();var w4o={name:"accent-color-contrast",create:()=>({file:async({config:e})=>{if(e.colors==null)return[];let t=EOr(e.colors);return t==="dark"?pqt(e.colors,"dark"):t==="light"?pqt(e.colors,"light"):t==="darkAndLight"?[...pqt(e.colors,"dark"),...pqt(e.colors,"light")]:[]}})};function pqt(e,t){let r=nNt(e.accentPrimary??e.accentPrimaryDeprecated,"accent-primary",t),n=nNt(e.background,"background",t)??(t==="dark"?"#000":"#FFF"),i=[];if(!hs(n).isValid())i.push({severity:"fatal",message:`Invalid background color provided for colors.background.${t}: ${n}.`});else{let o=You(hs(n),t);hs(n).toHexString()!==o.toHexString()&&i.push({severity:"warning",message:`The provided background color for ${t} mode is not ${t} enough. It will be adjusted to ${o.toHexString()}.`}),n=o.toHexString()}if(r==null)i.push({severity:"warning",message:`No accent-color provided for ${t} mode. A random color will be used.`});else if(!hs(r).isValid())i.push({severity:"fatal",message:`Invalid accent-color provided for colors.accent-primary.${t}: ${r}.`});else{let o=hs.readability(r,n),s=`${o.toFixed(2)}:1`;o<3?i.push({severity:"warning",message:`The contrast ratio between the accent color and the background color for ${t} mode is ${s}. It should be at least 3:1.`}):o<4.5?i.push({severity:"warning",message:`The contrast ratio between the accent color and the background color for ${t} mode is ${s}. Fern will adjust the color to meet the minimum contrast ratio of 4.5:1 for WCAG AA and 7:1 for WCAG AAA.`}):o<7&&i.push({severity:"warning",message:`The contrast ratio between the accent color and the background color for ${t} mode is ${s}. Fern will adjust the color to meet the minimum contrast ratio of 7:1 for WCAG AAA.`})}return i}function You(e,t){return t==="dark"&&e.isDark()||t==="light"&&e.isLight()?e:oxm(e)}function oxm(e){if(e==null)return;let{h:t,s:r,v:n}=e.toHsv();return hs({h:t,s:r,v:1-n})}var x4o={name:"all-roles-must-be-declared",create:e=>{let t=e.workspace.config.roles;return{permissions:r=>{let n=[...r.viewers??[]],i=[];for(let o of n)(t==null||!t.includes(o))&&i.push({severity:"fatal",message:`Role "${o}" is used but not declared at the top level of the docs.yml file.`});return i}}}};rr();var XZn={name:"filepaths-exist",create:()=>({filepath:async({absoluteFilepath:e,value:t})=>await sr(e)?[]:[{severity:"fatal",message:`Path ${t} does not exist`}]})};pg();Hb();Ut();function ZZn(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{let t=JSON.stringify(e);if(t!=null&&t!=="{}")return t}catch{}return Object.prototype.toString.call(e)}function Xou(e){return e.split(/[?#]/)[0]??""}function DPe(e){return e.startsWith("/")?e.slice(1):e}function S4o(e){return e.startsWith("/")?e:`/${e}`}function $Zn(e){return e.endsWith("/")?e.slice(0,-1):e}function e$n(e){let t=[];return e.config.instances.forEach(r=>{t.push(r.url),typeof r.customDomain=="string"?t.push(r.customDomain):Array.isArray(r.customDomain)&&t.push(...r.customDomain)}),t}function fqt(e){let t=new URL(xN(e));return{domain:t.host,basePath:t.pathname==="/"||t.pathname===""?void 0:t.pathname}}function Zou(e,t){return t.some(r=>{try{let n=fqt(r);return e.host!==n.domain?!1:n.basePath!=null?e.pathname.startsWith(n.basePath):!0}catch{return!1}})}pg();function $ou(e){let t=Ot.NodeCollector.collect(e),r=new Map;for(let n of t.getSlugMapWithParents().values()){let{node:i,parents:o}=n;if(!Ot.isPage(i))continue;let s=Ot.getPageId(i);if(s==null)continue;let a=i.canonicalSlug??i.slug;if(i.type==="changelogEntry"){let u=o.findLast(l=>l.type==="changelog");u!=null&&Ot.hasMetadata(u)&&(a=u.canonicalSlug??u.slug)}let c=r.get(s);c!=null?c.add(a):r.set(s,new Set([a]))}return r}function sxm(e){for(var t=[],r=0;r<e.length;){var n=e[r];if(n==="*"||n==="+"||n==="?"){t.push({type:"MODIFIER",index:r,value:e[r++]});continue}if(n==="\\"){t.push({type:"ESCAPED_CHAR",index:r++,value:e[r++]});continue}if(n==="{"){t.push({type:"OPEN",index:r,value:e[r++]});continue}if(n==="}"){t.push({type:"CLOSE",index:r,value:e[r++]});continue}if(n===":"){for(var i="",o=r+1;o<e.length;){var s=e.charCodeAt(o);if(s>=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||s===95){i+=e[o++];continue}break}if(!i)throw new TypeError("Missing parameter name at ".concat(r));t.push({type:"NAME",index:r,value:i}),r=o;continue}if(n==="("){var a=1,c="",o=r+1;if(e[o]==="?")throw new TypeError('Pattern cannot start with "?" at '.concat(o));for(;o<e.length;){if(e[o]==="\\"){c+=e[o++]+e[o++];continue}if(e[o]===")"){if(a--,a===0){o++;break}}else if(e[o]==="("&&(a++,e[o+1]!=="?"))throw new TypeError("Capturing groups are not allowed at ".concat(o));c+=e[o++]}if(a)throw new TypeError("Unbalanced pattern at ".concat(r));if(!c)throw new TypeError("Missing pattern at ".concat(r));t.push({type:"PATTERN",index:r,value:c}),r=o;continue}t.push({type:"CHAR",index:r,value:e[r++]})}return t.push({type:"END",index:r,value:""}),t}function esu(e,t){t===void 0&&(t={});for(var r=sxm(e),n=t.prefixes,i=n===void 0?"./":n,o=t.delimiter,s=o===void 0?"/#?":o,a=[],c=0,u=0,l="",p=function(P){if(u<r.length&&r[u].type===P)return r[u++].value},d=function(P){var U=p(P);if(U!==void 0)return U;var X=r[u],$=X.type,ne=X.index;throw new TypeError("Unexpected ".concat($," at ").concat(ne,", expected ").concat(P))},f=function(){for(var P="",U;U=p("CHAR")||p("ESCAPED_CHAR");)P+=U;return P},m=function(P){for(var U=0,X=s;U<X.length;U++){var $=X[U];if(P.indexOf($)>-1)return!0}return!1},h=function(P){var U=a[a.length-1],X=P||(U&&typeof U=="string"?U:"");if(U&&!X)throw new TypeError('Must have text between two parameters, missing text after "'.concat(U.name,'"'));return!X||m(X)?"[^".concat(RPe(s),"]+?"):"(?:(?!".concat(RPe(X),")[^").concat(RPe(s),"])+?")};u<r.length;){var A=p("CHAR"),y=p("NAME"),I=p("PATTERN");if(y||I){var w=A||"";i.indexOf(w)===-1&&(l+=w,w=""),l&&(a.push(l),l=""),a.push({name:y||c++,prefix:w,suffix:"",pattern:I||h(w),modifier:p("MODIFIER")||""});continue}var C=A||p("ESCAPED_CHAR");if(C){l+=C;continue}l&&(a.push(l),l="");var x=p("OPEN");if(x){var w=f(),B=p("NAME")||"",O=p("PATTERN")||"",k=f();d("CLOSE"),a.push({name:B||(O?c++:""),pattern:B&&!O?h(w):O,prefix:w,suffix:k,modifier:p("MODIFIER")||""});continue}d("END")}return a}function tsu(e,t){return axm(esu(e,t),t)}function axm(e,t){t===void 0&&(t={});var r=T4o(t),n=t.encode,i=n===void 0?function(c){return c}:n,o=t.validate,s=o===void 0?!0:o,a=e.map(function(c){if(typeof c=="object")return new RegExp("^(?:".concat(c.pattern,")$"),r)});return function(c){for(var u="",l=0;l<e.length;l++){var p=e[l];if(typeof p=="string"){u+=p;continue}var d=c?c[p.name]:void 0,f=p.modifier==="?"||p.modifier==="*",m=p.modifier==="*"||p.modifier==="+";if(Array.isArray(d)){if(!m)throw new TypeError('Expected "'.concat(p.name,'" to not repeat, but got an array'));if(d.length===0){if(f)continue;throw new TypeError('Expected "'.concat(p.name,'" to not be empty'))}for(var h=0;h<d.length;h++){var A=i(d[h],p);if(s&&!a[l].test(A))throw new TypeError('Expected all "'.concat(p.name,'" to match "').concat(p.pattern,'", but got "').concat(A,'"'));u+=p.prefix+A+p.suffix}continue}if(typeof d=="string"||typeof d=="number"){var A=i(String(d),p);if(s&&!a[l].test(A))throw new TypeError('Expected "'.concat(p.name,'" to match "').concat(p.pattern,'", but got "').concat(A,'"'));u+=p.prefix+A+p.suffix;continue}if(!f){var y=m?"an array":"a string";throw new TypeError('Expected "'.concat(p.name,'" to be ').concat(y))}}return u}}function t$n(e,t){var r=[],n=rsu(e,r,t);return cxm(n,r,t)}function cxm(e,t,r){r===void 0&&(r={});var n=r.decode,i=n===void 0?function(o){return o}:n;return function(o){var s=e.exec(o);if(!s)return!1;for(var a=s[0],c=s.index,u=Object.create(null),l=function(d){if(s[d]===void 0)return"continue";var f=t[d-1];f.modifier==="*"||f.modifier==="+"?u[f.name]=s[d].split(f.prefix+f.suffix).map(function(m){return i(m,f)}):u[f.name]=i(s[d],f)},p=1;p<s.length;p++)l(p);return{path:a,index:c,params:u}}}function RPe(e){return e.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1")}function T4o(e){return e&&e.sensitive?"":"i"}function uxm(e,t){if(!t)return e;for(var r=/\((?:\?<(.*?)>)?(?!\?)/g,n=0,i=r.exec(e.source);i;)t.push({name:i[1]||n++,prefix:"",suffix:"",modifier:"",pattern:""}),i=r.exec(e.source);return e}function lxm(e,t,r){var n=e.map(function(i){return rsu(i,t,r).source});return new RegExp("(?:".concat(n.join("|"),")"),T4o(r))}function pxm(e,t,r){return fxm(esu(e,r),t,r)}function fxm(e,t,r){r===void 0&&(r={});for(var n=r.strict,i=n===void 0?!1:n,o=r.start,s=o===void 0?!0:o,a=r.end,c=a===void 0?!0:a,u=r.encode,l=u===void 0?function(U){return U}:u,p=r.delimiter,d=p===void 0?"/#?":p,f=r.endsWith,m=f===void 0?"":f,h="[".concat(RPe(m),"]|$"),A="[".concat(RPe(d),"]"),y=s?"^":"",I=0,w=e;I<w.length;I++){var C=w[I];if(typeof C=="string")y+=RPe(l(C));else{var x=RPe(l(C.prefix)),B=RPe(l(C.suffix));if(C.pattern)if(t&&t.push(C),x||B)if(C.modifier==="+"||C.modifier==="*"){var O=C.modifier==="*"?"?":"";y+="(?:".concat(x,"((?:").concat(C.pattern,")(?:").concat(B).concat(x,"(?:").concat(C.pattern,"))*)").concat(B,")").concat(O)}else y+="(?:".concat(x,"(").concat(C.pattern,")").concat(B,")").concat(C.modifier);else{if(C.modifier==="+"||C.modifier==="*")throw new TypeError('Can not repeat "'.concat(C.name,'" without a prefix and suffix'));y+="(".concat(C.pattern,")").concat(C.modifier)}else y+="(?:".concat(x).concat(B,")").concat(C.modifier)}}if(c)i||(y+="".concat(A,"?")),y+=r.endsWith?"(?=".concat(h,")"):"$";else{var k=e[e.length-1],P=typeof k=="string"?A.indexOf(k[k.length-1])>-1:k===void 0;i||(y+="(?:".concat(A,"(?=").concat(h,"))?")),P||(y+="(?=".concat(A,"|").concat(h,")"))}return new RegExp(y,T4o(r))}function rsu(e,t,r){return e instanceof RegExp?uxm(e,t):Array.isArray(e)?lxm(e,t,r):pxm(e,t,r)}function nsu(e){let t=new Map;for(let r of e){let n=t.get(r.pageId);(n==null||Date.parse(r.lastUpdated)>=Date.parse(n.lastUpdated))&&t.set(r.pageId,r)}return Array.from(t.values())}function isu(e){return e.endsWith("/")?e.slice(0,-1):e}function dxm(e,t){return t==null||e.startsWith(t)?e:`${isu(t)}${e.startsWith("/")?"":"/"}${e}`}function mxm(e,t){if(e===t)return!0;try{return t$n(e)(t)!==!1}catch{return!1}}function hxm(e,t,r){let n=e.startsWith("/")?e:`/${e}`;return t.some(i=>{let o=isu(dxm(i.source,r));return mxm(o,n)})}function osu(e,t){let r=new Set;for(let i of t.values())for(let o of i)r.add(o);let n=[];for(let i of e){let o=t.get(i.pageId);if(o==null){if(r.has(i.slug))continue;n.push({pageId:i.pageId,oldSlug:i.slug,newSlug:void 0})}else if(!o.has(i.slug)){if(r.has(i.slug))continue;let s=o.values().next().value;n.push({pageId:i.pageId,oldSlug:i.slug,newSlug:s})}}return n}function ssu(e,t,r){let n=[];for(let i of e){if(hxm(i.oldSlug,t,r))continue;let o=i.oldSlug.startsWith("/")?i.oldSlug:`/${i.oldSlug}`;if(i.newSlug!=null){let s=i.newSlug.startsWith("/")?i.newSlug:`/${i.newSlug}`;n.push({severity:"warning",message:`Page "${i.pageId}" was moved from "${o}" to "${s}". The old URL will return 404 without a redirect. Add to docs.yml: redirects: [{source: "${o}", destination: "${s}"}]`})}else n.push({severity:"warning",message:`Page "${i.pageId}" was removed. The previously published URL "${o}" will return 404 without a redirect. Consider adding a redirect in docs.yml to preserve existing links.`})}return n}function gxm(){let e;return{context:U2e({logger:VI((r,...n)=>{r==="error"&&(e=n.join(" "))})}),getLastErrorMessage:()=>e}}function Axm(e){return"type"in e&&e.type==="root"}async function yxm(e,t,r,n){try{let i=await fetch(`${e}/slugs/markdowns`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({domain:t,basepath:r??""}),signal:AbortSignal.timeout(3e4)});return i.ok?{entries:(await i.json()).entries}:{error:`FDR returned ${i.status}`}}catch(i){return{error:i instanceof Error?i.message:String(i)}}}function bxm(){return process.env.FERN_FDR_ORIGIN??process.env.OVERRIDE_FDR_ORIGIN??"https://registry.buildwithfern.com"??"https://registry.buildwithfern.com"}var T0t={name:"missing-redirects",create:async({workspace:e,apiWorkspaces:t,ossWorkspaces:r,logger:n})=>{let o=e$n(e)[0];if(o==null)return dqt({type:"no-instance-url"});let s=fqt(o),a=await $W();if(a==null)return dqt({type:"no-token"});let c=await yxm(bxm(),s.domain,s.basePath,a.value);if("error"in c)return n.debug(`[missing-redirects] FDR fetch failed: ${c.error}`),dqt({type:"fetch-failed",reason:c.error});if(c.entries.length===0)return n.debug("[missing-redirects] No markdown entries found (first publish or empty slug table)"),dqt({type:"first-publish"});let u,{context:l,getLastErrorMessage:p}=gxm();try{let m=(await new zz({domain:o,docsWorkspace:e,ossWorkspaces:r,apiWorkspaces:t,taskContext:l,editThisPage:void 0,uploadFiles:void 0,registerApi:void 0,targetAudiences:void 0}).resolve()).config.root;if(!m||!Axm(m))return{};let h=Ot.migrate.FernNavigationV1ToLatest.create().root(m),A=$ou(h),y=nsu(c.entries);u=osu(y,A)}catch(d){let f=p()??ZZn(d);return n.debug(`[missing-redirects] Failed to resolve local docs navigation: ${f}`),dqt({type:"resolve-failed",reason:f})}return u.length===0?{}:{file:async({config:d})=>{let f=(d.redirects??[]).map(m=>({source:m.source,destination:m.destination}));return ssu(u,f,s.basePath)}}}};function dqt(e){switch(e.type){case"no-instance-url":case"first-publish":return{};case"no-token":return{file:()=>[{severity:"warning",message:"Missing redirects check skipped: not authenticated. Run 'fern login' or set the FERN_TOKEN environment variable to enable this check."}]};case"fetch-failed":return{file:()=>[{severity:"warning",message:`Missing redirects check skipped: could not reach FDR (${e.reason}). The check requires network access to compare against previously published docs.`}]};case"resolve-failed":return{file:()=>[{severity:"warning",message:`Missing redirects check skipped: failed to resolve local docs navigation (${e.reason}). Run \`fern check --log-level=debug\` for more detail.`}]}}}function r$n(e){return e!=="/"&&e.endsWith("/")?e.slice(0,-1):e}function Exm(e){return!e.source.includes(":")&&!e.destination.includes(":")}function vxm(e){let t=[],r=e.filter(Exm),n=new Map;for(let c=0;c<r.length;c++){let u=r[c];if(u){let l=r$n(u.source),p=r$n(u.destination);n.set(l,{destination:p,index:c})}}for(let c=0;c<e.length;c++){let u=e[c];if(u){let l=r$n(u.source),p=r$n(u.destination);l===p&&t.push({severity:"error",message:`redirects[${c}]: Redirect from "${u.source}" to "${u.destination}" creates an infinite loop (source equals destination)`})}}let i=new Set,o=new Set;function s(c,u){if(o.has(c)){let d=u.indexOf(c);return u.slice(d)}if(i.has(c))return null;let l=n.get(c);if(!l)return null;i.add(c),o.add(c),u.push(c);let p=s(l.destination,u);return o.delete(c),u.pop(),p}let a=new Set;for(let[c]of n){i.clear(),o.clear();let u=s(c,[]);if(u&&u.length>1){let p=[...u].sort().join(" -> ");if(!a.has(p)){a.add(p);let d=[...u,u[0]].join(" -> ");t.push({severity:"error",message:`Circular redirect chain detected: ${d}`})}}}return t}var B0t={name:"no-circular-redirects",create:()=>({file:async({config:e})=>{let t=[];if(!e.redirects||e.redirects.length===0)return t;let r=e.redirects.map(n=>({source:n.source,destination:n.destination,permanent:n.permanent}));return vxm(r)}})};var n$n={name:"only-versioned-navigation",create:()=>({file:async({config:e})=>e.navigation!=null&&e.versions!=null?[{severity:"fatal",message:"Cannot contain both navigation and versions. If you want versioned docs, use versions. Otherwise use navigation."}]:[]})};var Ixm={name:"tab-with-href",create:()=>({file:async({config:e})=>{let t=e.tabs??{};if(e.navigation==null)return[];let r=[];if(Cxm(e.navigation))for(let n of e.navigation){let i=t[n.tab];if(i==null){r.push({severity:"fatal",message:`Tab "${n.tab}" is missing from the tabs configuration.`});continue}let o=wxm(n),s=xxm(n);if(i.href!=null&&(o||s)){r.push({severity:"fatal",message:`Tab "${n.tab}" has both a href and ${o?"layout":"variants"}. Only one should be used.`});continue}if(i.href==null&&!o&&!s){r.push({severity:"fatal",message:`Tab "${n.tab}" is missing a href, layout, or variants.`});continue}}return[]}})};function Cxm(e){return Array.isArray(e)&&e.length>0&&e[0].tab!=null}function wxm(e){return"layout"in e&&Array.isArray(e.layout)}function xxm(e){return"variants"in e&&Array.isArray(e.variants)}rr();var i$n={name:"translation-directories-exist",create:({workspace:e})=>({file:async({config:t})=>{let r=[],n=t.translations;if(n==null||n.length===0)return r;let i=n.map(u=>Uh.DocsYmlSchemas.normalizeTranslationConfig(u)),o=(i.find(u=>u.default===!0)??i[0])?.lang,s=$e(e.absoluteFilePath,ke.of("translations")),a=await sr(s),c=[];for(let u of i){if(u.lang===o)continue;let l=$e(s,ke.of(u.lang));await sr(l)||c.push(u.lang)}if(c.length>0){let u=Sxm({translationsDirExists:a,missingDirs:c,fernFolderPath:e.absoluteFilePath}),l=" ",p=u.split(`
|
|
3695
3695
|
`).map(d=>`${l}${d}`).join(`
|
|
3696
3696
|
`);r.push({severity:"error",message:`Missing translation ${c.length===1?"directory":"directories"} for ${c.length===1?"locale":"locales"}: ${c.join(", ")}
|
|
3697
3697
|
|
|
@@ -3812,7 +3812,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
|
|
|
3812
3812
|
Add a 'docs:' section to your fern.yml to get started.`,code:D.Code.ConfigError});let o=await new zPe({context:t}).check({workspace:n,strict:r.strict}),s=new Set(o.mdxParseErrors.map(p=>p.displayRelativeFilepath)),a=new Set(o.mdxParseErrors.map(p=>p.rawMessage)),c=o.violations.filter(p=>!(s.size>0&&cRm(p,s,a))),u=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let p=this.buildJsonResponse({result:o,filteredViolations:c,hasErrors:u});if(t.stdout.info(JSON.stringify(p,null,2)),u)throw new D({code:D.Code.ValidationError});return}if(c.length>0)for(let p of c){let d=p.severity==="warning"?Ae.yellow:Ae.red;process.stderr.write(`${d(`${p.displayRelativeFilepath}:${p.line}:${p.column}: ${p.message}`)}
|
|
3813
3813
|
`)}let l=0;if(o.mdxParseErrors.length>0){for(let p of o.mdxParseErrors)t.stderr.info(`
|
|
3814
3814
|
${p.toString()}
|
|
3815
|
-
`);r.fix?l+=await Cei(t,o.mdxParseErrors):process.stdout.isTTY===!0&&!sXn()&&await wei(t,o.mdxParseErrors)}if(r.fix&&c.length>0){let d=await new H0t({context:t}).fix({workspace:n,violations:c});l+=d.fixedCount}if(u&&(!r.fix||l===0))throw new D({code:D.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${jr.warning} ${Ae.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(Ae.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${jr.success} ${Ae.green("All checks passed")}`)}buildJsonResponse({result:t,filteredViolations:r,hasErrors:n}){let i={};return(r.length>0||t.mdxParseErrors.length>0)&&(i.docs=[...r.map(o=>Eee(o)),...t.mdxParseErrors.map(o=>({severity:"error",rule:o.code.code,filepath:o.displayRelativeFilepath,...o.line!=null?{line:o.line}:{},...o.column!=null?{column:o.column}:{},message:`[${o.code.code}] ${o.code.title}: ${o.rawMessage}`}))]),{success:!n,results:i}}};function cRm(e,t,r){if(!/failed to parse|failed to initialize/i.test(e.message))return!1;for(let n of r)if(n.length>0&&e.message.includes(n))return!0;for(let n of t){if(e.message.includes(n))return!0;let i=n.split("/").filter(Boolean);for(let o=i.length;o>=2;o--){let s=i.slice(i.length-o).join("/");if(e.message.includes(s))return!0}if(i.length===1){let o=i[0];if(o!=null&&e.message.includes(o))return!0}}return!1}function G_o(e){let t=new q_o;mi(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}).option("fix",{type:"boolean",description:"Automatically fix issues that have a known resolution",default:!1}))}Hb();Ut();var Opu=we(require("net"),1),Ppu=we(require("os"),1),Tei=class extends Error{constructor(t){super(`${t} is locked`)}},X0t={old:new Set,young:new Set},uRm=1e3*15,Dpu=new Set;var Yqt,lRm=()=>{let e=Ppu.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},Tpu=e=>new Promise((t,r)=>{let n=Opu.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),Bpu=async(e,t)=>{if(e.host||e.port===0)return Tpu(e);for(let r of t)try{await Tpu({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},pRm=e=>X0t.old.has(e)||X0t.young.has(e)||Dpu.has(e),fRm=function*(e){e&&(yield*e),yield 0};async function _Pe(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??{};Yqt===void 0&&(Yqt=setTimeout(()=>{Yqt=void 0,X0t.old=X0t.young,X0t.young=new Set},uRm),Yqt.unref&&Yqt.unref());let o=lRm();for(let s of fRm(t))try{if(r.has(s))continue;let a=await Bpu({...i,port:s},o);for(;pRm(a);){if(s!==0)throw new Tei(s);a=await Bpu({...i,port:s},o)}return n?Dpu.add(a):X0t.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof Tei))throw a}throw new Error("No available ports found")}Ut();var kpu=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Rpu="docs.buildwithfern.com",Fpu=62;function CUe(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)),kpu.test(t)}function Npu(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function Xqt({orgId:e,previewId:t}){let r=Npu(t),n=`${e}-preview-${r}.${Rpu}`;if(n.length<=Fpu)return n;let i=`${e}-preview-`,o=Fpu-i.length;if(o<8)throw new D({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:D.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Rpu}`}jt();pg();rr();sS();Ut();var D7o=require("child_process"),nCu=we(K_o(),1),R7o=we(dti(),1),F7o=we(require("fs"),1),JUe=require("fs/promises"),iCu=we(require("http"),1),j7o=we(require("path"),1);Bti();rr();var H7=require("fs/promises"),bAu=require("os"),N5o=we(require("path"),1),$Mm=".fern",eLm="logs",k5o=100*1024*1024;function tLm(){return"cli@5.37.
|
|
3815
|
+
`);r.fix?l+=await Cei(t,o.mdxParseErrors):process.stdout.isTTY===!0&&!sXn()&&await wei(t,o.mdxParseErrors)}if(r.fix&&c.length>0){let d=await new H0t({context:t}).fix({workspace:n,violations:c});l+=d.fixedCount}if(u&&(!r.fix||l===0))throw new D({code:D.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${jr.warning} ${Ae.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(Ae.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${jr.success} ${Ae.green("All checks passed")}`)}buildJsonResponse({result:t,filteredViolations:r,hasErrors:n}){let i={};return(r.length>0||t.mdxParseErrors.length>0)&&(i.docs=[...r.map(o=>Eee(o)),...t.mdxParseErrors.map(o=>({severity:"error",rule:o.code.code,filepath:o.displayRelativeFilepath,...o.line!=null?{line:o.line}:{},...o.column!=null?{column:o.column}:{},message:`[${o.code.code}] ${o.code.title}: ${o.rawMessage}`}))]),{success:!n,results:i}}};function cRm(e,t,r){if(!/failed to parse|failed to initialize/i.test(e.message))return!1;for(let n of r)if(n.length>0&&e.message.includes(n))return!0;for(let n of t){if(e.message.includes(n))return!0;let i=n.split("/").filter(Boolean);for(let o=i.length;o>=2;o--){let s=i.slice(i.length-o).join("/");if(e.message.includes(s))return!0}if(i.length===1){let o=i[0];if(o!=null&&e.message.includes(o))return!0}}return!1}function G_o(e){let t=new q_o;mi(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}).option("fix",{type:"boolean",description:"Automatically fix issues that have a known resolution",default:!1}))}Hb();Ut();var Opu=we(require("net"),1),Ppu=we(require("os"),1),Tei=class extends Error{constructor(t){super(`${t} is locked`)}},X0t={old:new Set,young:new Set},uRm=1e3*15,Dpu=new Set;var Yqt,lRm=()=>{let e=Ppu.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},Tpu=e=>new Promise((t,r)=>{let n=Opu.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),Bpu=async(e,t)=>{if(e.host||e.port===0)return Tpu(e);for(let r of t)try{await Tpu({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},pRm=e=>X0t.old.has(e)||X0t.young.has(e)||Dpu.has(e),fRm=function*(e){e&&(yield*e),yield 0};async function _Pe(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??{};Yqt===void 0&&(Yqt=setTimeout(()=>{Yqt=void 0,X0t.old=X0t.young,X0t.young=new Set},uRm),Yqt.unref&&Yqt.unref());let o=lRm();for(let s of fRm(t))try{if(r.has(s))continue;let a=await Bpu({...i,port:s},o);for(;pRm(a);){if(s!==0)throw new Tei(s);a=await Bpu({...i,port:s},o)}return n?Dpu.add(a):X0t.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof Tei))throw a}throw new Error("No available ports found")}Ut();var kpu=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Rpu="docs.buildwithfern.com",Fpu=62;function CUe(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)),kpu.test(t)}function Npu(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function Xqt({orgId:e,previewId:t}){let r=Npu(t),n=`${e}-preview-${r}.${Rpu}`;if(n.length<=Fpu)return n;let i=`${e}-preview-`,o=Fpu-i.length;if(o<8)throw new D({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:D.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Rpu}`}jt();pg();rr();sS();Ut();var D7o=require("child_process"),nCu=we(K_o(),1),R7o=we(dti(),1),F7o=we(require("fs"),1),JUe=require("fs/promises"),iCu=we(require("http"),1),j7o=we(require("path"),1);Bti();rr();var H7=require("fs/promises"),bAu=require("os"),N5o=we(require("path"),1),$Mm=".fern",eLm="logs",k5o=100*1024*1024;function tLm(){return"cli@5.37.12"}var QUe=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t,r){if(this.initialized)return;this.consoleLogger=t;let n=r??$e($e(Ht.of((0,bAu.homedir)()),ke.of($Mm)),ke.of(eLm));await sr(n)||await(0,H7.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=$e(n,ke.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${N5o.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
3816
3816
|
`);await(0,H7.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)+`
|
|
3817
3817
|
`;try{await(0,H7.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:tLm(),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,H7.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=N5o.default.join(t,c);try{let l=await(0,H7.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=k5o/1024/1024;if(o<=k5o){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<=k5o)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,H7.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 Oti={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function EAu(e){let t=rLm();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:Oti});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",...Oti}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...Oti}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:Oti}):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 QUe.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 rLm(){return globalThis.Bun}Ut();var LAu=require("events"),kti=we(require("fs"),1),LUe=we(require("path"),1);var vAu=we(require("os"),1),IAu=300,XPe=20,PGt=1e7,CAu=vAu.default.platform();var nLm=CAu==="darwin",j5o=CAu==="win32",ZPe=nLm||j5o,wAu=3e3,xAu=2e4,Q5o=1250;var Cie;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(Cie||(Cie={}));var MUe;(function(e){e.CHANGE="change",e.RENAME="rename"})(MUe||(MUe={}));var DGt;(function(e){e.CHANGE="change",e.ERROR="error"})(DGt||(DGt={}));var Wc;(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"})(Wc||(Wc={}));var FN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(FN||(FN={}));var iLm=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,c=0,u=0,l=()=>{let C=Date.now(),x=C-c,B=C-u,O=x>=t||B>=o;return[C,O]},p=C=>{if(u=C,!s)return;let x=s;s=void 0,e.apply(void 0,x)},d=()=>{I(0)},f=()=>{a&&(d(),p(Date.now()))},m=C=>{if(u=C,n)return p(C)},h=C=>{if(i&&s)return p(C);s=void 0},A=()=>{a=void 0;let[C,x]=l();return x?h(C):y(C)},y=C=>{let x=C-c,B=C-u,O=t-x,k=o-B,P=Math.min(O,k);return I(P)},I=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},w=(...C)=>{let[x,B]=l(),O=!!a;if(s=C,c=x,(B||!a)&&I(t),B)return O?p(x):m(x)};return w.cancel=d,w.flush=f,w},Pti=iLm;var U5o=we(require("fs"),1),Rti=we(require("path"),1);var Kd=we(require("fs"),1),fP=require("util");var ame=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},wie=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var M5o=we(require("process"),1),SAu=M5o.default.getuid?!M5o.default.getuid():!1,TAu=1e4,OM=()=>{};var RGt={isChangeErrorOk:e=>{if(!RGt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!SAu&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!RGt.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(!RGt.isNodeError(e))throw e;if(!RGt.isChangeErrorOk(e))throw e}},FC=RGt;var L5o=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=TAu,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()}}}}},BAu=new L5o;var cme=(e,t)=>function(n){return function i(...o){return BAu.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)})}},ume=(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 oLm={attempt:{chmod:ame((0,fP.promisify)(Kd.default.chmod),FC.onChangeError),chown:ame((0,fP.promisify)(Kd.default.chown),FC.onChangeError),close:ame((0,fP.promisify)(Kd.default.close),OM),fsync:ame((0,fP.promisify)(Kd.default.fsync),OM),mkdir:ame((0,fP.promisify)(Kd.default.mkdir),OM),realpath:ame((0,fP.promisify)(Kd.default.realpath),OM),stat:ame((0,fP.promisify)(Kd.default.stat),OM),unlink:ame((0,fP.promisify)(Kd.default.unlink),OM),chmodSync:wie(Kd.default.chmodSync,FC.onChangeError),chownSync:wie(Kd.default.chownSync,FC.onChangeError),closeSync:wie(Kd.default.closeSync,OM),existsSync:wie(Kd.default.existsSync,OM),fsyncSync:wie(Kd.default.fsync,OM),mkdirSync:wie(Kd.default.mkdirSync,OM),realpathSync:wie(Kd.default.realpathSync,OM),statSync:wie(Kd.default.statSync,OM),unlinkSync:wie(Kd.default.unlinkSync,OM)},retry:{close:cme((0,fP.promisify)(Kd.default.close),FC.isRetriableError),fsync:cme((0,fP.promisify)(Kd.default.fsync),FC.isRetriableError),open:cme((0,fP.promisify)(Kd.default.open),FC.isRetriableError),readFile:cme((0,fP.promisify)(Kd.default.readFile),FC.isRetriableError),rename:cme((0,fP.promisify)(Kd.default.rename),FC.isRetriableError),stat:cme((0,fP.promisify)(Kd.default.stat),FC.isRetriableError),write:cme((0,fP.promisify)(Kd.default.write),FC.isRetriableError),writeFile:cme((0,fP.promisify)(Kd.default.writeFile),FC.isRetriableError),closeSync:ume(Kd.default.closeSync,FC.isRetriableError),fsyncSync:ume(Kd.default.fsyncSync,FC.isRetriableError),openSync:ume(Kd.default.openSync,FC.isRetriableError),readFileSync:ume(Kd.default.readFileSync,FC.isRetriableError),renameSync:ume(Kd.default.renameSync,FC.isRetriableError),statSync:ume(Kd.default.statSync,FC.isRetriableError),writeSync:ume(Kd.default.writeSync,FC.isRetriableError),writeFileSync:ume(Kd.default.writeFileSync,FC.isRetriableError)}},OAu=oLm;var Dti=we(require("fs"),1),FGt=we(require("path"),1);var z5o=()=>{};var sLm=()=>{let e=z5o,t=z5o,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}},PAu=sLm;var aLm=()=>{let{promise:e,resolve:t,isPending:r}=PAu(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},DAu=aLm;var RAu={then:e=>{e()}};var FAu=e=>Array.isArray(e)?e:[e],kAu=e=>typeof e=="function";var cLm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=FAu(o).map(oe=>kAu(oe)?oe:ae=>oe.test(ae)),a=oe=>s.some(ae=>ae(oe)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],y=new Set,I={},w={},C=new Set,x={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},B={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:y,symlinksNamesToPaths:I,map:w},{promise:O,increment:k,decrement:P}=DAu(),U=0,X=(oe,ae,Se,ve)=>{C.has(ae)||U>=i||(U+=1,oe.directories.push(ae),oe.directoriesNames.add(Se),l.push(ae),p.add(Se),d.propertyIsEnumerable(Se)||(d[Se]=[]),d[Se].push(ae),C.add(ae),!(ve>=n)&&(U>=i||fe(ae,ve+1)))},$=(oe,ae,Se)=>{C.has(ae)||U>=i||(U+=1,oe.files.push(ae),oe.filesNames.add(Se),f.push(ae),m.add(Se),h.propertyIsEnumerable(Se)||(h[Se]=[]),h[Se].push(ae),C.add(ae))},ne=(oe,ae,Se,ve)=>{C.has(ae)||U>=i||(U+=1,oe.symlinks.push(ae),oe.symlinksNames.add(Se),A.push(ae),y.add(Se),I.propertyIsEnumerable(Se)||(I[Se]=[]),I[Se].push(ae),C.add(ae),r&&(ve>=n||U>=i||Le(ae,ve+1)))},le=(oe,ae,Se,ve,Qe)=>{c.aborted||a(ae)||(ve.isDirectory()?X(oe,ae,Se,Qe):ve.isFile()?$(oe,ae,Se):ve.isSymbolicLink()&&ne(oe,ae,Se,Qe))},ge=(oe,ae,Se,ve)=>{if(c.aborted)return;let Qe=ae===FGt.default.sep?"":FGt.default.sep,qe=Se.name,ut=`${ae}${Qe}${qe}`;a(ut)||(Se.isDirectory()?X(oe,ut,qe,ve):Se.isFile()?$(oe,ut,qe):Se.isSymbolicLink()&&ne(oe,ut,qe,ve))},me=(oe,ae,Se,ve)=>{for(let Qe=0,qe=Se.length;Qe<qe;Qe++)ge(oe,ae,Se[Qe],ve)},fe=(oe,ae)=>{c.aborted||ae>n||U>=i||(k(),Dti.default.readdir(oe,{withFileTypes:!0},(Se,ve)=>{if(Se||c.aborted||!ve.length)return P();(u(ve)||RAu).then(()=>{let qe=w[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(qe,oe,ve,ae),P()})}))},Le=(oe,ae)=>{k(),Dti.default.realpath(oe,(Se,ve)=>{if(Se||c.aborted)return P();Dti.default.stat(ve,(Qe,qe)=>{if(Qe||c.aborted)return P();let ut=FGt.default.basename(ve),bt=w[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};le(bt,ve,ut,qe,ae),P()})})};return(async(oe,ae=1)=>(oe=FGt.default.normalize(oe),C.add(oe),fe(oe,ae),await O,c.aborted?x:B))(e)},NAu=cLm;var xie={lang:{debounce:Pti,attempt:e=>{try{return e()}catch(t){return xie.lang.castError(t)}},castArray:e=>xie.lang.isArray(e)?e:[e],castError:e=>xie.lang.isError(e)?e:xie.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(xie.lang.isNaN(e))return xie.lang.isNaN(t);if(xie.lang.isPrimitive(e)||xie.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(Rti.default.sep).length-1),getRealPath:(e,t)=>{try{return t?U5o.default.realpathSync.native(e):U5o.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===Rti.default.sep&&t.length-e.length>Rti.default.sep.length,poll:(e,t=xAu)=>OAu.retry.stat(t)(e,{bigint:!0}).catch(xie.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 NAu(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},Ep=xie;var Fti=we(require("path"),1);var _5o=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||Ep.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=IAu){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=Ep.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===Wc.CHANGE&&a===Wc.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===Wc.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Wc.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??XPe:Math.min(1,this.options.depth??XPe),s=this.options.limit??PGt,[a,c]=await Ep.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())Ep.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(Wc.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!ZPe&&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(Wc.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Wc.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(Fti.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Wc.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(Fti.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(Wc.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Wc.ADD?this.onTargetAdd(n):r===Wc.ADD_DIR?this.onTargetAddDir(n):r===Wc.CHANGE?this.onTargetChange(n):r===Wc.UNLINK?this.onTargetUnlink(n):r===Wc.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=MUe.CHANGE,r){if(this.watcher.isClosed())return;let n=Fti.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){j5o&&t.code==="EPERM"?this.onWatcherChange(MUe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(DGt.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(DGt.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(MUe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&ZPe&&this.options.native!==!1?this.options.depth??XPe:Math.min(1,this.options.depth??XPe),n=this.options.limit??PGt,[i,o]=await Ep.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(MUe.CHANGE,a,t)}))}}},jAu=_5o;var kN={interval:100,intervalId:void 0,fns:new Map,init:()=>{kN.intervalId||(kN.intervalId=setInterval(kN.resolve,kN.interval))},reset:()=>{kN.intervalId&&(clearInterval(kN.intervalId),delete kN.intervalId)},add:(e,t)=>{kN.fns.set(e,Date.now()+t),kN.init()},remove:e=>{kN.fns.delete(e)},resolve:()=>{if(!kN.fns.size)return kN.reset();let e=Date.now();for(let[t,r]of kN.fns)r>=e||(kN.remove(t),t())}},kGt=kN;var NGt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=Q5o){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(Ep.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),kGt.remove(u)},u=()=>{c(),a()};kGt.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=Q5o){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),kGt.remove(u)},u=()=>{c(),a()};kGt.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,Wc.ADD,Cie.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,Wc.ADD_DIR,Cie.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,Wc.UNLINK,Cie.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,Wc.UNLINK_DIR,Cie.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}}};NGt.DIR_EVENTS={add:Wc.ADD_DIR,rename:Wc.RENAME_DIR,unlink:Wc.UNLINK_DIR};NGt.FILE_EVENTS={add:Wc.ADD,change:Wc.CHANGE,rename:Wc.RENAME,unlink:Wc.UNLINK};var QAu=NGt;var V5o=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(Ep.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(Ep.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(Ep.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(Ep.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return Ep.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);Ep.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},q5o=V5o;var G5o=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}},MAu=G5o;var W5o=class{constructor(){this.inos={},this.paths=new q5o,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 Ep.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new MAu(n)}reset(){this.inos={},this.paths=new q5o,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,Wc.ADD,i),[Wc.ADD];if(i.isDirectory())return this.updateIno(t,Wc.ADD_DIR,i),[Wc.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Wc.UNLINK,n),[Wc.UNLINK];if(n.isDirectory())return this.updateIno(t,Wc.UNLINK_DIR,n),[Wc.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Wc.CHANGE,i),[Wc.CHANGE]);if(i.isDirectory())return this.updateIno(t,Wc.UNLINK,n),this.updateIno(t,Wc.ADD_DIR,i),[Wc.UNLINK,Wc.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Wc.UNLINK_DIR,n),this.updateIno(t,Wc.ADD,i),[Wc.UNLINK_DIR,Wc.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Wc.UNLINK_DIR,n),this.updateIno(t,Wc.ADD_DIR,i),[Wc.UNLINK_DIR,Wc.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?Cie.FILE:Cie.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)}}},H5o=W5o;var K5o=class e extends LAu.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(FN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(FN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(FN.READY,i)),this._locker=new QAu(this),this._roots=new Set,this._poller=new H5o,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&&(Ep.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(FN.CLOSE))}error(t){if(this.isClosed())return!1;let r=Ep.lang.castError(t);return this.emit(FN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(FN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(FN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&Ep.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&Ep.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)Ep.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 jAu(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=Ep.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=LUe.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??XPe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&ZPe&&l.options.native!==!1)))return!0;if(!ZPe)break;let u=LUe.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=Ep.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||ZPe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:kti.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=LUe.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||ZPe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??XPe,a=r.limit??PGt,[c]=await Ep.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=Ep.fs.getDepth(t);for(let p of c){let d=Ep.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(FN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(FN.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=LUe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new H5o,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 Ep.lang.noop;if(this.pollerExists(t,r))return Ep.lang.noop;let i={...r,interval:r.pollingInterval??wAu},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(FN.CLOSE,a),kti.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(FN.CLOSE,a),kti.default.unwatchFile(t,n)};return Ep.lang.attempt(s),()=>Ep.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=Ep.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!Ep.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=LUe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await Ep.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=LUe.default.dirname(t);return(await Ep.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=Ep.lang.noop){if(Ep.lang.isFunction(t))return this.watch([],{},t);if(Ep.lang.isUndefined(t))return this.watch([],r,n);if(Ep.lang.isFunction(r))return this.watch(t,{},r);if(Ep.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=Ep.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==Ep.lang.noop&&this.on(FN.ALL,n),r.readdirMap=void 0,this.ready())}},zAu=K5o;function uLm(e){return"code"in e&&typeof e.code=="string"}function UAu(e){return e instanceof Error?e:new Error(String(e))}function _Au(e){return uLm(e)&&e.code==="ENOSPC"?"Unable to watch Fern docs files for changes because the system limit for file watchers was reached. Close other file-watching processes or increase the file watcher limit, then restart `fern docs dev`.":`Unable to watch Fern docs files for changes: ${e.message}`}async function Nti({absoluteFilePathToFern:e,additionalFilepaths:t,context:r}){let n=new zAu([e,...t],{recursive:!0,ignoreInitial:!0,debounce:100,renameDetection:!0}),i=await new Promise(o=>{let s=()=>{n.off("error",a),o(void 0)},a=c=>{n.off("ready",s),o(UAu(c))};n.once("ready",s),n.once("error",a)});return i!=null&&(n.close(),r.failAndThrow(_Au(i),i,{code:D.Code.EnvironmentError})),n.on("error",o=>{let s=UAu(o);r.failWithoutThrowing(_Au(s),s,{code:D.Code.EnvironmentError}),n.close()}),n}rr();sS();Ut();var qIu=require("child_process"),Kri=we(n8o(),1),GIu=we(g7o(),1),Iv=require("fs"),QN=require("fs/promises"),WIu=require("os"),jN=we(require("path"),1),HIu=we(fw(),1),KIu=we(VIu(),1),KUe=process.platform==="win32",Hri=Ae.cyan("[docs]:"),LUm="etag",zUm=23,T7o=e=>e.padEnd(zUm," "),UUm="preview",_Um="app-preview",VUm="bundle",qUm=".next",GUm="standalone",WUm=".fern",HUm="packages/fern-docs/bundle/.next/server/instrumentation.js",KUm='Cannot find matching keyid: {"signatures":',JUm="ERR_PNPM_IGNORED_BUILDS";function YUm(e){try{let r=(0,qIu.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 D({message:`Windows long path support is not enabled. The docs bundle contains deeply nested .pnpm paths that exceed the 260-character MAX_PATH limit.
|
|
3818
3818
|
|
|
@@ -4344,7 +4344,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
|
|
|
4344
4344
|
|
|
4345
4345
|
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`:r}function sXm(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.
|
|
4346
4346
|
|
|
4347
|
-
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function aXm(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 cXm(e){try{return new URL(xN(e)).pathname}catch{return}}async function uXm({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await lXm({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=Object.fromEntries(Object.entries(o).map(([l,p])=>[l,{packageName:p.packageName,version:p.version}])),c=(await e.api.register.checkSdkDynamicIrExists({orgId:hn.OrgId(r),snippetConfiguration:s})).existingDynamicIrs??{};if(Object.keys(c).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[l,p]of Object.entries(c??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${l}...`);let d=await fetch(p.downloadUrl);if(d.ok){let f=await d.json();u[l]={dynamicIR:f},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${l}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${l}: ${d.status}`)}catch(d){n.logger.warn(`Error downloading SDK dynamic IR for ${l}: ${d}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function yWo(e){return e.replace(/^https:\/\//,"")}async function lXm({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&&yWo(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 pXm({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 pXm({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=zn.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 fXm({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&&yWo(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=a_e({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=yWo(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=nA({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 Jh(r,e),dynamicGeneratorConfig:u}),d=dLe({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 dXm({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);try{(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}`)}catch(c){r.logger.warn(`Network error uploading dynamic IR for ${n}:${i}: ${c}`)}}else r.logger.warn(`Could not find matching dynamic IR to upload for ${n}:${i}`)}}async function mXm({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(Ae.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function hXm(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 IDu(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 G9t=[60*1e3,300*1e3,300*1e3];async function W9t({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=Dy(n.config,{onError:x=>i.failAndThrow(void 0,x,{code:D.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:D.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:D.Code.ConfigError});return}let y=A.find(x=>x.url===s)??A[0];if(y==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:D.Code.ConfigError});return}let I=(typeof y.customDomain=="string"?[y.customDomain]:y.customDomain??[]).map(IPu);(y.multiSource===!0||n.config.experimental?.basepathAware===!0)&&CPu(y.url,I,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let C;return await i.runInteractiveTask({name:y.url},async()=>{let x=performance.now(),B=()=>bDu({docsWorkspace:n,customDomains:I,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let k=0;;k++)try{C=await B();break}catch(P){if(!(P instanceof yvt)||k>=G9t.length){if(P instanceof yvt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:D.Code.NetworkError});throw P}let U=G9t[k]??G9t[G9t.length-1]??6e4,X=U/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${X} minute${X===1?"":"s"} (attempt ${k+1}/${G9t.length})...`),await new Promise($=>setTimeout($,U))}let O=performance.now()-x;i.logger.debug(`Docs publishing completed in ${O.toFixed(0)}ms`)}),C}Ut();var woi=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 Cd({context:this.context,task:this.task});try{let s=await W9t({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.37.11",loginCommand:"fern auth login"});return o.getResult()===Uf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Gn(s)}}}};jt();var bvt=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(`
|
|
4347
|
+
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function aXm(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 cXm(e){try{return new URL(xN(e)).pathname}catch{return}}async function uXm({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await lXm({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=Object.fromEntries(Object.entries(o).map(([l,p])=>[l,{packageName:p.packageName,version:p.version}])),c=(await e.api.register.checkSdkDynamicIrExists({orgId:hn.OrgId(r),snippetConfiguration:s})).existingDynamicIrs??{};if(Object.keys(c).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[l,p]of Object.entries(c??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${l}...`);let d=await fetch(p.downloadUrl);if(d.ok){let f=await d.json();u[l]={dynamicIR:f},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${l}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${l}: ${d.status}`)}catch(d){n.logger.warn(`Error downloading SDK dynamic IR for ${l}: ${d}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function yWo(e){return e.replace(/^https:\/\//,"")}async function lXm({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&&yWo(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 pXm({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 pXm({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=zn.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 fXm({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&&yWo(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=a_e({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=yWo(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=nA({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 Jh(r,e),dynamicGeneratorConfig:u}),d=dLe({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 dXm({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);try{(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}`)}catch(c){r.logger.warn(`Network error uploading dynamic IR for ${n}:${i}: ${c}`)}}else r.logger.warn(`Could not find matching dynamic IR to upload for ${n}:${i}`)}}async function mXm({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(Ae.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function hXm(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 IDu(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 G9t=[60*1e3,300*1e3,300*1e3];async function W9t({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=Dy(n.config,{onError:x=>i.failAndThrow(void 0,x,{code:D.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:D.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:D.Code.ConfigError});return}let y=A.find(x=>x.url===s)??A[0];if(y==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:D.Code.ConfigError});return}let I=(typeof y.customDomain=="string"?[y.customDomain]:y.customDomain??[]).map(IPu);(y.multiSource===!0||n.config.experimental?.basepathAware===!0)&&CPu(y.url,I,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let C;return await i.runInteractiveTask({name:y.url},async()=>{let x=performance.now(),B=()=>bDu({docsWorkspace:n,customDomains:I,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let k=0;;k++)try{C=await B();break}catch(P){if(!(P instanceof yvt)||k>=G9t.length){if(P instanceof yvt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:D.Code.NetworkError});throw P}let U=G9t[k]??G9t[G9t.length-1]??6e4,X=U/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${X} minute${X===1?"":"s"} (attempt ${k+1}/${G9t.length})...`),await new Promise($=>setTimeout($,U))}let O=performance.now()-x;i.logger.debug(`Docs publishing completed in ${O.toFixed(0)}ms`)}),C}Ut();var woi=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 Cd({context:this.context,task:this.task});try{let s=await W9t({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.37.12",loginCommand:"fern auth login"});return o.getResult()===Uf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Gn(s)}}}};jt();var bvt=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(`
|
|
4348
4348
|
`),this.stream.write(`${Ae.cyan("\u25C6")} ${Ae.bold(t.title)}
|
|
4349
4349
|
`),t.subtitle!=null&&this.stream.write(` ${Ae.dim(t.subtitle)}
|
|
4350
4350
|
`),this.stream.write(`
|
|
@@ -5011,7 +5011,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
|
|
|
5011
5011
|
`),h="";return c&&(h=l.style.error(c)),[`${p} ${f} ${s}`,[m,h].filter(Boolean).join(`
|
|
5012
5012
|
`)]});var Nlg=$C((e,t)=>{let{validate:r=()=>!0}=e,n=kv(e.theme),[i,o]=vu("idle"),[s,a]=vu(),[c,u]=vu(""),l=XC({status:i,theme:n});ZC(async(h,A)=>{if(i==="idle")if(YC(h)){let y=c;o("loading");let I=await r(y);I===!0?(u(y),o("done"),t(y)):(A.write(c),a(I||"You must provide a valid value"),o("idle"))}else u(A.line),a(void 0)});let p=n.style.message(e.message,i),d="",f;e.mask?d=(typeof e.mask=="string"?e.mask:"*").repeat(c.length):i!=="done"&&(f=`${n.style.help("[input is masked]")}${a1t}`),i==="done"&&(d=n.style.answer(d));let m="";return s&&(m=n.style.error(s)),[[l,p,e.mask?d:f].join(" "),m]});var t7e=we(lS(),1);var jlg={icon:{cursor:_w.pointer},style:{disabled:e=>t7e.default.dim(`- ${e}`),searchTerm:e=>t7e.default.cyan(e),description:e=>t7e.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${t7e.default.bold(t)} ${t7e.default.dim(r)}`).join(t7e.default.dim(" \u2022 "))},helpMode:"always"};function QEs(e){return!Pd.isSeparator(e)&&!e.disabled}function Qlg(e){return e.map(t=>{if(Pd.isSeparator(t))return t;if(typeof t=="string")return{value:t,name:t,short:t,disabled:!1};let r=t.name??String(t.value),n={value:t.value,name:r,short:t.short??r,disabled:t.disabled??!1};return t.description&&(n.description=t.description),n})}var Mlg=$C((e,t)=>{let{pageSize:r=7,validate:n=()=>!0}=e,i=kv(jlg,e.theme),[o,s]=vu("loading"),[a,c]=vu(""),[u,l]=vu([]),[p,d]=vu(),f=XC({status:o,theme:i}),m=BL(()=>{let U=u.findIndex(QEs),X=u.findLastIndex(QEs);return{first:U,last:X}},[u]),[h=m.first,A]=vu();I4(()=>{let U=new AbortController;return s("loading"),d(void 0),(async()=>{try{let $=await e.source(a||void 0,{signal:U.signal});U.signal.aborted||(A(void 0),d(void 0),l(Qlg($)),s("idle"))}catch($){!U.signal.aborted&&$ instanceof Error&&d($.message)}})(),()=>{U.abort()}},[a]);let y=u[h];ZC(async(U,X)=>{if(YC(U))if(y){s("loading");let $=await n(y.value);s("idle"),$===!0?(s("done"),t(y.value)):y.name===a?d($||"You must provide a valid value"):(X.write(y.name),c(y.name))}else X.write(a);else if(Jhe(U)&&y)X.clearLine(0),X.write(y.name),c(y.name);else if(o!=="loading"&&(BP(U)||TL(U))){if(X.clearLine(0),BP(U)&&h!==m.first||TL(U)&&h!==m.last){let $=BP(U)?-1:1,ne=h;do ne=(ne+$+u.length)%u.length;while(!QEs(u[ne]));A(ne)}}else c(X.line)});let I=i.style.message(e.message,o),w;if(i.helpMode!=="never")if(e.instructions){let{pager:U,navigation:X}=e.instructions;w=i.style.help(u.length>r?U:X)}else w=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let C=X8e({items:u,active:h,renderItem({item:U,isActive:X}){if(Pd.isSeparator(U))return` ${U.separator}`;if(U.disabled){let le=typeof U.disabled=="string"?U.disabled:"(disabled)";return i.style.disabled(`${U.name} ${le}`)}let $=X?i.style.highlight:le=>le,ne=X?i.icon.cursor:" ";return $(`${ne} ${U.name}`)},pageSize:r,loop:!1}),x;p?x=i.style.error(p):u.length===0&&a!==""&&o==="idle"&&(x=i.style.error("No results found"));let B;if(o==="done"&&y)return[f,I,i.style.answer(y.short)].filter(Boolean).join(" ").trimEnd();B=i.style.searchTerm(a);let O=y?.description,k=[f,I,B].filter(Boolean).join(" ").trimEnd(),P=[x??C," ",O?i.style.description(O):"",w].filter(Boolean).join(`
|
|
5013
5013
|
`).trimEnd();return[k,P]});var u1t=we(lS(),1);var Llg={icon:{cursor:_w.pointer},style:{disabled:e=>u1t.default.dim(`- ${e}`),description:e=>u1t.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${u1t.default.bold(t)} ${u1t.default.dim(r)}`).join(u1t.default.dim(" \u2022 "))},helpMode:"always",indexMode:"hidden",keybindings:[]};function c1t(e){return!Pd.isSeparator(e)&&!e.disabled}function zlg(e){return e.map(t=>{if(Pd.isSeparator(t))return t;if(typeof t=="string")return{value:t,name:t,short:t,disabled:!1};let r=t.name??String(t.value),n={value:t.value,name:r,short:t.short??r,disabled:t.disabled??!1};return t.description&&(n.description=t.description),n})}var MEs=$C((e,t)=>{let{loop:r=!0,pageSize:n=7}=e,i=kv(Llg,e.theme),{keybindings:o}=i,[s,a]=vu("idle"),c=XC({status:s,theme:i}),u=Y8e(),l=!o.includes("vim"),p=BL(()=>zlg(e.choices),[e.choices]),d=BL(()=>{let O=p.findIndex(c1t),k=p.findLastIndex(c1t);if(O===-1)throw new yae("[select prompt] No selectable choices. All choices are disabled.");return{first:O,last:k}},[p]),f=BL(()=>"default"in e?p.findIndex(O=>c1t(O)&&O.value===e.default):-1,[e.default,p]),[m,h]=vu(f===-1?d.first:f),A=p[m];ZC((O,k)=>{if(clearTimeout(u.current),YC(O))a("done"),t(A.value);else if(BP(O,o)||TL(O,o)){if(k.clearLine(0),r||BP(O,o)&&m!==d.first||TL(O,o)&&m!==d.last){let P=BP(O,o)?-1:1,U=m;do U=(U+P+p.length)%p.length;while(!c1t(p[U]));h(U)}}else if(hXt(O)&&!Number.isNaN(Number(k.line))){let P=Number(k.line)-1,U=-1,X=p.findIndex(ne=>Pd.isSeparator(ne)?!1:(U++,U===P)),$=p[X];$!=null&&c1t($)&&h(X),u.current=setTimeout(()=>{k.clearLine(0)},700)}else if(H8e(O))k.clearLine(0);else if(l){let P=k.line.toLowerCase(),U=p.findIndex(X=>Pd.isSeparator(X)||!c1t(X)?!1:X.name.toLowerCase().startsWith(P));U!==-1&&h(U),u.current=setTimeout(()=>{k.clearLine(0)},700)}}),I4(()=>()=>{clearTimeout(u.current)},[]);let y=i.style.message(e.message,s),I;if(i.helpMode!=="never")if(e.instructions){let{pager:O,navigation:k}=e.instructions;I=i.style.help(p.length>n?O:k)}else I=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let w=0,C=X8e({items:p,active:m,renderItem({item:O,isActive:k,index:P}){if(Pd.isSeparator(O))return w++,` ${O.separator}`;let U=i.indexMode==="number"?`${P+1-w}. `:"";if(O.disabled){let ne=typeof O.disabled=="string"?O.disabled:"(disabled)";return i.style.disabled(`${U}${O.name} ${ne}`)}let X=k?i.style.highlight:ne=>ne,$=k?i.icon.cursor:" ";return X(`${$} ${U}${O.name}`)},pageSize:n,loop:r});if(s==="done")return[c,y,i.style.answer(A.short)].filter(Boolean).join(" ");let{description:x}=A;return`${[[c,y].filter(Boolean).join(" "),C," ",x?i.style.description(x):"",I].filter(Boolean).join(`
|
|
5014
|
-
`).trimEnd()}${a1t}`});ao();var bae={GENERATION_STARTED:"generation_started",GENERATION_COMPLETED:"generation_completed",GENERATION_FAILED:"generation_failed",VERIFICATION_FAILED:"verification_failed",SDK_PR_CREATED:"sdk_pr_created",UPGRADE_APPLIED:"upgrade_applied",MAJOR_VERSION_BUMP:"major_version_bump"},Ulg={[bae.GENERATION_STARTED]:!1,[bae.GENERATION_COMPLETED]:!1,[bae.GENERATION_FAILED]:!0,[bae.VERIFICATION_FAILED]:!0,[bae.SDK_PR_CREATED]:!1,[bae.UPGRADE_APPLIED]:!1,[bae.MAJOR_VERSION_BUMP]:!1};function Vil(e){return Ulg[e]}function qil(e,t){return{automation_mode:!0,surface:"cli",action:t.action,run_id:t.run_id,github_run_id:t.github_run_id,github_run_url:t.github_run_url,org:t.org,config_repo:t.config_repo,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,trigger:t.trigger,cli_version:t.cli_version,...e.errorCode!==void 0?{error_code:e.errorCode}:{},...e.attributes??{}}}function Gil(e,t){function r(i,o,s){s!=null&&(i[o]=s)}let n={surface:"cli",automation_mode:"true"};return r(n,"event",e.event),r(n,"action",t.action),r(n,"run_id",t.run_id),r(n,"org",t.org),r(n,"config_repo",t.config_repo),r(n,"trigger",t.trigger),r(n,"error_code",e.errorCode??"none"),n}function Wil(e,t){return{github_run_id:t.github_run_id,github_run_url:t.github_run_url,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,cli_version:t.cli_version,...e.attributes??{}}}function Hil(e,t){return{event:e.event,timestamp:new Date().toISOString(),surface:"cli",action:t.action,run_id:t.run_id,github_run_id:t.github_run_id,github_run_url:t.github_run_url,org:t.org,config_repo:t.config_repo,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,trigger:t.trigger,cli_version:t.cli_version,...e.errorCode!==void 0?{error_code:e.errorCode}:{},...e.attributes??{}}}function Kil(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?bae.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?bae.VERIFICATION_FAILED:bae.GENERATION_FAILED}var _lg="",Vlg="FERN_AUTOMATION_EVENTS_ORIGIN",qlg=3e3,Oyi=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[Vlg]??_lg)),e.instance}constructor(t){this.origin=t}resolveEndpoint(){if(this.origin.length!==0)return`${this.origin.replace(/\/$/,"")}/v1/automation/events`}post(t,r){this.inflight.push(this.send(t,r))}async shutdown(){let t=this.inflight;this.inflight=[],t.length>0&&await Promise.allSettled(t)}async send(t,r){let n=this.resolveEndpoint();if(n==null)return;let i=new AbortController,o=setTimeout(()=>i.abort(),qlg);try{let s={"content-type":"application/json"},a=await SV();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(Hil(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function Jil(){let{fern_run_id:e,github_run_id:t}=Zae();return{action:process.env.FERN_ACTION,run_id:e,github_run_id:t,github_run_url:process.env.FERN_GITHUB_RUN_URL,org:void 0,config_repo:process.env.FERN_CONFIG_REPO,config_commit_sha:process.env.FERN_CONFIG_COMMIT_SHA,config_branch:process.env.FERN_CONFIG_BRANCH,config_pr_number:process.env.FERN_CONFIG_PR_NUMBER,trigger:process.env.GITHUB_EVENT_NAME,cli_version:"5.37.
|
|
5014
|
+
`).trimEnd()}${a1t}`});ao();var bae={GENERATION_STARTED:"generation_started",GENERATION_COMPLETED:"generation_completed",GENERATION_FAILED:"generation_failed",VERIFICATION_FAILED:"verification_failed",SDK_PR_CREATED:"sdk_pr_created",UPGRADE_APPLIED:"upgrade_applied",MAJOR_VERSION_BUMP:"major_version_bump"},Ulg={[bae.GENERATION_STARTED]:!1,[bae.GENERATION_COMPLETED]:!1,[bae.GENERATION_FAILED]:!0,[bae.VERIFICATION_FAILED]:!0,[bae.SDK_PR_CREATED]:!1,[bae.UPGRADE_APPLIED]:!1,[bae.MAJOR_VERSION_BUMP]:!1};function Vil(e){return Ulg[e]}function qil(e,t){return{automation_mode:!0,surface:"cli",action:t.action,run_id:t.run_id,github_run_id:t.github_run_id,github_run_url:t.github_run_url,org:t.org,config_repo:t.config_repo,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,trigger:t.trigger,cli_version:t.cli_version,...e.errorCode!==void 0?{error_code:e.errorCode}:{},...e.attributes??{}}}function Gil(e,t){function r(i,o,s){s!=null&&(i[o]=s)}let n={surface:"cli",automation_mode:"true"};return r(n,"event",e.event),r(n,"action",t.action),r(n,"run_id",t.run_id),r(n,"org",t.org),r(n,"config_repo",t.config_repo),r(n,"trigger",t.trigger),r(n,"error_code",e.errorCode??"none"),n}function Wil(e,t){return{github_run_id:t.github_run_id,github_run_url:t.github_run_url,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,cli_version:t.cli_version,...e.attributes??{}}}function Hil(e,t){return{event:e.event,timestamp:new Date().toISOString(),surface:"cli",action:t.action,run_id:t.run_id,github_run_id:t.github_run_id,github_run_url:t.github_run_url,org:t.org,config_repo:t.config_repo,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,trigger:t.trigger,cli_version:t.cli_version,...e.errorCode!==void 0?{error_code:e.errorCode}:{},...e.attributes??{}}}function Kil(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?bae.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?bae.VERIFICATION_FAILED:bae.GENERATION_FAILED}var _lg="",Vlg="FERN_AUTOMATION_EVENTS_ORIGIN",qlg=3e3,Oyi=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[Vlg]??_lg)),e.instance}constructor(t){this.origin=t}resolveEndpoint(){if(this.origin.length!==0)return`${this.origin.replace(/\/$/,"")}/v1/automation/events`}post(t,r){this.inflight.push(this.send(t,r))}async shutdown(){let t=this.inflight;this.inflight=[],t.length>0&&await Promise.allSettled(t)}async send(t,r){let n=this.resolveEndpoint();if(n==null)return;let i=new AbortController,o=setTimeout(()=>i.abort(),qlg);try{let s={"content-type":"application/json"},a=await SV();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(Hil(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function Jil(){let{fern_run_id:e,github_run_id:t}=Zae();return{action:process.env.FERN_ACTION,run_id:e,github_run_id:t,github_run_url:process.env.FERN_GITHUB_RUN_URL,org:void 0,config_repo:process.env.FERN_CONFIG_REPO,config_commit_sha:process.env.FERN_CONFIG_COMMIT_SHA,config_branch:process.env.FERN_CONFIG_BRANCH,config_pr_number:process.env.FERN_CONFIG_PR_NUMBER,trigger:process.env.GITHUB_EVENT_NAME,cli_version:"5.37.12"}}function Yil(){return process.env.FERN_AUTOMATION==="true"}var Pyi=class{constructor(t,r=Oyi.getInstance()){this.reporter=t;this.automationEventApiClient=r;this.context=Jil()}reporter;automationEventApiClient;context;setOrganization(t){this.context={...this.context,org:t}}emit(t,r){let n=this.captureSentryForFailure({event:t,context:this.context,error:r?.error}),i=n==null?t:{...t,attributes:{...t.attributes??{},sentry_event_id:n}};this.capturePostHogEvent({event:i,context:this.context}),this.captureAutomationEventApiEvent(i,this.context)}async flush(){await this.automationEventApiClient.shutdown()}capturePostHogEvent({event:t,context:r}){this.reporter.instrumentPostHogAutomationEvent({distinctId:r.run_id??void 0,event:t.event,properties:qil(t,r)})}captureSentryForFailure({event:t,context:r,error:n}){if(!(!Vil(t.event)||t.errorCode==null))return this.reporter.captureException(n,{tags:Gil(t,r),context:{automation:Wil(t,r)}})}captureAutomationEventApiEvent(t,r){this.automationEventApiClient.post(t,r)}};Ut();function Dyi(e,t,r){if(t instanceof pu)return;let n=SAe(t,r?.code),i=r?.argv??process.argv,o=i.join(" "),s=r?.message??(t instanceof Error?t.message:void 0)??"",a=t??new D({message:s,code:n});Yil()?Wlg(i,e,n,s,a):Glg(e,o,n,a)}function Glg(e,t,r,n){e.instrumentPostHogEvent({command:t,properties:{failed:!0,errorCode:r}}),u9e(r)&&e.captureException(n,{tags:{"error.code":r}})}function Wlg(e,t,r,n,i){let o=Kil(e);t.emitAutomationTelemetryEvent({event:o,errorCode:r,attributes:{error_message:n}},{error:i})}Ut();function r7e(){return process.env.FERN_DISABLE_TELEMETRY==="true"}function Ryi({cliName:e,packageVersion:t,isLocal:r}){return r7e()||r?!1:!(t==="0.0.0")&&(e==="fern"&&!0)}var Fyi=class{sentry;constructor({release:t,telemetry:r}){let n="https://84f58b5e457f06999d92f11ce4b79158@o4509504076185600.ingest.us.sentry.io/4511021546602496";if(Ryi(r)&&n!=null&&n.length>0){let i="production";if(i==null||i.length===0)throw new D({message:"SENTRY_ENVIRONMENT must be set when SENTRY_DSN is configured",code:D.Code.ConfigError});this.sentry=SPt({dsn:n,release:t,environment:i,defaultIntegrations:!1,integrations:[Wqe(),Zge(),$ge(),jge(),Xge()],tracesSampleRate:0,attachStacktrace:!0,sendClientReports:!1}),TPt()}}captureException(t,r){if(this.sentry!=null)try{let n=r?.tags,i=r?.context,o=n!=null&&Object.keys(n).length>0,s=i!=null&&Object.values(i).some(a=>a!=null);return!o&&!s?this.sentry.captureException(t):kB(a=>{if(o&&a.setTags(n),i!=null)for(let[c,u]of Object.entries(i))u!=null&&a.setContext(c,u);return this.sentry?.captureException(t,void 0,a)})}catch{return}}async flush(){this.sentry!=null&&await Promise.resolve(this.sentry.flush(2e3)).catch(()=>{})}};Ut();var kyi=class{originalWrite;redirected=!1;redirect(){if(this.redirected)throw new D({message:"StdoutRedirector: already redirected \u2014 did you forget to restore()?",code:D.Code.InternalError});this.originalWrite=process.stdout.write,process.stdout.write=process.stderr.write.bind(process.stderr),this.redirected=!0}restore(){!this.redirected||this.originalWrite==null||(process.stdout.write=this.originalWrite,this.originalWrite=void 0,this.redirected=!1)}async withRedirect(t){this.redirect();try{return await t()}finally{this.restore()}}};jt();Hb();Ut();var bXt=class{result=Uf.Success;lastFailureMessage=void 0;logImmediately;logPrefix;title;subtasks=[];shouldBufferLogs;bufferedLogs=[];status="notStarted";onResult;instrumentPostHogEventImpl;captureExceptionImpl;emitAutomationTelemetryEventImpl;constructor({logImmediately:t,logPrefix:r,title:n,takeOverTerminal:i,onResult:o,shouldBufferLogs:s,instrumentPostHogEvent:a,captureException:c,emitAutomationTelemetryEvent:u}){this.logImmediately=t,this.logPrefix=r??"",this.title=n,this.takeOverTerminal=i,this.onResult=o,this.shouldBufferLogs=s,this.instrumentPostHogEventImpl=a,this.captureExceptionImpl=c,this.emitAutomationTelemetryEventImpl=u}start(){return this.status="running",this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.status="finished",this.flushLogs(),this.onResult?.(this.getResult()))}isFinished(){return this.status==="finished"}takeOverTerminal;failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),this.finish(),new pu}failWithoutThrowing(t,r,n){this.result=Uf.Failure,!(r instanceof pu)&&(t!=null&&(this.lastFailureMessage=t),A3t({message:t,error:r,logger:this.logger}),Dyi(this,r,{...n,message:t}))}getLastFailureMessage(){return this.lastFailureMessage}captureException(t,r){return this.captureExceptionImpl?.(t,r)}emitAutomationTelemetryEvent(t,r){this.emitAutomationTelemetryEventImpl(t,r)}getResult(){return this.result}instrumentPostHogEvent(t){this.instrumentPostHogEventImpl(t)}logAtLevel(t,...r){this.logAtLevelWithOverrides(t,r)}logAtLevelWithOverrides(t,r,n={}){this.log({parts:r,level:t,time:new Date,...n})}log(t){this.bufferedLogs.push({...t,prefix:this.logPrefix}),this.shouldBufferLogs||this.flushLogs()}flushLogs(){this.logImmediately(this.bufferedLogs),this.bufferedLogs=[]}logger=VI(this.logAtLevel.bind(this));addInteractiveTask({name:t,subtitle:r}){let n=new LEs({name:t,subtitle:r,logImmediately:i=>this.logImmediately(i),logPrefix:`${this.logPrefix}${Ae.blackBright(t)} `,takeOverTerminal:this.takeOverTerminal,onResult:this.onResult,shouldBufferLogs:this.shouldBufferLogs,instrumentPostHogEvent:i=>this.instrumentPostHogEventImpl(i),captureException:this.captureExceptionImpl,emitAutomationTelemetryEvent:this.emitAutomationTelemetryEventImpl});return this.subtasks.push(n),n}async runInteractiveTask(t,r){let n=this.addInteractiveTask(t).start();try{await r(n)}catch(i){n.failWithoutThrowing(void 0,i)}finally{n.finish()}return n.getResult()===Uf.Success}printInteractiveTasks({spinner:t}){return this.subtasks.map(r=>r.print({spinner:t})).join(`
|
|
5015
5015
|
`)}},LEs=class extends bXt{name;subtitle;constructor({name:t,subtitle:r,...n}){super(n),this.name=t,this.subtitle=r}start(){return super.start(),this.logAtLevelWithOverrides(qn.Info,["Started."],{omitOnTTY:!0}),this.flushLogs(),this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.result===Uf.Success?this.logAtLevelWithOverrides(qn.Info,["Finished."],{omitOnTTY:!0}):this.logAtLevelWithOverrides(qn.Error,["Failed."],{omitOnTTY:!0}),super.finish())}setSubtitle(t){this.subtitle=t}print({spinner:t}){let r=[this.name];return this.subtitle!=null&&r.push(Ae.dim(this.subtitle)),r.push(...this.subtasks.map(n=>n.print({spinner:t}))),Dj({prefix:this.getIcon({spinner:t}),content:r.join(`
|
|
5016
5016
|
`)})}printInteractiveTasks({spinner:t}){return this.print({spinner:t})}getIcon({spinner:t}){let r=this.subtasks.length>0;switch(this.status){case"notStarted":return r?Ae.dim("\u25B8 "):Ae.dim("\u25E6 ");case"running":return r?Ae.cyan("\u25BE "):t;case"finished":switch(this.getResult()){case Uf.Success:return r?Ae.green("\u25BE "):Ae.green("\u2713 ");case Uf.Failure:return r?Ae.red("\u25BE "):Ae.red("x ")}}}getResult(){if(this.result===Uf.Failure)return Uf.Failure;for(let t of this.subtasks)if(t.getResult()===Uf.Failure)return Uf.Failure;return Uf.Success}};Ut();var Xil=we(_Me(),1);function Zil(e){return e.filter(t=>t.isUpgradeAvailable).length>0}function Hlg(e){return(e.cliUpgradeInfo?.isUpgradeAvailable??!1)||Zil(e.generatorUpgradeInfo)}async function $il({cliEnvironment:e,upgradeInfo:t}){if(!Hlg(t)||e.packageVersion==t.cliUpgradeInfo?.latestVersion)return;let r=`${Ae.underline("Upgrades available")}
|
|
5017
5017
|
|
|
@@ -5020,7 +5020,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
|
|
|
5020
5020
|
Run ${Ae.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
|
|
5021
5021
|
Run ${Ae.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),Got(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function zEs({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!Zil(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+=`
|
|
5022
5022
|
${await Klg(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+Ae.dim(a.currentVersion)+Ae.reset(" \u2192 ")+Ae.green(a.latestVersion);return i+=`
|
|
5023
|
-
`,n?Got(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function Klg(e){let r=await new Xil.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new D({message:`Generator ${e} not found`,code:D.Code.ConfigError});return r.body.displayName}Ut();async function Jlg({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await eol({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=RMe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await Q1({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 eol({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=RMe(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await Q1({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 eol({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 G3({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?py(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 tol(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=_Q(a.latestVersion,a.previousVersion)}catch{throw new D({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:D.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 Nyi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await Jlg({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(...tol(u,c,t.logger));else s.push(...tol(a.versions,void 0,t.logger))}return s}Ut();async function Yhe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await iFt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new D({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:D.Code.NetworkError})}}var rol=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],jyi=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=qn.Info;isLocal;stdoutRedirector=new kyi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await aVt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new k3t(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 Fyi({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new Pyi(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.37.
|
|
5023
|
+
`,n?Got(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function Klg(e){let r=await new Xil.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new D({message:`Generator ${e} not found`,code:D.Code.ConfigError});return r.body.displayName}Ut();async function Jlg({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await eol({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=RMe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await Q1({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 eol({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=RMe(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await Q1({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 eol({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 G3({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?py(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 tol(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=_Q(a.latestVersion,a.previousVersion)}catch{throw new D({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:D.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 Nyi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await Jlg({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(...tol(u,c,t.logger));else s.push(...tol(a.versions,void 0,t.logger))}return s}Ut();async function Yhe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await iFt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new D({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:D.Code.NetworkError})}}var rol=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],jyi=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=qn.Info;isLocal;stdoutRedirector=new kyi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await aVt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new k3t(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 Fyi({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new Pyi(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.37.12"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${Ae.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),new pu}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof pu)&&(A3t({message:t,error:r,logger:this.logger}),Dyi(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)+`
|
|
5024
5024
|
`),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(),await this.automationTelemetryManager.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 $il({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
|
|
5025
5025
|
`)||(r+=`
|
|
5026
5026
|
`),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=tPi(t.map(n=>n.type==="docs"?"docs":n.workspaceName??"api"),n=>n.length);r!=null&&(this.longestWorkspaceName=r)}project;registerProject(t){this.project=t,this.automationTelemetryManager.setOrganization(t.config.organization)}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 bXt(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 pu}finally{n.finish()}return i}instrumentPostHogEvent(t){this.isLocal||this.posthogManager.sendEvent(t)}instrumentPostHogAutomationEvent(t){this.isLocal||this.posthogManager.sendAutomationEvent(t)}captureException(t,r){return this.sentryClient.captureException(t,r)}emitAutomationTelemetryEvent(t,r){this.automationTelemetryManager.emit(t,r)}logger=VI((t,...r)=>this.log(t,...r));stderr=VI((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=nol(r),i=1+(this.longestWorkspaceName!=null?nol(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=rol[this.numTasks++%rol.length],a=Ae.hex(s)(o);return{...this.constructTaskInit(),logPrefix:a,title:Ae.hex(s).bold(r)}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Uf.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:t=>{this.instrumentPostHogEvent(t)},shouldBufferLogs:!1,captureException:(t,r)=>this.sentryClient.captureException(t,r),emitAutomationTelemetryEvent:(t,r)=>this.emitAutomationTelemetryEvent(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=>kx.indexOf(i.level)>=kx.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===qn.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 Yhe({cliEnvironment:this.environment,includePreReleases:t}),n=_Q(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await Nyi({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await MEs({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:Ae.yellow("?"),style:{answer:i=>Ae.cyan(i),message:i=>Ae.bold(i),highlight:i=>Ae.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
|
package/package.json
CHANGED