fern-api 4.32.0 → 4.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.cjs +5 -5
- package/package.json +1 -1
package/cli.cjs
CHANGED
|
@@ -1653,7 +1653,7 @@ ${r_a.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&nBi(th
|
|
|
1653
1653
|
`+jPe.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?jPe.default.cyan(p_a(t,this.opt.mask)):jPe.default.italic(jPe.default.dim("[hidden]")):this.opt.mask?p_a(t,this.opt.mask):jPe.default.italic(jPe.default.dim("[input is hidden] "))}getSpinningValue(t){return this.getMaskedValue(t)}filterInput(t){return t||(this.opt.default==null?"":this.opt.default)}onEnd(t){this.status="answered",this.answer=t.value,this.render(),this.screen.done(),this.done(t.value)}onError(t){this.render(t.isValid)}onKeypress(){this.opt.default&&=void 0,this.render()}};var JEr=_e(MI(),1);var l1a=_e(jBi(),1),HEr=require("child_process"),k9e=require("fs"),$Er=_e(require("path"),1),p1a=_e(require("os"),1),f1a=require("crypto"),IOi=_e(u1a(),1);var qEr=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var WCt=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var GEr=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var WEr=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function KEr(e="",t,r){let n=new wOi(e,r);n.runAsync((i,o)=>{if(i)setImmediate(t,i,void 0);else try{n.cleanup(),setImmediate(t,void 0,o)}catch(s){setImmediate(t,s,void 0)}})}function c1a(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function Jbf(e){let t=[],r="";for(let n=0;n<e.length;n++){let i=e.charAt(n);n>0&&i===" "&&e[n-1]!=="\\"&&r.length>0?(t.push(r),r=""):r=`${r}${i}`}return r.length>0&&t.push(r),t}var wOi=class{text="";tempFile;editor;lastExitStatus=0;fileOptions={};get temp_file(){return console.log("DEPRECATED: temp_file. Use tempFile moving forward."),this.tempFile}get last_exit_status(){return console.log("DEPRECATED: last_exit_status. Use lastExitStatus moving forward."),this.lastExitStatus}constructor(t="",r){this.text=t,r&&(this.fileOptions=r),this.determineEditor(),this.createTemporaryFile()}run(){return this.launchEditor(),this.readTemporaryFile(),this.text}runAsync(t){try{this.launchEditorAsync(()=>{try{this.readTemporaryFile(),setImmediate(t,void 0,this.text)}catch(r){setImmediate(t,r,void 0)}})}catch(r){setImmediate(t,r,void 0)}}cleanup(){this.removeTemporaryFile()}determineEditor(){let t=process.env.VISUAL?process.env.VISUAL:process.env.EDITOR?process.env.EDITOR:process.platform.startsWith("win")?"notepad":"vim",r=Jbf(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??p1a.default.tmpdir(),r=(0,f1a.randomUUID)(),n=c1a(this.fileOptions.prefix),i=c1a(this.fileOptions.postfix),o=`${n}${r}${i}`,s=$Er.default.resolve(t,o),a=$Er.default.resolve(t)+$Er.default.sep;if(!s.startsWith(a))throw new Error("Resolved temporary file escaped the base directory");this.tempFile=s;let u={encoding:"utf8",flag:"wx"};Object.prototype.hasOwnProperty.call(this.fileOptions,"mode")&&(u.mode=this.fileOptions.mode),(0,k9e.writeFileSync)(this.tempFile,this.text,u)}catch(t){throw new qEr(t)}}readTemporaryFile(){try{let t=(0,k9e.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,l1a.detect)(t)??"utf8";IOi.default.encodingExists(r)||(r="utf8"),this.text=IOi.default.decode(t,r)}}catch(t){throw new GEr(t)}}removeTemporaryFile(){try{(0,k9e.unlinkSync)(this.tempFile)}catch(t){throw new WEr(t)}}launchEditor(){try{let t=(0,HEr.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new WCt(t)}}launchEditorAsync(t){try{(0,HEr.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new WCt(r)}}};var d1a=_e(LQ(),1);var $Ct=class extends LI{_run(t){this.done=t,this.editorResult=new d1a.Subject;let r=r1(this.rl);this.lineSubscription=r.line.subscribe(this.startExternalEditor.bind(this));let n=this.opt.waitUserInput===void 0?!0:this.opt.waitUserInput,i=this.handleSubmitEvents(this.editorResult);return i.success.forEach(this.onEnd.bind(this)),i.error.forEach(this.onError.bind(this)),this.currentText=this.opt.default,this.opt.default=null,n?this.render():this.startExternalEditor(),this}render(t){let r="",n=this.getQuestion();n+=this.status==="answered"?JEr.default.dim("Received"):JEr.default.dim("Press <enter> to launch your preferred editor."),t&&(r=JEr.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),KEr(this.currentText,this.endExternalEditor.bind(this),{postfix:this.opt.postfix??".txt"})}endExternalEditor(t,r){this.rl.resume(),t?this.editorResult.error(t):this.editorResult.next(r)}onEnd(t){this.editorResult.unsubscribe(),this.lineSubscription.unsubscribe(),this.answer=t.value,this.status="answered",this.render(),this.screen.done(),this.done(this.answer)}onError(t){this.render(t.isValid)}};var y1a=require("stream");var g1a=_e(require("readline"),1),A1a=_e(h1a(),1),zPe=class{constructor(t){this.rl||=g1a.default.createInterface(Xbf(t)),this.rl.resume(),this.onForceClose=this.onForceClose.bind(this),process.on("exit",this.onForceClose),this.rl.on("SIGINT",this.onForceClose)}onForceClose(){this.close(),process.kill(process.pid,"SIGINT"),console.log("")}close(){this.rl.removeListener("SIGINT",this.onForceClose),process.removeListener("exit",this.onForceClose),this.rl.output.unmute(),this.activePrompt&&typeof this.activePrompt.close=="function"&&this.activePrompt.close(),this.rl.output.end(),this.rl.pause(),this.rl.close()}};function Xbf(e={}){e.skipTTYChecks=e.skipTTYChecks===void 0?!0:e.skipTTYChecks;let t=e.input||process.stdin;if(!e.skipTTYChecks&&!t.isTTY){let i=new Error("Prompts can not be meaningfully rendered in non-TTY environments");throw i.isTtyError=!0,i}let r=new A1a.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var HCt=class extends zPe{constructor(t={}){super(t),this.log=new y1a.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return TCt(this.rl,this.bottomBar.split(`
|
|
1654
1654
|
`).length),this}updateBottomBar(t){return TCt(this.rl,1),this.rl.output.unmute(),this.clean(),this.bottomBar=t,this.render(),this.rl.output.mute(),this}writeLog(t){return this.rl.output.unmute(),this.clean(),this.rl.output.write(this.enforceLF(t.toString())),this.render(),this.rl.output.mute(),this}enforceLF(t){return/[\n\r]$/.test(t)?t:t+`
|
|
1655
1655
|
`}write(t){let r=t.split(/\n/);this.height=r.length,this.rl.setPrompt(r.at(-1)),this.rl.output.rows===0&&this.rl.output.columns===0&&yEr(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var Ef=_e(LQ(),1),v1a=_e(uCt(),1);var YEr=_e(LQ(),1),b1a=_e(uCt(),1),XEr=function(e,t,r){return typeof e[t]!="function"?(0,YEr.of)(e):(0,YEr.from)((0,b1a.default)(e[t])(r).then(n=>(e[t]=n,e)))};var E1a={set:(e,t="",r)=>{let n=e;t.split(".").forEach((i,o,s)=>{i==="__proto__"||i==="constructor"||(o===s.length-1?n[i]=r:(!(i in n)||typeof n[i]!="object")&&(n[i]={}),n=n[i])})},get:(e,t="",r)=>{let n=o=>String.prototype.split.call(t,o).filter(Boolean).reduce((s,a)=>s!=null?s[a]:s,e),i=n(/[,[\]]+?/)||n(/[,.[\]]+?/);return i===void 0||i===e?r:i}},Q9e=class extends zPe{constructor(t,r){super(r),this.prompts=t}run(t,r){this.answers=typeof r=="object"?{...r}:{};let n;return Array.isArray(t)?n=(0,Ef.from)(t):(0,Ef.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,Ef.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,Ef.from)([t]),this.process=n.pipe((0,Ef.concatMap)(this.processQuestion.bind(this)),(0,Ef.publish)()),this.process.connect(),this.process.pipe((0,Ef.reduce)((i,o)=>(E1a.set(i,o.name,o.answer),i),this.answers)).toPromise(Promise).then(this.onCompletion.bind(this),this.onError.bind(this))}onCompletion(){return this.close(),this.answers}onError(t){return this.close(),Promise.reject(t)}processQuestion(t){return t={...t},(0,Ef.defer)(()=>(0,Ef.of)(t).pipe((0,Ef.concatMap)(this.setDefaultType.bind(this)),(0,Ef.concatMap)(this.filterIfRunnable.bind(this)),(0,Ef.concatMap)(()=>XEr(t,"message",this.answers)),(0,Ef.concatMap)(()=>XEr(t,"default",this.answers)),(0,Ef.concatMap)(()=>XEr(t,"choices",this.answers)),(0,Ef.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,Ef.defer)(()=>(0,Ef.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,Ef.defer)(()=>(0,Ef.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&E1a.get(this.answers,t.name)!==void 0)return Ef.EMPTY;if(t.when===!1)return Ef.EMPTY;if(typeof t.when!="function")return(0,Ef.of)(t);let{answers:r}=this;return(0,Ef.defer)(()=>(0,Ef.from)((0,v1a.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,Ef.filter)(n=>n!=null)))}};function I1a(e){let t=function(r,n){let i;try{i=new Q9e(t.prompts,e)}catch(s){return Promise.reject(s)}let o=i.run(r,n);return o.ui=i,o};return t.prompts={},t.registerPrompt=function(r,n){return t.prompts[r]=n,this},t.restoreDefaultPrompts=function(){this.registerPrompt("list",RCt),this.registerPrompt("input",NPe),this.registerPrompt("number",FCt),this.registerPrompt("confirm",kCt),this.registerPrompt("rawlist",QCt),this.registerPrompt("expand",NCt),this.registerPrompt("checkbox",jCt),this.registerPrompt("password",MCt),this.registerPrompt("editor",$Ct)},t.restoreDefaultPrompts(),t}var xOi=I1a();function e0f(e,t){xOi.registerPrompt(e,t)}function t0f(){xOi.restoreDefaultPrompts()}var r0f={prompt:xOi,ui:{BottomBar:HCt,Prompt:Q9e},createPromptModule:I1a,registerPrompt:e0f,restoreDefaultPrompts:t0f,Separator:gF},lp=r0f;var N9e=require("path");function C1a(){let e=n0f();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function n0f(e=process.argv[1]?(0,N9e.dirname)(process.argv[1]):process.cwd(),t=N9e.sep==="\\"){let r=t?w1a(e):e;return n=>{if(!n)return;let i=t?w1a(n):n,{dir:o,base:s,ext:a}=N9e.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(s=s.slice(0,-1*a.length));let u=decodeURIComponent(s);o||(o=".");let c=o.lastIndexOf("/node_modules");if(c>-1)return`${o.slice(c+14).replace(/\//g,".")}:${u}`;if(o.startsWith(r)){let l=o.slice(r.length+1).replace(/\//g,".");return l?`${l}:${u}`:u}return u}}function w1a(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var _Oi=e=>{if("flags"in e){let t=x1a(e.flags),r=_1a(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,SOi(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,i0f(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function i0f(e,t,r){return{key:e,enabled:typeof t=="string"?!0:t,variant:typeof t=="string"?t:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:r?JSON.stringify(r):void 0,description:void 0}}}var x1a=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,KCt(r)]).filter(([,t])=>t!==void 0)),_1a=e=>{let t=e??{};return Object.fromEntries(Object.keys(t).filter(r=>{let n=t[r];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map(r=>{let n=t[r].metadata?.payload;return[r,n?SOi(n):void 0]}))};var KCt=e=>e===void 0?void 0:e.variant??e.enabled,SOi=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var ZEr="0123456789abcdef",evr=class e{constructor(t){this.bytes=t}static ofInner(t){if(t.length===16)return new e(t);throw new TypeError("not 128-bit length")}static fromFieldsV7(t,r,n,i){if(!Number.isInteger(t)||!Number.isInteger(r)||!Number.isInteger(n)||!Number.isInteger(i)||t<0||r<0||n<0||i<0||t>0xffffffffffff||r>4095||n>1073741823||i>4294967295)throw new RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=t/2**40,o[1]=t/2**32,o[2]=t/2**24,o[3]=t/2**16,o[4]=t/256,o[5]=t,o[6]=112|r>>>8,o[7]=r,o[8]=128|n>>>24,o[9]=n>>>16,o[10]=n>>>8,o[11]=n,o[12]=i>>>24,o[13]=i>>>16,o[14]=i>>>8,o[15]=i,new e(o)}static parse(t){let r;switch(t.length){case 32:r=/^[0-9a-f]{32}$/i.exec(t)?.[0];break;case 36:r=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(t)?.slice(1,6).join("");break;case 38:r=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(t)?.slice(1,6).join("");break;case 45:r=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(t)?.slice(1,6).join("");break;default:break}if(r){let n=new Uint8Array(16);for(let i=0;i<16;i+=4){let o=parseInt(r.substring(2*i,2*i+8),16);n[i+0]=o>>>24,n[i+1]=o>>>16,n[i+2]=o>>>8,n[i+3]=o}return new e(n)}throw new SyntaxError("could not parse UUID string")}toString(){let t="";for(let r=0;r<this.bytes.length;r++)t+=ZEr.charAt(this.bytes[r]>>>4),t+=ZEr.charAt(15&this.bytes[r]),(r===3||r===5||r===7||r===9)&&(t+="-");return t}toHex(){let t="";for(let r=0;r<this.bytes.length;r++)t+=ZEr.charAt(this.bytes[r]>>>4),t+=ZEr.charAt(15&this.bytes[r]);return t}toJSON(){return this.toString()}getVariant(){let t=this.bytes[8]>>>4;if(t<0)throw new Error("unreachable");if(t<=7)return this.bytes.every(r=>r===0)?"NIL":"VAR_0";if(t<=11)return"VAR_10";if(t<=13)return"VAR_110";if(t<=15)return this.bytes.every(r=>r===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new e(this.bytes.slice(0))}equals(t){return this.compareTo(t)===0}compareTo(t){for(let r=0;r<16;r++){let n=this.bytes[r]-t.bytes[r];if(n!==0)return Math.sign(n)}return 0}},BOi=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??o0f()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(t,r){let n=this.generateOrAbortCore(t,r);return n===void 0&&(this.timestamp=0,n=this.generateOrAbortCore(t,r)),n}generateOrAbortCore(t,r){if(!Number.isInteger(t)||t<1||t>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit positive integer");if(r<0||r>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(t>this.timestamp)this.timestamp=t,this.resetCounter();else{if(!(t+r>=this.timestamp))return;this.counter++,this.counter>4398046511103&&(this.timestamp++,this.resetCounter())}return evr.fromFieldsV7(this.timestamp,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let t=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return t[6]=64|t[6]>>>4,t[8]=128|t[8]>>>2,evr.ofInner(t)}},o0f=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),S1a,sK=()=>s0f().toString(),s0f=()=>(S1a||(S1a=new BOi)).generate();var yF=(function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e})({});var a0f=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],B1a=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return a0f.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var c0f=Array.isArray,O1a=Object.prototype,$Ny=O1a.hasOwnProperty,OOi=O1a.toString,POi=c0f||function(e){return OOi.call(e)==="[object Array]"};var TOi=e=>e===Object(e)&&!POi(e);var j9e=e=>e===void 0,JCt=e=>OOi.call(e)=="[object String]",P1a=e=>JCt(e)&&e.trim().length===0;var T1a=e=>OOi.call(e)=="[object Number]"&&e===e;var DOi=e=>e instanceof Error;function YCt(e){return e===null||typeof e!="object"}function VPe(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function D1a(e){return VPe(e,"ErrorEvent")}function tvr(e){return!j9e(Event)&&l0f(e,Event)}function R1a(e){return VPe(e,"Object")}function l0f(e,t){try{return e instanceof t}catch{return!1}}function XCt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),T1a(e)?e>r?(n.warn(" cannot be greater than max: "+r+". Using max value instead."),r):e<t?(n.warn(" cannot be less than min: "+t+". Using min value instead."),t):e:(n.warn(" must be a number. using max or fallback. max: "+r+", fallback: "+i),XCt(i||r,t,r,n))}var p0f=864e5,rvr=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=XCt(t.bucketSize,0,100,t._logger),this._refillRate=XCt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=XCt(t.refillInterval,0,p0f,t._logger)}_applyRefill(t,r){let n=r-t.lastAccess,i=Math.floor(n/this._refillInterval);if(i>0){let o=i*this._refillRate;t.tokens=Math.min(t.tokens+o,this._bucketSize),t.lastAccess=t.lastAccess+i*this._refillInterval}}consumeRateLimit(t){let r=Date.now(),n=String(t),i=this._buckets[n];return i?this._applyRefill(i,r):(i={tokens:this._bucketSize,lastAccess:r},this._buckets[n]=i),i.tokens===0?!0:(i.tokens--,i.tokens===0&&this._onBucketRateLimited?.(t),i.tokens===0)}stop(){this._buckets={}}};var nvr=class{add(t){let r=sK();return this.promiseByIds[r]=t,t.catch(()=>{}).finally(()=>{delete this.promiseByIds[r]}),t}async join(){let t=Object.values(this.promiseByIds),r=t.length;for(;r>0;)await Promise.all(t),t=Object.values(this.promiseByIds),r=t.length}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={}}};function f0f(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var F1a=(e,t,r)=>{function n(o,...s){t(()=>{let a=r[o];a(e,...s)})}return{info:(...o)=>{n("log",...o)},warn:(...o)=>{n("warn",...o)},error:(...o)=>{n("error",...o)},critical:(...o)=>{r.error(e,...o)},createLogger:o=>F1a(`${e} ${o}`,t,r)}},d0f=e=>e();function k1a(e,t=d0f){return F1a(e,t,f0f())}var L9e="Mobile",ovr="iOS",M9e="Android",Q1a="Tablet",ojy=M9e+" "+Q1a;var m0f="Apple",sjy=m0f+" Watch",N1a="Safari",svr="BlackBerry",j1a="Samsung",h0f=j1a+"Browser",g0f=j1a+" Internet",avr="Chrome",A0f=avr+" OS",y0f=avr+" "+ovr,M1a="Internet Explorer",b0f=M1a+" "+L9e,FOi="Opera",ajy=FOi+" Mini",L1a="Edge",E0f="Microsoft "+L1a,kOi="Firefox",v0f=kOi+" "+ovr,QOi="Nintendo",NOi="PlayStation",ivr="Xbox",I0f=M9e+" "+L9e,w0f=L9e+" "+N1a,ZCt="Windows",C0f=ZCt+" Phone";var U1a="Generic",ujy=U1a+" "+L9e.toLowerCase(),cjy=U1a+" "+Q1a.toLowerCase(),x0f="Konqueror",TP="(\\d+(\\.\\d+)?)",ROi=new RegExp("Version/"+TP),ljy=new RegExp(ivr,"i"),pjy=new RegExp(NOi+" \\w+","i"),fjy=new RegExp(QOi+" \\w+","i"),_0f=new RegExp(svr+"|PlayBook|BB10","i"),S0f={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"};var djy={[b0f]:[new RegExp("rv:"+TP)],[E0f]:[new RegExp(L1a+"?\\/"+TP)],[avr]:[new RegExp("("+avr+"|CrMo)\\/"+TP)],[y0f]:[new RegExp("CriOS\\/"+TP)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+TP)],[N1a]:[ROi],[w0f]:[ROi],[FOi]:[new RegExp("("+FOi+"|OPR)\\/"+TP)],[kOi]:[new RegExp(kOi+"\\/"+TP)],[v0f]:[new RegExp("FxiOS\\/"+TP)],[x0f]:[new RegExp("Konqueror[:/]?"+TP,"i")],[svr]:[new RegExp(svr+" "+TP),ROi],[I0f]:[new RegExp("android\\s"+TP,"i")],[g0f]:[new RegExp(h0f+"\\/"+TP)],[M1a]:[new RegExp("(rv:|MSIE )"+TP)],Mozilla:[new RegExp("rv:"+TP)]};var mjy=[[new RegExp(ivr+"; "+ivr+" (.*?)[);]","i"),e=>[ivr,e&&e[1]||""]],[new RegExp(QOi,"i"),[QOi,""]],[new RegExp(NOi,"i"),[NOi,""]],[_0f,[svr,""]],[new RegExp(ZCt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[C0f,""];if(new RegExp(L9e).test(t)&&!/IEMobile\b/.test(t))return[ZCt+" "+L9e,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=S0f[n]||"";return/arm/i.test(t)&&(i="RT"),[ZCt,i]}return[ZCt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[ovr,t.join(".")]}return[ovr,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=j9e(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+M9e+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+M9e+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[M9e,t.join(".")]}return[M9e,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,e=>{let t=["Mac OS X",""];if(e&&e[1]){let r=[e[1],e[2],e[3]||"0"];t[1]=r.join(".")}return t}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[A0f,""]],[/Linux|debian/i,["Linux",""]]];var z1a="utf8";function V1a(e,t){if(!e||typeof e!="string"||B0f(e))throw new Error(t)}function B0f(e){return e.trim().length===0}function q1a(e){return e?.replace(/\/+$/,"")}async function G1a(e,t){let r=null;for(let n=0;n<t.retryCount+1;n++){n>0&&await new Promise(i=>setTimeout(i,t.retryDelay));try{return await e()}catch(i){if(r=i,!t.retryCheck(i))throw i}}throw r}function uvr(){return new Date().toISOString()}function qPe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var W1a=e=>e instanceof Error;function jOi(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var cvr=class{constructor(){this.events={},this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),()=>{this.events[t]=this.events[t].filter(n=>n!==r)}}emit(t,r){for(let n of this.events[t]||[])n(r);for(let n of this.events["*"]||[])n(t,r)}};function $1a(){return"CompressionStream"in globalThis}async function MOi(e,t=!0){try{let n=new Blob([e],{type:"text/plain"}).stream().pipeThrough(new CompressionStream("gzip"));return await new Response(n).blob()}catch(r){return t&&console.error("Failed to gzip compress data",r),null}}var GPe=class extends Error{constructor(t,r){super("HTTP error while fetching PostHog: status="+t.status+", reqByteLength="+r),this.response=t,this.reqByteLength=r,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}},U9e=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function H1a(e){if(e instanceof GPe){let t="";try{t=await e.text}catch{}console.error(`Error while flushing PostHog: message=${e.message}, response body=${t}`,e)}else console.error("Error while flushing PostHog",e);return Promise.resolve()}function LOi(e){return typeof e=="object"&&(e instanceof GPe||e instanceof U9e)}function K1a(e){return typeof e=="object"&&e instanceof GPe&&e.status===413}var ext=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new nvr,this._events=new cvr,this._isInitialized=!1,V1a(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=q1a(r.host||"https://us.i.posthog.com"),this.flushAt=r.flushAt?Math.max(r.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,r.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,r.maxQueueSize??1e3),this.flushInterval=r.flushInterval??1e4,this.preloadFeatureFlags=r.preloadFeatureFlags??!0,this.defaultOptIn=r.defaultOptIn??!0,this.disableSurveys=r.disableSurveys??!1,this._retryOptions={retryCount:r.fetchRetryCount??3,retryDelay:r.fetchRetryDelay??3e3,retryCheck:LOi},this.requestTimeout=r.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=r.featureFlagsRequestTimeoutMs??3e3,this.remoteConfigRequestTimeoutMs=r.remoteConfigRequestTimeoutMs??3e3,this.disableGeoip=r.disableGeoip??!0,this.disabled=r.disabled??!1,this.historicalMigration=r?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this._logger=k1a("[PostHog]",this.logMsgIfDebug.bind(this)),this.evaluationContexts=r?.evaluationContexts??r?.evaluationEnvironments,r?.evaluationEnvironments&&!r?.evaluationContexts&&this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version."),this.disableCompression=!$1a()||(r?.disableCompression??!1)}logMsgIfDebug(t){this.isDebug&&t()}wrap(t){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return t();this._initPromise.then(()=>t())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(yF.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(yF.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(yF.OptedOut,!0)})}on(t,r){return this._events.on(t,r)}debug(t=!0){if(this.removeDebugCallback?.(),t){let r=this.on("*",(n,i)=>this._logger.info(n,i));this.removeDebugCallback=()=>{r(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(t){return{distinct_id:t.distinct_id,event:t.event,properties:{...t.properties||{},...this.getCommonEventProperties()}}}addPendingPromise(t){return this.promiseQueue.add(t)}identifyStateless(t,r,n){this.wrap(()=>{let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};this.enqueue("identify",i,n)})}async identifyStatelessImmediate(t,r,n){let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};await this.sendImmediate("identify",i,n)}captureStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({distinct_id:t,event:r,properties:n});this.enqueue("capture",o,i)})}async captureStatelessImmediate(t,r,n,i){let o=this.buildPayload({distinct_id:t,event:r,properties:n});await this.sendImmediate("capture",o,i)}aliasStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});this.enqueue("alias",o,i)})}async aliasStatelessImmediate(t,r,n,i){let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});await this.sendImmediate("alias",o,i)}groupIdentifyStateless(t,r,n,i,o,s){this.wrap(()=>{let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});this.enqueue("capture",a,i)})}async getRemoteConfig(){await this._initPromise;let t=this.host;t==="https://us.i.posthog.com"?t="https://us-assets.i.posthog.com":t==="https://eu.i.posthog.com"&&(t="https://eu-assets.i.posthog.com");let r=`${t}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(r,n,{retryCount:0},this.remoteConfigRequestTimeoutMs).then(i=>i.json()).catch(i=>{this._logger.error("Remote config could not be loaded",i),this._events.emit("error",i)})}async getFlags(t,r={},n={},i={},o={},s=!0){await this._initPromise;let a=s?"&config=true":"",u=`${this.host}/flags/?v=2${a}`,c={token:this.apiKey,distinct_id:t,groups:r,person_properties:n,group_properties:i,...o};this.evaluationContexts&&this.evaluationContexts.length>0&&(c.evaluation_contexts=this.evaluationContexts);let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(c)};return this._logger.info("Flags URL",u),this.fetchWithRetry(u,l,{retryCount:0},this.featureFlagsRequestTimeoutMs).then(p=>p.json()).then(p=>({success:!0,response:_Oi(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof GPe)return{type:"api_error",statusCode:t.status};if(t instanceof U9e){let r=t.error;return r instanceof Error&&(r.name==="AbortError"||r.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(t,r,n,i,o,s);if(a===void 0)return{response:void 0,requestId:void 0};let u=KCt(a.response);return u===void 0&&(u=!1),{response:u,requestId:a.requestId}}async getFeatureFlagDetailStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(r,n,i,o,s,[t]);return a===void 0?void 0:{response:a.flags[t],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(r,n,i,o,s,[t]);if(!a)return;let u=a[t];return u===void 0?null:u}async getFeatureFlagPayloadsStateless(t,r={},n={},i={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)).payloads}async getFeatureFlagsStateless(t,r={},n={},i={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)}async getFeatureFlagsAndPayloadsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,r,n,i,o,s);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a={};(o??this.disableGeoip)&&(a.geoip_disable=!0),s&&(a.flag_keys_to_evaluate=s);let u=await this.getFlags(t,r,n,i,a);if(!u.success)return;let c=u.response;return c.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),c.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:c?.requestId,quotaLimited:c.quotaLimited}):c}async getSurveysStateless(){if(await this._initPromise,this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let t=`${this.host}/api/surveys/?token=${this.apiKey}`,r={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},i=(await this.fetchWithRetry(t,r).then(o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);this._logger.error(a),this._events.emit("error",new Error(s));return}return o.json()}).catch(o=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;return i&&this._logger.info("Surveys fetched from API: ",JSON.stringify(i)),i??[]}get props(){return this._props||(this._props=this.getPersistedProperty(yF.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(yF.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(yF.Props,this.props)})}processBeforeEnqueue(t){return t}async flushStorage(){}enqueue(t,r,n){this.wrap(()=>{if(this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o=this.getPersistedProperty(yF.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(yF.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=qPe(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(t,r,n){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o={api_key:this.apiKey,batch:[i],sent_at:uvr()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,u=this.disableCompression?null:await MOi(s,this.isDebug),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...u!==null&&{"Content-Encoding":"gzip"}},body:u||s};try{await this.fetchWithRetry(a,c)}catch(l){this._events.emit("error",l)}}prepareMessage(t,r,n){let i={...r,type:t,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:n?.timestamp?n?.timestamp:uvr(),uuid:n?.uuid?n.uuid:sK()};return(n?.disableGeoip??this.disableGeoip)&&(i.properties||(i.properties={}),i.properties.$geoip_disable=!0),i.distinctId&&(i.distinct_id=i.distinctId,delete i.distinctId),i}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.flush().catch(async t=>{await H1a(t)})}async flush(){let t=jOi([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),jOi([t]).then(()=>{this.flushPromise===t&&(this.flushPromise=null)}),t}getCustomHeaders(){let t=this.getCustomUserAgent(),r={};return t&&t!==""&&(r["User-Agent"]=t),r}async _flush(){this.clearFlushTimer(),await this._initPromise;let t=this.getPersistedProperty(yF.Queue)||[];if(!t.length)return;let r=[],n=t.length;for(;t.length>0&&r.length<n;){let i=t.slice(0,this.maxBatchSize),o=i.map(f=>f.message),s=async()=>{let m=(this.getPersistedProperty(yF.Queue)||[]).slice(i.length);this.setPersistedProperty(yF.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:uvr()};this.historicalMigration&&(a.historical_migration=!0);let u=JSON.stringify(a),c=`${this.host}/batch/`,l=this.disableCompression?null:await MOi(u,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||u},d={retryCheck:f=>K1a(f)?!1:LOi(f)};try{await this.fetchWithRetry(c,p,d)}catch(f){if(K1a(f)&&o.length>1){this.maxBatchSize=Math.max(1,Math.floor(o.length/2)),this._logger.warn(`Received 413 when sending batch of size ${o.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw f instanceof U9e||await s(),this._events.emit("error",f),f}await s(),r.push(...o)}this._events.emit("flush",r)}async fetchWithRetry(t,r,n,i){AbortSignal.timeout??=function(a){let u=new AbortController;return setTimeout(()=>u.abort(),a),u.signal};let o=r.body?r.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,z1a)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await G1a(async()=>{let a=null;try{a=await this.fetch(t,{signal:AbortSignal.timeout(i??this.requestTimeout),...r})}catch(c){throw new U9e(c)}if(!(r.mode==="no-cors")&&(a.status<200||a.status>=400))throw new GPe(a,s);return a},{...this._retryOptions,...n})}async _shutdown(t=3e4){await this._initPromise;let r=!1;this.clearFlushTimer();let n=async()=>{try{for(await this.promiseQueue.join();!((this.getPersistedProperty(yF.Queue)||[]).length===0||(await this.flush(),r)););}catch(i){if(!LOi(i))throw i;await H1a(i)}};return Promise.race([new Promise((i,o)=>{qPe(()=>{this._logger.error("Timed out while shutting down PostHog"),r=!0,o("Timeout while shutting down PostHog. Some events may not have been sent.")},t)}),n()])}async shutdown(t=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(t).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var bF={};Y(bF,{DOMExceptionCoercer:()=>qOi,ErrorCoercer:()=>GOi,ErrorEventCoercer:()=>WOi,ErrorPropertiesBuilder:()=>UOi,EventCoercer:()=>KOi,ObjectCoercer:()=>HOi,PrimitiveCoercer:()=>JOi,PromiseRejectionEventCoercer:()=>YOi,ReduceableCache:()=>XOi,StringCoercer:()=>$Oi,chromeStackLineParser:()=>zOi,createDefaultStackParser:()=>V0f,createStackParser:()=>sSa,geckoStackLineParser:()=>VOi,nodeStackLineParser:()=>rSa,opera10StackLineParser:()=>Z1a,opera11StackLineParser:()=>eSa,reverseAndStripFrames:()=>oSa,winjsStackLineParser:()=>X1a});var lvr,J1a,pvr;function Y1a(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return pvr&&r.length===J1a||(J1a=r.length,pvr=r.reduce((n,i)=>{lvr||(lvr={});let o=lvr[i];if(o)n[o[0]]=o[1];else{let s=e(i);for(let a=s.length-1;a>=0;a--){let c=s[a]?.filename,l=t[i];if(c&&l){n[c]=l,lvr[i]=[c,l];break}}}return n},{})),pvr}var P0f=4,UOi=class{constructor(t,r,n=[]){this.coercers=t,this.stackParser=r,this.modifiers=n}buildFromUnknown(t,r={}){let i=r&&r.mechanism||{handled:!0,type:"generic"},s=this.buildCoercingContext(i,r,0).apply(t),a=this.buildParsingContext(r),u=this.parseStacktrace(s,a);return{$exception_list:this.convertToExceptionList(u,i),$exception_level:"error"}}async modifyFrames(t){for(let r of t)r.stacktrace&&r.stacktrace.frames&&POi(r.stacktrace.frames)&&(r.stacktrace.frames=await this.applyModifiers(r.stacktrace.frames));return t}coerceFallback(t){return{type:"Error",value:"Unknown error",stack:t.syntheticException?.stack,synthetic:!0}}parseStacktrace(t,r){let n;t.cause!=null&&(n=this.parseStacktrace(t.cause,r));let i;return t.stack!=""&&t.stack!=null&&(i=this.applyChunkIds(this.stackParser(t.stack,t.synthetic?r.skipFirstLines:0),r.chunkIdMap)),{...t,cause:n,stack:i}}applyChunkIds(t,r){return t.map(n=>(n.filename&&r&&(n.chunk_id=r[n.filename]),n))}applyCoercers(t,r){for(let n of this.coercers)if(n.match(t))return n.coerce(t,r);return this.coerceFallback(r)}async applyModifiers(t){let r=t;for(let n of this.modifiers)r=await n(r);return r}convertToExceptionList(t,r){let n={type:t.type,value:t.value,mechanism:{type:r.type??"generic",handled:r.handled??!0,synthetic:t.synthetic??!1}};t.stack&&(n.stacktrace={type:"raw",frames:t.stack});let i=[n];return t.cause!=null&&i.push(...this.convertToExceptionList(t.cause,{...r,handled:!0})),i}buildParsingContext(t){return{chunkIdMap:Y1a(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=P0f){let u=this.buildCoercingContext(t,r,a);return this.applyCoercers(s,u)}};return{...r,syntheticException:n==0?r.syntheticException:void 0,mechanism:t,apply:s=>i(s,n),next:s=>i(s,n+1)}}};var i1="?";function aK(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?i1:r,in_app:!0};return j9e(n)||(o.lineno=n),j9e(i)||(o.colno=i),o}var fvr=(e,t)=>{let r=e.indexOf("safari-extension")!==-1,n=e.indexOf("safari-web-extension")!==-1;return r||n?[e.indexOf("@")!==-1?e.split("@")[0]:i1,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var T0f=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,D0f=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,R0f=/\((\S*)(?::(\d+))(?::(\d+))\)/,zOi=(e,t)=>{let r=T0f.exec(e);if(r){let[,i,o,s]=r;return aK(t,i,i1,+o,+s)}let n=D0f.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=R0f.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=fvr(n[1]||i1,n[2]);return aK(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var F0f=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,k0f=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,VOi=(e,t)=>{let r=F0f.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=k0f.exec(r[3]);s&&(r[1]=r[1]||"eval",r[3]=s[1],r[4]=s[2],r[5]="")}let i=r[3],o=r[1]||i1;return[o,i]=fvr(o,i),aK(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var Q0f=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,X1a=(e,t)=>{let r=Q0f.exec(e);return r?aK(t,r[2],r[1]||i1,+r[3],r[4]?+r[4]:void 0):void 0};var N0f=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Z1a=(e,t)=>{let r=N0f.exec(e);return r?aK(t,r[2],r[3]||i1,+r[1]):void 0},j0f=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,eSa=(e,t)=>{let r=j0f.exec(e);return r?aK(t,r[5],r[3]||r[4]||i1,+r[1],+r[2]):void 0};var M0f=/^\s*[-]{4,}$/,L0f=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,rSa=(e,t)=>{let r=e.match(L0f);if(r){let n,i,o,s,a;if(r[1]){o=r[1];let l=o.lastIndexOf(".");if(o[l-1]==="."&&l--,l>0){n=o.slice(0,l),i=o.slice(l+1);let p=n.indexOf(".Module");p>0&&(o=o.slice(p+1),n=n.slice(0,p))}s=void 0}i&&(s=n,a=i),i==="<anonymous>"&&(a=void 0,o=void 0),o===void 0&&(a=a||i1,o=s?`${s}.${a}`:a);let u=r[2]?.startsWith("file://")?r[2].slice(7):r[2],c=r[5]==="native";return u?.match(/\/[A-Z]:/)&&(u=u.slice(1)),!u&&r[5]&&!c&&(u=r[5]),{filename:u?decodeURI(u):void 0,module:void 0,function:o,lineno:tSa(r[3]),colno:tSa(r[4]),in_app:U0f(u||"",c),platform:t}}if(e.match(M0f))return{filename:e,platform:t}};function U0f(e,t=!1){return!(t||e&&!e.startsWith("/")&&!e.match(/^[A-Z]:/)&&!e.startsWith(".")&&!e.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&e!==void 0&&!e.includes("node_modules/")}function tSa(e){return parseInt(e||"",10)||void 0}var nSa=/\(error: (.*)\)/,iSa=50;function oSa(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,iSa).map(r=>({...r,filename:r.filename||z0f(t).filename,function:r.function||i1}))}function z0f(e){return e[e.length-1]||{}}function V0f(){return sSa("web:javascript",zOi,VOi)}function sSa(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
|
|
1656
|
-
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let u=nSa.test(a)?a.replace(nSa,"$1"):a;if(!u.match(/\S*Error: /)){for(let c of t){let l=c(u,e);if(l){i.push(l);break}}if(i.length>=iSa)break}}return oSa(i)}}var qOi=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=JCt(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:n?t.stack:void 0,cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){let r=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?`${r}: ${t.message}`:r}isDOMException(t){return VPe(t,"DOMException")}isDOMError(t){return VPe(t,"DOMError")}};var GOi=class{match(t){return DOi(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var WOi=class{constructor(){}match(t){return D1a(t)&&t.error!=null}coerce(t,r){let n=r.apply(t.error);return n||{type:"ErrorEvent",value:t.message,stack:r.syntheticException?.stack,synthetic:!0}}};var q0f=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,$Oi=class{match(t){return typeof t=="string"}coerce(t,r){let[n,i]=this.getInfos(t);return{type:n??"Error",value:i??t,stack:r.syntheticException?.stack,synthetic:!0}}getInfos(t){let r="Error",n=t,i=t.match(q0f);return i&&(r=i[1],n=i[2]),[r,n]}};var aSa=["fatal","error","warning","log","info","debug"];function dvr(e,t=40){let r=Object.keys(e);if(r.sort(),!r.length)return"[object has no keys]";for(let n=r.length;n>0;n--){let i=r.slice(0,n).join(", ");if(!(i.length>t))return n===r.length||i.length<=t?i:`${i.slice(0,t)}...`}return""}var HOi=class{match(t){return typeof t=="object"&&t!==null}coerce(t,r){let n=this.getErrorPropertyFromObject(t);return n?r.apply(n):{type:this.getType(t),value:this.getValue(t),stack:r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return tvr(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&typeof t.name=="string"){let i=`'${t.name}' captured as exception`;return"message"in t&&typeof t.message=="string"&&(i+=` with message: '${t.message}'`),i}if("message"in t&&typeof t.message=="string")return t.message;let r=this.getObjectClassName(t),n=dvr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return JCt(t)&&!P1a(t)&&aSa.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(W1a(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var KOi=class{match(t){return tvr(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${dvr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var JOi=class{match(t){return YCt(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var YOi=class{match(t){return VPe(t,"PromiseRejectionEvent")}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return YCt(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){if(YCt(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var XOi=class{constructor(t){this._maxSize=t,this._cache=new Map}get(t){let r=this._cache.get(t);if(r!==void 0)return this._cache.delete(t),this._cache.set(t,r),r}set(t,r){this._cache.set(t,r)}reduce(){for(;this._cache.size>=this._maxSize;){let t=this._cache.keys().next().value;t&&this._cache.delete(t)}}};var lSa=require("fs"),pSa=require("readline"),mvr=new bF.ReduceableCache(25),fSa=new bF.ReduceableCache(20),ZOi=7,G0f=1e3,W0f=1e4;async function dSa(e){let t={};for(let i=e.length-1;i>=0;i--){let o=e[i],s=o?.filename;if(!o||typeof s!="string"||typeof o.lineno!="number"||J0f(s)||Y0f(o))continue;t[s]||(t[s]=[]),t[s].push(o.lineno)}let r=Object.keys(t);if(r.length==0)return e;let n=[];for(let i of r){if(fSa.get(i))continue;let o=t[i];if(!o)continue;o.sort((u,c)=>u-c);let s=Z0f(o);if(s.every(u=>X0f(i,u)))continue;let a=eEf(mvr,i,{});n.push($0f(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&H0f(e,mvr),mvr.reduce(),e}function $0f(e,t,r){return new Promise(n=>{let i=(0,lSa.createReadStream)(e),o=(0,pSa.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,u=0,c=t[u];if(c===void 0)return void s();let l=c[0],p=c[1];function d(){fSa.set(e,1),o.close(),o.removeAllListeners(),s()}i.on("error",d),o.on("error",d),o.on("close",s),o.on("line",f=>{if(a++,!(a<l)&&(r[a]=tEf(f,0),a>=p)){if(u===t.length-1){o.close(),o.removeAllListeners();return}u++;let m=t[u];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function H0f(e,t){for(let r of e)if(r.filename&&r.context_line===void 0&&typeof r.lineno=="number"){let n=t.get(r.filename);if(n===void 0)continue;K0f(r.lineno,r,n)}}function K0f(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=mSa(e);i<e;i++){let o=r[i];if(o===void 0)return void uSa(t);t.pre_context.push(o)}if(r[e]===void 0)return void uSa(t);t.context_line=r[e];let n=hSa(e);t.post_context=[];for(let i=e+1;i<=n;i++){let o=r[i];if(o===void 0)break;t.post_context.push(o)}}function uSa(e){delete e.pre_context,delete e.context_line,delete e.post_context}function J0f(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Y0f(e){return e.lineno!==void 0&&e.lineno>W0f||e.colno!==void 0&&e.colno>G0f}function X0f(e,t){let r=mvr.get(e);if(r===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(r[n]===void 0)return!1;return!0}function Z0f(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=cSa(r),i=[];for(;;){if(t===e.length-1){i.push(n);break}let o=e[t+1];if(typeof o!="number")break;o<=n[1]?n[1]=o+ZOi:(i.push(n),n=cSa(o)),t++}return i}function cSa(e){return[mSa(e),hSa(e)]}function mSa(e){return Math.max(1,e-ZOi)}function hSa(e){return e+ZOi}function eEf(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function tEf(e,t){let r=e,n=r.length;if(n<=150)return r;t>n&&(t=n);let i=Math.max(t-60,0);i<5&&(i=0);let o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r=`...${r}`),o<n&&(r+="..."),r}function rEf(e,t){let r=!1;return Object.assign(n=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length===0;e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!r&&o&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function gSa(e,t){globalThis.process?.on("uncaughtException",rEf(e,t))}function ASa(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var nEf=2e3,sV=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new rvr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return TOi(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i};n||(o.$process_person_profile=!1);let s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n||sK(),properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(gSa(this.onException.bind(this),this.onFatalError.bind(this)),ASa(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(t,r),o=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(o)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o}):this.client.capture(n)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(nEf),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var ySa="5.26.2";var txt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function bSa(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var iEf=6e4,oEf=1152921504606847e3,sEf=["is_not"],z9e=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},ah=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},uK=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},hvr=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let u=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,u)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(c){c instanceof uK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${t}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${c}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(u=>this.featureFlagsByKey[u]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async u=>{try{let{value:c,payload:l}=await this.computeFlagAndPayloadLocally(u,a);n[u.key]=c,l&&(i[u.key]=l)}catch(c){c instanceof uK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${u.key}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${u.key}: ${c}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new ah("Flag has experience continuity enabled");if(!t.active)return!1;let u=(t.filters||{}).aggregation_group_type_index;if(u!=null){let c=this.groupTypeMapping[String(u)];if(!c)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${u} for feature flag ${t.key}`)),new ah("Flag has unknown group type index");if(!(c in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[c];return await this.matchFeatureFlagProperties(t,i[c],l,r)}{let c=this.getBucketingValueForFlag(t,n,o);if(c===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new ah(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,c,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new ah("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new ah(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new ah(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new ah(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let u of s){if(!(u in i)){let l=this.featureFlagsByKey[u];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[u]=p}catch(p){throw new ah(`Error evaluating flag dependency '${u}' for flag '${o}': ${p}`)}else i[u]=!1;else throw new ah(`Missing flag dependency '${u}' for flag '${o}'`)}if(i[u]==null)throw new ah(`Dependency '${u}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,u;for(let c of s)try{if(await this.isConditionMatch(t,r,c,n,i)){let l=c.variant,p=o.multivariate?.variants||[];u=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof uK)throw l;if(l instanceof ah)a=!0;else throw l}if(u!==void 0)return u;if(a)throw new ah("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=u=>{this.logMsgIfDebug(()=>console.warn(u))};if((n.properties||[]).length>0){for(let u of n.properties){let c=u.type,l=!1;if(l=c==="cohort"?CSa(u,i,this.cohorts,this.debugMode):c==="flag"?await this.evaluateFlagDependency(u,i,o):wSa(u,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await ESa(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await ESa(t.key,r,"variant"),i=this.variantLookupTable(t).find(o=>n>=o.valueMin&&n<o.valueMax);if(i)return i.key}variantLookupTable(t){let r=[],n=0,i=0;return((t.filters||{}).multivariate?.variants||[]).forEach(a=>{i=n+a.rollout_percentage/100,r.push({valueMin:n,valueMax:i,key:a.key}),n=i}),r}updateFlagState(t){this.featureFlags=t.flags,this.featureFlagsByKey=t.flags.reduce((r,n)=>(r[n.key]=n,r),{}),this.groupTypeMapping=t.groupTypeMapping,this.cohorts=t.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags(t){if(this.strictLocalEvaluation)return;let r=t.filter(n=>n.ensure_experience_continuity);r.length>0&&console.warn(`[PostHog] You are using local evaluation but ${r.length} flag(s) have experience continuity enabled: ${r.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(t){if(!this.cacheProvider)return!1;try{let r=await this.cacheProvider.getFlagDefinitions();return r?(this.updateFlagState(r),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${t} (${r.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(r.flags),!0):!1}catch(r){return this.onError?.(new Error(`Failed to load from cache: ${r}`)),!1}}async loadFeatureFlags(t=!1){if(!(this.loadedSuccessfullyOnce&&!t))return!t&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(r=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${r}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){return this.shouldBeginExponentialBackoff?Math.min(iEf,this.pollingInterval*2**this.backOffCount):this.pollingInterval}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0),this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let t=!0;if(this.cacheProvider)try{t=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!t&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let r=await this._requestFeatureFlagDefinitions();if(!r)return;switch(r.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=r.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new z9e(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new z9e(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new z9e(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await r.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=r.headers?.get("ETag")??void 0;let i={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{}};if(this.updateFlagState(i),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(i)}catch(o){this.onError?.(new Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(i.flags);break}default:return}}catch(t){t instanceof z9e&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/api/feature_flag/local_evaluation?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=qPe(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function ESa(e,t,r=""){let n=await bSa(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/oEf}function wSa(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")throw new ah("Operator is_not_set is not supported")}else throw new ah(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!sEf.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(c,l){return Array.isArray(c)?c.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(c).toLowerCase()===String(l).toLowerCase()}function u(c,l,p){if(p==="gt")return c>l;if(p==="gte")return c>=l;if(p==="lt")return c<l;if(p==="lte")return c<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return vSa(String(i))&&String(s).match(String(i))!==null;case"not_regex":return vSa(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let c=typeof i=="number"?i:null;if(typeof i=="string")try{c=parseFloat(i)}catch{}return c==null||s==null?u(String(s),String(i),o):typeof s=="string"?u(s,String(i),o):u(s,c,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new ah("Date operations cannot be performed on boolean values");let c=uEf(String(i));if(c==null&&(c=ISa(i)),c==null)throw new ah(`Invalid date: ${i}`);let l=ISa(s);return["is_date_before"].includes(o)?l<c:l>c}default:throw new ah(`Unknown operator: ${o}`)}}function aEf(e,t){if(!(e in t))throw new uK(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function CSa(e,t,r,n=!1){let i=String(e.value);aEf(i,r);let o=r[i];return xSa(o,t,r,n)}function xSa(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let u=xSa(a,t,r,n);if(i==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof uK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let u;if(a.type==="cohort")u=CSa(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else u=wSa(a,t);let c=a.negation||!1;if(i==="AND"){if(!u&&!c||u&&c)return!1}else if(u&&!c||!u&&c)return!0}catch(u){if(u instanceof uK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("can't match cohort without a given cohort property value");return i==="AND"}function vSa(e){try{return new RegExp(e),!0}catch{return!1}}function ISa(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new ah(`${e} is in an invalid date format`)}throw new ah(`The date provided ${e} must be a string, number, or date object`)}function uEf(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r)return null;{if(!r.groups)return null;let i=parseInt(r.groups.number);if(i>=1e4)return null;let o=r.groups.interval;if(o=="h")n.setUTCHours(n.getUTCHours()-i);else if(o=="d")n.setUTCDate(n.getUTCDate()-i);else if(o=="w")n.setUTCDate(n.getUTCDate()-7*i);else if(o=="m")n.setUTCMonth(n.getUTCMonth()-i);else{if(o!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-i)}return n}}var gvr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var cEf=100,_Sa=3e4,lEf=5e4,Avr=class extends ext{constructor(t,r={}){if(super(t,r),this._memoryStorage=new gvr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,cEf):_Sa,r.personalApiKey){if(r.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');r.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new hvr({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:r.personalApiKey,projectApiKey:t,timeout:r.requestTimeout??1e4,host:this.host,fetch:r.fetch,onError:i=>{this._events.emit("error",i)},onLoad:i=>{this._events.emit("localEvaluationFlagsLoaded",i)},customHeaders:this.getCustomHeaders(),cacheProvider:r.flagDefinitionCacheProvider,strictLocalEvaluation:r.strictLocalEvaluation}))}this.errorTracking=new sV(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||lEf}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return ySa}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}capture(t){typeof t=="string"&&this._logger.warn("Called capture() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStateless(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}async captureImmediate(t){return typeof t=="string"&&this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStatelessImmediate(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}identify({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStateless(t,l,{disableGeoip:n})}async identifyImmediate({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStatelessImmediate(t,l,{disableGeoip:n})}alias(t){super.aliasStateless(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}async aliasImmediate(t){await super.aliasStatelessImmediate(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(t=_Sa){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let w=this._flagOverrides[t];if(w===void 0)return;let x=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:x}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f,m=!1,h,g,A,E,v,b;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let x=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(x){m=!0;let C=x.value;E=w.id,b="Evaluated locally",f={key:t,enabled:C!==!1,variant:typeof C=="string"?C:void 0,payload:x.payload??void 0}}}catch(x){if(x instanceof uK||x instanceof ah)this._logger?.info(`${x.name} when computing flag locally: ${t}: ${x.message}`);else throw x}}if(!m&&!u){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)A=txt.UNKNOWN_ERROR;else{h=w.requestId,g=w.evaluatedAt;let x=[];w.errorsWhileComputingFlags&&x.push(txt.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&x.push(txt.QUOTA_LIMITED);let C=w.flags[t];if(C===void 0)x.push(txt.FLAG_MISSING);else{E=C.metadata?.id,v=C.metadata?.version,b=C.reason?.description??C.reason?.code;let _;if(C.metadata?.payload!==void 0)try{_=JSON.parse(C.metadata.payload)}catch{_=C.metadata.payload}f={key:t,enabled:C.enabled,variant:C.variant,payload:_}}x.length>0&&(A=x.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,x=`${t}_${w}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(x)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(x):this.distinctIdHasSentFlagCalls[r]=[x];let C={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:E,$feature_flag_version:v,$feature_flag_reason:b,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():g};if(m&&this.featureFlagsPoller){let _=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();_!==void 0&&(C.$feature_flag_definitions_loaded_at=_)}A&&(C.$feature_flag_error=A),this.capture({distinctId:r,event:"$feature_flag_called",properties:C,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},g=!0;if(f&&(m=f.response,h=f.payloads,g=f.fallbackToFlags),g&&!u){let A=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...A.flags||{}},h={...h,...A.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){return this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown(),super._shutdown(t)}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=qPe(()=>{o.abort()},this.options.requestTimeout),n.signal=o.signal}try{return await this.fetch(r,n)}catch(o){this._events.emit("error",o);return}finally{i&&clearTimeout(i)}}extractPropertiesFromEvent(t,r){if(!t)return{personProperties:{},groupProperties:{}};let n={},i={};for(let[o,s]of Object.entries(t))if(R1a(s)&&r&&o in r){let a={};for(let[u,c]of Object.entries(s))a[String(u)]=String(c);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!sV.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(sV.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!sV.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");this.addPendingPromise(sV.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=sK(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,u,h)}return f.event,{}}).then(h=>{let g={};if(h)for(let[E,v]of Object.entries(h))g[`$feature/${E}`]=v;let A=Object.keys(h||{}).filter(E=>h?.[E]!==!1).sort();return A.length>0&&(g.$active_feature_flags=A),g}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&B1a(m.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(f.event="$bot_pageview",m.$browser_type="bot"),{distinctId:f.distinctId,event:f.event,properties:m,options:{timestamp:f.timestamp,disableGeoip:f.disableGeoip,uuid:f.uuid}}}_runBeforeSend(t){let r=this.options.before_send;if(!r)return t;let n=Array.isArray(r)?r:[r],i=t;for(let o of n){if(i=o(i),!i)return this._logger.info(`Event '${t.event}' was rejected in beforeSend function`),null;if(!i.properties||Object.keys(i.properties).length===0){let s=`Event '${i.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return i}};var SSa=require("async_hooks"),yvr=class{constructor(){this.storage=new SSa.AsyncLocalStorage}get(){return this.storage.getStore()}run(t,r,n){return this.storage.run(this.resolve(t,n),r)}enter(t,r){this.storage.enterWith(this.resolve(t,r))}resolve(t,r){if(r?.fresh===!0)return t;let n=this.get()||{};return{distinctId:t.distinctId??n.distinctId,sessionId:t.sessionId??n.sessionId,properties:{...n.properties||{},...t.properties||{}}}}};var BSa="posthog-node";function pEf(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let u=s.tags[ePi.POSTHOG_ID_TAG];if(u===void 0)return s;let c=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${u}`,c).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:u,properties:f}),s}}var ePi=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=BSa,this.name=BSa,this.setupOnce=function(s,a){let u=a()?.getClient()?.getDsn()?.projectId;s(pEf(t,{organization:r,projectId:u,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};sV.errorPropertiesBuilder=new bF.ErrorPropertiesBuilder([new bF.EventCoercer,new bF.ErrorCoercer,new bF.ObjectCoercer,new bF.StringCoercer,new bF.PrimitiveCoercer],bF.createStackParser("node:javascript",bF.nodeStackLineParser),[C1a(),dSa]);var V9e=class extends Avr{getLibraryId(){return"posthog-node"}initializeContext(){return new yvr}};var bvr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new V9e(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"4.32.0",usingAccessToken:!0}})}async flush(){await this.posthog.flush()}};var rxt=class{async sendEvent(){}async identify(){}async flush(){}};Vt();var q9e=require("fs/promises"),OSa=require("os"),PSa=require("path");var fEf="id",dEf=".fern",nxt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new V9e(r),this.userId=t==null?void 0:ACi(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"4.32.0",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){await this.posthog.flush()}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await FA({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=We(Ut.of((0,OSa.homedir)()),Se.of(dEf),Se.of(fEf));await Xt(t)||(await(0,q9e.mkdir)((0,PSa.dirname)(t),{recursive:!0}),await(0,q9e.writeFile)(t,hC())),this.persistedDistinctId=(await(0,q9e.readFile)(t)).toString()}return this.persistedDistinctId}};var tPi;async function G9e(){return tPi==null&&(tPi=await mEf()),tPi}async function mEf(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new rxt;let r=await Dhr();return r!=null?new nxt({token:r,posthogApiKey:e}):await VH()!=null?new bvr({posthogApiKey:e}):new nxt({token:void 0,posthogApiKey:e})}catch{return new rxt}}Rt();var ixt=_e(require("process"),1);pNe();var RSa=_e(wAi(),1),FSa=_e(DSa(),1);function DC(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=A5(e),e.length===0))return 0;e=e.replace((0,FSa.default)()," ");let r=t.ambiguousIsNarrow?1:2,n=0;for(let i of e){let o=i.codePointAt(0);if(o<=31||o>=127&&o<=159||o>=768&&o<=879)continue;switch(RSa.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function Evr(e){let t=0;for(let r of e.split(`
|
|
1656
|
+
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let u=nSa.test(a)?a.replace(nSa,"$1"):a;if(!u.match(/\S*Error: /)){for(let c of t){let l=c(u,e);if(l){i.push(l);break}}if(i.length>=iSa)break}}return oSa(i)}}var qOi=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=JCt(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:n?t.stack:void 0,cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){let r=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?`${r}: ${t.message}`:r}isDOMException(t){return VPe(t,"DOMException")}isDOMError(t){return VPe(t,"DOMError")}};var GOi=class{match(t){return DOi(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var WOi=class{constructor(){}match(t){return D1a(t)&&t.error!=null}coerce(t,r){let n=r.apply(t.error);return n||{type:"ErrorEvent",value:t.message,stack:r.syntheticException?.stack,synthetic:!0}}};var q0f=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,$Oi=class{match(t){return typeof t=="string"}coerce(t,r){let[n,i]=this.getInfos(t);return{type:n??"Error",value:i??t,stack:r.syntheticException?.stack,synthetic:!0}}getInfos(t){let r="Error",n=t,i=t.match(q0f);return i&&(r=i[1],n=i[2]),[r,n]}};var aSa=["fatal","error","warning","log","info","debug"];function dvr(e,t=40){let r=Object.keys(e);if(r.sort(),!r.length)return"[object has no keys]";for(let n=r.length;n>0;n--){let i=r.slice(0,n).join(", ");if(!(i.length>t))return n===r.length||i.length<=t?i:`${i.slice(0,t)}...`}return""}var HOi=class{match(t){return typeof t=="object"&&t!==null}coerce(t,r){let n=this.getErrorPropertyFromObject(t);return n?r.apply(n):{type:this.getType(t),value:this.getValue(t),stack:r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return tvr(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&typeof t.name=="string"){let i=`'${t.name}' captured as exception`;return"message"in t&&typeof t.message=="string"&&(i+=` with message: '${t.message}'`),i}if("message"in t&&typeof t.message=="string")return t.message;let r=this.getObjectClassName(t),n=dvr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return JCt(t)&&!P1a(t)&&aSa.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(W1a(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var KOi=class{match(t){return tvr(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${dvr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var JOi=class{match(t){return YCt(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var YOi=class{match(t){return VPe(t,"PromiseRejectionEvent")}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return YCt(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){if(YCt(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var XOi=class{constructor(t){this._maxSize=t,this._cache=new Map}get(t){let r=this._cache.get(t);if(r!==void 0)return this._cache.delete(t),this._cache.set(t,r),r}set(t,r){this._cache.set(t,r)}reduce(){for(;this._cache.size>=this._maxSize;){let t=this._cache.keys().next().value;t&&this._cache.delete(t)}}};var lSa=require("fs"),pSa=require("readline"),mvr=new bF.ReduceableCache(25),fSa=new bF.ReduceableCache(20),ZOi=7,G0f=1e3,W0f=1e4;async function dSa(e){let t={};for(let i=e.length-1;i>=0;i--){let o=e[i],s=o?.filename;if(!o||typeof s!="string"||typeof o.lineno!="number"||J0f(s)||Y0f(o))continue;t[s]||(t[s]=[]),t[s].push(o.lineno)}let r=Object.keys(t);if(r.length==0)return e;let n=[];for(let i of r){if(fSa.get(i))continue;let o=t[i];if(!o)continue;o.sort((u,c)=>u-c);let s=Z0f(o);if(s.every(u=>X0f(i,u)))continue;let a=eEf(mvr,i,{});n.push($0f(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&H0f(e,mvr),mvr.reduce(),e}function $0f(e,t,r){return new Promise(n=>{let i=(0,lSa.createReadStream)(e),o=(0,pSa.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,u=0,c=t[u];if(c===void 0)return void s();let l=c[0],p=c[1];function d(){fSa.set(e,1),o.close(),o.removeAllListeners(),s()}i.on("error",d),o.on("error",d),o.on("close",s),o.on("line",f=>{if(a++,!(a<l)&&(r[a]=tEf(f,0),a>=p)){if(u===t.length-1){o.close(),o.removeAllListeners();return}u++;let m=t[u];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function H0f(e,t){for(let r of e)if(r.filename&&r.context_line===void 0&&typeof r.lineno=="number"){let n=t.get(r.filename);if(n===void 0)continue;K0f(r.lineno,r,n)}}function K0f(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=mSa(e);i<e;i++){let o=r[i];if(o===void 0)return void uSa(t);t.pre_context.push(o)}if(r[e]===void 0)return void uSa(t);t.context_line=r[e];let n=hSa(e);t.post_context=[];for(let i=e+1;i<=n;i++){let o=r[i];if(o===void 0)break;t.post_context.push(o)}}function uSa(e){delete e.pre_context,delete e.context_line,delete e.post_context}function J0f(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Y0f(e){return e.lineno!==void 0&&e.lineno>W0f||e.colno!==void 0&&e.colno>G0f}function X0f(e,t){let r=mvr.get(e);if(r===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(r[n]===void 0)return!1;return!0}function Z0f(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=cSa(r),i=[];for(;;){if(t===e.length-1){i.push(n);break}let o=e[t+1];if(typeof o!="number")break;o<=n[1]?n[1]=o+ZOi:(i.push(n),n=cSa(o)),t++}return i}function cSa(e){return[mSa(e),hSa(e)]}function mSa(e){return Math.max(1,e-ZOi)}function hSa(e){return e+ZOi}function eEf(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function tEf(e,t){let r=e,n=r.length;if(n<=150)return r;t>n&&(t=n);let i=Math.max(t-60,0);i<5&&(i=0);let o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r=`...${r}`),o<n&&(r+="..."),r}function rEf(e,t){let r=!1;return Object.assign(n=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length===0;e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!r&&o&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function gSa(e,t){globalThis.process?.on("uncaughtException",rEf(e,t))}function ASa(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var nEf=2e3,sV=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new rvr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return TOi(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i};n||(o.$process_person_profile=!1);let s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n||sK(),properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(gSa(this.onException.bind(this),this.onFatalError.bind(this)),ASa(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(t,r),o=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(o)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o}):this.client.capture(n)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(nEf),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var ySa="5.26.2";var txt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function bSa(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var iEf=6e4,oEf=1152921504606847e3,sEf=["is_not"],z9e=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},ah=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},uK=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},hvr=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let u=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,u)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(c){c instanceof uK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${t}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${c}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(u=>this.featureFlagsByKey[u]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async u=>{try{let{value:c,payload:l}=await this.computeFlagAndPayloadLocally(u,a);n[u.key]=c,l&&(i[u.key]=l)}catch(c){c instanceof uK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${u.key}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${u.key}: ${c}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new ah("Flag has experience continuity enabled");if(!t.active)return!1;let u=(t.filters||{}).aggregation_group_type_index;if(u!=null){let c=this.groupTypeMapping[String(u)];if(!c)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${u} for feature flag ${t.key}`)),new ah("Flag has unknown group type index");if(!(c in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[c];return await this.matchFeatureFlagProperties(t,i[c],l,r)}{let c=this.getBucketingValueForFlag(t,n,o);if(c===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new ah(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,c,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new ah("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new ah(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new ah(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new ah(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let u of s){if(!(u in i)){let l=this.featureFlagsByKey[u];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[u]=p}catch(p){throw new ah(`Error evaluating flag dependency '${u}' for flag '${o}': ${p}`)}else i[u]=!1;else throw new ah(`Missing flag dependency '${u}' for flag '${o}'`)}if(i[u]==null)throw new ah(`Dependency '${u}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,u;for(let c of s)try{if(await this.isConditionMatch(t,r,c,n,i)){let l=c.variant,p=o.multivariate?.variants||[];u=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof uK)throw l;if(l instanceof ah)a=!0;else throw l}if(u!==void 0)return u;if(a)throw new ah("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=u=>{this.logMsgIfDebug(()=>console.warn(u))};if((n.properties||[]).length>0){for(let u of n.properties){let c=u.type,l=!1;if(l=c==="cohort"?CSa(u,i,this.cohorts,this.debugMode):c==="flag"?await this.evaluateFlagDependency(u,i,o):wSa(u,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await ESa(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await ESa(t.key,r,"variant"),i=this.variantLookupTable(t).find(o=>n>=o.valueMin&&n<o.valueMax);if(i)return i.key}variantLookupTable(t){let r=[],n=0,i=0;return((t.filters||{}).multivariate?.variants||[]).forEach(a=>{i=n+a.rollout_percentage/100,r.push({valueMin:n,valueMax:i,key:a.key}),n=i}),r}updateFlagState(t){this.featureFlags=t.flags,this.featureFlagsByKey=t.flags.reduce((r,n)=>(r[n.key]=n,r),{}),this.groupTypeMapping=t.groupTypeMapping,this.cohorts=t.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags(t){if(this.strictLocalEvaluation)return;let r=t.filter(n=>n.ensure_experience_continuity);r.length>0&&console.warn(`[PostHog] You are using local evaluation but ${r.length} flag(s) have experience continuity enabled: ${r.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(t){if(!this.cacheProvider)return!1;try{let r=await this.cacheProvider.getFlagDefinitions();return r?(this.updateFlagState(r),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${t} (${r.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(r.flags),!0):!1}catch(r){return this.onError?.(new Error(`Failed to load from cache: ${r}`)),!1}}async loadFeatureFlags(t=!1){if(!(this.loadedSuccessfullyOnce&&!t))return!t&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(r=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${r}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){return this.shouldBeginExponentialBackoff?Math.min(iEf,this.pollingInterval*2**this.backOffCount):this.pollingInterval}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0),this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let t=!0;if(this.cacheProvider)try{t=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!t&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let r=await this._requestFeatureFlagDefinitions();if(!r)return;switch(r.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=r.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new z9e(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new z9e(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new z9e(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await r.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=r.headers?.get("ETag")??void 0;let i={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{}};if(this.updateFlagState(i),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(i)}catch(o){this.onError?.(new Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(i.flags);break}default:return}}catch(t){t instanceof z9e&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/api/feature_flag/local_evaluation?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=qPe(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function ESa(e,t,r=""){let n=await bSa(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/oEf}function wSa(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")throw new ah("Operator is_not_set is not supported")}else throw new ah(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!sEf.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(c,l){return Array.isArray(c)?c.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(c).toLowerCase()===String(l).toLowerCase()}function u(c,l,p){if(p==="gt")return c>l;if(p==="gte")return c>=l;if(p==="lt")return c<l;if(p==="lte")return c<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return vSa(String(i))&&String(s).match(String(i))!==null;case"not_regex":return vSa(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let c=typeof i=="number"?i:null;if(typeof i=="string")try{c=parseFloat(i)}catch{}return c==null||s==null?u(String(s),String(i),o):typeof s=="string"?u(s,String(i),o):u(s,c,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new ah("Date operations cannot be performed on boolean values");let c=uEf(String(i));if(c==null&&(c=ISa(i)),c==null)throw new ah(`Invalid date: ${i}`);let l=ISa(s);return["is_date_before"].includes(o)?l<c:l>c}default:throw new ah(`Unknown operator: ${o}`)}}function aEf(e,t){if(!(e in t))throw new uK(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function CSa(e,t,r,n=!1){let i=String(e.value);aEf(i,r);let o=r[i];return xSa(o,t,r,n)}function xSa(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let u=xSa(a,t,r,n);if(i==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof uK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let u;if(a.type==="cohort")u=CSa(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else u=wSa(a,t);let c=a.negation||!1;if(i==="AND"){if(!u&&!c||u&&c)return!1}else if(u&&!c||!u&&c)return!0}catch(u){if(u instanceof uK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("can't match cohort without a given cohort property value");return i==="AND"}function vSa(e){try{return new RegExp(e),!0}catch{return!1}}function ISa(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new ah(`${e} is in an invalid date format`)}throw new ah(`The date provided ${e} must be a string, number, or date object`)}function uEf(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r)return null;{if(!r.groups)return null;let i=parseInt(r.groups.number);if(i>=1e4)return null;let o=r.groups.interval;if(o=="h")n.setUTCHours(n.getUTCHours()-i);else if(o=="d")n.setUTCDate(n.getUTCDate()-i);else if(o=="w")n.setUTCDate(n.getUTCDate()-7*i);else if(o=="m")n.setUTCMonth(n.getUTCMonth()-i);else{if(o!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-i)}return n}}var gvr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var cEf=100,_Sa=3e4,lEf=5e4,Avr=class extends ext{constructor(t,r={}){if(super(t,r),this._memoryStorage=new gvr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,cEf):_Sa,r.personalApiKey){if(r.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');r.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new hvr({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:r.personalApiKey,projectApiKey:t,timeout:r.requestTimeout??1e4,host:this.host,fetch:r.fetch,onError:i=>{this._events.emit("error",i)},onLoad:i=>{this._events.emit("localEvaluationFlagsLoaded",i)},customHeaders:this.getCustomHeaders(),cacheProvider:r.flagDefinitionCacheProvider,strictLocalEvaluation:r.strictLocalEvaluation}))}this.errorTracking=new sV(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||lEf}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return ySa}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}capture(t){typeof t=="string"&&this._logger.warn("Called capture() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStateless(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}async captureImmediate(t){return typeof t=="string"&&this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStatelessImmediate(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}identify({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStateless(t,l,{disableGeoip:n})}async identifyImmediate({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStatelessImmediate(t,l,{disableGeoip:n})}alias(t){super.aliasStateless(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}async aliasImmediate(t){await super.aliasStatelessImmediate(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(t=_Sa){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let w=this._flagOverrides[t];if(w===void 0)return;let x=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:x}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f,m=!1,h,g,A,E,v,b;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let x=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(x){m=!0;let C=x.value;E=w.id,b="Evaluated locally",f={key:t,enabled:C!==!1,variant:typeof C=="string"?C:void 0,payload:x.payload??void 0}}}catch(x){if(x instanceof uK||x instanceof ah)this._logger?.info(`${x.name} when computing flag locally: ${t}: ${x.message}`);else throw x}}if(!m&&!u){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)A=txt.UNKNOWN_ERROR;else{h=w.requestId,g=w.evaluatedAt;let x=[];w.errorsWhileComputingFlags&&x.push(txt.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&x.push(txt.QUOTA_LIMITED);let C=w.flags[t];if(C===void 0)x.push(txt.FLAG_MISSING);else{E=C.metadata?.id,v=C.metadata?.version,b=C.reason?.description??C.reason?.code;let _;if(C.metadata?.payload!==void 0)try{_=JSON.parse(C.metadata.payload)}catch{_=C.metadata.payload}f={key:t,enabled:C.enabled,variant:C.variant,payload:_}}x.length>0&&(A=x.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,x=`${t}_${w}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(x)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(x):this.distinctIdHasSentFlagCalls[r]=[x];let C={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:E,$feature_flag_version:v,$feature_flag_reason:b,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():g};if(m&&this.featureFlagsPoller){let _=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();_!==void 0&&(C.$feature_flag_definitions_loaded_at=_)}A&&(C.$feature_flag_error=A),this.capture({distinctId:r,event:"$feature_flag_called",properties:C,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},g=!0;if(f&&(m=f.response,h=f.payloads,g=f.fallbackToFlags),g&&!u){let A=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...A.flags||{}},h={...h,...A.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){return this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown(),super._shutdown(t)}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=qPe(()=>{o.abort()},this.options.requestTimeout),n.signal=o.signal}try{return await this.fetch(r,n)}catch(o){this._events.emit("error",o);return}finally{i&&clearTimeout(i)}}extractPropertiesFromEvent(t,r){if(!t)return{personProperties:{},groupProperties:{}};let n={},i={};for(let[o,s]of Object.entries(t))if(R1a(s)&&r&&o in r){let a={};for(let[u,c]of Object.entries(s))a[String(u)]=String(c);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!sV.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(sV.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!sV.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");this.addPendingPromise(sV.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=sK(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,u,h)}return f.event,{}}).then(h=>{let g={};if(h)for(let[E,v]of Object.entries(h))g[`$feature/${E}`]=v;let A=Object.keys(h||{}).filter(E=>h?.[E]!==!1).sort();return A.length>0&&(g.$active_feature_flags=A),g}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&B1a(m.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(f.event="$bot_pageview",m.$browser_type="bot"),{distinctId:f.distinctId,event:f.event,properties:m,options:{timestamp:f.timestamp,disableGeoip:f.disableGeoip,uuid:f.uuid}}}_runBeforeSend(t){let r=this.options.before_send;if(!r)return t;let n=Array.isArray(r)?r:[r],i=t;for(let o of n){if(i=o(i),!i)return this._logger.info(`Event '${t.event}' was rejected in beforeSend function`),null;if(!i.properties||Object.keys(i.properties).length===0){let s=`Event '${i.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return i}};var SSa=require("async_hooks"),yvr=class{constructor(){this.storage=new SSa.AsyncLocalStorage}get(){return this.storage.getStore()}run(t,r,n){return this.storage.run(this.resolve(t,n),r)}enter(t,r){this.storage.enterWith(this.resolve(t,r))}resolve(t,r){if(r?.fresh===!0)return t;let n=this.get()||{};return{distinctId:t.distinctId??n.distinctId,sessionId:t.sessionId??n.sessionId,properties:{...n.properties||{},...t.properties||{}}}}};var BSa="posthog-node";function pEf(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let u=s.tags[ePi.POSTHOG_ID_TAG];if(u===void 0)return s;let c=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${u}`,c).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:u,properties:f}),s}}var ePi=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=BSa,this.name=BSa,this.setupOnce=function(s,a){let u=a()?.getClient()?.getDsn()?.projectId;s(pEf(t,{organization:r,projectId:u,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};sV.errorPropertiesBuilder=new bF.ErrorPropertiesBuilder([new bF.EventCoercer,new bF.ErrorCoercer,new bF.ObjectCoercer,new bF.StringCoercer,new bF.PrimitiveCoercer],bF.createStackParser("node:javascript",bF.nodeStackLineParser),[C1a(),dSa]);var V9e=class extends Avr{getLibraryId(){return"posthog-node"}initializeContext(){return new yvr}};var bvr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new V9e(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"4.32.1",usingAccessToken:!0}})}async flush(){await this.posthog.flush()}};var rxt=class{async sendEvent(){}async identify(){}async flush(){}};Vt();var q9e=require("fs/promises"),OSa=require("os"),PSa=require("path");var fEf="id",dEf=".fern",nxt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new V9e(r),this.userId=t==null?void 0:ACi(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"4.32.1",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){await this.posthog.flush()}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await FA({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=We(Ut.of((0,OSa.homedir)()),Se.of(dEf),Se.of(fEf));await Xt(t)||(await(0,q9e.mkdir)((0,PSa.dirname)(t),{recursive:!0}),await(0,q9e.writeFile)(t,hC())),this.persistedDistinctId=(await(0,q9e.readFile)(t)).toString()}return this.persistedDistinctId}};var tPi;async function G9e(){return tPi==null&&(tPi=await mEf()),tPi}async function mEf(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new rxt;let r=await Dhr();return r!=null?new nxt({token:r,posthogApiKey:e}):await VH()!=null?new bvr({posthogApiKey:e}):new nxt({token:void 0,posthogApiKey:e})}catch{return new rxt}}Rt();var ixt=_e(require("process"),1);pNe();var RSa=_e(wAi(),1),FSa=_e(DSa(),1);function DC(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=A5(e),e.length===0))return 0;e=e.replace((0,FSa.default)()," ");let r=t.ambiguousIsNarrow?1:2,n=0;for(let i of e){let o=i.codePointAt(0);if(o<=31||o>=127&&o<=159||o>=768&&o<=879)continue;switch(RSa.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function Evr(e){let t=0;for(let r of e.split(`
|
|
1657
1657
|
`))t=Math.max(t,DC(r));return t}var eBa=_e(nPi(),1);var gEf=/[\p{Lu}]/u,AEf=/[\p{Ll}]/u,NSa=/^[\p{Lu}](?![\p{Lu}])/gu,LSa=/([\p{Alpha}\p{N}_]|$)/u,iPi=/[_.\- ]+/,yEf=new RegExp("^"+iPi.source),jSa=new RegExp(iPi.source+LSa.source,"gu"),MSa=new RegExp("\\d+"+LSa.source,"gu"),bEf=(e,t,r,n)=>{let i=!1,o=!1,s=!1,a=!1;for(let u=0;u<e.length;u++){let c=e[u];a=u>2?e[u-3]==="-":!0,i&&gEf.test(c)?(e=e.slice(0,u)+"-"+e.slice(u),i=!1,s=o,o=!0,u++):o&&s&&AEf.test(c)&&(!a||n)?(e=e.slice(0,u-1)+"-"+e.slice(u-1),s=o,o=!1,i=!0):(i=t(c)===c&&r(c)!==c,s=o,o=r(c)===c&&t(c)!==c)}return e},EEf=(e,t)=>(NSa.lastIndex=0,e.replace(NSa,r=>t(r))),vEf=(e,t)=>(jSa.lastIndex=0,MSa.lastIndex=0,e.replace(jSa,(r,n)=>t(n)).replace(MSa,r=>t(r)));function oPi(e,t){if(!(typeof e=="string"||Array.isArray(e)))throw new TypeError("Expected the input to be `string | string[]`");if(t={pascalCase:!1,preserveConsecutiveUppercase:!1,...t},Array.isArray(e)?e=e.map(o=>o.trim()).filter(o=>o.length).join("-"):e=e.trim(),e.length===0)return"";let r=t.locale===!1?o=>o.toLowerCase():o=>o.toLocaleLowerCase(t.locale),n=t.locale===!1?o=>o.toUpperCase():o=>o.toLocaleUpperCase(t.locale);return e.length===1?iPi.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=bEf(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(yEf,""),e=t.preserveConsecutiveUppercase?EEf(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),vEf(e,n))}var cPi=_e(zSa(),1);pNe();var VSa=(e=0)=>t=>`\x1B[${t+e}m`,qSa=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,GSa=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,Iy={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},ILy=Object.keys(Iy.modifier),xEf=Object.keys(Iy.color),_Ef=Object.keys(Iy.bgColor),wLy=[...xEf,..._Ef];function SEf(){let e=new Map;for(let[t,r]of Object.entries(Iy)){for(let[n,i]of Object.entries(r))Iy[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=Iy[n],e.set(i[0],i[1]);Object.defineProperty(Iy,t,{value:r,enumerable:!1})}return Object.defineProperty(Iy,"codes",{value:e,enumerable:!1}),Iy.color.close="\x1B[39m",Iy.bgColor.close="\x1B[49m",Iy.color.ansi=VSa(),Iy.color.ansi256=qSa(),Iy.color.ansi16m=GSa(),Iy.bgColor.ansi=VSa(10),Iy.bgColor.ansi256=qSa(10),Iy.bgColor.ansi16m=GSa(10),Object.defineProperties(Iy,{rgbToAnsi256:{value(t,r,n){return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[n]=r;n.length===3&&(n=[...n].map(o=>o+o).join(""));let i=Number.parseInt(n,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:t=>Iy.rgbToAnsi256(...Iy.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,n,i;if(t>=232)r=((t-232)*10+8)/255,n=r,i=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,n=Math.floor(a/6)/5,i=a%6/5}let o=Math.max(r,n,i)*2;if(o===0)return 30;let s=30+(Math.round(i)<<2|Math.round(n)<<1|Math.round(r));return o===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,n)=>Iy.ansi256ToAnsi(Iy.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>Iy.ansi256ToAnsi(Iy.hexToAnsi256(t)),enumerable:!1}}),Iy}var BEf=SEf(),WSa=BEf;var vvr=new Set(["\x1B","\x9B"]),OEf=39,aPi="\x07",KSa="[",PEf="]",JSa="m",uPi=`${PEf}8;;`,$Sa=e=>`${vvr.values().next().value}${KSa}${e}${JSa}`,HSa=e=>`${vvr.values().next().value}${uPi}${e}${aPi}`,TEf=e=>e.split(" ").map(t=>DC(t)),sPi=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=DC(A5(e[e.length-1]));for(let[a,u]of n.entries()){let c=DC(u);if(s+c<=r?e[e.length-1]+=u:(e.push(u),s=0),vvr.has(u)&&(i=!0,o=n.slice(a+1).join("").startsWith(uPi)),i){o?u===aPi&&(i=!1,o=!1):u===JSa&&(i=!1);continue}s+=c,s===r&&a<n.length-1&&(e.push(""),s=0)}!s&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},DEf=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(DC(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},REf=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=TEf(e),a=[""];for(let[c,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=DC(a[a.length-1]);if(c!==0&&(p>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),p=0),(p>0||r.trim===!1)&&(a[a.length-1]+=" ",p++)),r.hard&&s[c]>t){let d=t-p,f=1+Math.floor((s[c]-d-1)/t);Math.floor((s[c]-1)/t)<f&&a.push(""),sPi(a,l,t);continue}if(p+s[c]>t&&p>0&&s[c]>0){if(r.wordWrap===!1&&p<t){sPi(a,l,t);continue}a.push("")}if(p+s[c]>t&&r.wordWrap===!1){sPi(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(c=>DEf(c)));let u=[...a.join(`
|
|
1658
1658
|
`)];for(let[c,l]of u.entries()){if(n+=l,vvr.has(l)){let{groups:d}=new RegExp(`(?:\\${KSa}(?<code>\\d+)m|\\${uPi}(?<uri>.*)${aPi})`).exec(u.slice(c).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===OEf?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=WSa.codes.get(Number(i));u[c+1]===`
|
|
1659
1659
|
`?(o&&(n+=HSa("")),i&&p&&(n+=$Sa(p))):l===`
|
|
@@ -2141,7 +2141,7 @@ More information: https://mdxjs.com/docs/troubleshooting-mdx`);return i.stack=""
|
|
|
2141
2141
|
`.repeat(c)||" "),c=-1,u.push(l))}return u.join("")}function CWa(e,t,r){return e.type==="element"?FKf(e,t,r):e.type==="text"?r.whitespace==="normal"?xWa(e,r):kKf(e):[]}function FKf(e,t,r){let n=_Wa(e,r),i=e.children||[],o=-1,s=[];if(RKf(e))return s;let a,u;for(k5i(e)||IWa(e)&&R0n(t,e,IWa)?u=`
|
|
2142
2142
|
`:DKf(e)?(a=2,u=2):wWa(e)&&(a=1,u=1);++o<i.length;)s=s.concat(CWa(i[o],e,{whitespace:n,breakBefore:o?void 0:a,breakAfter:o<i.length-1?k5i(i[o+1]):u}));return vWa(e)&&R0n(t,e,vWa)&&s.push(" "),a&&s.unshift(a),u&&s.push(u),s}function xWa(e,t){let r=String(e.value),n=[],i=[],o=0;for(;o<=r.length;){bWa.lastIndex=o;let u=bWa.exec(r),c=u&&"index"in u?u.index:r.length;n.push(QKf(r.slice(o,c).replace(/[\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,""),o===0?t.breakBefore:!0,c===r.length?t.breakAfter:!0)),o=c+1}let s=-1,a;for(;++s<n.length;)n[s].charCodeAt(n[s].length-1)===8203||s<n.length-1&&n[s+1].charCodeAt(0)===8203?(i.push(n[s]),a=void 0):n[s]?(typeof a=="number"&&i.push(a),i.push(n[s]),a=0):(s===0||s===n.length-1)&&i.push(0);return i}function kKf(e){return[String(e.value)]}function QKf(e,t,r){let n=[],i=0,o;for(;i<e.length;){EWa.lastIndex=i;let s=EWa.exec(e);o=s?s.index:e.length,!i&&!o&&s&&!t&&n.push(""),i!==o&&n.push(e.slice(i,o)),i=s?o+s[0].length:o}return i!==o&&!r&&n.push(""),n.join(" ")}function _Wa(e,t){if(e.type==="element"){let r=e.properties||{};switch(e.tagName){case"listing":case"plaintext":case"xmp":return"pre";case"nobr":return"nowrap";case"pre":return r.wrap?"pre-wrap":"pre";case"td":case"th":return r.noWrap?"nowrap":t.whitespace;case"textarea":return"pre-wrap";default:}}return t.whitespace}function NKf(e){return!!(e.properties||{}).hidden}function jKf(e){return e.tagName==="td"||e.tagName==="th"}function MKf(e){return e.tagName==="dialog"&&!(e.properties||{}).open}var LKf={},UKf=[];function F0n(e){let t=e||LKf;return function(r,n){WTe(r,"element",function(i,o){let s=Array.isArray(i.properties.className)?i.properties.className:UKf,a=s.includes("language-math"),u=s.includes("math-display"),c=s.includes("math-inline"),l=u;if(!a&&!u&&!c)return;let p=o[o.length-1],d=i;if(i.tagName==="code"&&a&&p&&p.type==="element"&&p.tagName==="pre"&&(d=p,p=o[o.length-2],l=!0),!p)return;let f=iN(d,{whitespace:"pre"}),m;try{m=bUi.renderToString(f,{...t,displayMode:l,throwOnError:!0})}catch(g){let A=g,E=A.name.toLowerCase();n.message("Could not render math with KaTeX",{ancestors:[...o,i],cause:A,place:i.position,ruleId:E,source:"rehype-katex"});try{m=bUi.renderToString(f,{...t,displayMode:l,strict:"ignore",throwOnError:!1})}catch{m=[{type:"element",tagName:"span",properties:{className:["katex-error"],style:"color:"+(t.errorColor||"#cc0000"),title:String(g)},children:[{type:"text",value:f}]}]}}typeof m=="string"&&(m=R5i(m,{fragment:!0}).children);let h=p.children.indexOf(d);return p.children.splice(h,1,...m),bT})}}var zKf={};function Ert(e){let t=this,r=e||zKf,n=t.data(),i=n.micromarkExtensions||(n.micromarkExtensions=[]),o=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),s=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);i.push(AAn(r)),o.push(_1t()),s.push(pLi(r))}var VKf={};function k0n(e){let t=this,r=e||VKf,n=t.data(),i=n.micromarkExtensions||(n.micromarkExtensions=[]),o=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),s=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);i.push(O1t(r)),o.push(S1t()),s.push(fLi(r))}var SWa={name:"valid-markdown",create:({logger:e,workspace:t})=>({markdownPage:async({content:r,absoluteFilepath:n})=>{let i;try{i=b4i(n)}catch(s){return[{severity:"error",message:`Markdown file does not have a valid extension: ${String(s)}`}]}let o=await $Kf({markdown:r,absoluteFilepath:n,absolutePathToFernFolder:An(t.absoluteFilepathToDocsConfig),logger:e});return o.type==="failure"?[{severity:"fatal",message:o.message!=null?`Markdown failed to parse: ${o.message}`:"Markdown failed to parse"}]:[]}})},qKf=[Ert,k0n],GKf=[F0n],WKf=mt.object({title:mt.optional(mt.string(),{description:"Renders as the page title."}),"og:title":mt.optional(mt.string(),{description:"Renders as the og:title tag."}),"og:description":mt.optional(mt.string(),{description:"Renders as the og:description tag."}),subtitle:mt.optional(mt.string(),{description:"Renders as a subtitle on the page, and is also used in the meta description tag if description is not set."}),description:mt.optional(mt.string(),{description:"Renders as the meta description tag."}),image:mt.optional(mt.string(),{description:"Renders as the og:image tag."}),slug:mt.optional(mt.string(),{description:"The full slug path for the page, starting from root `/` (or basepath)."}),redirects:mt.optional(mt.array(mt.string()),{description:"A list of URLs to redirect to this page."}),editThisPageUrl:mt.optional(mt.string()),excerpt:mt.optional(mt.string(),{description:"Deprecated. Use `subtitle` instead."})});async function $Kf({markdown:e,absoluteFilepath:t,absolutePathToFernFolder:r,logger:n}){try{n.trace(`Starting markdown parse for file: ${t}`),oae(e,{absolutePathToMarkdownFile:t,absolutePathToFernFolder:r}),n.trace("Serializing markdown with MDX");let i=await f5i(e,{scope:{},mdxOptions:{remarkPlugins:qKf,rehypePlugins:GKf,format:"detect"},parseFrontmatter:!0});n.trace("Validating frontmatter");let o=WKf.safeParse(i.frontmatter);return o.success?(n.trace("Markdown parse completed successfully"),{type:"success"}):(n.trace(`Frontmatter validation failed: ${o.error.errors.map(s=>s.message).join(", ")}`),{type:"failure",message:`Failed to parse frontmatter: ${o.error.errors.map(s=>s.message).join(`
|
|
2143
2143
|
`)}`})}catch(i){return n.trace(`Markdown parse failed with error: ${i instanceof Error?i.message:String(i)}`),{type:"failure",message:i instanceof Error?i.message:void 0}}}Vt();var BWa=require("fs/promises"),OWa=_e(m7(),1);var PWa={name:"valid-markdown-file-references",create:e=>({filepath:async({absoluteFilepath:t})=>{if(!t.endsWith(".md")&&!t.endsWith(".mdx"))return[];try{let r=await(0,BWa.readFile)(t,"utf-8"),{content:n}=(0,OWa.default)(r,{}),i=KEe(n),o=[];return wn(i,s=>{if(s.type==="link"){let a=YEe({href:vE(s.url),metadata:{absolutePathToFernFolder:t,absolutePathToMarkdownFile:t},markdownFilesToPathName:{}});if(a?.type==="missing-reference")try{let u=d9(Ut.of(a.path));o.push({severity:"error",message:u?`File ${a.href} does not exit`:`File ${a.href} exists but is not specified in docs.yml`})}catch{}}}),o}catch{return[]}}})};Rt();_g();Vt();var GWa=require("crypto"),q5i=_e(require("path"),1);Vt();function HKf(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,u="",o=r+1;if(e[o]==="?")throw new TypeError('Pattern cannot start with "?" at '.concat(o));for(;o<e.length;){if(e[o]==="\\"){u+=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));u+=e[o++]}if(a)throw new TypeError("Unbalanced pattern at ".concat(r));if(!u)throw new TypeError("Missing pattern at ".concat(r));t.push({type:"PATTERN",index:r,value:u}),r=o;continue}t.push({type:"CHAR",index:r,value:e[r++]})}return t.push({type:"END",index:r,value:""}),t}function TWa(e,t){t===void 0&&(t={});for(var r=HKf(e),n=t.prefixes,i=n===void 0?"./":n,o=t.delimiter,s=o===void 0?"/#?":o,a=[],u=0,c=0,l="",p=function(_){if(c<r.length&&r[c].type===_)return r[c++].value},d=function(_){var R=p(_);if(R!==void 0)return R;var U=r[c],q=U.type,z=U.index;throw new TypeError("Unexpected ".concat(q," at ").concat(z,", expected ").concat(_))},f=function(){for(var _="",R;R=p("CHAR")||p("ESCAPED_CHAR");)_+=R;return _},m=function(_){for(var R=0,U=s;R<U.length;R++){var q=U[R];if(_.indexOf(q)>-1)return!0}return!1},h=function(_){var R=a[a.length-1],U=_||(R&&typeof R=="string"?R:"");if(R&&!U)throw new TypeError('Must have text between two parameters, missing text after "'.concat(R.name,'"'));return!U||m(U)?"[^".concat(hve(s),"]+?"):"(?:(?!".concat(hve(U),")[^").concat(hve(s),"])+?")};c<r.length;){var g=p("CHAR"),A=p("NAME"),E=p("PATTERN");if(A||E){var v=g||"";i.indexOf(v)===-1&&(l+=v,v=""),l&&(a.push(l),l=""),a.push({name:A||u++,prefix:v,suffix:"",pattern:E||h(v),modifier:p("MODIFIER")||""});continue}var b=g||p("ESCAPED_CHAR");if(b){l+=b;continue}l&&(a.push(l),l="");var I=p("OPEN");if(I){var v=f(),w=p("NAME")||"",x=p("PATTERN")||"",C=f();d("CLOSE"),a.push({name:w||(x?u++:""),pattern:w&&!x?h(v):x,prefix:v,suffix:C,modifier:p("MODIFIER")||""});continue}d("END")}return a}function DWa(e,t){return KKf(TWa(e,t),t)}function KKf(e,t){t===void 0&&(t={});var r=Q5i(t),n=t.encode,i=n===void 0?function(u){return u}:n,o=t.validate,s=o===void 0?!0:o,a=e.map(function(u){if(typeof u=="object")return new RegExp("^(?:".concat(u.pattern,")$"),r)});return function(u){for(var c="",l=0;l<e.length;l++){var p=e[l];if(typeof p=="string"){c+=p;continue}var d=u?u[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 g=i(d[h],p);if(s&&!a[l].test(g))throw new TypeError('Expected all "'.concat(p.name,'" to match "').concat(p.pattern,'", but got "').concat(g,'"'));c+=p.prefix+g+p.suffix}continue}if(typeof d=="string"||typeof d=="number"){var g=i(String(d),p);if(s&&!a[l].test(g))throw new TypeError('Expected "'.concat(p.name,'" to match "').concat(p.pattern,'", but got "').concat(g,'"'));c+=p.prefix+g+p.suffix;continue}if(!f){var A=m?"an array":"a string";throw new TypeError('Expected "'.concat(p.name,'" to be ').concat(A))}}return c}}function RWa(e,t){var r=[],n=FWa(e,r,t);return JKf(n,r,t)}function JKf(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],u=s.index,c=Object.create(null),l=function(d){if(s[d]===void 0)return"continue";var f=t[d-1];f.modifier==="*"||f.modifier==="+"?c[f.name]=s[d].split(f.prefix+f.suffix).map(function(m){return i(m,f)}):c[f.name]=i(s[d],f)},p=1;p<s.length;p++)l(p);return{path:a,index:u,params:c}}}function hve(e){return e.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1")}function Q5i(e){return e&&e.sensitive?"":"i"}function YKf(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 XKf(e,t,r){var n=e.map(function(i){return FWa(i,t,r).source});return new RegExp("(?:".concat(n.join("|"),")"),Q5i(r))}function ZKf(e,t,r){return eJf(TWa(e,r),t,r)}function eJf(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,u=a===void 0?!0:a,c=r.encode,l=c===void 0?function(R){return R}:c,p=r.delimiter,d=p===void 0?"/#?":p,f=r.endsWith,m=f===void 0?"":f,h="[".concat(hve(m),"]|$"),g="[".concat(hve(d),"]"),A=s?"^":"",E=0,v=e;E<v.length;E++){var b=v[E];if(typeof b=="string")A+=hve(l(b));else{var I=hve(l(b.prefix)),w=hve(l(b.suffix));if(b.pattern)if(t&&t.push(b),I||w)if(b.modifier==="+"||b.modifier==="*"){var x=b.modifier==="*"?"?":"";A+="(?:".concat(I,"((?:").concat(b.pattern,")(?:").concat(w).concat(I,"(?:").concat(b.pattern,"))*)").concat(w,")").concat(x)}else A+="(?:".concat(I,"(").concat(b.pattern,")").concat(w,")").concat(b.modifier);else{if(b.modifier==="+"||b.modifier==="*")throw new TypeError('Can not repeat "'.concat(b.name,'" without a prefix and suffix'));A+="(".concat(b.pattern,")").concat(b.modifier)}else A+="(?:".concat(I).concat(w,")").concat(b.modifier)}}if(u)i||(A+="".concat(g,"?")),A+=r.endsWith?"(?=".concat(h,")"):"$";else{var C=e[e.length-1],_=typeof C=="string"?g.indexOf(C[C.length-1])>-1:C===void 0;i||(A+="(?:".concat(g,"(?=").concat(h,"))?")),_||(A+="(?=".concat(g,"|").concat(h,")"))}return new RegExp(A,Q5i(r))}function FWa(e,t,r){return e instanceof RegExp?YKf(e,t):Array.isArray(e)?XKf(e,t,r):ZKf(e,t,r)}var jWa=_e(Tp(),1);function kWa(e){return e.split(/[?#]/)[0]??""}function TDe(e){return e.startsWith("/")?e.slice(1):e}function N5i(e){return e.startsWith("/")?e:`/${e}`}function Q0n(e){return e.endsWith("/")?e.slice(0,-1):e}function QWa(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 j5i(e){let t=new URL(BT(e));return{domain:t.host,basePath:t.pathname==="/"||t.pathname===""?void 0:t.pathname}}function NWa(e,t){return t.some(r=>{try{let n=j5i(r);return e.host!==n.domain?!1:n.basePath!=null?e.pathname.startsWith(n.basePath):!0}catch{return!1}})}function tJf(e,t){if(e===t)return{params:{},path:t,index:0};try{return RWa(e)(t)}catch(r){return console.error(r,{pattern:e,path:t}),!1}}function rJf(e,t){try{return DWa(e)(t.params)}catch(r){return console.error(r,{match:t,destination:e}),e}}function MWa(e,t,r=[]){for(let n of r){let i=Q0n(nJf(n.source,t.basePath)),o=tJf(i,e);if(o){let s=rJf(n.destination,o);if(!s.startsWith("/"))try{new URL(s)}catch{console.error("Invalid redirect destination:",s);return}return{redirect:{destination:encodeURI(s),permanent:n.permanent??!1}}}}}function nJf(e,t){return t==null||e.startsWith(t)?e:(0,jWa.default)(t,e)}async function U5i({pathname:e,markdown:t,absoluteFilepath:r,workspaceAbsoluteFilePath:n,pageSlugs:i,absoluteFilePathsToSlugs:o,redirects:s=[],baseUrl:a}){e=Q0n(e);let u=r!=null?o.get(r)??[]:[];if(e.trim()==="")return!0;if(e=L5i(e),e.startsWith("/")){let l=L5i(M5i(e,a,s));for(let d=0;d<5;++d){let f=L5i(M5i(l,a,s));if(l===f)break;l=f}if(LWa(l)||t&&i.has(TDe(l)))return!0;let p=We(n,Se.of(TDe(e)));return await Xt(p,"file")?!0:u.map(d=>N5i(d))}if(r!=null){if(e==="."){let p=An(r);if(await Xt(p,"directory"))return!0}let l=We(An(r),Se.of(e));if(await Xt(l,"file"))return!0}if(!t)return u.map(l=>N5i(l));let c=[];for(let l of u){let p=new URL(`/${l}`,BT(a.domain)),d=M5i(new URL(e,p).pathname,a,s);LWa(d)||i.has(TDe(d))||c.push(l)}return c.length>0?c:!0}function M5i(e,t,r){let n=MWa(e,t,r);return n==null?e:n.redirect.destination}function L5i(e){let t=e.indexOf("#");return t===-1?e:e.substring(0,t)}function LWa(e){return e.startsWith("http://")||e.startsWith("https://")}var UWa=require("fs");Vt();var iJf=["mdxFlowExpression","mdxJsxFlowElement","mdxJsxTextElement","mdxTextExpression","mdxjsEsm"];function oJf({readFile:e=r=>(0,UWa.readFileSync)(r,"utf-8"),...t}){let r=new Set,n=[t],i=[],o=[],s=1e3,a=0;do{if(a++,a>s)throw new Error("Infinite loop detected while collecting links and sources");let u=n.shift();if(u==null)break;let{content:c,absoluteFilepath:l}=u;if(l!=null){if(r.has(l))throw new Error(`Circular import detected: ${l}`);r.add(l)}let p=KEe(c),d=mrt(p,{allowDangerousHtml:!0,passThrough:[...iJf]});wn(d,f=>{if(f.type==="mdxjsEsm"&&l!=null)return f.data?.estree&&KB(f.data.estree,{enter:h=>{if(h.type==="ImportDeclaration"&&h.source.type==="Literal"&&typeof h.source.value=="string"){let g=Se.of(h.source.value),A=Yi(An(l),g);(A.endsWith(".mdx")||A.endsWith(".md"))&&n.push({content:e(A),absoluteFilepath:A})}}}),"skip";if(f.type==="element"){let h=f.properties.href;typeof h=="string"&&i.push({href:h,sourceFilepath:l,position:f.position});let g=f.properties.src;typeof g=="string"&&o.push({src:g,sourceFilepath:l,position:f.position})}function m(h,g){qtt(h,{src:A=>{let E=jV(A.value);typeof E=="string"&&o.push({src:E,sourceFilepath:l,position:g})},href:A=>{let E=jV(A.value);typeof E=="string"&&i.push({href:E,sourceFilepath:l,position:g})}})}if(f.type==="mdxJsxFlowElement"||f.type==="mdxJsxTextElement"){let h=mX(f.attributes.filter(MV).find(A=>A.name==="href")?.value),g=mX(f.attributes.filter(MV).find(A=>A.name==="src")?.value);if(f.name==="Markdown"){if(l&&typeof g=="string"){let A=Yi(An(l),g);n.push({content:e(A),absoluteFilepath:A})}return"skip"}typeof h=="string"&&i.push({href:h,sourceFilepath:l,position:f.position}),typeof g=="string"&&o.push({src:g,sourceFilepath:l,position:f.position}),f.attributes.forEach(A=>{A.type==="mdxJsxAttribute"&&typeof A.value!="string"&&A.value!=null&&A.value.data?.estree?m(A.value.data.estree,A.position):A.type==="mdxJsxExpressionAttribute"&&A.data?.estree&&m(A.data.estree,A.position)})}(f.type==="mdxFlowExpression"||f.type==="mdxTextExpression")&&f.data?.estree&&m(f.data.estree,f.position)})}while(n.length>0);return{links:i,sources:o}}function zWa({content:e,absoluteFilepath:t}){try{return oJf({content:e,absoluteFilepath:t})}catch{return{links:[],sources:[]}}}var VWa=/^(?:[a-z+]+:)/gi;function sJf(e){let t=/^---\n([\s\S]*?)\n---/,r=e.match(t);return r?(r[0].match(/\n/g)||[]).length+1:0}function z5i(e,t){return e&&{...e,start:{...e.start,line:e.start.line+t},end:{...e.end,line:e.end.line+t}}}function V5i(e,{absoluteFilepath:t,instanceUrls:r}){let n=[],i=[],o=sJf(e),{links:s,sources:a}=zWa({content:e,absoluteFilepath:t});return s.forEach(u=>{if(u.href.trimStart().match(VWa)){if(!u.href.trimStart().startsWith("http"))return;try{let l=new URL(u.href);if(!NWa(l,r))return;i.push({pathname:l.pathname,sourceFilepath:u.sourceFilepath,position:z5i(u.position,o),markdown:!0})}catch{n.push({severity:"warning",message:`Invalid URL: ${u.href}`})}return}let c=kWa(u.href);c.trim()!==""&&i.push({pathname:c,sourceFilepath:u.sourceFilepath,position:z5i(u.position,o),markdown:!0})}),a.forEach(u=>{if(u.src.match(VWa))try{new URL(u.src)}catch{n.push({severity:"warning",message:`Invalid URL: ${u.src}`});return}else i.push({pathname:u.src,sourceFilepath:u.sourceFilepath,position:z5i(u.position,o),markdown:!1})}),{pathnamesToCheck:i,violations:n}}var vrt=xti({logger:aP(ft)}),gve={name:"valid-markdown-links",create:async({workspace:e,apiWorkspaces:t,ossWorkspaces:r})=>{let n=QWa(e),i=n[0]??"http://localhost",o=j5i(n[0]??"http://localhost"),a=await new qV({domain:i,docsWorkspace:e,ossWorkspaces:r,apiWorkspaces:t,taskContext:vrt,editThisPage:void 0,uploadFiles:void 0,registerApi:void 0,targetAudiences:void 0}).resolve();if(!a.config.root)throw new Error("Root node not found");let u=Ct.migrate.FernNavigationV1ToLatest.create().root(a.config.root),c=Ct.NodeCollector.collect(u),l=new Set,p=new Map,d=[];c.slugMap.forEach((m,h)=>{if(l.add(h),m==null||!Ct.isPage(m))return;Ct.isApiLeaf(m)&&d.push(m);let g=Ct.getPageId(m);if(g==null)return;let A=We(e.absoluteFilePath,Se.of(g)),E=p.get(A)??[];E.push(h),p.set(A,E)});let f=["/llms-full.txt","/llms.txt"];for(let m of f){let h=o.basePath?`${TDe(o.basePath)}${m}`:TDe(m);l.add(h)}return{markdownPage:async({content:m,absoluteFilepath:h})=>{let g=p.get(h);if(!g||g.length===0)return[];let{markdown:A}=await XEe({markdown:m,absolutePathToFernFolder:e.absoluteFilePath,absolutePathToMarkdownFile:h,context:vrt}),{pathnamesToCheck:E,violations:v}=V5i(A,{absoluteFilepath:h,instanceUrls:n}),b=await Promise.all(E.map(async I=>{let w=await U5i({pathname:I.pathname,markdown:I.markdown,absoluteFilepath:h,workspaceAbsoluteFilePath:e.absoluteFilePath,pageSlugs:l,absoluteFilePathsToSlugs:p,redirects:e.config.redirects,baseUrl:o});return w===!0?[]:w.map(x=>{let[C,_]=qWa({pathnameToCheck:I,targetPathname:x,absoluteFilepathToWorkspace:e.absoluteFilePath});return{name:gve.name,severity:"error",message:C,relativeFilepath:_}})}));return[...v,...b.flat()]},apiSection:async({workspace:m,config:h})=>{let g=await m.toFernWorkspace({context:vrt},{enableUniqueErrorsPerEndpoint:!0,detectGlobalHeaders:!1}),A=Zm({workspace:g,audiences:h.audiences?{type:"select",audiences:Array.isArray(h.audiences)?h.audiences:[h.audiences]}:{type:"all"},generationLanguage:void 0,keywords:void 0,smartCasing:!1,exampleGeneration:{disabled:!1},readme:void 0,version:void 0,packageName:void 0,context:vrt,sourceResolver:new tm(vrt,g)}),E=aJf(tSt({ir:A,apiDefinitionId:(0,GWa.randomUUID)(),context:vrt})),v=[];for(let b of d){let I=await uJf(h5e.prune(E,b));for(let w of I){let{pathnamesToCheck:x,violations:C}=V5i(w,{instanceUrls:n});v.push(...C);let _=await Promise.all(x.map(async R=>{let U=await U5i({pathname:R.pathname,markdown:R.markdown,workspaceAbsoluteFilePath:e.absoluteFilePath,pageSlugs:l,absoluteFilePathsToSlugs:p,redirects:e.config.redirects,baseUrl:o});return U===!0?[]:U.map(q=>{let[z,Z]=qWa({pathnameToCheck:R,targetPathname:q,absoluteFilepathToWorkspace:e.absoluteFilePath});return{name:gve.name,severity:"error",message:z,relFilepath:Z}})}));v.push(..._.flat())}}return v}}}};function qWa({pathnameToCheck:e,targetPathname:t,absoluteFilepathToWorkspace:r}){let n=`${t} links to non-existent page ${be.bold(e.pathname)}`,{position:i,sourceFilepath:o}=e;if(o==null||i==null)return[n,Se.of("")];n=`broken link to ${be.bold(e.pathname)}`,e.pathname.length>0&&!q5i.default.isAbsolute(e.pathname)&&(n+=` (resolved path: ${q5i.default.join(t,e.pathname)})`);let s=ha(r,o);return n+=`
|
|
2144
|
-
fix here: ${s}:${i.start.line}:${i.start.column}`,[n,s]}function aJf(e){return h5e.ApiDefinitionV1ToLatest.from(e).migrate()}async function uJf(e){let t=[];return h5e.Transformer.descriptions(r=>(typeof r=="string"&&t.push(r),r)).apiDefinition(e),t}var N0n={name:"validate-product-file",create:()=>({productFile:async({path:e,content:t})=>{let r=await Cbn({value:t});return r.type==="success"?[]:[{severity:"fatal",message:`${r.message}`}]}})};var j0n={name:"validate-version-file",create:()=>({versionFile:async({path:e,content:t})=>{let r=await wbn({value:t});return r.type==="success"?[]:[{severity:"fatal",message:`${r.message}`}]}})};Vt();Vt();function WWa({relativeFilepath:e,allRuleVisitors:t,addViolations:r}){function n(i){let o=async(s,a)=>{for(let u of t){let c=u[i];if(c!=null){let l=await c(s);r(l.map(p=>({name:p.name,severity:p.severity,relativeFilepath:p.relativeFilepath??Se.of(""),nodePath:a,message:p.message})))}}};return{[i]:o}}return{...n("file"),...n("filepath"),...n("markdownPage"),...n("versionFile"),...n("apiSection"),...n("permissions"),...n("productFile")}}Vt();var $Wa=require("fs/promises"),G5i={name:"no-non-component-refs",create:({ossWorkspaces:e,logger:t,workspace:r})=>({file:async()=>{let n=[],i=new Set;for(let o of e)for(let s of o.specs)if(s.type==="openapi"&&!i.has(s.absoluteFilepath)){i.add(s.absoluteFilepath);try{let a=(await(0,$Wa.readFile)(s.absoluteFilepath)).toString(),u=ha(r.absoluteFilePath,s.absoluteFilepath),c=a.includes("swagger:")&&(a.includes('swagger: "2.0"')||a.includes("swagger: '2.0'")||a.includes("swagger: 2.0")),l=a.includes('"swagger":')&&(a.includes('"swagger":"2.0"')||a.includes('"swagger": "2.0"'));if(c||l||a.includes("asyncapi:")||a.includes('"asyncapi":'))continue;let d=a.matchAll(/["']?\$ref["']?\s*:\s*["']([^"']+)["']/g);for(let f of d){let m=f[1];m&&m.startsWith("#/")&&!m.startsWith("#/components/")&&n.push({severity:"error",name:"Invalid OpenAPI reference",message:`Reference "${m}" points to a non-component location. OpenAPI references should point to reusable components under #/components/ (e.g., #/components/schemas/MySchema, #/components/responses/MyResponse). Direct references to paths, operations, or other spec sections are not supported.`,relativeFilepath:u})}}catch{t.warn(`Could not read OpenAPI spec file: ${s.absoluteFilepath}`);continue}}return n}})};Vt();var HWa=require("fs/promises"),W5i={name:"no-openapi-v2-in-docs",create:({ossWorkspaces:e,logger:t,workspace:r})=>({file:async()=>{let n=[],i=new Set;for(let o of e)for(let s of o.specs)if(s.type==="openapi"&&!i.has(s.absoluteFilepath)){i.add(s.absoluteFilepath);try{let a=(await(0,HWa.readFile)(s.absoluteFilepath)).toString(),u=ha(r.absoluteFilePath,s.absoluteFilepath),c=a.includes("swagger:")&&(a.includes('swagger: "2.0"')||a.includes("swagger: '2.0'")||a.includes("swagger: 2.0")),l=a.includes('"swagger":')&&(a.includes('"swagger":"2.0"')||a.includes('"swagger": "2.0"'));(c||l)&&n.push({severity:"
|
|
2144
|
+
fix here: ${s}:${i.start.line}:${i.start.column}`,[n,s]}function aJf(e){return h5e.ApiDefinitionV1ToLatest.from(e).migrate()}async function uJf(e){let t=[];return h5e.Transformer.descriptions(r=>(typeof r=="string"&&t.push(r),r)).apiDefinition(e),t}var N0n={name:"validate-product-file",create:()=>({productFile:async({path:e,content:t})=>{let r=await Cbn({value:t});return r.type==="success"?[]:[{severity:"fatal",message:`${r.message}`}]}})};var j0n={name:"validate-version-file",create:()=>({versionFile:async({path:e,content:t})=>{let r=await wbn({value:t});return r.type==="success"?[]:[{severity:"fatal",message:`${r.message}`}]}})};Vt();Vt();function WWa({relativeFilepath:e,allRuleVisitors:t,addViolations:r}){function n(i){let o=async(s,a)=>{for(let u of t){let c=u[i];if(c!=null){let l=await c(s);r(l.map(p=>({name:p.name,severity:p.severity,relativeFilepath:p.relativeFilepath??Se.of(""),nodePath:a,message:p.message})))}}};return{[i]:o}}return{...n("file"),...n("filepath"),...n("markdownPage"),...n("versionFile"),...n("apiSection"),...n("permissions"),...n("productFile")}}Vt();var $Wa=require("fs/promises"),G5i={name:"no-non-component-refs",create:({ossWorkspaces:e,logger:t,workspace:r})=>({file:async()=>{let n=[],i=new Set;for(let o of e)for(let s of o.specs)if(s.type==="openapi"&&!i.has(s.absoluteFilepath)){i.add(s.absoluteFilepath);try{let a=(await(0,$Wa.readFile)(s.absoluteFilepath)).toString(),u=ha(r.absoluteFilePath,s.absoluteFilepath),c=a.includes("swagger:")&&(a.includes('swagger: "2.0"')||a.includes("swagger: '2.0'")||a.includes("swagger: 2.0")),l=a.includes('"swagger":')&&(a.includes('"swagger":"2.0"')||a.includes('"swagger": "2.0"'));if(c||l||a.includes("asyncapi:")||a.includes('"asyncapi":'))continue;let d=a.matchAll(/["']?\$ref["']?\s*:\s*["']([^"']+)["']/g);for(let f of d){let m=f[1];m&&m.startsWith("#/")&&!m.startsWith("#/components/")&&n.push({severity:"error",name:"Invalid OpenAPI reference",message:`Reference "${m}" points to a non-component location. OpenAPI references should point to reusable components under #/components/ (e.g., #/components/schemas/MySchema, #/components/responses/MyResponse). Direct references to paths, operations, or other spec sections are not supported.`,relativeFilepath:u})}}catch{t.warn(`Could not read OpenAPI spec file: ${s.absoluteFilepath}`);continue}}return n}})};Vt();var HWa=require("fs/promises"),W5i={name:"no-openapi-v2-in-docs",create:({ossWorkspaces:e,logger:t,workspace:r})=>({file:async()=>{let n=[],i=new Set;for(let o of e)for(let s of o.specs)if(s.type==="openapi"&&!i.has(s.absoluteFilepath)){i.add(s.absoluteFilepath);try{let a=(await(0,HWa.readFile)(s.absoluteFilepath)).toString(),u=ha(r.absoluteFilePath,s.absoluteFilepath),c=a.includes("swagger:")&&(a.includes('swagger: "2.0"')||a.includes("swagger: '2.0'")||a.includes("swagger: 2.0")),l=a.includes('"swagger":')&&(a.includes('"swagger":"2.0"')||a.includes('"swagger": "2.0"'));(c||l)&&n.push({severity:"warning",name:"OpenAPI v2.0 detected",message:"OpenAPI version 2.0 (Swagger) detected. Consider upgrading to OpenAPI 3.0 or later.",relativeFilepath:u})}catch{t.warn(`Could not read OpenAPI spec file: ${s.absoluteFilepath}`);continue}}return n}})};var KWa=["docs.buildwithfern.com","docs.dev.buildwithfern.com"];function cJf(e){return e.includes(".")?{valid:!1,error:`Subdomain "${e}" contains a '.' character, which is not allowed`,suggestion:e.replace(/\./g,"-")}:e.length>62?{valid:!1,error:`Subdomain "${e}" is ${e.length} characters long, which exceeds the maximum of 62 characters`}:/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(e)?{valid:!0}:{valid:!1,error:`Subdomain "${e}" contains invalid characters. Subdomains must contain only alphanumeric characters and hyphens, and cannot start or end with a hyphen`}}function lJf(e){let t;try{let s=e.startsWith("http://")||e.startsWith("https://")?e:`https://${e}`;t=new URL(s).hostname.toLowerCase()}catch{return{severity:"fatal",message:`Invalid URL format: "${e}". Expected format: <subdomain>.docs.buildwithfern.com`}}let r=KWa.find(s=>t.endsWith(s));if(!r)return{severity:"fatal",message:`Invalid domain in URL "${e}". The URL must end with one of: ${KWa.join(", ")}`};let n="."+r;if(!t.endsWith(n))return{severity:"fatal",message:`Invalid URL "${e}". A subdomain is required before ${r}`};let i=t.slice(0,t.length-n.length);if(!i||i.length===0)return{severity:"fatal",message:`Invalid URL "${e}". A subdomain is required before ${r}`};let o=cJf(i);if(!o.valid){let s=`Invalid instance URL "${e}": ${o.error}`;return o.suggestion&&(s+=`. Suggestion: ${o.suggestion}.${r}`),{severity:"fatal",message:s}}return null}var $5i={name:"valid-instance-url",create:()=>({file:async({config:e})=>{let t=[];if(!e.instances||e.instances.length===0)return t;for(let r=0;r<e.instances.length;r++){let n=e.instances[r];if(n?.url){let i=lJf(n.url);i&&t.push({...i,message:`instances[${r}].url: ${i.message}`})}}return t}})};Vt();var JWa=require("fs/promises");function pJf(e,t){let r=e.replace(/^#\//,"").split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")),n=t;for(let i of r)if(n==null||typeof n!="object"||(n=n[i],n===void 0))return!1;return n!=null}function fJf(e){let t=new Map;for(let n of e){let i=n.replace(/^#\//,"").split("/"),o="Other";i.length>=2&&(i[0]==="components"?o=`components/${i[1]??"unknown"}`:o=i[0]??"unknown"),t.has(o)||t.set(o,[]);let s=t.get(o);s&&s.push(n)}let r=`Found ${e.length} invalid OpenAPI reference${e.length===1?"":"s"}:
|
|
2145
2145
|
|
|
2146
2146
|
`;for(let[n,i]of t){r+=`${n}:
|
|
2147
2147
|
`;for(let o of i)r+=` ${o}
|
|
@@ -2163,7 +2163,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
|
|
|
2163
2163
|
Example: package-name: "@scope/package"`)}return{success:!1,warnings:[{type:"conflict",message:`Failed to parse generators.yml: ${o}`}]}}}checkDeprecatedFields(t,r){t.openapi!=null&&r.push({type:"deprecated",message:"The 'openapi' field is deprecated",suggestion:"Use 'api.specs' instead"}),t["openapi-overrides"]!=null&&r.push({type:"deprecated",message:"The 'openapi-overrides' field is deprecated",suggestion:"Use 'api.specs.[].overrides' instead"}),t["spec-origin"]!=null&&r.push({type:"deprecated",message:"The 'spec-origin' field is deprecated",suggestion:"Use 'api.specs.[].origin' instead"}),t["async-api"]!=null&&r.push({type:"deprecated",message:"The 'async-api' field is deprecated",suggestion:"Use 'api.specs' with asyncapi instead"}),t["api-settings"]!=null&&r.push({type:"deprecated",message:"The 'api-settings' field is deprecated",suggestion:"Use 'api.specs.[].settings' instead"}),t.whitelabel!=null&&r.push({type:"unsupported",message:"Whitelabel configuration is not yet supported in fern.yml"}),t.metadata!=null&&r.push({type:"unsupported",message:"Metadata configuration is not yet supported in fern.yml"}),t.reviewers!=null&&r.push({type:"unsupported",message:"Reviewers configuration is not yet supported in fern.yml"}),t.aliases!=null&&r.push({type:"unsupported",message:"Group aliases are not yet supported in fern.yml",suggestion:"Use multiple group names in target.group array instead"}),t["auth-schemes"]!=null&&r.push({type:"info",message:"Auth schemes configuration detected but not yet migrated",suggestion:"Auth schemes will be supported in a future version"})}async getAbsoluteFilePath(){let t=We(this.cwd,Se.of(Hd)),r=We(this.cwd,Se.of(y4e));if(await Xt(t,"file"))return t;if(await Xt(r,"file"))return r}};var QSt=class{cwd;logger;deleteOriginals;constructor(t){this.cwd=t.cwd,this.logger=t.logger,this.deleteOriginals=t.deleteOriginals??!0}async migrate(){let t=[],r=[],n=await this.findFernDirectory();if(n==null)return{success:!1,warnings:[{type:"conflict",message:"Could not find fern directory",suggestion:"Run this command from a directory containing a 'fern' folder"}],migratedFiles:r};let o=await new kSt({cwd:n}).migrate();if(t.push(...o.warnings),!o.success||o.org==null)return{success:!1,warnings:[...t,{type:"conflict",message:"Failed to migrate fern.config.json - organization is required"}],migratedFiles:r};o.absoluteFilePath!=null&&r.push(o.absoluteFilePath);let s=We(n,Se.of(GO)),a=await Xt(s,"directory"),u;if(a){let p=await this.migrateMultiApi({fernDir:n,apisDir:s,org:o.org,warnings:t,migratedFiles:r});if(!p.success)return{success:!1,warnings:t,migratedFiles:r};u=p.fernYml}else{let p=await this.migrateSingleApi({fernDir:n,org:o.org,warnings:t,migratedFiles:r});if(!p.success)return{success:!1,warnings:t,migratedFiles:r};u=p.fernYml}let c=We(this.cwd,Se.of(AE)),l=this.serializeFernYml(u);if(await(0,wrt.writeFile)(c,l,"utf-8"),this.deleteOriginals)for(let p of r)try{await(0,wrt.rm)(p),this.logger.debug(`Deleted ${p}`)}catch{t.push({type:"info",message:`Could not delete ${p}`})}return this.logger.info(`Created ${c}`),{success:!0,warnings:t,migratedFiles:r,outputPath:c}}async migrateSingleApi(t){let{fernDir:r,org:n,warnings:i,migratedFiles:o}=t,a=await new RDe({cwd:r}).migrate();i.push(...a.warnings),a.absoluteFilePath!=null&&o.push(a.absoluteFilePath);let u=await X5i({fernDir:r,generatorsYmlApi:a.rawApi});i.push(...u.warnings);let c={org:n};return u.api!=null&&(c.api=u.api),a.sdks!=null&&(c.sdks=a.sdks),{success:!0,fernYml:c}}async migrateMultiApi(t){let{fernDir:r,apisDir:n,org:i,warnings:o,migratedFiles:s}=t,u=(await(0,wrt.readdir)(n,{withFileTypes:!0})).filter(A=>A.isDirectory()).map(A=>A.name);if(u.length===0)return o.push({type:"conflict",message:"No API directories found in fern/apis/"}),{success:!1,fernYml:{org:i}};let c={},l={targets:{}},p,d;for(let A of u){let E=We(n,Se.of(A)),b=await new RDe({cwd:E,apiName:A}).migrate();if(o.push(...b.warnings),b.absoluteFilePath!=null&&s.push(b.absoluteFilePath),c[A]=b.rawApi,b.sdks!=null){for(let[I,w]of Object.entries(b.sdks.targets))l.targets[I]=w;b.sdks.defaultGroup!=null&&p==null&&(p=b.sdks.defaultGroup),b.sdks.autorelease!=null&&d==null&&(d=b.sdks.autorelease)}}let f=await Z5i({fernDir:r,apisDir:n,generatorsYmlApis:c});o.push(...f.warnings);let m={org:i,apis:f.apis};Object.keys(l.targets).length>0&&(p!=null&&(l.defaultGroup=p),d!=null&&(l.autorelease=d),m.sdks=l);let g=await new RDe({cwd:r}).detect();return g.found&&g.absoluteFilePath!=null&&(o.push({type:"info",message:"Found generators.yml in fern root alongside apis/ directory",suggestion:"Review the migrated configuration to ensure it's correct"}),s.push(g.absoluteFilePath)),{success:!0,fernYml:m}}async findFernDirectory(){if(this.cwd.split("/").pop()===$h)return this.cwd;let r=We(this.cwd,Se.of($h));if(await Xt(r,"directory"))return r}serializeFernYml(t){let r={edition:t.edition,org:t.org};return t.api!=null&&(r.api=t.api),t.apis!=null&&(r.apis=t.apis),t.ai!=null&&(r.ai=t.ai),t.cli!=null&&(r.cli=t.cli),t.sdks!=null&&(r.sdks=this.simplifySdks(t.sdks)),Ir.dump(r,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"',forceQuotes:!1})}simplifySdks(t){let r={...t},n={};for(let[i,o]of Object.entries(t.targets)){let s=o.output;if(typeof s=="string"){n[i]=o;continue}if(s.git==null&&s.path!=null){n[i]={...o,output:s.path};continue}n[i]=o}return r.targets=n,r}};var e8i=class{async handle(t,r){let i=await new QSt({cwd:t.cwd,logger:t.stdout,deleteOriginals:r.delete}).migrate();for(let o of i.warnings){switch(o.type){case"deprecated":t.stdout.warn(`Deprecated: ${o.message}`);break;case"unsupported":t.stdout.warn(`Unsupported: ${o.message}`);break;case"conflict":t.stderr.error(`Error: ${o.message}`);break;case"info":t.stdout.info(o.message);break}o.suggestion!=null&&t.stdout.info(` Suggestion: ${o.suggestion}`)}if(i.success){i.outputPath!=null&&t.stdout.debug(`Created: ${i.outputPath}`);return}throw new Kr({message:"Migration failed"})}};function t8i(e){let t=new e8i;va(e,"migrate","Migrate legacy configuration files to fern.yml",(r,n)=>t.handle(r,n),r=>r.option("delete",{type:"boolean",description:"Keep original files after migration",default:!0}))}function r8i(e){U1(e,"config","Configure, edit, and inspect your settings",[t8i])}var n8i=class{async handle(t,r){let n=await t.loadWorkspaceOrThrow();if(n.docs==null)throw new Kr({message:`No docs configuration found in fern.yml.
|
|
2164
2164
|
|
|
2165
2165
|
Add a 'docs:' section to your fern.yml to get started.`});let o=await new bve({context:t}).check({workspace:n,strict:r.strict}),s=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let a=this.buildJsonResponse({result:o,hasErrors:s});if(t.stdout.info(JSON.stringify(a,null,2)),s)throw Kr.exit();return}if(o.violations.length>0)for(let a of o.violations){let u=a.severity==="warning"?be.yellow:be.red;process.stderr.write(`${u(`${a.displayRelativeFilepath}:${a.line}:${a.column}: ${a.message}`)}
|
|
2166
|
-
`)}if(s)throw Kr.exit();if(o.warningCount>0){t.stderr.info(`${po.warning} ${be.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(be.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${po.success} ${be.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>mK(i))),{success:!r,results:n}}};function i8i(e){let t=new n8i;va(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}))}var f$a=_e(require("net"),1),d$a=_e(require("os"),1),z0n=class extends Error{constructor(t){super(`${t} is locked`)}},Crt={old:new Set,young:new Set},DJf=1e3*15;var NSt,RJf=()=>{let e=d$a.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},l$a=e=>new Promise((t,r)=>{let n=f$a.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),p$a=async(e,t)=>{if(e.host||e.port===0)return l$a(e);for(let r of t)try{await l$a({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},FJf=function*(e){e&&(yield*e),yield 0};async function Eve(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let i=e.exclude;if(typeof i[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let o of i){if(typeof o!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(o))throw new TypeError(`Number ${o} in the exclude option is not a safe integer and can't be used`)}r=new Set(i)}NSt===void 0&&(NSt=setTimeout(()=>{NSt=void 0,Crt.old=Crt.young,Crt.young=new Set},DJf),NSt.unref&&NSt.unref());let n=RJf();for(let i of FJf(t))try{if(r.has(i))continue;let o=await p$a({...e,port:i},n);for(;Crt.old.has(o)||Crt.young.has(o);){if(i!==0)throw new z0n(i);o=await p$a({...e,port:i},n)}return Crt.young.add(o),o}catch(o){if(!["EADDRINUSE","EACCES"].includes(o.code)&&!(o instanceof z0n))throw o}throw new Error("No available ports found")}_g();Vt();var Pou=_e(a8i(),1),Tou=_e(BEn(),1),fIn=require("fs/promises"),Dou=_e(require("http"),1),Rou=_e(require("path"),1);var pXa=require("events"),REn=_e(require("fs"),1),VDe=_e(require("path"),1);var $Ya=_e(require("os"),1),HYa=300,Sve=20,uBt=1e7,KYa=$Ya.default.platform();var Knd=KYa==="darwin",_6i=KYa==="win32",Bve=Knd||_6i,JYa=3e3,YYa=2e4,S6i=1250;var NX;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(NX||(NX={}));var zDe;(function(e){e.CHANGE="change",e.RENAME="rename"})(zDe||(zDe={}));var cBt;(function(e){e.CHANGE="change",e.ERROR="error"})(cBt||(cBt={}));var Za;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(Za||(Za={}));var kT;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(kT||(kT={}));var Jnd=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,u=0,c=0,l=()=>{let b=Date.now(),I=b-u,w=b-c,x=I>=t||w>=o;return[b,x]},p=b=>{if(c=b,!s)return;let I=s;s=void 0,e.apply(void 0,I)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=b=>{if(c=b,n)return p(b)},h=b=>{if(i&&s)return p(b);s=void 0},g=()=>{a=void 0;let[b,I]=l();return I?h(b):A(b)},A=b=>{let I=b-u,w=b-c,x=t-I,C=o-w,_=Math.min(x,C);return E(_)},E=b=>{a&&clearTimeout(a),!(b<=0)&&(a=setTimeout(g,b))},v=(...b)=>{let[I,w]=l(),x=!!a;if(s=b,u=I,(w||!a)&&E(t),w)return x?p(I):m(I)};return v.cancel=d,v.flush=f,v},OEn=Jnd;var T6i=_e(require("fs"),1),TEn=_e(require("path"),1);var If=_e(require("fs"),1),y1=require("util");var hae=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},jX=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var B6i=_e(require("process"),1),XYa=B6i.default.getuid?!B6i.default.getuid():!1,ZYa=1e4,Bk=()=>{};var lBt={isChangeErrorOk:e=>{if(!lBt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!XYa&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!lBt.isNodeError(e))return!1;let{code:t}=e;return t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM"},onChangeError:e=>{if(!lBt.isNodeError(e))throw e;if(!lBt.isChangeErrorOk(e))throw e}},xE=lBt;var O6i=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=ZYa,this.queueActive=new Set,this.queueWaiting=new Set,this.init=()=>{this.intervalId||(this.intervalId=setInterval(this.tick,this.interval))},this.reset=()=>{this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId)},this.add=t=>{this.queueWaiting.add(t),this.queueActive.size<this.limit/2?this.tick():this.init()},this.remove=t=>{this.queueWaiting.delete(t),this.queueActive.delete(t)},this.schedule=()=>new Promise(t=>{let r=()=>this.remove(n),n=()=>t(r);this.add(n)}),this.tick=()=>{if(!(this.queueActive.size>=this.limit)){if(!this.queueWaiting.size)return this.reset();for(let t of this.queueWaiting){if(this.queueActive.size>=this.limit)break;this.queueWaiting.delete(t),this.queueActive.add(t),t()}}}}},eXa=new O6i;var gae=(e,t)=>function(n){return function i(...o){return eXa.schedule().then(s=>{let a=c=>(s(),c),u=c=>{if(s(),Date.now()>=n)throw c;if(t(c)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw c};return e.apply(void 0,o).then(a,u)})}},Aae=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var Ynd={attempt:{chmod:hae((0,y1.promisify)(If.default.chmod),xE.onChangeError),chown:hae((0,y1.promisify)(If.default.chown),xE.onChangeError),close:hae((0,y1.promisify)(If.default.close),Bk),fsync:hae((0,y1.promisify)(If.default.fsync),Bk),mkdir:hae((0,y1.promisify)(If.default.mkdir),Bk),realpath:hae((0,y1.promisify)(If.default.realpath),Bk),stat:hae((0,y1.promisify)(If.default.stat),Bk),unlink:hae((0,y1.promisify)(If.default.unlink),Bk),chmodSync:jX(If.default.chmodSync,xE.onChangeError),chownSync:jX(If.default.chownSync,xE.onChangeError),closeSync:jX(If.default.closeSync,Bk),existsSync:jX(If.default.existsSync,Bk),fsyncSync:jX(If.default.fsync,Bk),mkdirSync:jX(If.default.mkdirSync,Bk),realpathSync:jX(If.default.realpathSync,Bk),statSync:jX(If.default.statSync,Bk),unlinkSync:jX(If.default.unlinkSync,Bk)},retry:{close:gae((0,y1.promisify)(If.default.close),xE.isRetriableError),fsync:gae((0,y1.promisify)(If.default.fsync),xE.isRetriableError),open:gae((0,y1.promisify)(If.default.open),xE.isRetriableError),readFile:gae((0,y1.promisify)(If.default.readFile),xE.isRetriableError),rename:gae((0,y1.promisify)(If.default.rename),xE.isRetriableError),stat:gae((0,y1.promisify)(If.default.stat),xE.isRetriableError),write:gae((0,y1.promisify)(If.default.write),xE.isRetriableError),writeFile:gae((0,y1.promisify)(If.default.writeFile),xE.isRetriableError),closeSync:Aae(If.default.closeSync,xE.isRetriableError),fsyncSync:Aae(If.default.fsyncSync,xE.isRetriableError),openSync:Aae(If.default.openSync,xE.isRetriableError),readFileSync:Aae(If.default.readFileSync,xE.isRetriableError),renameSync:Aae(If.default.renameSync,xE.isRetriableError),statSync:Aae(If.default.statSync,xE.isRetriableError),writeSync:Aae(If.default.writeSync,xE.isRetriableError),writeFileSync:Aae(If.default.writeFileSync,xE.isRetriableError)}},tXa=Ynd;var PEn=_e(require("fs"),1),pBt=_e(require("path"),1);var P6i=()=>{};var Xnd=()=>{let e=P6i,t=P6i,r=!1,n=!1;return{promise:new Promise((u,c)=>{e=l=>(r=!0,u(l)),t=l=>(n=!0,c(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},rXa=Xnd;var Znd=()=>{let{promise:e,resolve:t,isPending:r}=rXa(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},nXa=Znd;var iXa={then:e=>{e()}};var oXa=e=>Array.isArray(e)?e:[e],sXa=e=>typeof e=="function";var eid=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=oXa(o).map(J=>sXa(J)?J:H=>J.test(H)),a=J=>s.some(H=>H(J)),u=t?.signal??{aborted:!1},c=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},g=[],A=new Set,E={},v={},b=new Set,I={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},w={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:g,symlinksNames:A,symlinksNamesToPaths:E,map:v},{promise:x,increment:C,decrement:_}=nXa(),R=0,U=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.directories.push(H),J.directoriesNames.add(ge),l.push(H),p.add(ge),d.propertyIsEnumerable(ge)||(d[ge]=[]),d[ge].push(H),b.add(H),!(me>=n)&&(R>=i||K(H,me+1)))},q=(J,H,ge)=>{b.has(H)||R>=i||(R+=1,J.files.push(H),J.filesNames.add(ge),f.push(H),m.add(ge),h.propertyIsEnumerable(ge)||(h[ge]=[]),h[ge].push(H),b.add(H))},z=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.symlinks.push(H),J.symlinksNames.add(ge),g.push(H),A.add(ge),E.propertyIsEnumerable(ge)||(E[ge]=[]),E[ge].push(H),b.add(H),r&&(me>=n||R>=i||Ee(H,me+1)))},Z=(J,H,ge,me,we)=>{u.aborted||a(H)||(me.isDirectory()?U(J,H,ge,we):me.isFile()?q(J,H,ge):me.isSymbolicLink()&&z(J,H,ge,we))},oe=(J,H,ge,me)=>{if(u.aborted)return;let we=H===pBt.default.sep?"":pBt.default.sep,Be=ge.name,le=`${H}${we}${Be}`;a(le)||(ge.isDirectory()?U(J,le,Be,me):ge.isFile()?q(J,le,Be):ge.isSymbolicLink()&&z(J,le,Be,me))},V=(J,H,ge,me)=>{for(let we=0,Be=ge.length;we<Be;we++)oe(J,H,ge[we],me)},K=(J,H)=>{u.aborted||H>n||R>=i||(C(),PEn.default.readdir(J,{withFileTypes:!0},(ge,me)=>{if(ge||u.aborted||!me.length)return _();(c(me)||iXa).then(()=>{let Be=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};V(Be,J,me,H),_()})}))},Ee=(J,H)=>{C(),PEn.default.realpath(J,(ge,me)=>{if(ge||u.aborted)return _();PEn.default.stat(me,(we,Be)=>{if(we||u.aborted)return _();let le=pBt.default.basename(me),ue=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};Z(ue,me,le,Be,H),_()})})};return(async(J,H=1)=>(J=pBt.default.normalize(J),b.add(J),K(J,H),await x,u.aborted?I:w))(e)},aXa=eid;var MX={lang:{debounce:OEn,attempt:e=>{try{return e()}catch(t){return MX.lang.castError(t)}},castArray:e=>MX.lang.isArray(e)?e:[e],castError:e=>MX.lang.isError(e)?e:MX.lang.isString(e)?new Error(e):new Error("Unknown error"),defer:e=>setTimeout(e,0),isArray:e=>Array.isArray(e),isError:e=>e instanceof Error,isFunction:e=>typeof e=="function",isNaN:e=>Number.isNaN(e),isNumber:e=>typeof e=="number",isPrimitive:e=>{if(e===null)return!0;let t=typeof e;return t!=="object"&&t!=="function"},isShallowEqual:(e,t)=>{if(e===t)return!0;if(MX.lang.isNaN(e))return MX.lang.isNaN(t);if(MX.lang.isPrimitive(e)||MX.lang.isPrimitive(t))return e===t;for(let r in e)if(!(r in t))return!1;for(let r in t)if(e[r]!==t[r])return!1;return!0},isSet:e=>e instanceof Set,isString:e=>typeof e=="string",isUndefined:e=>e===void 0,noop:()=>{},uniq:e=>e.length<2?e:Array.from(new Set(e))},fs:{getDepth:e=>Math.max(0,e.split(TEn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?T6i.default.realpathSync.native(e):T6i.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===TEn.default.sep&&t.length-e.length>TEn.default.sep.length,poll:(e,t=YYa)=>tXa.retry.stat(t)(e,{bigint:!0}).catch(MX.lang.noop),readdir:async(e,t,r=1/0,n=1/0,i,o)=>{if(o&&r===1&&e in o){let s=o[e];return[s.directories,s.files]}else{let s=await aXa(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},cl=MX;var DEn=_e(require("path"),1);var D6i=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||cl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=HYa){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,u)=>{let c=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...u]),p=this.eventsDeduplicate([...c,...l]);this.onTargetEvents(p)},s=cl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,u="",c=!1)=>{c?await this.eventsPopulate([u],n,!0):i.add(u),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===Za.CHANGE&&a===Za.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===Za.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Za.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??Sve:Math.min(1,this.options.depth??Sve),s=this.options.limit??uBt,[a,u]=await cl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),c=[...a,...u];return await Promise.all(c.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())cl.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(Za.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!Bve&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(Za.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Za.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(DEn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(DEn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Za.ADD?this.onTargetAdd(n):r===Za.ADD_DIR?this.onTargetAddDir(n):r===Za.CHANGE?this.onTargetChange(n):r===Za.UNLINK?this.onTargetUnlink(n):r===Za.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=zDe.CHANGE,r){if(this.watcher.isClosed())return;let n=DEn.default.resolve(this.folderPath,r||"");this.filePath&&n!==this.folderPath&&n!==this.filePath||this.watcher.isIgnored(n,this.options.ignore)||this.onWatcherEvent(t,n)}onWatcherError(t){_6i&&t.code==="EPERM"?this.onWatcherChange(zDe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(cBt.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(cBt.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(zDe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&Bve&&this.options.native!==!1?this.options.depth??Sve:Math.min(1,this.options.depth??Sve),n=this.options.limit??uBt,[i,o]=await cl.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(zDe.CHANGE,a,t)}))}}},uXa=D6i;var QT={interval:100,intervalId:void 0,fns:new Map,init:()=>{QT.intervalId||(QT.intervalId=setInterval(QT.resolve,QT.interval))},reset:()=>{QT.intervalId&&(clearInterval(QT.intervalId),delete QT.intervalId)},add:(e,t)=>{QT.fns.set(e,Date.now()+t),QT.init()},remove:e=>{QT.fns.delete(e)},resolve:()=>{if(!QT.fns.size)return QT.reset();let e=Date.now();for(let[t,r]of QT.fns)r>=e||(QT.remove(t),t())}},fBt=QT;var dBt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=S6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(cl.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let u=()=>{s.add.delete(n),fBt.remove(c)},c=()=>{u(),a()};fBt.add(c,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;u();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=S6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let u=()=>{s.unlink.delete(n),fBt.remove(c)},c=()=>{u(),a()};fBt.add(c,r);let l=()=>(u(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Za.ADD,NX.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,Za.ADD_DIR,NX.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK,NX.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK_DIR,NX.DIR);return this.getLockUnlink({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};dBt.DIR_EVENTS={add:Za.ADD_DIR,rename:Za.RENAME_DIR,unlink:Za.UNLINK_DIR};dBt.FILE_EVENTS={add:Za.ADD,change:Za.CHANGE,rename:Za.RENAME,unlink:Za.UNLINK};var cXa=dBt;var R6i=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(cl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(cl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return cl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);cl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},F6i=R6i;var k6i=class{constructor(t){this.ino=t.ino<=Number.MAX_SAFE_INTEGER?Number(t.ino):t.ino,this.size=Number(t.size),this.atimeMs=Number(t.atimeMs),this.mtimeMs=Number(t.mtimeMs),this.ctimeMs=Number(t.ctimeMs),this.birthtimeMs=Number(t.birthtimeMs),this._isFile=t.isFile(),this._isDirectory=t.isDirectory(),this._isSymbolicLink=t.isSymbolicLink()}isFile(){return this._isFile}isDirectory(){return this._isDirectory}isSymbolicLink(){return this._isSymbolicLink}},lXa=k6i;var Q6i=class{constructor(){this.inos={},this.paths=new F6i,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await cl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new lXa(n)}reset(){this.inos={},this.paths=new F6i,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,Za.ADD,i),[Za.ADD];if(i.isDirectory())return this.updateIno(t,Za.ADD_DIR,i),[Za.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Za.UNLINK,n),[Za.UNLINK];if(n.isDirectory())return this.updateIno(t,Za.UNLINK_DIR,n),[Za.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Za.CHANGE,i),[Za.CHANGE]);if(i.isDirectory())return this.updateIno(t,Za.UNLINK,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK,Za.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD,i),[Za.UNLINK_DIR,Za.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK_DIR,Za.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?NX.FILE:NX.DIR;i[t]=[n.ino,o]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let n=this.stats.get(t)?.ino||-1;this.paths.delete(n,t),this.stats.delete(t)}}},N6i=Q6i;var j6i=class e extends pXa.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(kT.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(kT.CLOSE,i)),this._readyWait=new Promise(i=>this.on(kT.READY,i)),this._locker=new cXa(this),this._roots=new Set,this._poller=new N6i,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(cl.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(kT.CLOSE))}error(t){if(this.isClosed())return!1;let r=cl.lang.castError(t);return this.emit(kT.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(kT.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(kT.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)cl.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new uXa(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=cl.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=VDe.default.dirname(t);for(let a=1;a<1/0;a++){if(this._watchers[s]?.find(l=>(a===1||l.options.recursive&&a<=(l.options.depth??Sve))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&Bve&&l.options.native!==!1)))return!0;if(!Bve)break;let c=VDe.default.dirname(t);if(s===c)break;s=c}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=cl.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let u=!r.recursive||Bve&&r.native!==!1?r:{...r,recursive:!1},l={watcher:REn.default.watch(a,u),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=VDe.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(u){this.error(u)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||Bve&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??Sve,a=r.limit??uBt,[u]=await cl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let c=await this.watchDirectories([t],r,n,i,o);if(u.length){let l=cl.fs.getDepth(t);for(let p of u){let d=cl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||c)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(c,l)=>{l===t&&(u(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(kT.CLOSE,u),s.watchFile(t,r,o)},u=()=>{this._subwatchers.delete(i),this.removeListener(kT.CLOSE,u),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=VDe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new N6i,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return cl.lang.noop;if(this.pollerExists(t,r))return cl.lang.noop;let i={...r,interval:r.pollingInterval??JYa},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(kT.CLOSE,a),REn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(kT.CLOSE,a),REn.default.unwatchFile(t,n)};return cl.lang.attempt(s),()=>cl.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=cl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,u)=>u===s||!cl.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=VDe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await cl.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=VDe.default.dirname(t);return(await cl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=cl.lang.noop){if(cl.lang.isFunction(t))return this.watch([],{},t);if(cl.lang.isUndefined(t))return this.watch([],r,n);if(cl.lang.isFunction(r))return this.watch(t,{},r);if(cl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=cl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==cl.lang.noop&&this.on(kT.ALL,n),r.readdirMap=void 0,this.ready())}},FEn=j6i;HEn();Vt();var Hrt=require("fs/promises"),AZa=require("os"),yZa=_e(require("path"),1),wod=".fern",Cod="logs";function xod(){return"cli@4.32.0"}var KDe=class{logFilePath=null;initialized=!1;sessionStartTime;constructor(){this.sessionStartTime=Date.now()}async initialize(){if(this.initialized)return;let t=We(Ut.of((0,AZa.homedir)()),Se.of(wod)),r=We(t,Se.of(Cod));await Xt(r)||await(0,Hrt.mkdir)(r,{recursive:!0});let i=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=We(r,Se.of(i));let o=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${yZa.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
2166
|
+
`)}if(s)throw Kr.exit();if(o.warningCount>0){t.stderr.info(`${po.warning} ${be.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(be.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${po.success} ${be.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>mK(i))),{success:!r,results:n}}};function i8i(e){let t=new n8i;va(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}))}var f$a=_e(require("net"),1),d$a=_e(require("os"),1),z0n=class extends Error{constructor(t){super(`${t} is locked`)}},Crt={old:new Set,young:new Set},DJf=1e3*15;var NSt,RJf=()=>{let e=d$a.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},l$a=e=>new Promise((t,r)=>{let n=f$a.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),p$a=async(e,t)=>{if(e.host||e.port===0)return l$a(e);for(let r of t)try{await l$a({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},FJf=function*(e){e&&(yield*e),yield 0};async function Eve(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let i=e.exclude;if(typeof i[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let o of i){if(typeof o!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(o))throw new TypeError(`Number ${o} in the exclude option is not a safe integer and can't be used`)}r=new Set(i)}NSt===void 0&&(NSt=setTimeout(()=>{NSt=void 0,Crt.old=Crt.young,Crt.young=new Set},DJf),NSt.unref&&NSt.unref());let n=RJf();for(let i of FJf(t))try{if(r.has(i))continue;let o=await p$a({...e,port:i},n);for(;Crt.old.has(o)||Crt.young.has(o);){if(i!==0)throw new z0n(i);o=await p$a({...e,port:i},n)}return Crt.young.add(o),o}catch(o){if(!["EADDRINUSE","EACCES"].includes(o.code)&&!(o instanceof z0n))throw o}throw new Error("No available ports found")}_g();Vt();var Pou=_e(a8i(),1),Tou=_e(BEn(),1),fIn=require("fs/promises"),Dou=_e(require("http"),1),Rou=_e(require("path"),1);var pXa=require("events"),REn=_e(require("fs"),1),VDe=_e(require("path"),1);var $Ya=_e(require("os"),1),HYa=300,Sve=20,uBt=1e7,KYa=$Ya.default.platform();var Knd=KYa==="darwin",_6i=KYa==="win32",Bve=Knd||_6i,JYa=3e3,YYa=2e4,S6i=1250;var NX;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(NX||(NX={}));var zDe;(function(e){e.CHANGE="change",e.RENAME="rename"})(zDe||(zDe={}));var cBt;(function(e){e.CHANGE="change",e.ERROR="error"})(cBt||(cBt={}));var Za;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(Za||(Za={}));var kT;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(kT||(kT={}));var Jnd=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,u=0,c=0,l=()=>{let b=Date.now(),I=b-u,w=b-c,x=I>=t||w>=o;return[b,x]},p=b=>{if(c=b,!s)return;let I=s;s=void 0,e.apply(void 0,I)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=b=>{if(c=b,n)return p(b)},h=b=>{if(i&&s)return p(b);s=void 0},g=()=>{a=void 0;let[b,I]=l();return I?h(b):A(b)},A=b=>{let I=b-u,w=b-c,x=t-I,C=o-w,_=Math.min(x,C);return E(_)},E=b=>{a&&clearTimeout(a),!(b<=0)&&(a=setTimeout(g,b))},v=(...b)=>{let[I,w]=l(),x=!!a;if(s=b,u=I,(w||!a)&&E(t),w)return x?p(I):m(I)};return v.cancel=d,v.flush=f,v},OEn=Jnd;var T6i=_e(require("fs"),1),TEn=_e(require("path"),1);var If=_e(require("fs"),1),y1=require("util");var hae=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},jX=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var B6i=_e(require("process"),1),XYa=B6i.default.getuid?!B6i.default.getuid():!1,ZYa=1e4,Bk=()=>{};var lBt={isChangeErrorOk:e=>{if(!lBt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!XYa&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!lBt.isNodeError(e))return!1;let{code:t}=e;return t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM"},onChangeError:e=>{if(!lBt.isNodeError(e))throw e;if(!lBt.isChangeErrorOk(e))throw e}},xE=lBt;var O6i=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=ZYa,this.queueActive=new Set,this.queueWaiting=new Set,this.init=()=>{this.intervalId||(this.intervalId=setInterval(this.tick,this.interval))},this.reset=()=>{this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId)},this.add=t=>{this.queueWaiting.add(t),this.queueActive.size<this.limit/2?this.tick():this.init()},this.remove=t=>{this.queueWaiting.delete(t),this.queueActive.delete(t)},this.schedule=()=>new Promise(t=>{let r=()=>this.remove(n),n=()=>t(r);this.add(n)}),this.tick=()=>{if(!(this.queueActive.size>=this.limit)){if(!this.queueWaiting.size)return this.reset();for(let t of this.queueWaiting){if(this.queueActive.size>=this.limit)break;this.queueWaiting.delete(t),this.queueActive.add(t),t()}}}}},eXa=new O6i;var gae=(e,t)=>function(n){return function i(...o){return eXa.schedule().then(s=>{let a=c=>(s(),c),u=c=>{if(s(),Date.now()>=n)throw c;if(t(c)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw c};return e.apply(void 0,o).then(a,u)})}},Aae=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var Ynd={attempt:{chmod:hae((0,y1.promisify)(If.default.chmod),xE.onChangeError),chown:hae((0,y1.promisify)(If.default.chown),xE.onChangeError),close:hae((0,y1.promisify)(If.default.close),Bk),fsync:hae((0,y1.promisify)(If.default.fsync),Bk),mkdir:hae((0,y1.promisify)(If.default.mkdir),Bk),realpath:hae((0,y1.promisify)(If.default.realpath),Bk),stat:hae((0,y1.promisify)(If.default.stat),Bk),unlink:hae((0,y1.promisify)(If.default.unlink),Bk),chmodSync:jX(If.default.chmodSync,xE.onChangeError),chownSync:jX(If.default.chownSync,xE.onChangeError),closeSync:jX(If.default.closeSync,Bk),existsSync:jX(If.default.existsSync,Bk),fsyncSync:jX(If.default.fsync,Bk),mkdirSync:jX(If.default.mkdirSync,Bk),realpathSync:jX(If.default.realpathSync,Bk),statSync:jX(If.default.statSync,Bk),unlinkSync:jX(If.default.unlinkSync,Bk)},retry:{close:gae((0,y1.promisify)(If.default.close),xE.isRetriableError),fsync:gae((0,y1.promisify)(If.default.fsync),xE.isRetriableError),open:gae((0,y1.promisify)(If.default.open),xE.isRetriableError),readFile:gae((0,y1.promisify)(If.default.readFile),xE.isRetriableError),rename:gae((0,y1.promisify)(If.default.rename),xE.isRetriableError),stat:gae((0,y1.promisify)(If.default.stat),xE.isRetriableError),write:gae((0,y1.promisify)(If.default.write),xE.isRetriableError),writeFile:gae((0,y1.promisify)(If.default.writeFile),xE.isRetriableError),closeSync:Aae(If.default.closeSync,xE.isRetriableError),fsyncSync:Aae(If.default.fsyncSync,xE.isRetriableError),openSync:Aae(If.default.openSync,xE.isRetriableError),readFileSync:Aae(If.default.readFileSync,xE.isRetriableError),renameSync:Aae(If.default.renameSync,xE.isRetriableError),statSync:Aae(If.default.statSync,xE.isRetriableError),writeSync:Aae(If.default.writeSync,xE.isRetriableError),writeFileSync:Aae(If.default.writeFileSync,xE.isRetriableError)}},tXa=Ynd;var PEn=_e(require("fs"),1),pBt=_e(require("path"),1);var P6i=()=>{};var Xnd=()=>{let e=P6i,t=P6i,r=!1,n=!1;return{promise:new Promise((u,c)=>{e=l=>(r=!0,u(l)),t=l=>(n=!0,c(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},rXa=Xnd;var Znd=()=>{let{promise:e,resolve:t,isPending:r}=rXa(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},nXa=Znd;var iXa={then:e=>{e()}};var oXa=e=>Array.isArray(e)?e:[e],sXa=e=>typeof e=="function";var eid=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=oXa(o).map(J=>sXa(J)?J:H=>J.test(H)),a=J=>s.some(H=>H(J)),u=t?.signal??{aborted:!1},c=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},g=[],A=new Set,E={},v={},b=new Set,I={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},w={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:g,symlinksNames:A,symlinksNamesToPaths:E,map:v},{promise:x,increment:C,decrement:_}=nXa(),R=0,U=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.directories.push(H),J.directoriesNames.add(ge),l.push(H),p.add(ge),d.propertyIsEnumerable(ge)||(d[ge]=[]),d[ge].push(H),b.add(H),!(me>=n)&&(R>=i||K(H,me+1)))},q=(J,H,ge)=>{b.has(H)||R>=i||(R+=1,J.files.push(H),J.filesNames.add(ge),f.push(H),m.add(ge),h.propertyIsEnumerable(ge)||(h[ge]=[]),h[ge].push(H),b.add(H))},z=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.symlinks.push(H),J.symlinksNames.add(ge),g.push(H),A.add(ge),E.propertyIsEnumerable(ge)||(E[ge]=[]),E[ge].push(H),b.add(H),r&&(me>=n||R>=i||Ee(H,me+1)))},Z=(J,H,ge,me,we)=>{u.aborted||a(H)||(me.isDirectory()?U(J,H,ge,we):me.isFile()?q(J,H,ge):me.isSymbolicLink()&&z(J,H,ge,we))},oe=(J,H,ge,me)=>{if(u.aborted)return;let we=H===pBt.default.sep?"":pBt.default.sep,Be=ge.name,le=`${H}${we}${Be}`;a(le)||(ge.isDirectory()?U(J,le,Be,me):ge.isFile()?q(J,le,Be):ge.isSymbolicLink()&&z(J,le,Be,me))},V=(J,H,ge,me)=>{for(let we=0,Be=ge.length;we<Be;we++)oe(J,H,ge[we],me)},K=(J,H)=>{u.aborted||H>n||R>=i||(C(),PEn.default.readdir(J,{withFileTypes:!0},(ge,me)=>{if(ge||u.aborted||!me.length)return _();(c(me)||iXa).then(()=>{let Be=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};V(Be,J,me,H),_()})}))},Ee=(J,H)=>{C(),PEn.default.realpath(J,(ge,me)=>{if(ge||u.aborted)return _();PEn.default.stat(me,(we,Be)=>{if(we||u.aborted)return _();let le=pBt.default.basename(me),ue=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};Z(ue,me,le,Be,H),_()})})};return(async(J,H=1)=>(J=pBt.default.normalize(J),b.add(J),K(J,H),await x,u.aborted?I:w))(e)},aXa=eid;var MX={lang:{debounce:OEn,attempt:e=>{try{return e()}catch(t){return MX.lang.castError(t)}},castArray:e=>MX.lang.isArray(e)?e:[e],castError:e=>MX.lang.isError(e)?e:MX.lang.isString(e)?new Error(e):new Error("Unknown error"),defer:e=>setTimeout(e,0),isArray:e=>Array.isArray(e),isError:e=>e instanceof Error,isFunction:e=>typeof e=="function",isNaN:e=>Number.isNaN(e),isNumber:e=>typeof e=="number",isPrimitive:e=>{if(e===null)return!0;let t=typeof e;return t!=="object"&&t!=="function"},isShallowEqual:(e,t)=>{if(e===t)return!0;if(MX.lang.isNaN(e))return MX.lang.isNaN(t);if(MX.lang.isPrimitive(e)||MX.lang.isPrimitive(t))return e===t;for(let r in e)if(!(r in t))return!1;for(let r in t)if(e[r]!==t[r])return!1;return!0},isSet:e=>e instanceof Set,isString:e=>typeof e=="string",isUndefined:e=>e===void 0,noop:()=>{},uniq:e=>e.length<2?e:Array.from(new Set(e))},fs:{getDepth:e=>Math.max(0,e.split(TEn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?T6i.default.realpathSync.native(e):T6i.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===TEn.default.sep&&t.length-e.length>TEn.default.sep.length,poll:(e,t=YYa)=>tXa.retry.stat(t)(e,{bigint:!0}).catch(MX.lang.noop),readdir:async(e,t,r=1/0,n=1/0,i,o)=>{if(o&&r===1&&e in o){let s=o[e];return[s.directories,s.files]}else{let s=await aXa(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},cl=MX;var DEn=_e(require("path"),1);var D6i=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||cl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=HYa){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,u)=>{let c=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...u]),p=this.eventsDeduplicate([...c,...l]);this.onTargetEvents(p)},s=cl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,u="",c=!1)=>{c?await this.eventsPopulate([u],n,!0):i.add(u),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===Za.CHANGE&&a===Za.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===Za.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Za.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??Sve:Math.min(1,this.options.depth??Sve),s=this.options.limit??uBt,[a,u]=await cl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),c=[...a,...u];return await Promise.all(c.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())cl.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(Za.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!Bve&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(Za.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Za.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(DEn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(DEn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Za.ADD?this.onTargetAdd(n):r===Za.ADD_DIR?this.onTargetAddDir(n):r===Za.CHANGE?this.onTargetChange(n):r===Za.UNLINK?this.onTargetUnlink(n):r===Za.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=zDe.CHANGE,r){if(this.watcher.isClosed())return;let n=DEn.default.resolve(this.folderPath,r||"");this.filePath&&n!==this.folderPath&&n!==this.filePath||this.watcher.isIgnored(n,this.options.ignore)||this.onWatcherEvent(t,n)}onWatcherError(t){_6i&&t.code==="EPERM"?this.onWatcherChange(zDe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(cBt.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(cBt.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(zDe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&Bve&&this.options.native!==!1?this.options.depth??Sve:Math.min(1,this.options.depth??Sve),n=this.options.limit??uBt,[i,o]=await cl.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(zDe.CHANGE,a,t)}))}}},uXa=D6i;var QT={interval:100,intervalId:void 0,fns:new Map,init:()=>{QT.intervalId||(QT.intervalId=setInterval(QT.resolve,QT.interval))},reset:()=>{QT.intervalId&&(clearInterval(QT.intervalId),delete QT.intervalId)},add:(e,t)=>{QT.fns.set(e,Date.now()+t),QT.init()},remove:e=>{QT.fns.delete(e)},resolve:()=>{if(!QT.fns.size)return QT.reset();let e=Date.now();for(let[t,r]of QT.fns)r>=e||(QT.remove(t),t())}},fBt=QT;var dBt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=S6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(cl.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let u=()=>{s.add.delete(n),fBt.remove(c)},c=()=>{u(),a()};fBt.add(c,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;u();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=S6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let u=()=>{s.unlink.delete(n),fBt.remove(c)},c=()=>{u(),a()};fBt.add(c,r);let l=()=>(u(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Za.ADD,NX.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,Za.ADD_DIR,NX.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK,NX.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK_DIR,NX.DIR);return this.getLockUnlink({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};dBt.DIR_EVENTS={add:Za.ADD_DIR,rename:Za.RENAME_DIR,unlink:Za.UNLINK_DIR};dBt.FILE_EVENTS={add:Za.ADD,change:Za.CHANGE,rename:Za.RENAME,unlink:Za.UNLINK};var cXa=dBt;var R6i=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(cl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(cl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return cl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);cl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},F6i=R6i;var k6i=class{constructor(t){this.ino=t.ino<=Number.MAX_SAFE_INTEGER?Number(t.ino):t.ino,this.size=Number(t.size),this.atimeMs=Number(t.atimeMs),this.mtimeMs=Number(t.mtimeMs),this.ctimeMs=Number(t.ctimeMs),this.birthtimeMs=Number(t.birthtimeMs),this._isFile=t.isFile(),this._isDirectory=t.isDirectory(),this._isSymbolicLink=t.isSymbolicLink()}isFile(){return this._isFile}isDirectory(){return this._isDirectory}isSymbolicLink(){return this._isSymbolicLink}},lXa=k6i;var Q6i=class{constructor(){this.inos={},this.paths=new F6i,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await cl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new lXa(n)}reset(){this.inos={},this.paths=new F6i,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,Za.ADD,i),[Za.ADD];if(i.isDirectory())return this.updateIno(t,Za.ADD_DIR,i),[Za.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Za.UNLINK,n),[Za.UNLINK];if(n.isDirectory())return this.updateIno(t,Za.UNLINK_DIR,n),[Za.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Za.CHANGE,i),[Za.CHANGE]);if(i.isDirectory())return this.updateIno(t,Za.UNLINK,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK,Za.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD,i),[Za.UNLINK_DIR,Za.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK_DIR,Za.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?NX.FILE:NX.DIR;i[t]=[n.ino,o]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let n=this.stats.get(t)?.ino||-1;this.paths.delete(n,t),this.stats.delete(t)}}},N6i=Q6i;var j6i=class e extends pXa.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(kT.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(kT.CLOSE,i)),this._readyWait=new Promise(i=>this.on(kT.READY,i)),this._locker=new cXa(this),this._roots=new Set,this._poller=new N6i,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(cl.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(kT.CLOSE))}error(t){if(this.isClosed())return!1;let r=cl.lang.castError(t);return this.emit(kT.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(kT.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(kT.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)cl.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new uXa(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=cl.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=VDe.default.dirname(t);for(let a=1;a<1/0;a++){if(this._watchers[s]?.find(l=>(a===1||l.options.recursive&&a<=(l.options.depth??Sve))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&Bve&&l.options.native!==!1)))return!0;if(!Bve)break;let c=VDe.default.dirname(t);if(s===c)break;s=c}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=cl.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let u=!r.recursive||Bve&&r.native!==!1?r:{...r,recursive:!1},l={watcher:REn.default.watch(a,u),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=VDe.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(u){this.error(u)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||Bve&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??Sve,a=r.limit??uBt,[u]=await cl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let c=await this.watchDirectories([t],r,n,i,o);if(u.length){let l=cl.fs.getDepth(t);for(let p of u){let d=cl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||c)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(c,l)=>{l===t&&(u(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(kT.CLOSE,u),s.watchFile(t,r,o)},u=()=>{this._subwatchers.delete(i),this.removeListener(kT.CLOSE,u),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=VDe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new N6i,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return cl.lang.noop;if(this.pollerExists(t,r))return cl.lang.noop;let i={...r,interval:r.pollingInterval??JYa},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(kT.CLOSE,a),REn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(kT.CLOSE,a),REn.default.unwatchFile(t,n)};return cl.lang.attempt(s),()=>cl.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=cl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,u)=>u===s||!cl.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=VDe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await cl.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=VDe.default.dirname(t);return(await cl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=cl.lang.noop){if(cl.lang.isFunction(t))return this.watch([],{},t);if(cl.lang.isUndefined(t))return this.watch([],r,n);if(cl.lang.isFunction(r))return this.watch(t,{},r);if(cl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=cl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==cl.lang.noop&&this.on(kT.ALL,n),r.readdirMap=void 0,this.ready())}},FEn=j6i;HEn();Vt();var Hrt=require("fs/promises"),AZa=require("os"),yZa=_e(require("path"),1),wod=".fern",Cod="logs";function xod(){return"cli@4.32.1"}var KDe=class{logFilePath=null;initialized=!1;sessionStartTime;constructor(){this.sessionStartTime=Date.now()}async initialize(){if(this.initialized)return;let t=We(Ut.of((0,AZa.homedir)()),Se.of(wod)),r=We(t,Se.of(Cod));await Xt(r)||await(0,Hrt.mkdir)(r,{recursive:!0});let i=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=We(r,Se.of(i));let o=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${yZa.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
2167
2167
|
`);await(0,Hrt.writeFile)(this.logFilePath,o,"utf-8"),this.initialized=!0}getLogFilePath(){return this.logFilePath}async writeEntry(t){if(!this.initialized||!this.logFilePath)return;let r=JSON.stringify(t)+`
|
|
2168
2168
|
`;try{await(0,Hrt.appendFile)(this.logFilePath,r,"utf-8")}catch{}}async logFrontendMetrics(t){let r={timestamp:t.timestamp,source:t.source,level:t.level,eventType:this.getEventType(t.payload,t.isAggregate),isAggregate:t.isAggregate,data:t.payload};await this.writeEntry(r)}async logCliMetric(t,r="info"){let n={timestamp:t.timestamp,source:xod(),level:r,eventType:t.type,data:{durationMs:t.durationMs,metadata:t.metadata}};await this.writeEntry(n)}async logCliMemory(){let t=process.memoryUsage(),r={type:"cli_memory",timestamp:new Date().toISOString(),metadata:{heapUsed:t.heapUsed,heapTotal:t.heapTotal,external:t.external,rss:t.rss,heapUsedMB:Math.round(t.heapUsed/1024/1024*100)/100,heapTotalMB:Math.round(t.heapTotal/1024/1024*100)/100,rssMB:Math.round(t.rss/1024/1024*100)/100}};await this.logCliMetric(r)}async logCliReloadStart(){let t={type:"cli_reload_start",timestamp:new Date().toISOString()};await this.logCliMetric(t)}async logCliReloadFinish(t,r){let n={type:"cli_reload_finish",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliDocsGeneration(t,r){let n={type:"cli_docs_generation",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliValidation(t,r){let n={type:"cli_validation",timestamp:new Date().toISOString(),durationMs:t,metadata:{success:r}};await this.logCliMetric(n)}getEventType(t,r){return r?"aggregate_summary":"type"in t&&typeof t.type=="string"?t.type:"unknown"}static isMetricsMessage(t){if(typeof t!="object"||t===null)return!1;let r=t;return r.type==="metrics"&&typeof r.timestamp=="string"&&typeof r.source=="string"}};var sVi={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function bZa(e){let t=_od();if(t==null)return;let{port:r,debugLogger:n,getDocsLoadResponse:i}=e,o=new Map;function s(u){let c=JSON.stringify(u),l=[];for(let[p]of o)try{p.send(c)}catch{l.push(p)}for(let p of l){let d=o.get(p);d&&(clearInterval(d.pingInterval),o.delete(p))}}let a=t.serve({port:r,fetch(u,c){if(u.method==="OPTIONS")return new Response(null,{status:204,headers:sVi});let l=new URL(u.url);if(u.headers.get("upgrade")?.toLowerCase()==="websocket"){c.upgrade(u,{data:{connectionId:`${Date.now()}`}});return}if(u.method==="POST"&&l.pathname==="/v2/registry/docs/load-with-url")return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...sVi}});let p=/^\/_local\/(.*)/.exec(l.pathname);return u.method==="GET"&&p!=null?new Response(t.file(`/${p[1]}`),{headers:sVi}):new Response("Not Found",{status:404})},websocket:{open(u){let{connectionId:c}=u.data,l=setInterval(()=>{let p=o.get(u);if(!p)return;let d=Date.now();if(d-p.lastPong>9e4){u.close();return}try{u.send(JSON.stringify({type:"ping",timestamp:d}))}catch{u.close()}},3e4);o.set(u,{pingInterval:l,lastPong:Date.now()});try{u.send(JSON.stringify({type:"connected",connectionId:c}))}catch{}},message(u,c){try{let l=JSON.parse(c.toString());if(l.type==="pong"){let p=o.get(u);p&&(p.lastPong=Date.now())}else KDe.isMetricsMessage(l)&&n.logFrontendMetrics(l)}catch{}},close(u){let c=o.get(u);c&&(clearInterval(c.pingInterval),o.delete(u))}}});return{sendData:s,stop:u=>a.stop(u)}}function _od(){return globalThis.Bun}Vt();var Lqi=_e(hVi(),1),Iou=_e(Bqi(),1),Ok=require("fs/promises"),wou=require("os"),Cou=_e(yw(),1),xou=_e(Eou(),1),sIn=process.platform==="win32",Mqi=be.cyan("[docs]:"),rld="etag",nld=23,vou=e=>e.padEnd(nld," "),ild="preview",old="app-preview",sld="bundle",ald=".next",uld="standalone",cld=".fern",lld="packages/fern-docs/bundle/.next/server/instrumentation.js",pld=".npmrc",fld=".pnpmfile.cjs",dld="pnpm-workspace.yaml",mld='Cannot find matching keyid: {"signatures":';function hld(){return We(Ut.of((0,wou.homedir)()),Se.of(cld))}function fnt({app:e=!1}){return We(hld(),Se.of(e?old:ild))}function Mve({app:e=!1}){return We(fnt({app:e}),Se.of(e?ald:sld))}function WBt({app:e=!1}){return We(Mve({app:e}),Se.of(uld))}function gld({app:e=!1}){return We(WBt({app:e}),Se.of(lld))}function Ald({app:e=!1}){return We(WBt({app:e}),Se.of(dld))}function yld({app:e=!1}){return We(WBt({app:e}),Se.of(fld))}function bld({app:e=!1}){return We(WBt({app:e}),Se.of(pld))}function iRe(e){return new Error(`${e}. Please reach out to support@buildwithfern.com.`)}function Eld({app:e=!1}){return We(fnt({app:e}),Se.of(rld))}var vld=`module.exports = {
|
|
2169
2169
|
hooks: {
|
|
@@ -2204,7 +2204,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
|
|
|
2204
2204
|
|
|
2205
2205
|
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`);case"UnavailableError":return t.failAndThrow("Failed to publish docs. Please try again later or reach out to Fern support at support@buildwithfern.com.");default:return t.failAndThrow("Failed to publish docs.",e)}}function fdd(e,t){let n=e?.content;if(n?.reason==="status-code"){let i=n.statusCode;if(i===401||i===403)return`${`You do not have permission to publish docs to organization '${t}'. Please run 'fern login' to ensure you are logged in with the correct account.`}
|
|
2206
2206
|
|
|
2207
|
-
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}}function ddd(e){try{return new URL(BT(e)).pathname}catch{return}}async function mdd({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await hdd({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=await e.api.v1.register.checkSdkDynamicIrExists({orgId:Cr.OrgId(r),snippetConfiguration:o});if(!s.ok||!s.body){n.logger.debug("[SDK Dynamic IR] API call failed or returned empty body");return}let a=s.body.existingDynamicIrs;if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[c,l]of Object.entries(a))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${c}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();u[c]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${c}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${c}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${c}: ${p}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function pau(e){return e.replace(/^https:\/\//,"")}async function hdd({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package,explicitVersion:r.typescriptSdk?.version},{language:"python",snippetName:r.pythonSdk?.package,explicitVersion:r.pythonSdk?.version},{language:"java",snippetName:r.javaSdk?.coordinate,explicitVersion:r.javaSdk?.version},{language:"go",snippetName:r.goSdk?.githubRepo&&pau(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version},{language:"csharp",snippetName:r.csharpSdk?.package,explicitVersion:r.csharpSdk?.version},{language:"ruby",snippetName:r.rubySdk?.gem,explicitVersion:r.rubySdk?.version},{language:"php",snippetName:r.phpSdk?.package,explicitVersion:r.phpSdk?.version},{language:"swift",snippetName:r.swiftSdk?.package,explicitVersion:r.swiftSdk?.version},{language:"rust",snippetName:r.rustSdk?.package,explicitVersion:r.rustSdk?.version}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion;a||(a=(await gdd({fdr:e,workspace:t,language:s.language,snippetName:s.snippetName,context:n}))?.version),i[s.language]={packageName:s.snippetName,version:a},a||n.logger.debug(`[SDK Dynamic IR] ${s.language}: no version specified, will use latest`)}return i}async function gdd({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,u;if(t.generatorsConfiguration?.groups){let c=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=bn.getPackageName({generatorInvocation:p});d&&c.push(d),!a&&d&&(a=d,u=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let c=await e.sdks.versions.computeSemanticVersion({githubRepository:s,language:o,package:a});if(!c.ok){i.logger.debug(`[SDK Dynamic IR] ${r}: version computation failed for package "${a}"`);return}return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${c.body.version} for package "${a}"`),{version:c.body.version,generatorPackage:a}}catch(c){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${c}`);return}}async function Add({workspace:e,organization:t,context:r,snippetsConfig:n,skipLanguages:i=new Set}){let o={};if(!e)return;let s={typescript:n.typescriptSdk?.package,python:n.pythonSdk?.package,java:n.javaSdk?.coordinate,go:n.goSdk?.githubRepo&&pau(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let u of a.generators){let c=oRe({apiName:e.workspaceName??"",organization:t,generatorInvocation:u}),l="";if(c?.outputConfig.type==="publish")switch(c.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=c.outputConfig.value.packageName;break;case"maven":l=c.outputConfig.value.coordinate;break;case"go":l=c.outputConfig.value.repoUrl;break;case"swift":l=c.outputConfig.value.repoUrl;break;case"crates":l=c.outputConfig.value.packageName;break}if(u.language==="php"&&u.config&&typeof u.config=="object"&&"packageName"in u.config&&(l=u.config.packageName??""),!!u.language){if(i.has(u.language)){r.logger.debug(`Skipping dynamic IR generation for ${u.language} (using existing SDK dynamic IR)`);continue}if(u.language&&s[u.language]===l){let p=Zm({workspace:e,generationLanguage:u.language,keywords:void 0,smartCasing:u.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new tm(r,e),dynamicGeneratorConfig:c}),d=JBe({ir:p,disableExamples:!0,smartCasing:u.smartCasing,generationLanguage:u.language,generatorConfig:c});d?o[u.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${u.language}`)}}}for(let[a,u]of Object.entries(s))a&&u&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${u}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${u} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function ydd({dynamicIRs:e,dynamicIRUploadUrls:t,context:r,apiId:n}){if(Object.keys(t).length>0)for(let[i,o]of Object.entries(t)){let s=e[i]?.dynamicIR;if(s){let a=JSON.stringify(s);(await fetch(o.uploadUrl,{method:"PUT",body:a,headers:{"Content-Type":"application/octet-stream","Content-Length":Buffer.byteLength(a,"utf8").toString()}})).ok?r.logger.debug(`Uploaded dynamic IR for ${n}:${i}`):r.logger.warn(`Failed to upload dynamic IR for ${n}:${i}`)}else r.logger.warn(`Could not find matching dynamic IR to upload for ${n}:${i}`)}}async function bdd({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(be.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function Edd(e,t){if(e)return{enabled:!0,model:process.env.FERN_AI_MODEL||"gpt-4o-mini",maxRetries:parseInt(process.env.FERN_AI_MAX_RETRIES||"3"),requestTimeoutMs:parseInt(process.env.FERN_AI_TIMEOUT_MS||"25000"),styleInstructions:t}}function vdd(e){let t=e,r=t?.content;return{errorType:t?.error,statusCode:t?.statusCode??r?.statusCode,reason:r?.reason,errorMessage:r?.errorMessage??r?.message,body:r?.body,cause:r?.cause,rawError:e}}var eOt=[60*1e3,300*1e3,300*1e3];async function tOt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,disableTemplates:u,skipUpload:c,cliVersion:l}){let p=a&&!n.config.settings?.substituteEnvVars;n.config=$y(n.config,{onError:g=>i.failAndThrow(g)},{substituteAsEmpty:p});let d=n.config.instances;if(d.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.");return}if(d.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${d[0]?.url})`);return}let f=d.find(g=>g.url===s)??d[0];if(f==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`);return}let m=[];f.customDomain!=null&&(typeof f.customDomain=="string"?m.push(f.customDomain):Array.isArray(f.customDomain)&&m.push(...f.customDomain)),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${f.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let h;return await i.runInteractiveTask({name:f.url},async()=>{let g=performance.now(),A=()=>lau({docsWorkspace:n,customDomains:m,domain:f.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,editThisPage:f.editThisPage,isPrivate:f.private,disableTemplates:u,skipUpload:c,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:f.audiences?Array.isArray(f.audiences)?f.audiences:[f.audiences]:void 0,docsUrl:f.url,cliVersion:l});for(let v=0;;v++)try{h=await A();break}catch(b){if(!(b instanceof gnt)||v>=eOt.length){if(b instanceof gnt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.");throw b}let I=eOt[v]??eOt[eOt.length-1]??6e4,w=I/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${w} minute${w===1?"":"s"} (attempt ${v+1}/${eOt.length})...`),await new Promise(x=>setTimeout(x,I))}let E=performance.now()-g;i.logger.debug(`Docs publishing completed in ${E.toFixed(0)}ms`)}),h}var rwn=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,skipUpload:n}){let i=new ih({context:this.context,task:this.task});try{let o=await tOt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:i,token:this.token,instanceUrl:t,preview:r,disableTemplates:void 0,skipUpload:n,cliVersion:"4.32.0"});return i.getResult()===Pp.Failure?{success:!1}:{success:!0,url:o}}catch(o){return{success:!1,error:o instanceof Error?o.message:String(o)}}}};Rt();var Ant=class e{static MAX_DISPLAYED_LOGS_TTY=10;static URL_PATTERN=/https?:\/\/[^\s]+/;context;stream;tasks={};taskOrder=[];startTime;isRegistered=!1;constructor(t){this.context=t.context,this.stream=t.stream??process.stderr}addTask(t){let r={...t,status:t.status??"pending"};return this.tasks[t.id]=r,this.taskOrder.push(t.id),this}async start(t){return this.startTime=Date.now(),t!=null&&await this.context.ttyAwareLogger.takeOverTerminal(()=>{this.stream.write(`
|
|
2207
|
+
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}}function ddd(e){try{return new URL(BT(e)).pathname}catch{return}}async function mdd({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await hdd({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=await e.api.v1.register.checkSdkDynamicIrExists({orgId:Cr.OrgId(r),snippetConfiguration:o});if(!s.ok||!s.body){n.logger.debug("[SDK Dynamic IR] API call failed or returned empty body");return}let a=s.body.existingDynamicIrs;if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[c,l]of Object.entries(a))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${c}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();u[c]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${c}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${c}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${c}: ${p}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function pau(e){return e.replace(/^https:\/\//,"")}async function hdd({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package,explicitVersion:r.typescriptSdk?.version},{language:"python",snippetName:r.pythonSdk?.package,explicitVersion:r.pythonSdk?.version},{language:"java",snippetName:r.javaSdk?.coordinate,explicitVersion:r.javaSdk?.version},{language:"go",snippetName:r.goSdk?.githubRepo&&pau(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version},{language:"csharp",snippetName:r.csharpSdk?.package,explicitVersion:r.csharpSdk?.version},{language:"ruby",snippetName:r.rubySdk?.gem,explicitVersion:r.rubySdk?.version},{language:"php",snippetName:r.phpSdk?.package,explicitVersion:r.phpSdk?.version},{language:"swift",snippetName:r.swiftSdk?.package,explicitVersion:r.swiftSdk?.version},{language:"rust",snippetName:r.rustSdk?.package,explicitVersion:r.rustSdk?.version}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion;a||(a=(await gdd({fdr:e,workspace:t,language:s.language,snippetName:s.snippetName,context:n}))?.version),i[s.language]={packageName:s.snippetName,version:a},a||n.logger.debug(`[SDK Dynamic IR] ${s.language}: no version specified, will use latest`)}return i}async function gdd({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,u;if(t.generatorsConfiguration?.groups){let c=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=bn.getPackageName({generatorInvocation:p});d&&c.push(d),!a&&d&&(a=d,u=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let c=await e.sdks.versions.computeSemanticVersion({githubRepository:s,language:o,package:a});if(!c.ok){i.logger.debug(`[SDK Dynamic IR] ${r}: version computation failed for package "${a}"`);return}return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${c.body.version} for package "${a}"`),{version:c.body.version,generatorPackage:a}}catch(c){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${c}`);return}}async function Add({workspace:e,organization:t,context:r,snippetsConfig:n,skipLanguages:i=new Set}){let o={};if(!e)return;let s={typescript:n.typescriptSdk?.package,python:n.pythonSdk?.package,java:n.javaSdk?.coordinate,go:n.goSdk?.githubRepo&&pau(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let u of a.generators){let c=oRe({apiName:e.workspaceName??"",organization:t,generatorInvocation:u}),l="";if(c?.outputConfig.type==="publish")switch(c.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=c.outputConfig.value.packageName;break;case"maven":l=c.outputConfig.value.coordinate;break;case"go":l=c.outputConfig.value.repoUrl;break;case"swift":l=c.outputConfig.value.repoUrl;break;case"crates":l=c.outputConfig.value.packageName;break}if(u.language==="php"&&u.config&&typeof u.config=="object"&&"packageName"in u.config&&(l=u.config.packageName??""),!!u.language){if(i.has(u.language)){r.logger.debug(`Skipping dynamic IR generation for ${u.language} (using existing SDK dynamic IR)`);continue}if(u.language&&s[u.language]===l){let p=Zm({workspace:e,generationLanguage:u.language,keywords:void 0,smartCasing:u.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new tm(r,e),dynamicGeneratorConfig:c}),d=JBe({ir:p,disableExamples:!0,smartCasing:u.smartCasing,generationLanguage:u.language,generatorConfig:c});d?o[u.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${u.language}`)}}}for(let[a,u]of Object.entries(s))a&&u&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${u}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${u} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function ydd({dynamicIRs:e,dynamicIRUploadUrls:t,context:r,apiId:n}){if(Object.keys(t).length>0)for(let[i,o]of Object.entries(t)){let s=e[i]?.dynamicIR;if(s){let a=JSON.stringify(s);(await fetch(o.uploadUrl,{method:"PUT",body:a,headers:{"Content-Type":"application/octet-stream","Content-Length":Buffer.byteLength(a,"utf8").toString()}})).ok?r.logger.debug(`Uploaded dynamic IR for ${n}:${i}`):r.logger.warn(`Failed to upload dynamic IR for ${n}:${i}`)}else r.logger.warn(`Could not find matching dynamic IR to upload for ${n}:${i}`)}}async function bdd({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(be.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function Edd(e,t){if(e)return{enabled:!0,model:process.env.FERN_AI_MODEL||"gpt-4o-mini",maxRetries:parseInt(process.env.FERN_AI_MAX_RETRIES||"3"),requestTimeoutMs:parseInt(process.env.FERN_AI_TIMEOUT_MS||"25000"),styleInstructions:t}}function vdd(e){let t=e,r=t?.content;return{errorType:t?.error,statusCode:t?.statusCode??r?.statusCode,reason:r?.reason,errorMessage:r?.errorMessage??r?.message,body:r?.body,cause:r?.cause,rawError:e}}var eOt=[60*1e3,300*1e3,300*1e3];async function tOt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,disableTemplates:u,skipUpload:c,cliVersion:l}){let p=a&&!n.config.settings?.substituteEnvVars;n.config=$y(n.config,{onError:g=>i.failAndThrow(g)},{substituteAsEmpty:p});let d=n.config.instances;if(d.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.");return}if(d.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${d[0]?.url})`);return}let f=d.find(g=>g.url===s)??d[0];if(f==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`);return}let m=[];f.customDomain!=null&&(typeof f.customDomain=="string"?m.push(f.customDomain):Array.isArray(f.customDomain)&&m.push(...f.customDomain)),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${f.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let h;return await i.runInteractiveTask({name:f.url},async()=>{let g=performance.now(),A=()=>lau({docsWorkspace:n,customDomains:m,domain:f.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,editThisPage:f.editThisPage,isPrivate:f.private,disableTemplates:u,skipUpload:c,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:f.audiences?Array.isArray(f.audiences)?f.audiences:[f.audiences]:void 0,docsUrl:f.url,cliVersion:l});for(let v=0;;v++)try{h=await A();break}catch(b){if(!(b instanceof gnt)||v>=eOt.length){if(b instanceof gnt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.");throw b}let I=eOt[v]??eOt[eOt.length-1]??6e4,w=I/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${w} minute${w===1?"":"s"} (attempt ${v+1}/${eOt.length})...`),await new Promise(x=>setTimeout(x,I))}let E=performance.now()-g;i.logger.debug(`Docs publishing completed in ${E.toFixed(0)}ms`)}),h}var rwn=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,skipUpload:n}){let i=new ih({context:this.context,task:this.task});try{let o=await tOt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:i,token:this.token,instanceUrl:t,preview:r,disableTemplates:void 0,skipUpload:n,cliVersion:"4.32.1"});return i.getResult()===Pp.Failure?{success:!1}:{success:!0,url:o}}catch(o){return{success:!1,error:o instanceof Error?o.message:String(o)}}}};Rt();var Ant=class e{static MAX_DISPLAYED_LOGS_TTY=10;static URL_PATTERN=/https?:\/\/[^\s]+/;context;stream;tasks={};taskOrder=[];startTime;isRegistered=!1;constructor(t){this.context=t.context,this.stream=t.stream??process.stderr}addTask(t){let r={...t,status:t.status??"pending"};return this.tasks[t.id]=r,this.taskOrder.push(t.id),this}async start(t){return this.startTime=Date.now(),t!=null&&await this.context.ttyAwareLogger.takeOverTerminal(()=>{this.stream.write(`
|
|
2208
2208
|
`),this.stream.write(`${be.cyan("\u25C6")} ${be.bold(t.title)}
|
|
2209
2209
|
`),t.subtitle!=null&&this.stream.write(` ${be.dim(t.subtitle)}
|
|
2210
2210
|
`),this.stream.write(`
|
|
@@ -3596,7 +3596,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
|
|
|
3596
3596
|
Run ${be.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
|
|
3597
3597
|
Run ${be.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),W9e(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function zbo({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!R3u(e))return;let i=t??"",o=e.filter(a=>a.isUpgradeAvailable);r!=null&&(o=o.slice(0,r+1));let s=o.sort((a,u)=>a.generatorName.localeCompare(u.generatorName)||a.currentVersion.localeCompare(u.currentVersion));for(let a of s)i+=`
|
|
3598
3598
|
${await oOm(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+be.dim(a.currentVersion)+be.reset(" \u2192 ")+be.green(a.latestVersion);return i+=`
|
|
3599
|
-
`,n?W9e(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function oOm(e){let r=await new D3u.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Error(`Generator ${e} not found`);return r.body.displayName}async function sOm({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(u,c,l,p)=>{a.versions[c]==null&&(a.versions[c]={});let d=lBe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await jS({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[c][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,u,c,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][u]==null&&(s.versions[a][u]={});let p=lBe(c.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${c.name}`);return}let d=await jS({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:c.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][u][c.name]={previousVersion:c.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await bQ({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let u=n!=null?sC(n):void 0;for(let c of a.groups)if(!(i!=null&&c.groupName!==i))for(let l of c.generators)u!=null&&l.name!==u||await r(o.workspaceName,c.groupName,l,s)})}))}function Q3u(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let u=XR(a.latestVersion,a.previousVersion);r.debug(`Latest version: ${a.latestVersion}. `+(u?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:u,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function o2n({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await sOm({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[u,c]of Object.entries(a.versions))s.push(...Q3u(c,u,t.logger));else s.push(...Q3u(a.versions,void 0,t.logger))}return s}async function oce({cliEnvironment:e,includePreReleases:t=!1}){return e.packageName!=="fern-api"?e.packageVersion:Sdt(e.packageName,{version:t?"prerelease":"latest"})}var N3u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],s2n=class{environment;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=zn.Info;isLocal;stdoutRedirector=new i2n;jsonMode=!1;constructor(t,r,{isLocal:n}){this.ttyAwareLogger=new pOe(t,r),this.isLocal=n??!1;let i=this.getPackageName(),o=this.getPackageVersion(),s=this.getCliName();(i==null||o==null||s==null)&&this.exitProgram(),this.environment={packageName:i,packageVersion:o,cliName:s}}getPackageName(){return"fern-api"}getPackageVersion(){return"4.32.
|
|
3599
|
+
`,n?W9e(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function oOm(e){let r=await new D3u.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Error(`Generator ${e} not found`);return r.body.displayName}async function sOm({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(u,c,l,p)=>{a.versions[c]==null&&(a.versions[c]={});let d=lBe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await jS({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[c][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,u,c,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][u]==null&&(s.versions[a][u]={});let p=lBe(c.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${c.name}`);return}let d=await jS({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:c.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][u][c.name]={previousVersion:c.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await bQ({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let u=n!=null?sC(n):void 0;for(let c of a.groups)if(!(i!=null&&c.groupName!==i))for(let l of c.generators)u!=null&&l.name!==u||await r(o.workspaceName,c.groupName,l,s)})}))}function Q3u(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let u=XR(a.latestVersion,a.previousVersion);r.debug(`Latest version: ${a.latestVersion}. `+(u?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:u,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function o2n({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await sOm({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[u,c]of Object.entries(a.versions))s.push(...Q3u(c,u,t.logger));else s.push(...Q3u(a.versions,void 0,t.logger))}return s}async function oce({cliEnvironment:e,includePreReleases:t=!1}){return e.packageName!=="fern-api"?e.packageVersion:Sdt(e.packageName,{version:t?"prerelease":"latest"})}var N3u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],s2n=class{environment;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=zn.Info;isLocal;stdoutRedirector=new i2n;jsonMode=!1;constructor(t,r,{isLocal:n}){this.ttyAwareLogger=new pOe(t,r),this.isLocal=n??!1;let i=this.getPackageName(),o=this.getPackageVersion(),s=this.getCliName();(i==null||o==null||s==null)&&this.exitProgram(),this.environment={packageName:i,packageVersion:o,cliName:s}}getPackageName(){return"fern-api"}getPackageVersion(){return"4.32.1"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${be.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r){throw this.failWithoutThrowing(t,r),new pm}failWithoutThrowing(t,r){this.didSucceed=!1,gEt({message:t,error:r,logger:this.logger})}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}writeJsonToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(JSON.stringify(t,null,2)+`
|
|
3600
3600
|
`),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish(),await(await G9e()).flush(),this.exitProgram({code:t})}async nudgeUpgradeIfAvailable(){try{let t=await Promise.race([this.isUpgradeAvailable(),new Promise((n,i)=>setTimeout(()=>i("Request timed out"),300))]),r=await F3u({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
|
|
3601
3601
|
`)||(r+=`
|
|
3602
3602
|
`),this.stderr.info(r))}catch{}}async exitIfFailed(){this.didSucceed||await this.exit()}exitProgram({code:t}={}){process.exit(t??(this.didSucceed?0:1))}longestWorkspaceName;registerWorkspaces(t){let r=jLn(t.map(n=>n.type==="docs"?"docs":n.workspaceName??"api"),n=>n.length);r!=null&&(this.longestWorkspaceName=r)}project;registerProject(t){this.project=t}runTask(t){return this.runTaskWithInit(this.constructTaskInit(),t)}addTask(){return this.addTaskWithInit(this.constructTaskInit())}async runTaskForWorkspace(t,r){await this.runTaskWithInit(this.constructTaskInitForWorkspace(t),r)}addTaskWithInit(t){let r=new qFt(t);return this.ttyAwareLogger.registerTask(r),r}USE_NODE_18_OR_ABOVE_MESSAGE="The Fern CLI requires Node 18+ or above.";async runTaskWithInit(t,r){let n=this.addTaskWithInit(t).start(),i;try{i=await r(n)}catch(o){throw o.message.includes("globalThis")?(n.logger.error(this.USE_NODE_18_OR_ABOVE_MESSAGE),n.failWithoutThrowing()):n.failWithoutThrowing(void 0,o),new pm}finally{n.finish()}return i}async instrumentPostHogEvent(t){this.isLocal||(await G9e()).sendEvent(t)}logger=aP((t,...r)=>this.log(t,...r));stderr=aP((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=j3u(t.type==="docs"?"docs":t.workspaceName??"api"),n=1+(this.longestWorkspaceName!=null?j3u(this.longestWorkspaceName):r).length,i=r.padEnd(n),o=N3u[this.numTasks++%N3u.length],s=be.hex(o)(i);return{...this.constructTaskInit(),logPrefix:s}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Pp.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:async t=>{await this.instrumentPostHogEvent(t)},shouldBufferLogs:!1}}log(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}])}logStderr(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}],{stderr:!0})}logImmediately(t,{stderr:r=!1}={}){let n=t.filter(i=>E_.indexOf(i.level)>=E_.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===zn.Debug,stderr:r||this.jsonMode})}_suppressUpgradeMessage=!1;suppressUpgradeMessage(){this._suppressUpgradeMessage=!0}_isUpgradeAvailable;async isUpgradeAvailable({includePreReleases:t=!1}={}){if(this._isUpgradeAvailable==null){this.logger.debug(`Checking if ${this.environment.packageName} upgrade is available...`);let r=await oce({cliEnvironment:this.environment,includePreReleases:t}),n=XR(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await o2n({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await Lbo({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:be.yellow("?"),style:{answer:i=>be.cyan(i),message:i=>be.bold(i),highlight:i=>be.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
|
package/package.json
CHANGED