fern-api 5.13.0 → 5.13.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
|
@@ -2699,7 +2699,7 @@ ${pFc.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&hIo(th
|
|
|
2699
2699
|
`+J3e.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?J3e.default.cyan(EFc(t,this.opt.mask)):J3e.default.italic(J3e.default.dim("[hidden]")):this.opt.mask?EFc(t,this.opt.mask):J3e.default.italic(J3e.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 F5r=Se(Hw(),1);var b2c=Se(YIo(),1),D5r=require("child_process"),Xnt=require("fs"),P5r=Se(require("path"),1),E2c=Se(require("os"),1),v2c=require("crypto"),kCo=Se(A2c(),1);var T5r=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var dUt=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var B5r=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var O5r=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function R5r(e="",t,r){let n=new NCo(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 y2c(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function MNd(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 NCo=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=MNd(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??E2c.default.tmpdir(),r=(0,v2c.randomUUID)(),n=y2c(this.fileOptions.prefix),i=y2c(this.fileOptions.postfix),o=`${n}${r}${i}`,s=P5r.default.resolve(t,o),a=P5r.default.resolve(t)+P5r.default.sep;if(!s.startsWith(a))throw new Error("Resolved temporary file escaped the base directory");this.tempFile=s;let c={encoding:"utf8",flag:"wx"};Object.prototype.hasOwnProperty.call(this.fileOptions,"mode")&&(c.mode=this.fileOptions.mode),(0,Xnt.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new T5r(t)}}readTemporaryFile(){try{let t=(0,Xnt.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,b2c.detect)(t)??"utf8";kCo.default.encodingExists(r)||(r="utf8"),this.text=kCo.default.decode(t,r)}}catch(t){throw new B5r(t)}}removeTemporaryFile(){try{(0,Xnt.unlinkSync)(this.tempFile)}catch(t){throw new O5r(t)}}launchEditor(){try{let t=(0,D5r.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new dUt(t)}}launchEditorAsync(t){try{(0,D5r.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new dUt(r)}}};var I2c=Se(HL(),1);var mUt=class extends Kw{_run(t){this.done=t,this.editorResult=new I2c.Subject;let r=PO(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"?F5r.default.dim("Received"):F5r.default.dim("Press <enter> to launch your preferred editor."),t&&(r=F5r.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),R5r(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 T2c=require("stream");var w2c=Se(require("readline"),1),S2c=Se(x2c(),1),$3e=class{constructor(t){this.rl||=w2c.default.createInterface(zNd(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 zNd(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 S2c.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var hUt=class extends $3e{constructor(t={}){super(t),this.log=new T2c.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return Z4t(this.rl,this.bottomBar.split(`
|
|
2700
2700
|
`).length),this}updateBottomBar(t){return Z4t(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+`
|
|
2701
2701
|
`}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&&t5r(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var kd=Se(HL(),1),P2c=Se(O4t(),1);var k5r=Se(HL(),1),B2c=Se(O4t(),1),N5r=function(e,t,r){return typeof e[t]!="function"?(0,k5r.of)(e):(0,k5r.from)((0,B2c.default)(e[t])(r).then(n=>(e[t]=n,e)))};var O2c={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}},Znt=class extends $3e{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,kd.from)(t):(0,kd.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,kd.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,kd.from)([t]),this.process=n.pipe((0,kd.concatMap)(this.processQuestion.bind(this)),(0,kd.publish)()),this.process.connect(),this.process.pipe((0,kd.reduce)((i,o)=>(O2c.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,kd.defer)(()=>(0,kd.of)(t).pipe((0,kd.concatMap)(this.setDefaultType.bind(this)),(0,kd.concatMap)(this.filterIfRunnable.bind(this)),(0,kd.concatMap)(()=>N5r(t,"message",this.answers)),(0,kd.concatMap)(()=>N5r(t,"default",this.answers)),(0,kd.concatMap)(()=>N5r(t,"choices",this.answers)),(0,kd.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,kd.defer)(()=>(0,kd.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,kd.defer)(()=>(0,kd.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&O2c.get(this.answers,t.name)!==void 0)return kd.EMPTY;if(t.when===!1)return kd.EMPTY;if(typeof t.when!="function")return(0,kd.of)(t);let{answers:r}=this;return(0,kd.defer)(()=>(0,kd.from)((0,P2c.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,kd.filter)(n=>n!=null)))}};function D2c(e){let t=function(r,n){let i;try{i=new Znt(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",eUt),this.registerPrompt("input",K3e),this.registerPrompt("number",tUt),this.registerPrompt("confirm",rUt),this.registerPrompt("rawlist",nUt),this.registerPrompt("expand",iUt),this.registerPrompt("checkbox",oUt),this.registerPrompt("password",sUt),this.registerPrompt("editor",mUt)},t.restoreDefaultPrompts(),t}var QCo=D2c();function _Nd(e,t){QCo.registerPrompt(e,t)}function VNd(){QCo.restoreDefaultPrompts()}var qNd={prompt:QCo,ui:{BottomBar:hUt,Prompt:Znt},createPromptModule:D2c,registerPrompt:_Nd,restoreDefaultPrompts:VNd,Separator:VQ},Xp=qNd;var $nt=require("path");function F2c(){let e=GNd();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function GNd(e=process.argv[1]?(0,$nt.dirname)(process.argv[1]):process.cwd(),t=$nt.sep==="\\"){let r=t?R2c(e):e;return n=>{if(!n)return;let i=t?R2c(n):n,{dir:o,base:s,ext:a}=$nt.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(s=s.slice(0,-1*a.length));let c=decodeURIComponent(s);o||(o=".");let u=o.lastIndexOf("/node_modules");if(u>-1)return`${o.slice(u+14).replace(/\//g,".")}:${c}`;if(o.startsWith(r)){let l=o.slice(r.length+1).replace(/\//g,".");return l?`${l}:${c}`:c}return c}}function R2c(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var MCo=e=>{if("flags"in e){let t=k2c(e.flags),r=N2c(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,LCo(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,WNd(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function WNd(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 k2c=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,gUt(r)]).filter(([,t])=>t!==void 0)),N2c=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?LCo(n):void 0]}))};var gUt=e=>e===void 0?void 0:e.variant??e.enabled,LCo=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};function j2c(){return"CompressionStream"in globalThis}async function j5r(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 Q5r="0123456789abcdef",M5r=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+=Q5r.charAt(this.bytes[r]>>>4),t+=Q5r.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+=Q5r.charAt(this.bytes[r]>>>4),t+=Q5r.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}},zCo=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??HNd()}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 M5r.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,M5r.ofInner(t)}},HNd=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),Q2c,CIe=()=>KNd().toString(),KNd=()=>(Q2c||(Q2c=new zCo)).generate();var GQ=(function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e.DeviceId="device_id",e})({});var JNd=["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"],M2c=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return JNd.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var XNd=Array.isArray,L2c=Object.prototype,ZU0=L2c.hasOwnProperty,UCo=L2c.toString,_Co=XNd||function(e){return UCo.call(e)==="[object Array]"};var VCo=e=>e===Object(e)&&!_Co(e);var AUt=e=>e===void 0,yUt=e=>UCo.call(e)=="[object String]",z2c=e=>yUt(e)&&e.trim().length===0;var U2c=e=>UCo.call(e)=="[object Number]"&&e===e;var qCo=e=>e instanceof Error;function L5r(e){return e===null||typeof e!="object"}function eLe(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function _2c(e){return eLe(e,"ErrorEvent")}function eit(e){return typeof Event<"u"&&ZNd(e,Event)}function V2c(e){return eLe(e,"Object")}function ZNd(e,t){try{return e instanceof t}catch{return!1}}function bUt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),U2c(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),bUt(i||r,t,r,n))}var $Nd=864e5,z5r=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=bUt(t.bucketSize,0,100,t._logger),this._refillRate=bUt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=bUt(t.refillInterval,0,$Nd,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 U5r=class{add(t){let r=CIe();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 ejd(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var q2c=(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=>q2c(`${e} ${o}`,t,r)}},tjd=e=>e();function G2c(e,t=tjd){return q2c(e,t,ejd())}var rit="Mobile",V5r="iOS",tit="Android",W2c="Tablet",l_0=tit+" "+W2c;var rjd="Apple",p_0=rjd+" Watch",H2c="Safari",q5r="BlackBerry",K2c="Samsung",njd=K2c+"Browser",ijd=K2c+" Internet",G5r="Chrome",ojd=G5r+" OS",sjd=G5r+" "+V5r,J2c="Internet Explorer",ajd=J2c+" "+rit,WCo="Opera",f_0=WCo+" Mini",Y2c="Edge",cjd="Microsoft "+Y2c,HCo="Firefox",ujd=HCo+" "+V5r,KCo="Nintendo",JCo="PlayStation",_5r="Xbox",ljd=tit+" "+rit,pjd=rit+" "+H2c,EUt="Windows",fjd=EUt+" Phone";var X2c="Generic",d_0=X2c+" "+rit.toLowerCase(),m_0=X2c+" "+W2c.toLowerCase(),djd="Konqueror",lk="(\\d+(\\.\\d+)?)",GCo=new RegExp("Version/"+lk),h_0=new RegExp(_5r,"i"),g_0=new RegExp(JCo+" \\w+","i"),A_0=new RegExp(KCo+" \\w+","i"),mjd=new RegExp(q5r+"|PlayBook|BB10","i"),hjd={"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 y_0={[ajd]:[new RegExp("rv:"+lk)],[cjd]:[new RegExp(Y2c+"?\\/"+lk)],[G5r]:[new RegExp("("+G5r+"|CrMo)\\/"+lk)],[sjd]:[new RegExp("CriOS\\/"+lk)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+lk)],[H2c]:[GCo],[pjd]:[GCo],[WCo]:[new RegExp("("+WCo+"|OPR)\\/"+lk)],[HCo]:[new RegExp(HCo+"\\/"+lk)],[ujd]:[new RegExp("FxiOS\\/"+lk)],[djd]:[new RegExp("Konqueror[:/]?"+lk,"i")],[q5r]:[new RegExp(q5r+" "+lk),GCo],[ljd]:[new RegExp("android\\s"+lk,"i")],[ijd]:[new RegExp(njd+"\\/"+lk)],[J2c]:[new RegExp("(rv:|MSIE )"+lk)],Mozilla:[new RegExp("rv:"+lk)]};var b_0=[[new RegExp(_5r+"; "+_5r+" (.*?)[);]","i"),e=>[_5r,e&&e[1]||""]],[new RegExp(KCo,"i"),[KCo,""]],[new RegExp(JCo,"i"),[JCo,""]],[mjd,[q5r,""]],[new RegExp(EUt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[fjd,""];if(new RegExp(rit).test(t)&&!/IEMobile\b/.test(t))return[EUt+" "+rit,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=hjd[n]||"";return/arm/i.test(t)&&(i="RT"),[EUt,i]}return[EUt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[V5r,t.join(".")]}return[V5r,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=AUt(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+tit+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+tit+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[tit,t.join(".")]}return[tit,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,e=>{let t=["Mac OS X",""];if(e&&e[1]){let r=[e[1],e[2],e[3]||"0"];t[1]=r.join(".")}return t}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[ojd,""]],[/Linux|debian/i,["Linux",""]]];var Z2c="utf8";function $2c(e,t){if(!e||typeof e!="string"||gjd(e))throw new Error(t)}function gjd(e){return e.trim().length===0}function ekc(e){return e?.replace(/\/+$/,"")}async function tkc(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 W5r(){return new Date().toISOString()}function Hpe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var rkc=e=>e instanceof Error;function YCo(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var H5r=class{constructor(){this.events={},this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),()=>{this.events[t]=this.events[t].filter(n=>n!==r)}}emit(t,r){for(let n of this.events[t]||[])n(r);for(let n of this.events["*"]||[])n(t,r)}};var tLe=class extends Error{constructor(t,r){super("HTTP error while fetching PostHog: status="+t.status+", reqByteLength="+r),this.response=t,this.reqByteLength=r,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}},nit=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function nkc(e){if(e instanceof tLe){let t="";try{t=await e.text}catch{}console.error(`Error while flushing PostHog: message=${e.message}, response body=${t}`,e)}else console.error("Error while flushing PostHog",e);return Promise.resolve()}function XCo(e){return typeof e=="object"&&(e instanceof tLe||e instanceof nit)}function ikc(e){return typeof e=="object"&&e instanceof tLe&&e.status===413}var vUt=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new U5r,this._events=new H5r,this._isInitialized=!1,$2c(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=ekc(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:XCo},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=G2c("[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=!j2c()||(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(GQ.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(GQ.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(GQ.OptedOut,!0)})}on(t,r){return this._events.on(t,r)}debug(t=!0){if(this.removeDebugCallback?.(),t){let r=this.on("*",(n,i)=>this._logger.info(n,i));this.removeDebugCallback=()=>{r(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(t){return{distinct_id:t.distinct_id,event:t.event,properties:{...t.properties||{},...this.getCommonEventProperties()}}}addPendingPromise(t){return this.promiseQueue.add(t)}identifyStateless(t,r,n){this.wrap(()=>{let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};this.enqueue("identify",i,n)})}async identifyStatelessImmediate(t,r,n){let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};await this.sendImmediate("identify",i,n)}captureStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({distinct_id:t,event:r,properties:n});this.enqueue("capture",o,i)})}async captureStatelessImmediate(t,r,n,i){let o=this.buildPayload({distinct_id:t,event:r,properties:n});await this.sendImmediate("capture",o,i)}aliasStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});this.enqueue("alias",o,i)})}async aliasStatelessImmediate(t,r,n,i){let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});await this.sendImmediate("alias",o,i)}groupIdentifyStateless(t,r,n,i,o,s){this.wrap(()=>{let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});this.enqueue("capture",a,i)})}async getRemoteConfig(){await this._initPromise;let t=this.host;t==="https://us.i.posthog.com"?t="https://us-assets.i.posthog.com":t==="https://eu.i.posthog.com"&&(t="https://eu-assets.i.posthog.com");let r=`${t}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(r,n,{retryCount:0},this.remoteConfigRequestTimeoutMs).then(i=>i.json()).catch(i=>{this._logger.error("Remote config could not be loaded",i),this._events.emit("error",i)})}async getFlags(t,r={},n={},i={},o={},s=!1){await this._initPromise;let a=s?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,u={token:this.apiKey,distinct_id:t,groups:r,person_properties:n,group_properties:i,...o};this.evaluationContexts&&this.evaluationContexts.length>0&&(u.evaluation_contexts=this.evaluationContexts);let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(u)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,l,{retryCount:0},this.featureFlagsRequestTimeoutMs).then(p=>p.json()).then(p=>({success:!0,response:MCo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof tLe)return{type:"api_error",statusCode:t.status};if(t instanceof nit){let r=t.error;return r instanceof Error&&(r.name==="AbortError"||r.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(t,r,n,i,o,s);if(a===void 0)return{response:void 0,requestId:void 0};let c=gUt(a.response);return c===void 0&&(c=!1),{response:c,requestId:a.requestId}}async getFeatureFlagDetailStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(r,n,i,o,s,[t]);return a===void 0?void 0:{response:a.flags[t],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(r,n,i,o,s,[t]);if(!a)return;let c=a[t];return c===void 0?null:c}async getFeatureFlagPayloadsStateless(t,r={},n={},i={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)).payloads}async getFeatureFlagsStateless(t,r={},n={},i={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)}async getFeatureFlagsAndPayloadsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,r,n,i,o,s);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a={};(o??this.disableGeoip)&&(a.geoip_disable=!0),s&&(a.flag_keys_to_evaluate=s);let c=await this.getFlags(t,r,n,i,a);if(!c.success)return;let u=c.response;return u.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),u.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:u?.requestId,quotaLimited:u.quotaLimited}):u}async getSurveysStateless(){if(await this._initPromise,this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let t=`${this.host}/api/surveys/?token=${this.apiKey}`,r={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},i=(await this.fetchWithRetry(t,r).then(o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);this._logger.error(a),this._events.emit("error",new Error(s));return}return o.json()}).catch(o=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;return i&&this._logger.info("Surveys fetched from API: ",JSON.stringify(i)),i??[]}get props(){return this._props||(this._props=this.getPersistedProperty(GQ.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(GQ.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(GQ.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(GQ.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(GQ.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=Hpe(()=>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:W5r()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await j5r(s,this.isDebug),u={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...c!==null&&{"Content-Encoding":"gzip"}},body:c||s};try{await this.fetchWithRetry(a,u)}catch(l){this._events.emit("error",l)}}prepareMessage(t,r,n){let i={...r,type:t,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:n?.timestamp?n?.timestamp:W5r(),uuid:n?.uuid?n.uuid:CIe()};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 nkc(t)})}async flush(){let t=YCo([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),YCo([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(GQ.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(GQ.Queue)||[]).slice(i.length);this.setPersistedProperty(GQ.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:W5r()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await j5r(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>ikc(f)?!1:XCo(f)};try{await this.fetchWithRetry(u,p,d)}catch(f){if(ikc(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 nit||await s(),this._events.emit("error",f),f}await s(),r.push(...o)}this._events.emit("flush",r)}async fetchWithRetry(t,r,n,i){let o=r.body?r.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,Z2c)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await tkc(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=Hpe(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new nit(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new tLe(l,s);return l},{...this._retryOptions,...n})}async _shutdown(t=3e4){await this._initPromise;let r=!1;this.clearFlushTimer();let n=async()=>{try{for(await this.promiseQueue.join();!((this.getPersistedProperty(GQ.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!XCo(o))throw o;await nkc(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=Hpe(()=>{this._logger.error("Timed out while shutting down PostHog"),r=!0,s("Timeout while shutting down PostHog. Some events may not have been sent.")},t)}),n()])}finally{clearTimeout(i)}}async shutdown(t=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(t).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var WQ={};ee(WQ,{DOMExceptionCoercer:()=>txo,ErrorCoercer:()=>rxo,ErrorEventCoercer:()=>nxo,ErrorPropertiesBuilder:()=>ZCo,EventCoercer:()=>sxo,ObjectCoercer:()=>oxo,PrimitiveCoercer:()=>axo,PromiseRejectionEventCoercer:()=>cxo,ReduceableCache:()=>uxo,StringCoercer:()=>ixo,chromeStackLineParser:()=>$Co,createDefaultStackParser:()=>Djd,createStackParser:()=>hkc,geckoStackLineParser:()=>exo,nodeStackLineParser:()=>pkc,opera10StackLineParser:()=>ckc,opera11StackLineParser:()=>ukc,reverseAndStripFrames:()=>mkc,winjsStackLineParser:()=>akc});var K5r,okc,J5r;function skc(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return J5r&&r.length===okc||(okc=r.length,J5r=r.reduce((n,i)=>{K5r||(K5r={});let o=K5r[i];if(o)n[o[0]]=o[1];else{let s=e(i);for(let a=s.length-1;a>=0;a--){let u=s[a]?.filename,l=t[i];if(u&&l){n[u]=l,K5r[i]=[u,l];break}}}return n},{})),J5r}var yjd=4,ZCo=class{constructor(t,r,n=[]){this.coercers=t,this.stackParser=r,this.modifiers=n}buildFromUnknown(t,r={}){let i=r&&r.mechanism||{handled:!0,type:"generic"},s=this.buildCoercingContext(i,r,0).apply(t),a=this.buildParsingContext(r),c=this.parseStacktrace(s,a);return{$exception_list:this.convertToExceptionList(c,i),$exception_level:"error"}}async modifyFrames(t){for(let r of t)r.stacktrace&&r.stacktrace.frames&&_Co(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:skc(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=yjd){let c=this.buildCoercingContext(t,r,a);return this.applyCoercers(s,c)}};return{...r,syntheticException:n==0?r.syntheticException:void 0,mechanism:t,apply:s=>i(s,n),next:s=>i(s,n+1)}}};var RO="?";function R$(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?RO:r,in_app:!0};return AUt(n)||(o.lineno=n),AUt(i)||(o.colno=i),o}var Y5r=(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]:RO,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var bjd=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Ejd=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,vjd=/\((\S*)(?::(\d+))(?::(\d+))\)/,$Co=(e,t)=>{let r=bjd.exec(e);if(r){let[,i,o,s]=r;return R$(t,i,RO,+o,+s)}let n=Ejd.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=vjd.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=Y5r(n[1]||RO,n[2]);return R$(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var Ijd=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Cjd=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,exo=(e,t)=>{let r=Ijd.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=Cjd.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]||RO;return[o,i]=Y5r(o,i),R$(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var xjd=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,akc=(e,t)=>{let r=xjd.exec(e);return r?R$(t,r[2],r[1]||RO,+r[3],r[4]?+r[4]:void 0):void 0};var wjd=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,ckc=(e,t)=>{let r=wjd.exec(e);return r?R$(t,r[2],r[3]||RO,+r[1]):void 0},Sjd=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,ukc=(e,t)=>{let r=Sjd.exec(e);return r?R$(t,r[5],r[3]||r[4]||RO,+r[1],+r[2]):void 0};var Tjd=/^\s*[-]{4,}$/,Bjd=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,pkc=(e,t)=>{let r=e.match(Bjd);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||RO,o=s?`${s}.${a}`:a);let c=r[2]?.startsWith("file://")?r[2].slice(7):r[2],u=r[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&r[5]&&!u&&(c=r[5]),{filename:c?decodeURI(c):void 0,module:void 0,function:o,lineno:lkc(r[3]),colno:lkc(r[4]),in_app:Ojd(c||"",u),platform:t}}if(e.match(Tjd))return{filename:e,platform:t}};function Ojd(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 lkc(e){return parseInt(e||"",10)||void 0}var fkc=/\(error: (.*)\)/,dkc=50;function mkc(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,dkc).map(r=>({...r,filename:r.filename||Pjd(t).filename,function:r.function||RO}))}function Pjd(e){return e[e.length-1]||{}}function Djd(){return hkc("web:javascript",$Co,exo)}function hkc(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
|
|
2702
|
-
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=fkc.test(a)?a.replace(fkc,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=dkc)break}}return mkc(i)}}var txo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=yUt(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:n?t.stack:void 0,cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){let r=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?`${r}: ${t.message}`:r}isDOMException(t){return eLe(t,"DOMException")}isDOMError(t){return eLe(t,"DOMError")}};var rxo=class{match(t){return qCo(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 nxo=class{constructor(){}match(t){return _2c(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 Rjd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,ixo=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(Rjd);return i&&(r=i[1],n=i[2]),[r,n]}};var gkc=["fatal","error","warning","log","info","debug"];function X5r(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 oxo=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 eit(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=X5r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return yUt(t)&&!z2c(t)&&gkc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(rkc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var sxo=class{match(t){return eit(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${X5r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var axo=class{match(t){return L5r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var cxo=class{match(t){return eLe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!eit(t))return!1;try{let r=t.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return L5r(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&t.detail!=null&&typeof t.detail=="object"&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var uxo=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 bkc=require("fs"),Ekc=require("readline"),Z5r=new WQ.ReduceableCache(25),vkc=new WQ.ReduceableCache(20),lxo=7,Fjd=1e3,kjd=1e4;async function Ikc(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"||Mjd(s)||Ljd(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(vkc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=Ujd(o);if(s.every(c=>zjd(i,c)))continue;let a=_jd(Z5r,i,{});n.push(Njd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&jjd(e,Z5r),Z5r.reduce(),e}function Njd(e,t,r){return new Promise(n=>{let i=(0,bkc.createReadStream)(e),o=(0,Ekc.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){vkc.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]=Vjd(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function jjd(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;Qjd(r.lineno,r,n)}}function Qjd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=Ckc(e);i<e;i++){let o=r[i];if(o===void 0)return void Akc(t);t.pre_context.push(o)}if(r[e]===void 0)return void Akc(t);t.context_line=r[e];let n=xkc(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 Akc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Mjd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Ljd(e){return e.lineno!==void 0&&e.lineno>kjd||e.colno!==void 0&&e.colno>Fjd}function zjd(e,t){let r=Z5r.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 Ujd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=ykc(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+lxo:(i.push(n),n=ykc(o)),t++}return i}function ykc(e){return[Ckc(e),xkc(e)]}function Ckc(e){return Math.max(1,e-lxo)}function xkc(e){return e+lxo}function _jd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function Vjd(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 qjd(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 wkc(e,t){globalThis.process?.on("uncaughtException",qjd(e,t))}function Skc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var Gjd=2e3,BW=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new z5r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return VCo(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(wkc(this.onException.bind(this),this.onFatalError.bind(this)),Skc(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(Gjd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var Tkc="5.29.1";var IUt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function Bkc(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var Wjd=6e4,Hjd=1152921504606847e3,Kjd=["is_not"],iit=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Nd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},F$=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},$5r=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof F$||u instanceof Nd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof F$||u instanceof Nd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new Nd("Flag has experience continuity enabled");if(!t.active)return!1;let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Nd("Flag has unknown group type index");if(!(u in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[u];return await this.matchFeatureFlagProperties(t,i[u],l,r)}{let u=this.getBucketingValueForFlag(t,n,o);if(u===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new Nd(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new Nd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Nd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Nd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Nd(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Nd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Nd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Nd(`Dependency '${c}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,c;for(let u of s)try{if(await this.isConditionMatch(t,r,u,n,i)){let l=u.variant,p=o.multivariate?.variants||[];c=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof F$)throw l;if(l instanceof Nd)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Nd("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?Fkc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):Rkc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await Okc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await Okc(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(Wjd,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 iit(`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 iit(`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 iit(`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 iit&&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=Hpe(()=>{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 Okc(e,t,r=""){let n=await Bkc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/Hjd}function Rkc(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 Nd("Operator is_not_set is not supported")}else throw new Nd(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!Kjd.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return Pkc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return Pkc(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:null;if(typeof i=="string")try{u=parseFloat(i)}catch{}return u==null||s==null?c(String(s),String(i),o):typeof s=="string"?c(s,String(i),o):c(s,u,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Nd("Date operations cannot be performed on boolean values");let u=$jd(String(i));if(u==null&&(u=Dkc(i)),u==null)throw new Nd(`Invalid date: ${i}`);let l=Dkc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return lV(FO(String(s)),FO(String(i)))===0;case"semver_neq":return lV(FO(String(s)),FO(String(i)))!==0;case"semver_gt":return lV(FO(String(s)),FO(String(i)))>0;case"semver_gte":return lV(FO(String(s)),FO(String(i)))>=0;case"semver_lt":return lV(FO(String(s)),FO(String(i)))<0;case"semver_lte":return lV(FO(String(s)),FO(String(i)))<=0;case"semver_tilde":{let u=FO(String(s)),{lower:l,upper:p}=Yjd(String(i));return lV(u,l)>=0&&lV(u,p)<0}case"semver_caret":{let u=FO(String(s)),{lower:l,upper:p}=Xjd(String(i));return lV(u,l)>=0&&lV(u,p)<0}case"semver_wildcard":{let u=FO(String(s)),{lower:l,upper:p}=Zjd(String(i));return lV(u,l)>=0&&lV(u,p)<0}default:throw new Nd(`Unknown operator: ${o}`)}}function Jjd(e,t){if(!(e in t))throw new F$(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function Fkc(e,t,r,n=!1){let i=String(e.value);Jjd(i,r);let o=r[i];return kkc(o,t,r,n)}function kkc(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let c=kkc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof F$)throw c;if(c instanceof Nd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Nd("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let c;if(a.type==="cohort")c=Fkc(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else c=Rkc(a,t);let u=a.negation||!1;if(i==="AND"){if(!c&&!u||c&&u)return!1}else if(c&&!u||!c&&u)return!0}catch(c){if(c instanceof F$)throw c;if(c instanceof Nd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Nd("can't match cohort without a given cohort property value");return i==="AND"}function Pkc(e){try{return new RegExp(e),!0}catch{return!1}}function FO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Nd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Nd(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function lV(e,t){for(let r=0;r<3;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0}function Yjd(e){let t=FO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function Xjd(e){let t=FO(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function Zjd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Nd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Nd(`Invalid wildcard semver: ${e}`);let o,s;if(n.length===1)o=[i,0,0],s=[i+1,0,0];else{let a=parseInt(n[1],10);if(isNaN(a))throw new Nd(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function Dkc(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 Nd(`${e} is in an invalid date format`)}throw new Nd(`The date provided ${e} must be a string, number, or date object`)}function $jd(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 e8r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var eQd=100,Nkc=3e4,tQd=5e4,rQd=50,nQd=500,t8r=class extends vUt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new e8r,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,eQd):Nkc,typeof r.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(r.waitUntilDebounceMs,0)),typeof r.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(r.waitUntilMaxWaitMs,0)),r.personalApiKey){if(r.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');r.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new $5r({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 BW(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||tQd}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??nQd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??rQd;this._waitUntilCycle.timer=Hpe(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return Tkc}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=Nkc){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let B=this._flagOverrides[t];if(B===void 0)return;let O=this._payloadOverrides?.[t];return{key:t,enabled:B!==!1,variant:typeof B=="string"?B:void 0,payload:O}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,h,A,b,I,x,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let B=this.featureFlagsPoller?.featureFlagsByKey[t];if(B)try{let O=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(B,d,{matchValue:i});if(O){m=!0;let N=O.value;I=B.id,C="Evaluated locally",f={key:t,enabled:N!==!1,variant:typeof N=="string"?N:void 0,payload:O.payload??void 0}}}catch(O){if(O instanceof F$||O instanceof Nd)this._logger?.info(`${O.name} when computing flag locally: ${t}: ${O.message}`);else throw O}}if(!m&&!c){let B=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(B===void 0)b=IUt.UNKNOWN_ERROR;else{h=B.requestId,A=B.evaluatedAt;let O=[];B.errorsWhileComputingFlags&&O.push(IUt.ERRORS_WHILE_COMPUTING),B.quotaLimited?.includes("feature_flags")&&O.push(IUt.QUOTA_LIMITED);let N=B.flags[t];if(N===void 0)O.push(IUt.FLAG_MISSING);else{I=N.metadata?.id,x=N.metadata?.version,C=N.reason?.description??N.reason?.code;let P;if(N.metadata?.payload!==void 0)try{P=JSON.parse(N.metadata.payload)}catch{P=N.metadata.payload}f={key:t,enabled:N.enabled,variant:N.variant,payload:P}}O.length>0&&(b=O.join(","))}}if(o){let B=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,O=`${t}_${B}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(O)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(O):this.distinctIdHasSentFlagCalls[r]=[O];let N={$feature_flag:t,$feature_flag_response:B,$feature_flag_id:I,$feature_flag_version:x,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:B,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(N.$feature_flag_definitions_loaded_at=P)}b&&(N.$feature_flag_error=b),this.capture({distinctId:r,event:"$feature_flag_called",properties:N,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},A=!0;if(f&&(m=f.response,h=f.payloads,A=f.fallbackToFlags),A&&!c){let b=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...b.flags||{}},h={...h,...b.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=Hpe(()=>{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(V2c(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!BW.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(BW.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!BW.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(BW.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=CIe(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,c,h)}return f.event,{}}).then(h=>{let A={};if(h)for(let[I,x]of Object.entries(h))A[`$feature/${I}`]=x;let b=Object.keys(h||{}).filter(I=>h?.[I]!==!1).sort();return b.length>0&&(A.$active_feature_flags=b),A}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&M2c(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 jkc=require("async_hooks"),r8r=class{constructor(){this.storage=new jkc.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 Qkc="posthog-node";function iQd(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let c=s.tags[pxo.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:c,properties:f}),s}}var pxo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=Qkc,this.name=Qkc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(iQd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};BW.errorPropertiesBuilder=new WQ.ErrorPropertiesBuilder([new WQ.EventCoercer,new WQ.ErrorCoercer,new WQ.ObjectCoercer,new WQ.StringCoercer,new WQ.PrimitiveCoercer],WQ.createStackParser("node:javascript",WQ.nodeStackLineParser),[F2c(),Ikc]);var xIe=class extends t8r{getLibraryId(){return"posthog-node"}initializeContext(){return new r8r}};var n8r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new xIe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.13.0",usingAccessToken:!0}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var CUt=class{async sendEvent(){}async identify(){}async flush(){}};rr();var oit=require("fs/promises"),Mkc=require("os"),Lkc=require("path");var oQd="id",sQd=".fern",xUt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new xIe(r),this.userId=t==null?void 0:Byo(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"5.13.0",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await Qf({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=nt(Yt.of((0,Mkc.homedir)()),Fe.of(sQd),Fe.of(oQd));await ar(t)||(await(0,oit.mkdir)((0,Lkc.dirname)(t),{recursive:!0}),await(0,oit.writeFile)(t,jD())),this.persistedDistinctId=(await(0,oit.readFile)(t)).toString()}return this.persistedDistinctId}};var fxo;async function wUt(){return fxo==null&&(fxo=await aQd()),fxo}async function aQd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new CUt;let r=await mLr();return r!=null?new xUt({token:r,posthogApiKey:e}):await h$()!=null?new n8r({posthogApiKey:e}):new xUt({token:void 0,posthogApiKey:e})}catch{return new CUt}}Ut();var SUt=Se(require("process"),1);Bqe();var _kc=Se(Buo(),1),Vkc=Se(Ukc(),1);function J1(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=pG(e),e.length===0))return 0;e=e.replace((0,Vkc.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(_kc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function i8r(e){let t=0;for(let r of e.split(`
|
|
2702
|
+
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=fkc.test(a)?a.replace(fkc,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=dkc)break}}return mkc(i)}}var txo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=yUt(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:n?t.stack:void 0,cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){let r=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?`${r}: ${t.message}`:r}isDOMException(t){return eLe(t,"DOMException")}isDOMError(t){return eLe(t,"DOMError")}};var rxo=class{match(t){return qCo(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 nxo=class{constructor(){}match(t){return _2c(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 Rjd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,ixo=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(Rjd);return i&&(r=i[1],n=i[2]),[r,n]}};var gkc=["fatal","error","warning","log","info","debug"];function X5r(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 oxo=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 eit(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=X5r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return yUt(t)&&!z2c(t)&&gkc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(rkc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var sxo=class{match(t){return eit(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${X5r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var axo=class{match(t){return L5r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var cxo=class{match(t){return eLe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!eit(t))return!1;try{let r=t.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return L5r(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&t.detail!=null&&typeof t.detail=="object"&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var uxo=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 bkc=require("fs"),Ekc=require("readline"),Z5r=new WQ.ReduceableCache(25),vkc=new WQ.ReduceableCache(20),lxo=7,Fjd=1e3,kjd=1e4;async function Ikc(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"||Mjd(s)||Ljd(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(vkc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=Ujd(o);if(s.every(c=>zjd(i,c)))continue;let a=_jd(Z5r,i,{});n.push(Njd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&jjd(e,Z5r),Z5r.reduce(),e}function Njd(e,t,r){return new Promise(n=>{let i=(0,bkc.createReadStream)(e),o=(0,Ekc.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){vkc.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]=Vjd(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function jjd(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;Qjd(r.lineno,r,n)}}function Qjd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=Ckc(e);i<e;i++){let o=r[i];if(o===void 0)return void Akc(t);t.pre_context.push(o)}if(r[e]===void 0)return void Akc(t);t.context_line=r[e];let n=xkc(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 Akc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Mjd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Ljd(e){return e.lineno!==void 0&&e.lineno>kjd||e.colno!==void 0&&e.colno>Fjd}function zjd(e,t){let r=Z5r.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 Ujd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=ykc(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+lxo:(i.push(n),n=ykc(o)),t++}return i}function ykc(e){return[Ckc(e),xkc(e)]}function Ckc(e){return Math.max(1,e-lxo)}function xkc(e){return e+lxo}function _jd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function Vjd(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 qjd(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 wkc(e,t){globalThis.process?.on("uncaughtException",qjd(e,t))}function Skc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var Gjd=2e3,BW=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new z5r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return VCo(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(wkc(this.onException.bind(this),this.onFatalError.bind(this)),Skc(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(Gjd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var Tkc="5.29.1";var IUt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function Bkc(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var Wjd=6e4,Hjd=1152921504606847e3,Kjd=["is_not"],iit=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Nd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},F$=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},$5r=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof F$||u instanceof Nd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof F$||u instanceof Nd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new Nd("Flag has experience continuity enabled");if(!t.active)return!1;let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Nd("Flag has unknown group type index");if(!(u in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[u];return await this.matchFeatureFlagProperties(t,i[u],l,r)}{let u=this.getBucketingValueForFlag(t,n,o);if(u===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new Nd(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new Nd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Nd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Nd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Nd(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Nd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Nd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Nd(`Dependency '${c}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,c;for(let u of s)try{if(await this.isConditionMatch(t,r,u,n,i)){let l=u.variant,p=o.multivariate?.variants||[];c=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof F$)throw l;if(l instanceof Nd)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Nd("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?Fkc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):Rkc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await Okc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await Okc(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(Wjd,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 iit(`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 iit(`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 iit(`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 iit&&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=Hpe(()=>{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 Okc(e,t,r=""){let n=await Bkc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/Hjd}function Rkc(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 Nd("Operator is_not_set is not supported")}else throw new Nd(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!Kjd.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return Pkc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return Pkc(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:null;if(typeof i=="string")try{u=parseFloat(i)}catch{}return u==null||s==null?c(String(s),String(i),o):typeof s=="string"?c(s,String(i),o):c(s,u,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Nd("Date operations cannot be performed on boolean values");let u=$jd(String(i));if(u==null&&(u=Dkc(i)),u==null)throw new Nd(`Invalid date: ${i}`);let l=Dkc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return lV(FO(String(s)),FO(String(i)))===0;case"semver_neq":return lV(FO(String(s)),FO(String(i)))!==0;case"semver_gt":return lV(FO(String(s)),FO(String(i)))>0;case"semver_gte":return lV(FO(String(s)),FO(String(i)))>=0;case"semver_lt":return lV(FO(String(s)),FO(String(i)))<0;case"semver_lte":return lV(FO(String(s)),FO(String(i)))<=0;case"semver_tilde":{let u=FO(String(s)),{lower:l,upper:p}=Yjd(String(i));return lV(u,l)>=0&&lV(u,p)<0}case"semver_caret":{let u=FO(String(s)),{lower:l,upper:p}=Xjd(String(i));return lV(u,l)>=0&&lV(u,p)<0}case"semver_wildcard":{let u=FO(String(s)),{lower:l,upper:p}=Zjd(String(i));return lV(u,l)>=0&&lV(u,p)<0}default:throw new Nd(`Unknown operator: ${o}`)}}function Jjd(e,t){if(!(e in t))throw new F$(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function Fkc(e,t,r,n=!1){let i=String(e.value);Jjd(i,r);let o=r[i];return kkc(o,t,r,n)}function kkc(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let c=kkc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof F$)throw c;if(c instanceof Nd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Nd("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let c;if(a.type==="cohort")c=Fkc(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else c=Rkc(a,t);let u=a.negation||!1;if(i==="AND"){if(!c&&!u||c&&u)return!1}else if(c&&!u||!c&&u)return!0}catch(c){if(c instanceof F$)throw c;if(c instanceof Nd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Nd("can't match cohort without a given cohort property value");return i==="AND"}function Pkc(e){try{return new RegExp(e),!0}catch{return!1}}function FO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Nd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Nd(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function lV(e,t){for(let r=0;r<3;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0}function Yjd(e){let t=FO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function Xjd(e){let t=FO(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function Zjd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Nd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Nd(`Invalid wildcard semver: ${e}`);let o,s;if(n.length===1)o=[i,0,0],s=[i+1,0,0];else{let a=parseInt(n[1],10);if(isNaN(a))throw new Nd(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function Dkc(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 Nd(`${e} is in an invalid date format`)}throw new Nd(`The date provided ${e} must be a string, number, or date object`)}function $jd(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 e8r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var eQd=100,Nkc=3e4,tQd=5e4,rQd=50,nQd=500,t8r=class extends vUt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new e8r,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,eQd):Nkc,typeof r.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(r.waitUntilDebounceMs,0)),typeof r.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(r.waitUntilMaxWaitMs,0)),r.personalApiKey){if(r.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');r.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new $5r({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 BW(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||tQd}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??nQd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??rQd;this._waitUntilCycle.timer=Hpe(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return Tkc}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=Nkc){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let B=this._flagOverrides[t];if(B===void 0)return;let O=this._payloadOverrides?.[t];return{key:t,enabled:B!==!1,variant:typeof B=="string"?B:void 0,payload:O}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,h,A,b,I,x,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let B=this.featureFlagsPoller?.featureFlagsByKey[t];if(B)try{let O=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(B,d,{matchValue:i});if(O){m=!0;let N=O.value;I=B.id,C="Evaluated locally",f={key:t,enabled:N!==!1,variant:typeof N=="string"?N:void 0,payload:O.payload??void 0}}}catch(O){if(O instanceof F$||O instanceof Nd)this._logger?.info(`${O.name} when computing flag locally: ${t}: ${O.message}`);else throw O}}if(!m&&!c){let B=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(B===void 0)b=IUt.UNKNOWN_ERROR;else{h=B.requestId,A=B.evaluatedAt;let O=[];B.errorsWhileComputingFlags&&O.push(IUt.ERRORS_WHILE_COMPUTING),B.quotaLimited?.includes("feature_flags")&&O.push(IUt.QUOTA_LIMITED);let N=B.flags[t];if(N===void 0)O.push(IUt.FLAG_MISSING);else{I=N.metadata?.id,x=N.metadata?.version,C=N.reason?.description??N.reason?.code;let P;if(N.metadata?.payload!==void 0)try{P=JSON.parse(N.metadata.payload)}catch{P=N.metadata.payload}f={key:t,enabled:N.enabled,variant:N.variant,payload:P}}O.length>0&&(b=O.join(","))}}if(o){let B=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,O=`${t}_${B}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(O)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(O):this.distinctIdHasSentFlagCalls[r]=[O];let N={$feature_flag:t,$feature_flag_response:B,$feature_flag_id:I,$feature_flag_version:x,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:B,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(N.$feature_flag_definitions_loaded_at=P)}b&&(N.$feature_flag_error=b),this.capture({distinctId:r,event:"$feature_flag_called",properties:N,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},A=!0;if(f&&(m=f.response,h=f.payloads,A=f.fallbackToFlags),A&&!c){let b=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...b.flags||{}},h={...h,...b.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=Hpe(()=>{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(V2c(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!BW.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(BW.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!BW.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(BW.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=CIe(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,c,h)}return f.event,{}}).then(h=>{let A={};if(h)for(let[I,x]of Object.entries(h))A[`$feature/${I}`]=x;let b=Object.keys(h||{}).filter(I=>h?.[I]!==!1).sort();return b.length>0&&(A.$active_feature_flags=b),A}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&M2c(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 jkc=require("async_hooks"),r8r=class{constructor(){this.storage=new jkc.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 Qkc="posthog-node";function iQd(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let c=s.tags[pxo.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:c,properties:f}),s}}var pxo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=Qkc,this.name=Qkc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(iQd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};BW.errorPropertiesBuilder=new WQ.ErrorPropertiesBuilder([new WQ.EventCoercer,new WQ.ErrorCoercer,new WQ.ObjectCoercer,new WQ.StringCoercer,new WQ.PrimitiveCoercer],WQ.createStackParser("node:javascript",WQ.nodeStackLineParser),[F2c(),Ikc]);var xIe=class extends t8r{getLibraryId(){return"posthog-node"}initializeContext(){return new r8r}};var n8r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new xIe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.13.1",usingAccessToken:!0}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var CUt=class{async sendEvent(){}async identify(){}async flush(){}};rr();var oit=require("fs/promises"),Mkc=require("os"),Lkc=require("path");var oQd="id",sQd=".fern",xUt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new xIe(r),this.userId=t==null?void 0:Byo(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"5.13.1",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await Qf({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=nt(Yt.of((0,Mkc.homedir)()),Fe.of(sQd),Fe.of(oQd));await ar(t)||(await(0,oit.mkdir)((0,Lkc.dirname)(t),{recursive:!0}),await(0,oit.writeFile)(t,jD())),this.persistedDistinctId=(await(0,oit.readFile)(t)).toString()}return this.persistedDistinctId}};var fxo;async function wUt(){return fxo==null&&(fxo=await aQd()),fxo}async function aQd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new CUt;let r=await mLr();return r!=null?new xUt({token:r,posthogApiKey:e}):await h$()!=null?new n8r({posthogApiKey:e}):new xUt({token:void 0,posthogApiKey:e})}catch{return new CUt}}Ut();var SUt=Se(require("process"),1);Bqe();var _kc=Se(Buo(),1),Vkc=Se(Ukc(),1);function J1(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=pG(e),e.length===0))return 0;e=e.replace((0,Vkc.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(_kc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function i8r(e){let t=0;for(let r of e.split(`
|
|
2703
2703
|
`))t=Math.max(t,J1(r));return t}var uNc=Se(mxo(),1);var uQd=/[\p{Lu}]/u,lQd=/[\p{Ll}]/u,Wkc=/^[\p{Lu}](?![\p{Lu}])/gu,Jkc=/([\p{Alpha}\p{N}_]|$)/u,hxo=/[_.\- ]+/,pQd=new RegExp("^"+hxo.source),Hkc=new RegExp(hxo.source+Jkc.source,"gu"),Kkc=new RegExp("\\d+"+Jkc.source,"gu"),fQd=(e,t,r,n)=>{let i=!1,o=!1,s=!1,a=!1;for(let c=0;c<e.length;c++){let u=e[c];a=c>2?e[c-3]==="-":!0,i&&uQd.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&lQd.test(u)&&(!a||n)?(e=e.slice(0,c-1)+"-"+e.slice(c-1),s=o,o=!1,i=!0):(i=t(u)===u&&r(u)!==u,s=o,o=r(u)===u&&t(u)!==u)}return e},dQd=(e,t)=>(Wkc.lastIndex=0,e.replace(Wkc,r=>t(r))),mQd=(e,t)=>(Hkc.lastIndex=0,Kkc.lastIndex=0,e.replace(Hkc,(r,n)=>t(n)).replace(Kkc,r=>t(r)));function gxo(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?hxo.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=fQd(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(pQd,""),e=t.preserveConsecutiveUppercase?dQd(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),mQd(e,n))}var Exo=Se(Xkc(),1);Bqe();var Zkc=(e=0)=>t=>`\x1B[${t+e}m`,$kc=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,eNc=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,V0={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},T80=Object.keys(V0.modifier),yQd=Object.keys(V0.color),bQd=Object.keys(V0.bgColor),B80=[...yQd,...bQd];function EQd(){let e=new Map;for(let[t,r]of Object.entries(V0)){for(let[n,i]of Object.entries(r))V0[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=V0[n],e.set(i[0],i[1]);Object.defineProperty(V0,t,{value:r,enumerable:!1})}return Object.defineProperty(V0,"codes",{value:e,enumerable:!1}),V0.color.close="\x1B[39m",V0.bgColor.close="\x1B[49m",V0.color.ansi=Zkc(),V0.color.ansi256=$kc(),V0.color.ansi16m=eNc(),V0.bgColor.ansi=Zkc(10),V0.bgColor.ansi256=$kc(10),V0.bgColor.ansi16m=eNc(10),Object.defineProperties(V0,{rgbToAnsi256:{value(t,r,n){return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[n]=r;n.length===3&&(n=[...n].map(o=>o+o).join(""));let i=Number.parseInt(n,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:t=>V0.rgbToAnsi256(...V0.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,n,i;if(t>=232)r=((t-232)*10+8)/255,n=r,i=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,n=Math.floor(a/6)/5,i=a%6/5}let o=Math.max(r,n,i)*2;if(o===0)return 30;let s=30+(Math.round(i)<<2|Math.round(n)<<1|Math.round(r));return o===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,n)=>V0.ansi256ToAnsi(V0.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>V0.ansi256ToAnsi(V0.hexToAnsi256(t)),enumerable:!1}}),V0}var vQd=EQd(),tNc=vQd;var o8r=new Set(["\x1B","\x9B"]),IQd=39,yxo="\x07",iNc="[",CQd="]",oNc="m",bxo=`${CQd}8;;`,rNc=e=>`${o8r.values().next().value}${iNc}${e}${oNc}`,nNc=e=>`${o8r.values().next().value}${bxo}${e}${yxo}`,xQd=e=>e.split(" ").map(t=>J1(t)),Axo=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=J1(pG(e[e.length-1]));for(let[a,c]of n.entries()){let u=J1(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),o8r.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(bxo)),i){o?c===yxo&&(i=!1,o=!1):c===oNc&&(i=!1);continue}s+=u,s===r&&a<n.length-1&&(e.push(""),s=0)}!s&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},wQd=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(J1(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},SQd=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=xQd(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=J1(a[a.length-1]);if(u!==0&&(p>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),p=0),(p>0||r.trim===!1)&&(a[a.length-1]+=" ",p++)),r.hard&&s[u]>t){let d=t-p,f=1+Math.floor((s[u]-d-1)/t);Math.floor((s[u]-1)/t)<f&&a.push(""),Axo(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){Axo(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){Axo(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>wQd(u)));let c=[...a.join(`
|
|
2704
2704
|
`)];for(let[u,l]of c.entries()){if(n+=l,o8r.has(l)){let{groups:d}=new RegExp(`(?:\\${iNc}(?<code>\\d+)m|\\${bxo}(?<uri>.*)${yxo})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===IQd?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=tNc.codes.get(Number(i));c[u+1]===`
|
|
2705
2705
|
`?(o&&(n+=nNc("")),i&&p&&(n+=rNc(p))):l===`
|
|
@@ -3589,7 +3589,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
|
|
|
3589
3589
|
`)}var C8t=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 I8t({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=nt(n,Fe.of(E2)),a=await ar(s,"directory"),c;if(a){let d=await this.migrateMultiApi({fernDir:n,apisDir:s,org:o.org,warnings:t,migratedFiles:r});if(!d.success)return{success:!1,warnings:t,migratedFiles:r};c=d.fernYml}else{let d=await this.migrateSingleApi({fernDir:n,org:o.org,warnings:t,migratedFiles:r});if(!d.success)return{success:!1,warnings:t,migratedFiles:r};c=d.fernYml}let u=await h3o(n);u.docsRef!=null&&(c.docs=u.docsRef);let l=nt(this.cwd,Fe.of(dC)),p=this.serializeFernYml(c);if(await(0,Wyt.writeFile)(l,p,"utf-8"),this.deleteOriginals)for(let d of r)try{await(0,Wyt.rm)(d),this.logger.debug(`Deleted ${d}`)}catch{t.push({type:"info",message:`Could not delete ${d}`})}return this.logger.info(`Created ${l}`),t.push(...await g3o(this.cwd)),{success:!0,warnings:t,migratedFiles:r,outputPath:l}}async migrateSingleApi(t){let{fernDir:r,org:n,warnings:i,migratedFiles:o}=t,a=await new Jze({cwd:r}).migrate();i.push(...a.warnings),a.absoluteFilePath!=null&&o.push(a.absoluteFilePath);let c=await d3o({fernDir:r,generatorsYmlApi:a.rawApi});i.push(...c.warnings);let u={org:n};return c.api!=null&&(u.api=c.api),a.sdks!=null&&(u.sdks=a.sdks),{success:!0,fernYml:u}}async migrateMultiApi(t){let{fernDir:r,apisDir:n,org:i,warnings:o,migratedFiles:s}=t,c=(await(0,Wyt.readdir)(n,{withFileTypes:!0})).filter(A=>A.isDirectory()).map(A=>A.name);if(c.length===0)return o.push({type:"conflict",message:"No API directories found in fern/apis/"}),{success:!1,fernYml:{org:i}};let u={},l={targets:{}},p;for(let A of c){let b=nt(n,Fe.of(A)),x=await new Jze({cwd:b,apiName:A}).migrate();if(o.push(...x.warnings),x.absoluteFilePath!=null&&s.push(x.absoluteFilePath),u[A]=x.rawApi,x.sdks!=null){for(let[C,w]of Object.entries(x.sdks.targets))l.targets[C]=w;x.sdks.autorelease!=null&&p==null&&(p=x.sdks.autorelease)}}let d=await m3o({fernDir:r,apisDir:n,generatorsYmlApis:u});o.push(...d.warnings);let f={org:i,apis:d.apis};Object.keys(l.targets).length>0&&(p!=null&&(l.autorelease=p),f.sdks=l);let h=await new Jze({cwd:r}).detect();return h.found&&h.absoluteFilePath!=null&&(o.push({type:"info",message:"Found generators.yml in fern root alongside apis/ directory",suggestion:"Review the migrated configuration to ensure it's correct"}),s.push(h.absoluteFilePath)),{success:!0,fernYml:f}}async findFernDirectory(){if(this.cwd.split("/").pop()===Lg)return this.cwd;let r=nt(this.cwd,Fe.of(Lg));if(await ar(r,"directory"))return r}serializeFernYml(t){let r={edition:t.edition,org:t.org};return t.api!=null&&(r.api=t.api),t.apis!=null&&(r.apis=t.apis),t.ai!=null&&(r.ai=t.ai),t.cli!=null&&(r.cli=t.cli),t.docs!=null&&(r.docs=t.docs),t.sdks!=null&&(r.sdks=this.simplifySdks(t.sdks)),Br.dump(r,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"',forceQuotes:!1})}simplifySdks(t){let r={...t},n={};for(let[i,o]of Object.entries(t.targets)){let s=o.output;if(typeof s=="string"){n[i]=o;continue}if(s.git==null&&s.path!=null){n[i]={...o,output:s.path};continue}n[i]=o}return r.targets=n,r}};var A3o=class{async handle(t,r){let i=await new C8t({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 Q({message:"Migration failed",code:Q.Code.ConfigError})}};function y3o(e){let t=new A3o;To(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 b3o(e){Cv(e,"config","Configure, edit, and inspect your settings",[y3o])}var E3o=class{async handle(t,r){let n=await t.loadWorkspaceOrThrow();if(n.docs==null)throw new Q({message:`No docs configuration found in fern.yml.
|
|
3590
3590
|
|
|
3591
3591
|
Add a 'docs:' section to your fern.yml to get started.`,code:Q.Code.ConfigError});let o=await new QOe({context:t}).check({workspace:n,strict:r.strict}),s=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let a=this.buildJsonResponse({result:o,hasErrors:s});if(t.stdout.info(JSON.stringify(a,null,2)),s)throw new Q({code:Q.Code.ValidationError});return}if(o.violations.length>0)for(let a of o.violations){let c=a.severity==="warning"?we.yellow:we.red;process.stderr.write(`${c(`${a.displayRelativeFilepath}:${a.line}:${a.column}: ${a.message}`)}
|
|
3592
|
-
`)}if(s)throw new Q({code:Q.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${Tn.warning} ${we.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(we.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Tn.success} ${we.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>Q$(i))),{success:!r,results:n}}};function v3o(e){let t=new E3o;To(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 Meu=Se(require("net"),1),Leu=Se(require("os"),1),nXn=class extends Error{constructor(t){super(`${t} is locked`)}},Hyt={old:new Set,young:new Set},Ibm=1e3*15,zeu=new Set;var x8t,Cbm=()=>{let e=Leu.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},jeu=e=>new Promise((t,r)=>{let n=Meu.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),Qeu=async(e,t)=>{if(e.host||e.port===0)return jeu(e);for(let r of t)try{await jeu({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},xbm=e=>Hyt.old.has(e)||Hyt.young.has(e)||zeu.has(e),wbm=function*(e){e&&(yield*e),yield 0};async function MOe(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};x8t===void 0&&(x8t=setTimeout(()=>{x8t=void 0,Hyt.old=Hyt.young,Hyt.young=new Set},Ibm),x8t.unref&&x8t.unref());let o=Cbm();for(let s of wbm(t))try{if(r.has(s))continue;let a=await Qeu({...i,port:s},o);for(;xbm(a);){if(s!==0)throw new nXn(s);a=await Qeu({...i,port:s},o)}return n?zeu.add(a):Hyt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof nXn))throw a}throw new Error("No available ports found")}var Veu=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Ueu="docs.buildwithfern.com",_eu=62;function Yze(e){let t=e.toLowerCase().trim();t.startsWith("https://")?t=t.slice(8):t.startsWith("http://")&&(t=t.slice(7));let r=t.indexOf("/");return r!==-1&&(t=t.slice(0,r)),Veu.test(t)}function qeu(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function w8t({orgId:e,previewId:t}){let r=qeu(t),n=`${e}-preview-${r}.${Ueu}`;if(n.length<=_eu)return n;let i=`${e}-preview-`,o=_eu-i.length;if(o<8)throw new Q({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:Q.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Ueu}`}Ut();eg();rr();Vw();var sUo=require("child_process"),ldu=Se(x3o(),1),aUo=Se(VXn(),1),cUo=Se(require("fs"),1),I4e=require("fs/promises"),pdu=Se(require("http"),1),pUo=Se(require("path"),1);var _ou=require("events"),KXn=Se(require("fs"),1),s4e=Se(require("path"),1);var xou=Se(require("os"),1),wou=300,GOe=20,Y8t=1e7,Sou=xou.default.platform();var zwm=Sou==="darwin",VLo=Sou==="win32",WOe=zwm||VLo,Tou=3e3,Bou=2e4,qLo=1250;var zne;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(zne||(zne={}));var o4e;(function(e){e.CHANGE="change",e.RENAME="rename"})(o4e||(o4e={}));var X8t;(function(e){e.CHANGE="change",e.ERROR="error"})(X8t||(X8t={}));var _c;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(_c||(_c={}));var AN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(AN||(AN={}));var Uwm=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,c=0,u=0,l=()=>{let C=Date.now(),w=C-c,B=C-u,O=w>=t||B>=o;return[C,O]},p=C=>{if(u=C,!s)return;let w=s;s=void 0,e.apply(void 0,w)},d=()=>{I(0)},f=()=>{a&&(d(),p(Date.now()))},m=C=>{if(u=C,n)return p(C)},h=C=>{if(i&&s)return p(C);s=void 0},A=()=>{a=void 0;let[C,w]=l();return w?h(C):b(C)},b=C=>{let w=C-c,B=C-u,O=t-w,N=o-B,P=Math.min(O,N);return I(P)},I=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},x=(...C)=>{let[w,B]=l(),O=!!a;if(s=C,c=w,(B||!a)&&I(t),B)return O?p(w):m(w)};return x.cancel=d,x.flush=f,x},qXn=Uwm;var KLo=Se(require("fs"),1),WXn=Se(require("path"),1);var Qd=Se(require("fs"),1),KO=require("util");var dde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},Une=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var GLo=Se(require("process"),1),Oou=GLo.default.getuid?!GLo.default.getuid():!1,Pou=1e4,cM=()=>{};var Z8t={isChangeErrorOk:e=>{if(!Z8t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!Oou&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!Z8t.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(!Z8t.isNodeError(e))throw e;if(!Z8t.isChangeErrorOk(e))throw e}},yC=Z8t;var WLo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=Pou,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()}}}}},Dou=new WLo;var mde=(e,t)=>function(n){return function i(...o){return Dou.schedule().then(s=>{let a=u=>(s(),u),c=u=>{if(s(),Date.now()>=n)throw u;if(t(u)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw u};return e.apply(void 0,o).then(a,c)})}},hde=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var _wm={attempt:{chmod:dde((0,KO.promisify)(Qd.default.chmod),yC.onChangeError),chown:dde((0,KO.promisify)(Qd.default.chown),yC.onChangeError),close:dde((0,KO.promisify)(Qd.default.close),cM),fsync:dde((0,KO.promisify)(Qd.default.fsync),cM),mkdir:dde((0,KO.promisify)(Qd.default.mkdir),cM),realpath:dde((0,KO.promisify)(Qd.default.realpath),cM),stat:dde((0,KO.promisify)(Qd.default.stat),cM),unlink:dde((0,KO.promisify)(Qd.default.unlink),cM),chmodSync:Une(Qd.default.chmodSync,yC.onChangeError),chownSync:Une(Qd.default.chownSync,yC.onChangeError),closeSync:Une(Qd.default.closeSync,cM),existsSync:Une(Qd.default.existsSync,cM),fsyncSync:Une(Qd.default.fsync,cM),mkdirSync:Une(Qd.default.mkdirSync,cM),realpathSync:Une(Qd.default.realpathSync,cM),statSync:Une(Qd.default.statSync,cM),unlinkSync:Une(Qd.default.unlinkSync,cM)},retry:{close:mde((0,KO.promisify)(Qd.default.close),yC.isRetriableError),fsync:mde((0,KO.promisify)(Qd.default.fsync),yC.isRetriableError),open:mde((0,KO.promisify)(Qd.default.open),yC.isRetriableError),readFile:mde((0,KO.promisify)(Qd.default.readFile),yC.isRetriableError),rename:mde((0,KO.promisify)(Qd.default.rename),yC.isRetriableError),stat:mde((0,KO.promisify)(Qd.default.stat),yC.isRetriableError),write:mde((0,KO.promisify)(Qd.default.write),yC.isRetriableError),writeFile:mde((0,KO.promisify)(Qd.default.writeFile),yC.isRetriableError),closeSync:hde(Qd.default.closeSync,yC.isRetriableError),fsyncSync:hde(Qd.default.fsyncSync,yC.isRetriableError),openSync:hde(Qd.default.openSync,yC.isRetriableError),readFileSync:hde(Qd.default.readFileSync,yC.isRetriableError),renameSync:hde(Qd.default.renameSync,yC.isRetriableError),statSync:hde(Qd.default.statSync,yC.isRetriableError),writeSync:hde(Qd.default.writeSync,yC.isRetriableError),writeFileSync:hde(Qd.default.writeFileSync,yC.isRetriableError)}},Rou=_wm;var GXn=Se(require("fs"),1),$8t=Se(require("path"),1);var HLo=()=>{};var Vwm=()=>{let e=HLo,t=HLo,r=!1,n=!1;return{promise:new Promise((c,u)=>{e=l=>(r=!0,c(l)),t=l=>(n=!0,u(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},Fou=Vwm;var qwm=()=>{let{promise:e,resolve:t,isPending:r}=Fou(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},kou=qwm;var Nou={then:e=>{e()}};var jou=e=>Array.isArray(e)?e:[e],Qou=e=>typeof e=="function";var Gwm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=jou(o).map(oe=>Qou(oe)?oe:ae=>oe.test(ae)),a=oe=>s.some(ae=>ae(oe)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],b=new Set,I={},x={},C=new Set,w={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},B={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:b,symlinksNamesToPaths:I,map:x},{promise:O,increment:N,decrement:P}=kou(),U=0,Y=(oe,ae,Ce,ve)=>{C.has(ae)||U>=i||(U+=1,oe.directories.push(ae),oe.directoriesNames.add(Ce),l.push(ae),p.add(Ce),d.propertyIsEnumerable(Ce)||(d[Ce]=[]),d[Ce].push(ae),C.add(ae),!(ve>=n)&&(U>=i||he(ae,ve+1)))},Z=(oe,ae,Ce)=>{C.has(ae)||U>=i||(U+=1,oe.files.push(ae),oe.filesNames.add(Ce),f.push(ae),m.add(Ce),h.propertyIsEnumerable(Ce)||(h[Ce]=[]),h[Ce].push(ae),C.add(ae))},re=(oe,ae,Ce,ve)=>{C.has(ae)||U>=i||(U+=1,oe.symlinks.push(ae),oe.symlinksNames.add(Ce),A.push(ae),b.add(Ce),I.propertyIsEnumerable(Ce)||(I[Ce]=[]),I[Ce].push(ae),C.add(ae),r&&(ve>=n||U>=i||je(ae,ve+1)))},me=(oe,ae,Ce,ve,ke)=>{c.aborted||a(ae)||(ve.isDirectory()?Y(oe,ae,Ce,ke):ve.isFile()?Z(oe,ae,Ce):ve.isSymbolicLink()&&re(oe,ae,Ce,ke))},be=(oe,ae,Ce,ve)=>{if(c.aborted)return;let ke=ae===$8t.default.sep?"":$8t.default.sep,qe=Ce.name,pt=`${ae}${ke}${qe}`;a(pt)||(Ce.isDirectory()?Y(oe,pt,qe,ve):Ce.isFile()?Z(oe,pt,qe):Ce.isSymbolicLink()&&re(oe,pt,qe,ve))},ce=(oe,ae,Ce,ve)=>{for(let ke=0,qe=Ce.length;ke<qe;ke++)be(oe,ae,Ce[ke],ve)},he=(oe,ae)=>{c.aborted||ae>n||U>=i||(N(),GXn.default.readdir(oe,{withFileTypes:!0},(Ce,ve)=>{if(Ce||c.aborted||!ve.length)return P();(u(ve)||Nou).then(()=>{let qe=x[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ce(qe,oe,ve,ae),P()})}))},je=(oe,ae)=>{N(),GXn.default.realpath(oe,(Ce,ve)=>{if(Ce||c.aborted)return P();GXn.default.stat(ve,(ke,qe)=>{if(ke||c.aborted)return P();let pt=$8t.default.basename(ve),it=x[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(it,ve,pt,qe,ae),P()})})};return(async(oe,ae=1)=>(oe=$8t.default.normalize(oe),C.add(oe),he(oe,ae),await O,c.aborted?w:B))(e)},Mou=Gwm;var _ne={lang:{debounce:qXn,attempt:e=>{try{return e()}catch(t){return _ne.lang.castError(t)}},castArray:e=>_ne.lang.isArray(e)?e:[e],castError:e=>_ne.lang.isError(e)?e:_ne.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(_ne.lang.isNaN(e))return _ne.lang.isNaN(t);if(_ne.lang.isPrimitive(e)||_ne.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(WXn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?KLo.default.realpathSync.native(e):KLo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===WXn.default.sep&&t.length-e.length>WXn.default.sep.length,poll:(e,t=Bou)=>Rou.retry.stat(t)(e,{bigint:!0}).catch(_ne.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 Mou(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},fp=_ne;var HXn=Se(require("path"),1);var JLo=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||fp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=wou){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,c)=>{let u=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...c]),p=this.eventsDeduplicate([...u,...l]);this.onTargetEvents(p)},s=fp.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,c="",u=!1)=>{u?await this.eventsPopulate([c],n,!0):i.add(c),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===_c.CHANGE&&a===_c.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===_c.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===_c.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??GOe:Math.min(1,this.options.depth??GOe),s=this.options.limit??Y8t,[a,c]=await fp.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),u=[...a,...c];return await Promise.all(u.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())fp.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(_c.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!WOe&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(_c.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(_c.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(HXn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(HXn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===_c.ADD?this.onTargetAdd(n):r===_c.ADD_DIR?this.onTargetAddDir(n):r===_c.CHANGE?this.onTargetChange(n):r===_c.UNLINK?this.onTargetUnlink(n):r===_c.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=o4e.CHANGE,r){if(this.watcher.isClosed())return;let n=HXn.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){VLo&&t.code==="EPERM"?this.onWatcherChange(o4e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(X8t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(X8t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(o4e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&WOe&&this.options.native!==!1?this.options.depth??GOe:Math.min(1,this.options.depth??GOe),n=this.options.limit??Y8t,[i,o]=await fp.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(o4e.CHANGE,a,t)}))}}},Lou=JLo;var yN={interval:100,intervalId:void 0,fns:new Map,init:()=>{yN.intervalId||(yN.intervalId=setInterval(yN.resolve,yN.interval))},reset:()=>{yN.intervalId&&(clearInterval(yN.intervalId),delete yN.intervalId)},add:(e,t)=>{yN.fns.set(e,Date.now()+t),yN.init()},remove:e=>{yN.fns.delete(e)},resolve:()=>{if(!yN.fns.size)return yN.reset();let e=Date.now();for(let[t,r]of yN.fns)r>=e||(yN.remove(t),t())}},e7t=yN;var t7t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=qLo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(fp.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let c=()=>{s.add.delete(n),e7t.remove(u)},u=()=>{c(),a()};e7t.add(u,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;c();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=qLo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let c=()=>{s.unlink.delete(n),e7t.remove(u)},u=()=>{c(),a()};e7t.add(u,r);let l=()=>(c(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,_c.ADD,zne.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,_c.ADD_DIR,zne.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,_c.UNLINK,zne.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,_c.UNLINK_DIR,zne.DIR);return this.getLockUnlink({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};t7t.DIR_EVENTS={add:_c.ADD_DIR,rename:_c.RENAME_DIR,unlink:_c.UNLINK_DIR};t7t.FILE_EVENTS={add:_c.ADD,change:_c.CHANGE,rename:_c.RENAME,unlink:_c.UNLINK};var zou=t7t;var YLo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(fp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(fp.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(fp.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(fp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return fp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);fp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},XLo=YLo;var ZLo=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}},Uou=ZLo;var $Lo=class{constructor(){this.inos={},this.paths=new XLo,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await fp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new Uou(n)}reset(){this.inos={},this.paths=new XLo,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,_c.ADD,i),[_c.ADD];if(i.isDirectory())return this.updateIno(t,_c.ADD_DIR,i),[_c.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,_c.UNLINK,n),[_c.UNLINK];if(n.isDirectory())return this.updateIno(t,_c.UNLINK_DIR,n),[_c.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,_c.CHANGE,i),[_c.CHANGE]);if(i.isDirectory())return this.updateIno(t,_c.UNLINK,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK,_c.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD,i),[_c.UNLINK_DIR,_c.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK_DIR,_c.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?zne.FILE:zne.DIR;i[t]=[n.ino,o]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let n=this.stats.get(t)?.ino||-1;this.paths.delete(n,t),this.stats.delete(t)}}},ezo=$Lo;var tzo=class e extends _ou.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(AN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(AN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(AN.READY,i)),this._locker=new zou(this),this._roots=new Set,this._poller=new ezo,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(fp.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(AN.CLOSE))}error(t){if(this.isClosed())return!1;let r=fp.lang.castError(t);return this.emit(AN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(AN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(AN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)fp.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new Lou(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=fp.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=s4e.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??GOe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&WOe&&l.options.native!==!1)))return!0;if(!WOe)break;let u=s4e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=fp.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let c=!r.recursive||WOe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:KXn.default.watch(a,c),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=s4e.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(c){this.error(c)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||WOe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??GOe,a=r.limit??Y8t,[c]=await fp.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let u=await this.watchDirectories([t],r,n,i,o);if(c.length){let l=fp.fs.getDepth(t);for(let p of c){let d=fp.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||u)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(u,l)=>{l===t&&(c(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(AN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(AN.CLOSE,c),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=s4e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new ezo,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return fp.lang.noop;if(this.pollerExists(t,r))return fp.lang.noop;let i={...r,interval:r.pollingInterval??Tou},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(AN.CLOSE,a),KXn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(AN.CLOSE,a),KXn.default.unwatchFile(t,n)};return fp.lang.attempt(s),()=>fp.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=fp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!fp.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=s4e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await fp.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=s4e.default.dirname(t);return(await fp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=fp.lang.noop){if(fp.lang.isFunction(t))return this.watch([],{},t);if(fp.lang.isUndefined(t))return this.watch([],r,n);if(fp.lang.isFunction(r))return this.watch(t,{},r);if(fp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=fp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==fp.lang.noop&&this.on(AN.ALL,n),r.readdirMap=void 0,this.ready())}},JXn=tzo;lZn();rr();var m7=require("fs/promises"),Hsu=require("os"),xzo=Se(require("path"),1),A1m=".fern",y1m="logs",Czo=100*1024*1024;function b1m(){return"cli@5.13.0"}var f4e=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=nt(Yt.of((0,Hsu.homedir)()),Fe.of(A1m)),n=nt(r,Fe.of(y1m));await ar(n)||await(0,m7.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=nt(n,Fe.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${xzo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
3592
|
+
`)}if(s)throw new Q({code:Q.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${Tn.warning} ${we.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(we.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Tn.success} ${we.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>Q$(i))),{success:!r,results:n}}};function v3o(e){let t=new E3o;To(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 Meu=Se(require("net"),1),Leu=Se(require("os"),1),nXn=class extends Error{constructor(t){super(`${t} is locked`)}},Hyt={old:new Set,young:new Set},Ibm=1e3*15,zeu=new Set;var x8t,Cbm=()=>{let e=Leu.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},jeu=e=>new Promise((t,r)=>{let n=Meu.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),Qeu=async(e,t)=>{if(e.host||e.port===0)return jeu(e);for(let r of t)try{await jeu({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},xbm=e=>Hyt.old.has(e)||Hyt.young.has(e)||zeu.has(e),wbm=function*(e){e&&(yield*e),yield 0};async function MOe(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};x8t===void 0&&(x8t=setTimeout(()=>{x8t=void 0,Hyt.old=Hyt.young,Hyt.young=new Set},Ibm),x8t.unref&&x8t.unref());let o=Cbm();for(let s of wbm(t))try{if(r.has(s))continue;let a=await Qeu({...i,port:s},o);for(;xbm(a);){if(s!==0)throw new nXn(s);a=await Qeu({...i,port:s},o)}return n?zeu.add(a):Hyt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof nXn))throw a}throw new Error("No available ports found")}var Veu=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Ueu="docs.buildwithfern.com",_eu=62;function Yze(e){let t=e.toLowerCase().trim();t.startsWith("https://")?t=t.slice(8):t.startsWith("http://")&&(t=t.slice(7));let r=t.indexOf("/");return r!==-1&&(t=t.slice(0,r)),Veu.test(t)}function qeu(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function w8t({orgId:e,previewId:t}){let r=qeu(t),n=`${e}-preview-${r}.${Ueu}`;if(n.length<=_eu)return n;let i=`${e}-preview-`,o=_eu-i.length;if(o<8)throw new Q({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:Q.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Ueu}`}Ut();eg();rr();Vw();var sUo=require("child_process"),ldu=Se(x3o(),1),aUo=Se(VXn(),1),cUo=Se(require("fs"),1),I4e=require("fs/promises"),pdu=Se(require("http"),1),pUo=Se(require("path"),1);var _ou=require("events"),KXn=Se(require("fs"),1),s4e=Se(require("path"),1);var xou=Se(require("os"),1),wou=300,GOe=20,Y8t=1e7,Sou=xou.default.platform();var zwm=Sou==="darwin",VLo=Sou==="win32",WOe=zwm||VLo,Tou=3e3,Bou=2e4,qLo=1250;var zne;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(zne||(zne={}));var o4e;(function(e){e.CHANGE="change",e.RENAME="rename"})(o4e||(o4e={}));var X8t;(function(e){e.CHANGE="change",e.ERROR="error"})(X8t||(X8t={}));var _c;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(_c||(_c={}));var AN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(AN||(AN={}));var Uwm=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,c=0,u=0,l=()=>{let C=Date.now(),w=C-c,B=C-u,O=w>=t||B>=o;return[C,O]},p=C=>{if(u=C,!s)return;let w=s;s=void 0,e.apply(void 0,w)},d=()=>{I(0)},f=()=>{a&&(d(),p(Date.now()))},m=C=>{if(u=C,n)return p(C)},h=C=>{if(i&&s)return p(C);s=void 0},A=()=>{a=void 0;let[C,w]=l();return w?h(C):b(C)},b=C=>{let w=C-c,B=C-u,O=t-w,N=o-B,P=Math.min(O,N);return I(P)},I=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},x=(...C)=>{let[w,B]=l(),O=!!a;if(s=C,c=w,(B||!a)&&I(t),B)return O?p(w):m(w)};return x.cancel=d,x.flush=f,x},qXn=Uwm;var KLo=Se(require("fs"),1),WXn=Se(require("path"),1);var Qd=Se(require("fs"),1),KO=require("util");var dde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},Une=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var GLo=Se(require("process"),1),Oou=GLo.default.getuid?!GLo.default.getuid():!1,Pou=1e4,cM=()=>{};var Z8t={isChangeErrorOk:e=>{if(!Z8t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!Oou&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!Z8t.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(!Z8t.isNodeError(e))throw e;if(!Z8t.isChangeErrorOk(e))throw e}},yC=Z8t;var WLo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=Pou,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()}}}}},Dou=new WLo;var mde=(e,t)=>function(n){return function i(...o){return Dou.schedule().then(s=>{let a=u=>(s(),u),c=u=>{if(s(),Date.now()>=n)throw u;if(t(u)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw u};return e.apply(void 0,o).then(a,c)})}},hde=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var _wm={attempt:{chmod:dde((0,KO.promisify)(Qd.default.chmod),yC.onChangeError),chown:dde((0,KO.promisify)(Qd.default.chown),yC.onChangeError),close:dde((0,KO.promisify)(Qd.default.close),cM),fsync:dde((0,KO.promisify)(Qd.default.fsync),cM),mkdir:dde((0,KO.promisify)(Qd.default.mkdir),cM),realpath:dde((0,KO.promisify)(Qd.default.realpath),cM),stat:dde((0,KO.promisify)(Qd.default.stat),cM),unlink:dde((0,KO.promisify)(Qd.default.unlink),cM),chmodSync:Une(Qd.default.chmodSync,yC.onChangeError),chownSync:Une(Qd.default.chownSync,yC.onChangeError),closeSync:Une(Qd.default.closeSync,cM),existsSync:Une(Qd.default.existsSync,cM),fsyncSync:Une(Qd.default.fsync,cM),mkdirSync:Une(Qd.default.mkdirSync,cM),realpathSync:Une(Qd.default.realpathSync,cM),statSync:Une(Qd.default.statSync,cM),unlinkSync:Une(Qd.default.unlinkSync,cM)},retry:{close:mde((0,KO.promisify)(Qd.default.close),yC.isRetriableError),fsync:mde((0,KO.promisify)(Qd.default.fsync),yC.isRetriableError),open:mde((0,KO.promisify)(Qd.default.open),yC.isRetriableError),readFile:mde((0,KO.promisify)(Qd.default.readFile),yC.isRetriableError),rename:mde((0,KO.promisify)(Qd.default.rename),yC.isRetriableError),stat:mde((0,KO.promisify)(Qd.default.stat),yC.isRetriableError),write:mde((0,KO.promisify)(Qd.default.write),yC.isRetriableError),writeFile:mde((0,KO.promisify)(Qd.default.writeFile),yC.isRetriableError),closeSync:hde(Qd.default.closeSync,yC.isRetriableError),fsyncSync:hde(Qd.default.fsyncSync,yC.isRetriableError),openSync:hde(Qd.default.openSync,yC.isRetriableError),readFileSync:hde(Qd.default.readFileSync,yC.isRetriableError),renameSync:hde(Qd.default.renameSync,yC.isRetriableError),statSync:hde(Qd.default.statSync,yC.isRetriableError),writeSync:hde(Qd.default.writeSync,yC.isRetriableError),writeFileSync:hde(Qd.default.writeFileSync,yC.isRetriableError)}},Rou=_wm;var GXn=Se(require("fs"),1),$8t=Se(require("path"),1);var HLo=()=>{};var Vwm=()=>{let e=HLo,t=HLo,r=!1,n=!1;return{promise:new Promise((c,u)=>{e=l=>(r=!0,c(l)),t=l=>(n=!0,u(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},Fou=Vwm;var qwm=()=>{let{promise:e,resolve:t,isPending:r}=Fou(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},kou=qwm;var Nou={then:e=>{e()}};var jou=e=>Array.isArray(e)?e:[e],Qou=e=>typeof e=="function";var Gwm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=jou(o).map(oe=>Qou(oe)?oe:ae=>oe.test(ae)),a=oe=>s.some(ae=>ae(oe)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],b=new Set,I={},x={},C=new Set,w={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},B={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:b,symlinksNamesToPaths:I,map:x},{promise:O,increment:N,decrement:P}=kou(),U=0,Y=(oe,ae,Ce,ve)=>{C.has(ae)||U>=i||(U+=1,oe.directories.push(ae),oe.directoriesNames.add(Ce),l.push(ae),p.add(Ce),d.propertyIsEnumerable(Ce)||(d[Ce]=[]),d[Ce].push(ae),C.add(ae),!(ve>=n)&&(U>=i||he(ae,ve+1)))},Z=(oe,ae,Ce)=>{C.has(ae)||U>=i||(U+=1,oe.files.push(ae),oe.filesNames.add(Ce),f.push(ae),m.add(Ce),h.propertyIsEnumerable(Ce)||(h[Ce]=[]),h[Ce].push(ae),C.add(ae))},re=(oe,ae,Ce,ve)=>{C.has(ae)||U>=i||(U+=1,oe.symlinks.push(ae),oe.symlinksNames.add(Ce),A.push(ae),b.add(Ce),I.propertyIsEnumerable(Ce)||(I[Ce]=[]),I[Ce].push(ae),C.add(ae),r&&(ve>=n||U>=i||je(ae,ve+1)))},me=(oe,ae,Ce,ve,ke)=>{c.aborted||a(ae)||(ve.isDirectory()?Y(oe,ae,Ce,ke):ve.isFile()?Z(oe,ae,Ce):ve.isSymbolicLink()&&re(oe,ae,Ce,ke))},be=(oe,ae,Ce,ve)=>{if(c.aborted)return;let ke=ae===$8t.default.sep?"":$8t.default.sep,qe=Ce.name,pt=`${ae}${ke}${qe}`;a(pt)||(Ce.isDirectory()?Y(oe,pt,qe,ve):Ce.isFile()?Z(oe,pt,qe):Ce.isSymbolicLink()&&re(oe,pt,qe,ve))},ce=(oe,ae,Ce,ve)=>{for(let ke=0,qe=Ce.length;ke<qe;ke++)be(oe,ae,Ce[ke],ve)},he=(oe,ae)=>{c.aborted||ae>n||U>=i||(N(),GXn.default.readdir(oe,{withFileTypes:!0},(Ce,ve)=>{if(Ce||c.aborted||!ve.length)return P();(u(ve)||Nou).then(()=>{let qe=x[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ce(qe,oe,ve,ae),P()})}))},je=(oe,ae)=>{N(),GXn.default.realpath(oe,(Ce,ve)=>{if(Ce||c.aborted)return P();GXn.default.stat(ve,(ke,qe)=>{if(ke||c.aborted)return P();let pt=$8t.default.basename(ve),it=x[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(it,ve,pt,qe,ae),P()})})};return(async(oe,ae=1)=>(oe=$8t.default.normalize(oe),C.add(oe),he(oe,ae),await O,c.aborted?w:B))(e)},Mou=Gwm;var _ne={lang:{debounce:qXn,attempt:e=>{try{return e()}catch(t){return _ne.lang.castError(t)}},castArray:e=>_ne.lang.isArray(e)?e:[e],castError:e=>_ne.lang.isError(e)?e:_ne.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(_ne.lang.isNaN(e))return _ne.lang.isNaN(t);if(_ne.lang.isPrimitive(e)||_ne.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(WXn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?KLo.default.realpathSync.native(e):KLo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===WXn.default.sep&&t.length-e.length>WXn.default.sep.length,poll:(e,t=Bou)=>Rou.retry.stat(t)(e,{bigint:!0}).catch(_ne.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 Mou(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},fp=_ne;var HXn=Se(require("path"),1);var JLo=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||fp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=wou){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,c)=>{let u=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...c]),p=this.eventsDeduplicate([...u,...l]);this.onTargetEvents(p)},s=fp.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,c="",u=!1)=>{u?await this.eventsPopulate([c],n,!0):i.add(c),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===_c.CHANGE&&a===_c.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===_c.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===_c.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??GOe:Math.min(1,this.options.depth??GOe),s=this.options.limit??Y8t,[a,c]=await fp.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),u=[...a,...c];return await Promise.all(u.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())fp.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(_c.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!WOe&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(_c.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(_c.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(HXn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(HXn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===_c.ADD?this.onTargetAdd(n):r===_c.ADD_DIR?this.onTargetAddDir(n):r===_c.CHANGE?this.onTargetChange(n):r===_c.UNLINK?this.onTargetUnlink(n):r===_c.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=o4e.CHANGE,r){if(this.watcher.isClosed())return;let n=HXn.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){VLo&&t.code==="EPERM"?this.onWatcherChange(o4e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(X8t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(X8t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(o4e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&WOe&&this.options.native!==!1?this.options.depth??GOe:Math.min(1,this.options.depth??GOe),n=this.options.limit??Y8t,[i,o]=await fp.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(o4e.CHANGE,a,t)}))}}},Lou=JLo;var yN={interval:100,intervalId:void 0,fns:new Map,init:()=>{yN.intervalId||(yN.intervalId=setInterval(yN.resolve,yN.interval))},reset:()=>{yN.intervalId&&(clearInterval(yN.intervalId),delete yN.intervalId)},add:(e,t)=>{yN.fns.set(e,Date.now()+t),yN.init()},remove:e=>{yN.fns.delete(e)},resolve:()=>{if(!yN.fns.size)return yN.reset();let e=Date.now();for(let[t,r]of yN.fns)r>=e||(yN.remove(t),t())}},e7t=yN;var t7t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=qLo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(fp.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let c=()=>{s.add.delete(n),e7t.remove(u)},u=()=>{c(),a()};e7t.add(u,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;c();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=qLo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let c=()=>{s.unlink.delete(n),e7t.remove(u)},u=()=>{c(),a()};e7t.add(u,r);let l=()=>(c(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,_c.ADD,zne.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,_c.ADD_DIR,zne.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,_c.UNLINK,zne.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,_c.UNLINK_DIR,zne.DIR);return this.getLockUnlink({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};t7t.DIR_EVENTS={add:_c.ADD_DIR,rename:_c.RENAME_DIR,unlink:_c.UNLINK_DIR};t7t.FILE_EVENTS={add:_c.ADD,change:_c.CHANGE,rename:_c.RENAME,unlink:_c.UNLINK};var zou=t7t;var YLo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(fp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(fp.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(fp.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(fp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return fp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);fp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},XLo=YLo;var ZLo=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}},Uou=ZLo;var $Lo=class{constructor(){this.inos={},this.paths=new XLo,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await fp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new Uou(n)}reset(){this.inos={},this.paths=new XLo,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,_c.ADD,i),[_c.ADD];if(i.isDirectory())return this.updateIno(t,_c.ADD_DIR,i),[_c.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,_c.UNLINK,n),[_c.UNLINK];if(n.isDirectory())return this.updateIno(t,_c.UNLINK_DIR,n),[_c.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,_c.CHANGE,i),[_c.CHANGE]);if(i.isDirectory())return this.updateIno(t,_c.UNLINK,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK,_c.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD,i),[_c.UNLINK_DIR,_c.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK_DIR,_c.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?zne.FILE:zne.DIR;i[t]=[n.ino,o]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let n=this.stats.get(t)?.ino||-1;this.paths.delete(n,t),this.stats.delete(t)}}},ezo=$Lo;var tzo=class e extends _ou.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(AN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(AN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(AN.READY,i)),this._locker=new zou(this),this._roots=new Set,this._poller=new ezo,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(fp.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(AN.CLOSE))}error(t){if(this.isClosed())return!1;let r=fp.lang.castError(t);return this.emit(AN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(AN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(AN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)fp.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new Lou(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=fp.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=s4e.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??GOe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&WOe&&l.options.native!==!1)))return!0;if(!WOe)break;let u=s4e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=fp.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let c=!r.recursive||WOe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:KXn.default.watch(a,c),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=s4e.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(c){this.error(c)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||WOe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??GOe,a=r.limit??Y8t,[c]=await fp.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let u=await this.watchDirectories([t],r,n,i,o);if(c.length){let l=fp.fs.getDepth(t);for(let p of c){let d=fp.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||u)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(u,l)=>{l===t&&(c(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(AN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(AN.CLOSE,c),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=s4e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new ezo,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return fp.lang.noop;if(this.pollerExists(t,r))return fp.lang.noop;let i={...r,interval:r.pollingInterval??Tou},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(AN.CLOSE,a),KXn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(AN.CLOSE,a),KXn.default.unwatchFile(t,n)};return fp.lang.attempt(s),()=>fp.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=fp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!fp.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=s4e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await fp.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=s4e.default.dirname(t);return(await fp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=fp.lang.noop){if(fp.lang.isFunction(t))return this.watch([],{},t);if(fp.lang.isUndefined(t))return this.watch([],r,n);if(fp.lang.isFunction(r))return this.watch(t,{},r);if(fp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=fp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==fp.lang.noop&&this.on(AN.ALL,n),r.readdirMap=void 0,this.ready())}},JXn=tzo;lZn();rr();var m7=require("fs/promises"),Hsu=require("os"),xzo=Se(require("path"),1),A1m=".fern",y1m="logs",Czo=100*1024*1024;function b1m(){return"cli@5.13.1"}var f4e=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=nt(Yt.of((0,Hsu.homedir)()),Fe.of(A1m)),n=nt(r,Fe.of(y1m));await ar(n)||await(0,m7.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=nt(n,Fe.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${xzo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
3593
3593
|
`);await(0,m7.writeFile)(this.logFilePath,s,"utf-8"),this.initialized=!0,this.enforceLogSizeLimit(n)}getLogFilePath(){return this.logFilePath}async writeEntry(t){if(!this.initialized||!this.logFilePath)return;let r=JSON.stringify(t)+`
|
|
3594
3594
|
`;try{await(0,m7.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:b1m(),level:r,eventType:t.type,data:{durationMs:t.durationMs,metadata:t.metadata}};await this.writeEntry(n)}async logCliMemory(){let t=process.memoryUsage(),r={type:"cli_memory",timestamp:new Date().toISOString(),metadata:{heapUsed:t.heapUsed,heapTotal:t.heapTotal,external:t.external,rss:t.rss,heapUsedMB:Math.round(t.heapUsed/1024/1024*100)/100,heapTotalMB:Math.round(t.heapTotal/1024/1024*100)/100,rssMB:Math.round(t.rss/1024/1024*100)/100}};await this.logCliMetric(r)}async logCliReloadStart(){let t={type:"cli_reload_start",timestamp:new Date().toISOString()};await this.logCliMetric(t)}async logCliReloadFinish(t,r){let n={type:"cli_reload_finish",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliDocsGeneration(t,r){let n={type:"cli_docs_generation",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliValidation(t,r){let n={type:"cli_validation",timestamp:new Date().toISOString(),durationMs:t,metadata:{success:r}};await this.logCliMetric(n)}async enforceLogSizeLimit(t){try{let n=(await(0,m7.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=xzo.default.join(t,c);try{let l=await(0,m7.stat)(u);i.push({name:c,fullPath:u,size:l.size,mtimeMs:l.mtimeMs})}catch{}}let o=i.reduce((c,u)=>c+u.size,0),s=Math.round(o/1024/1024*100)/100,a=Czo/1024/1024;if(o<=Czo){this.consoleLogger?.debug(`Log directory size ${s} MB does not exceed ${a} MB cap`);return}this.consoleLogger?.info(`Rotating logs: total size ${s} MB exceeds ${a} MB cap`),i.sort((c,u)=>c.mtimeMs-u.mtimeMs);for(let c of i){if(o<=Czo)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,m7.unlink)(c.fullPath),o-=c.size}catch{}}}catch{}}getEventType(t,r){return r?"aggregate_summary":"type"in t&&typeof t.type=="string"?t.type:"unknown"}static isMetricsMessage(t){if(typeof t!="object"||t===null)return!1;let r=t;return r.type==="metrics"&&typeof r.timestamp=="string"&&typeof r.source=="string"}};var pZn={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function Ksu(e){let t=E1m();if(t==null)return;let{port:r,debugLogger:n,getDocsLoadResponse:i,extractLocaleFromPath:o}=e,s=new Map;function a(u){let l=JSON.stringify(u),p=[];for(let[d]of s)try{d.send(l)}catch{p.push(d)}for(let d of p){let f=s.get(d);f&&(clearInterval(f.pingInterval),s.delete(d))}}let c=t.serve({port:r,async fetch(u,l){if(u.method==="OPTIONS")return new Response(null,{status:204,headers:pZn});let p=new URL(u.url);if(u.headers.get("upgrade")?.toLowerCase()==="websocket"){l.upgrade(u,{data:{connectionId:`${Date.now()}`}});return}if(u.method==="POST"&&p.pathname==="/v2/registry/docs/load-with-url")try{let f=await u.json(),m=o?.(f?.url);return new Response(JSON.stringify(i(m)),{headers:{"Content-Type":"application/json",...pZn}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...pZn}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:pZn}):new Response("Not Found",{status:404})},websocket:{open(u){let{connectionId:l}=u.data,p=setInterval(()=>{let d=s.get(u);if(!d)return;let f=Date.now();if(f-d.lastPong>9e4){u.close();return}try{u.send(JSON.stringify({type:"ping",timestamp:f}))}catch{u.close()}},3e4);s.set(u,{pingInterval:p,lastPong:Date.now()});try{u.send(JSON.stringify({type:"connected",connectionId:l}))}catch{}},message(u,l){try{let p=JSON.parse(l.toString());if(p.type==="pong"){let d=s.get(u);d&&(d.lastPong=Date.now())}else f4e.isMetricsMessage(p)&&n.logFrontendMetrics(p)}catch{}},close(u){let l=s.get(u);l&&(clearInterval(l.pingInterval),s.delete(u))}}});return{sendData:a,stop:u=>c.stop(u)}}function E1m(){return globalThis.Bun}rr();Vw();var Xfu=require("child_process"),x$n=Se(vau(),1),Zfu=Se(G4o(),1),aI=require("fs"),lM=require("fs/promises"),$fu=require("os"),uM=Se(require("path"),1),edu=Se(bw(),1),tdu=Se(Yfu(),1),v4e=process.platform==="win32",C$n=we.cyan("[docs]:"),YPm="etag",XPm=23,rUo=e=>e.padEnd(XPm," "),ZPm="preview",$Pm="app-preview",eDm="bundle",tDm=".next",rDm="standalone",nDm=".fern",iDm="packages/fern-docs/bundle/.next/server/instrumentation.js",oDm='Cannot find matching keyid: {"signatures":';function sDm(e){try{let r=(0,Xfu.execSync)('reg query "HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem" /v LongPathsEnabled',{encoding:"utf-8",timeout:5e3}).match(/LongPathsEnabled\s+REG_DWORD\s+0x(\d+)/i);if(r!=null&&r[1]==="1")return}catch(t){e.debug(`Registry query for LongPathsEnabled failed: ${t}`)}throw new Q({message:`Windows long path support is not enabled. The docs bundle contains deeply nested .pnpm paths that exceed the 260-character MAX_PATH limit.
|
|
3595
3595
|
|
|
@@ -3774,7 +3774,7 @@ For more information, see https://buildwithfern.com/learn/api-definition/introdu
|
|
|
3774
3774
|
${i.error?.message??"Unknown error"}`,code:Q.Code.ParseError})}rr();var Odu=require("fs"),k$n=require("fs/promises"),Pdu=require("stream/promises");async function Ddu({snippetsS3PreSignedReadUrl:e,absolutePathToLocalSnippetJSON:t,context:r}){try{await XDm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(we.green(`Downloaded to ${t}`))}catch{r.logger.debug(we.yellow("Failed to download snippet.json from output."))}}async function XDm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await Ny.get(e,{responseType:"stream"});await ar(t)&&await(0,k$n.rm)(t,{recursive:!0}),await(0,k$n.mkdir)(Pn(t),{recursive:!0}),await(0,Pdu.pipeline)(r.data,(0,Odu.createWriteStream)(t))}rr();async function Rdu({generatorInvocation:e,context:t}){if(e.absolutePathToLocalOutput==null)return;let r=nt(e.absolutePathToLocalOutput,Fe.of(WP));if(await ar(r))return t.logger.debug(`Auto-discovered ${WP} at ${r}`),r}Ut();eg();rr();var kdu=Se(RMt(),1),N$n=require("fs/promises");Ds();var Ndu=Se(Um(),1),jdu=require("util"),Qdu=require("zlib");var ZDm=2e3,$Dm=12e4,xUo=3,eRm=.2,B4e=class e extends Error{constructor(){super("Received 429 Too Many Requests"),Object.setPrototypeOf(this,e.prototype)}};async function Fdu({fn:e,retryRateLimited:t,logger:r,onRateLimitedWithoutRetry:n,delayFn:i=o=>new Promise(s=>setTimeout(s,o))}){if(!t)try{return await e()}catch(o){if(o instanceof B4e)return n();throw o}for(let o=0;o<=xUo;o++)try{return await e()}catch(s){if(s instanceof B4e&&o<xUo){let a=Math.min(ZDm*2**o,$Dm),c=1+(Math.random()-.5)*eRm,u=Math.round(a*c);r.warn(`Received 429 Too Many Requests. Retrying in ${(u/1e3).toFixed(1)}s (attempt ${o+1}/${xUo})...`),await i(u)}else throw s}throw new Q({message:"Exceeded maximum retries for 429 Too Many Requests.",code:Q.Code.InternalError})}var tRm=(0,jdu.promisify)(Qdu.gzip);async function Mdu({projectConfig:e,workspace:t,organization:r,intermediateRepresentation:n,generatorInvocation:i,version:o,context:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignorePath:h,skipFernignore:A,retryRateLimited:b,automationMode:I,autoMerge:x,skipIfNoDiff:C,loginCommand:w="fern login"}){let B;if(A)B="";else if(h!=null)try{B=await(0,N$n.readFile)(h,"utf-8")}catch(N){s.failAndThrow(`Failed to read fernignore file at ${h}: ${N}`,void 0,{code:Q.Code.ConfigError})}let O=await Fdu({fn:()=>rRm({projectConfig:e,workspace:t,organization:r,generatorInvocation:i,version:o,context:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,absolutePathToPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignoreContents:B,automationMode:I,autoMerge:x,skipIfNoDiff:C,loginCommand:w}),retryRateLimited:b,logger:s.logger,onRateLimitedWithoutRetry:()=>s.failAndThrow("Received 429 Too Many Requests. Re-run with --retry-rate-limited to automatically retry.",void 0,{code:Q.Code.NetworkError})});return await nRm({intermediateRepresentation:n,job:O,context:s,generatorInvocation:i,irVersionOverride:p}),O}async function rRm({projectConfig:e,workspace:t,organization:r,generatorInvocation:n,version:i,context:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,fiddlePreview:p,pushPreviewBranch:d,fernignoreContents:f,skipIfNoDiff:m,loginCommand:h}){let A=npe({token:a.value}),b={id:n.name,version:n.version,outputMode:n.outputMode,customConfig:n.config,publishMetadata:n.publishMetadata},I={apiName:t.definition.rootApiFile.contents.name,version:i,organizationName:r,generators:[b],uploadToS3:aRm({outputMode:n.outputMode,generatorInvocation:n,absolutePathToPreview:l,shouldLogS3Url:s}),whitelabel:c,replay:u!=null?{enabled:u.enabled}:void 0,preview:p??l!=null,pushPreviewBranch:d,fernignoreContents:f,skipIfNoDiff:m},x=await A.remoteGen.createJobV3(I);if(!x.ok){let C=x.error;if(C?.content?.reason==="status-code"&&C.content.statusCode===429)throw new B4e;let w=oRm(C);return w!=null?o.failAndThrow(w,void 0,{code:Q.Code.ConfigError}):sRm(C)._visit({illegalApiNameError:()=>o.failAndThrow("API name is invalid: "+t.definition.rootApiFile.contents.name,void 0,{code:Q.Code.ConfigError}),illegalApiVersionError:()=>o.failAndThrow("API version is invalid: "+i,void 0,{code:Q.Code.ConfigError}),cannotPublishToNpmScope:({validScope:B,invalidScope:O})=>o.failAndThrow(`You do not have permission to publish to ${O} (expected ${B})`,void 0,{code:Q.Code.AuthError}),cannotPublishToMavenGroup:({validGroup:B,invalidGroup:O})=>o.failAndThrow(`You do not have permission to publish to ${O} (expected ${B})`,void 0,{code:Q.Code.AuthError}),cannotPublishPypiPackage:({validPrefix:B,invalidPackageName:O})=>o.failAndThrow(`You do not have permission to publish to ${O} (expected ${B})`,void 0,{code:Q.Code.AuthError}),generatorsDoNotExistError:B=>o.failAndThrow("Generators do not exist: "+B.nonExistentGenerators.map(O=>`${O.id}@${O.version}`).join(", "),void 0,{code:Q.Code.ConfigError}),insufficientPermissions:()=>o.failAndThrow(`You do not have permission to run this generator for organization '${r}'. Please run '${h}' to ensure you are logged in with the correct account.
|
|
3775
3775
|
|
|
3776
3776
|
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`,void 0,{code:Q.Code.AuthError}),orgNotConfiguredForWhitelabel:()=>o.failAndThrow("Your org is not configured for white-labeling. Please reach out to support@buildwithfern.com.",void 0,{code:Q.Code.AuthError}),branchDoesNotExist:B=>o.failAndThrow(`Branch ${B.branch} does not exist in repository ${B.repositoryOwner}/${B.repositoryName}`,void 0,{code:Q.Code.ConfigError}),rateLimitExceeded:()=>{throw new B4e},_other:B=>{o.logger.debug(`Failed to create job: ${JSON.stringify(B)}`);let O=iRm(B);return O!=null?o.failAndThrow(O,void 0,{code:Q.Code.NetworkError}):o.failAndThrow("Failed to create job. Please try again or contact support@buildwithfern.com for assistance.",void 0,{code:Q.Code.NetworkError})}})}return x.body}async function nRm({intermediateRepresentation:e,generatorInvocation:t,job:r,context:n,irVersionOverride:i}){let o=await EMe(t).then(f=>f==null?void 0:"v"+f.toString()),s=i??o,a=s==null?await t5t({intermediateRepresentation:e,context:n,targetGenerator:{name:t.name,version:t.version}}):await Dko({intermediateRepresentation:e,context:n,irVersion:s,targetGenerator:{name:t.name,version:t.version}}),c=new kdu.default,u=await eor(a,{onWrite:f=>{n.logger.debug("Wrote IR to disk: "+f)}}),l=new TextEncoder().encode(u),p=await tRm(l);n.logger.debug(`Compressed IR from ${l.byteLength} bytes to ${p.length} bytes (${((1-p.length/l.byteLength)*100).toFixed(1)}% reduction)`),c.append("file",p,{filename:"ir.json",contentType:"application/octet-stream"});let d=(0,Ndu.default)(vMe(),`/api/remote-gen/jobs/${r.jobId}/start`);try{await Ny.post(d,c,{headers:c.getHeaders(),maxBodyLength:1/0})}catch(f){let m=f instanceof bfc?f.response?.data:f;n.logger.debug(`POST ${d} failed with ${JSON.stringify(f)}`),n.failAndThrow("Failed to start job",m,{code:Q.Code.NetworkError})}}function iRm(e){let t;if(e?.reason==="status-code"?t=e.body:e?.content?.reason==="status-code"&&(t=e.content.body),typeof t?.content?.message=="string")return t.content.message;if(typeof t?.message=="string")return t.message}function oRm(e){let t=e?.content?.reason==="status-code"?e.content.body:void 0;return t?.error!=="GithubAppNotInstalled"?void 0:typeof t?.content?.message=="string"?t.content.message:`The Fern GitHub App is not installed on ${typeof t?.content?.repositoryName=="string"?t.content.repositoryName:"the target repository"}. Please install it (https://github.com/apps/fern-api) and try again.`}function sRm(e){if(e?.content?.reason==="status-code"){let t=e.content.body;switch(t?.error){case"IllegalApiNameError":return Kr.remoteGen.createJobV3.Error.illegalApiNameError();case"IllegalApiVersionError":return Kr.remoteGen.createJobV3.Error.illegalApiVersionError(t.content);case"GeneratorsDoNotExistError":return Kr.remoteGen.createJobV3.Error.generatorsDoNotExistError(t.content);case"CannotPublishToNpmScope":return Kr.remoteGen.createJobV3.Error.cannotPublishToNpmScope(t.content);case"CannotPublishToMavenScope":return Kr.remoteGen.createJobV3.Error.cannotPublishToMavenGroup(t.content);case"CannotPublishPypiPackage":return Kr.remoteGen.createJobV3.Error.cannotPublishPypiPackage(t.content);case"InsufficientPermissions":return Kr.remoteGen.createJobV3.Error.insufficientPermissions(t.content);case"OrgNotConfiguredForWhitelabel":return Kr.remoteGen.createJobV3.Error.orgNotConfiguredForWhitelabel(t.content);case"BranchDoesNotExist":return Kr.remoteGen.createJobV3.Error.branchDoesNotExist(t.content)}}return e}function aRm({outputMode:e,generatorInvocation:t,absolutePathToPreview:r,shouldLogS3Url:n}){return e.type==="downloadFiles"||t.absolutePathToLocalSnippets!=null||r!=null||n}var Ldu=npe();var cRm=3;function zdu({job:e,taskId:t,taskHandler:r,context:n}){let i=0,o=async()=>{let s=await Ldu.remoteGen.getJobStatus(e.jobId);if(s.ok)return s.body[t];n.logger.debug("Failed to get job status.",JSON.stringify(s.error.content))};return new Promise((s,a)=>{c();async function c(){try{let u=await o();if(u==null)i++,i===cRm&&n.failAndThrow(`Failed to get job status after ${i} attempts.`,void 0,{code:Q.Code.NetworkError}),setTimeout(c,2e3+1e3*i);else{i=0;let l=await r.processUpdate(u);r.isFinished?s(l):setTimeout(c,2e3)}}catch(u){a(u)}}})}Ut();rr();Vw();var M$n=require("fs"),pM=require("fs/promises"),O4e=Se(require("path"),1),TUo=require("stream/promises");var j$n=Se(Vdu(),1);function Pde(e,t,{target:r="stdout",...n}={}){return j$n.default[r]?V9.link(e,t):n.fallback===!1?e:typeof n.fallback=="function"?n.fallback(e,t):`${e} (\u200B${t}\u200B)`}Pde.isSupported=j$n.default.stdout;Pde.stderr=(e,t,r={})=>Pde(e,t,{target:"stderr",...r});Pde.stderr.isSupported=j$n.default.stderr;var L$n=Se(bw(),1),qdu=Se(o$n(),1);var Q$n=class{context;generatorInvocation;absolutePathToPreview;lengthOfLastLogs=0;constructor({interactiveTaskContext:t,generatorInvocation:r,absolutePathToPreview:n}){this.context=t,this.generatorInvocation=r,this.absolutePathToPreview=n}async processUpdate(t){t==null&&this.context.failAndThrow("Task is missing on job status",void 0,{code:Q.Code.InternalError});let r=t.packages.map(i=>i.coordinate._visit({npm:o=>`${o.name}@${o.version}`,maven:o=>`${o.group}:${o.artifact}:${o.version}`,pypi:o=>`${o.name} ${o.version}`,ruby:o=>`${o.name}:${o.version}`,nuget:o=>`${o.name} ${o.version}`,crates:o=>`${o.name} ${o.version}`,_other:()=>"<unknown package>"}));t.packages.length>0&&this.#n==null&&(this.#n=t.packages[0]?.coordinate._visit({npm:i=>i.version,maven:i=>i.version,pypi:i=>i.version,ruby:i=>i.version,nuget:i=>i.version,crates:i=>i.version,_other:()=>{}})),this.#i==null&&(this.#i=Adu(t.packages)),this.absolutePathToPreview==null&&this.context.setSubtitle(r.length>0?r.map(i=>`\u25E6 ${i}`).join(`
|
|
3777
|
-
`):void 0);for(let i of t.logs.slice(this.lengthOfLastLogs))this.context.logger.log(mRm(i.level),i.message),this.#n==null&&(this.#n=pRm(i.message)??this.#n);this.lengthOfLastLogs=t.logs.length;let n=i=>{this.context.logger.debug(`Generated files. ${Pde("View here",i,{fallback:(o,s)=>`${o}: ${s}`})}`)};return await t.status._visit({notStarted:vt,running:vt,failed:({message:i,s3PreSignedReadUrl:o})=>{o!=null&&n(o),this.context.failAndThrow(i,void 0,{code:Q.Code.ContainerError})},finished:async i=>{if(i.s3PreSignedReadUrlV2!=null){n(i.s3PreSignedReadUrlV2);let o=this.getAbsolutePathToLocalOutput();o!=null&&await fRm({s3PreSignedReadUrl:i.s3PreSignedReadUrlV2,absolutePathToLocalOutput:o,context:this.context})}if(this.absolutePathToPreview==null)for(let o of r)this.context.logger.info(`Published ${o}`);this.#e=!0,this.#t=i.createdSnippets!=null?i.createdSnippets:!1,this.#r=i.snippetsS3PreSignedReadUrl,this.#o=i.pullRequestUrl,this.#s=i.noChangesDetected,i.actualVersion!=null&&(this.#n=i.actualVersion)},_other:()=>{this.context.logger.warn("Received unknown update type: "+t.status.type)}}),this.#e?{createdSnippets:this.#t,snippetsS3PreSignedReadUrl:this.#r,actualVersion:this.#n,pullRequestUrl:this.#o,noChangesDetected:this.#s,publishTarget:this.#i}:void 0}getAbsolutePathToLocalOutput(){return this.absolutePathToPreview!=null?nt(this.absolutePathToPreview,Fe.of(O4e.default.basename(this.generatorInvocation.name))):this.generatorInvocation.absolutePathToLocalOutput}#e=!1;get isFinished(){return this.#e}#t=!1;get createdSnippets(){return this.#t}#r=void 0;get snippetsS3PreSignedReadUrl(){return this.#r}#n=void 0;get actualVersion(){return this.#n}#i=void 0;get publishTarget(){return this.#i}#o=void 0;get pullRequestUrl(){return this.#o}#s=void 0;get noChangesDetected(){return this.#s}},lRm=/Tagging release (v?\d+\.\d+\.\d+(?:-[\w.-]+)?)/;function pRm(e){let t=e.match(lRm);if(t?.[1]!=null)return t[1].replace(/^v/,"")}async function fRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){try{let n=await hRm(t),i=await gRm(t);n&&i?await ARm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):n&&!i?await yRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):await dRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(we.green(`Downloaded to ${t}`))}catch(n){r.failAndThrow("Failed to download files",n,{code:Q.Code.NetworkError})}}async function dRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await Ny.get(e,{responseType:"stream"}),n=await L$n.default.dir({prefix:"fern",unsafeCleanup:!0}),i=O4e.default.join(n.path,"output.zip");await(0,TUo.pipeline)(r.data,(0,M$n.createWriteStream)(i)),await SUo(t),await(0,pM.mkdir)(t,{recursive:!0}),await Hdu(i,t)}async function SUo(e){await ar(e)&&(await Gdu(e),await(0,pM.rm)(e,{recursive:!0,force:!0}))}async function Gdu(e){try{let t=await(0,pM.readdir)(e,{withFileTypes:!0});for(let r of t){let n=Yt.of(O4e.default.join(e,r.name));r.isDirectory()&&await Gdu(n);try{await(0,pM.chmod)(n,493)}catch{}}await(0,pM.chmod)(e,493)}catch{}}function mRm(e){switch(e){case"DEBUG":return _n.Debug;case"INFO":return _n.Info;case"WARN":return _n.Warn;case"ERROR":return _n.Error;default:return _n.Info}}async function hRm(e){let t=nt(e,Fe.of(WP));return await ar(t)}async function gRm(e){let t=nt(e,Fe.of(".git"));return await ar(t)}async function OH(e,t,r){return(await Fl(r.logger,"git",e,{cwd:t,doNotPipeOutput:!0})).stdout}async function ARm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=nt(t,Fe.of(WP)),i=await iye({absolutePathToFernignore:n});await OH(["rm","-rf","."],t,r),await Wdu({s3PreSignedReadUrl:e,outputPath:t}),await OH(["add","."],t,r),await OH(["reset","--",...i],t,r),await OH(["restore","."],t,r)}async function yRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Yt.of((await L$n.default.dir({})).path),i=nt(t,Fe.of(WP)),o=await iye({absolutePathToFernignore:i});await(0,pM.cp)(t,n,{recursive:!0}),await OH(["init"],n,r),await OH(["add","."],n,r),await OH(["-c","user.name=fern","-c","user.email=hey@buildwithfern.com","-c","commit.gpgsign=false","commit","--allow-empty","--no-verify","-m","init"],n,r),await OH(["rm","-rf","."],n,r),await Wdu({s3PreSignedReadUrl:e,outputPath:n}),await OH(["add","."],n,r),await OH(["reset","--",...o],n,r),await OH(["restore","."],n,r),await SUo(nt(n,Fe.of(".git"))),await SUo(t),await(0,pM.cp)(n,t,{recursive:!0})}async function Wdu({s3PreSignedReadUrl:e,outputPath:t}){let r=await Ny.get(e,{responseType:"stream"}),n=await L$n.default.dir({prefix:"fern",unsafeCleanup:!0}),i=O4e.default.join(n.path,"output.zip");await(0,TUo.pipeline)(r.data,(0,M$n.createWriteStream)(i)),await Hdu(i,t)}async function Hdu(e,t){return new Promise((r,n)=>{qdu.default.open(e,{lazyEntries:!0},(i,o)=>{if(i||!o){n(i??new Error("Failed to open zip file"));return}o.on("error",n),o.on("end",r),o.on("entry",s=>{let a=O4e.default.join(t,s.fileName);if(s.fileName.endsWith("/")){(0,pM.mkdir)(a,{recursive:!0}).then(()=>o.readEntry()).catch(n);return}(0,pM.mkdir)(O4e.default.dirname(a),{recursive:!0}).then(()=>{o.openReadStream(s,(c,u)=>{if(c||!u){n(c??new Error("Failed to open read stream"));return}u.pipe((0,M$n.createWriteStream)(a)).on("finish",()=>o.readEntry()).on("error",n)})}).catch(n)}),o.readEntry()})})}rr();Vw();var z$n=require("fs/promises"),Kdu=Se(bw(),1),bRm="proto.zip",j7t=class{sourceTypes;context;sources;constructor(t,r){this.context=t,this.sources=Object.fromEntries(r.map(n=>[n.id,n])),this.sourceTypes=new Set(Object.values(this.sources).map(n=>n.type))}async uploadSources(t){for(let[r,n]of Object.entries(t)){let i=this.getSourceOrThrow(r);await this.uploadSource(i,n.uploadUrl)}return this.convertFdrSourceUploadsToSourceConfig(t)}async uploadSource(t,r){let n=await this.getUploadCommand(t),i=await(0,z$n.readFile)(n.absoluteFilePath),o=await fetch(r,{method:"PUT",body:i,headers:{"Content-Type":"application/octet-stream"}});await n.cleanup(),o.ok||this.context.failAndThrow(`Failed to upload source file: ${t.absoluteFilePath}. Status: ${o.status}, ${o.statusText}`,void 0,{code:Q.Code.NetworkError})}async getUploadCommand(t){if(t.type==="protobuf"){let r=await this.zipSource(t.absoluteFilePath);return{absoluteFilePath:r,cleanup:async()=>{this.context.logger.debug(`Removing ${r}`),await(0,z$n.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await Kdu.default.dir(),n=nt(Yt.of(r.path),Fe.of(bRm));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Fl(this.context.logger,"zip",["-r",n,"."],{cwd:t,doNotPipeOutput:!0}),n}convertFdrSourceUploadsToSourceConfig(t){let r=[];for(let[n,i]of Object.entries(t))switch(this.getSourceOrThrow(n).type){case"protobuf":r.push(Sj.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(Sj.openapi());continue;case"asyncapi":continue}return{sources:r}}getSourceOrThrow(t){let r=this.sources[t];return r==null&&this.context.failAndThrow(`Internal error; server responded with source id "${t}" which does not exist in the workspace.`,void 0,{code:Q.Code.InternalError}),r}};async function Ydu({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,readme:A,fernignorePath:b,skipFernignore:I,dynamicIrOnly:x,retryRateLimited:C,requireEnvVars:w,automationMode:B,autoMerge:O,skipIfNoDiff:N,loginCommand:P}){let U=tk({token:c.value}),Z=await $Lt("https://registry.buildwithfern.com/health",n.logger),re=Qn.getPackageName({generatorInvocation:i}),me=f??d!=null,be=ye=>Ey(ye,{onError:ue=>{!me&&w&&n.failAndThrow(void 0,ue,{code:Q.Code.EnvironmentError})}},{substituteAsEmpty:me}),ce=be(i),he=S4e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:ce}),je=o??await iDt({packageName:re,generatorInvocation:i});o!=null&&(me?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await nmr({version:o,packageName:re,generatorInvocation:i,context:n}));let Me=Hg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:A,packageName:re,version:je,context:n,sourceResolver:new Mh(n,r),dynamicGeneratorConfig:he,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:UJ(),originGitCommitIsDirty:_J(),invokedBy:LJ(),requestedVersion:o,ciProvider:zJ()}}),oe=Qf({token:c.value});if(!Z){let ye=await oe.organization.get(e.organization);ye.ok&&(ye.body.isWhitelabled&&(Me.readmeConfig==null&&(Me.readmeConfig=IRm),Me.readmeConfig.whiteLabel=!0),Me.selfHosted=ye.body.selfHostedSdKs)}let ae=r.getSources(),Ce,ve,ke=cN({ir:Me,snippetsConfig:{typescriptSdk:void 0,pythonSdk:void 0,javaSdk:void 0,rubySdk:void 0,goSdk:void 0,csharpSdk:void 0,phpSdk:void 0,swiftSdk:void 0,rustSdk:void 0},context:n});try{let ye=await U.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Ur(Me.apiName)),definition:ke,sources:ae.length>0?vRm(ae):void 0});Ce=ye.apiDefinitionId,ve=ye.sources??void 0}catch(ye){new j7t(n,ae).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(ye)}`)}let qe=new j7t(n,ae);if(ve==null&&qe.sourceTypes.has("protobuf")&&n.failAndThrow("Did not successfully upload Protobuf source files.",void 0,{code:Q.Code.NetworkError}),ve!=null){n.logger.debug("Uploading source files ...");let ye=await qe.uploadSources(ve);n.logger.debug("Setting IR source configuration ..."),Me.sourceConfig=ye}if(x){if(n.logger.info("Dynamic IR only mode: skipping SDK generation and uploading dynamic IR only"),o==null){n.failAndThrow("Version is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}if(i.language==null){n.failAndThrow("Language is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}if(re==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}try{await Jdu({fdr:U,organization:t,version:o,language:i.language,packageName:re,ir:Me,smartCasing:i.smartCasing,dynamicGeneratorConfig:he,context:n})}catch(ye){n.failAndThrow(`Failed to upload dynamic IR: ${ni(ye)}`,void 0,{code:Q.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let pt=await Mdu({projectConfig:e,workspace:r,organization:t,generatorInvocation:ce,context:n,version:je,intermediateRepresentation:{...Me,fdrApiDefinitionId:Ce,publishConfig:ERm({generatorInvocation:ce})},shouldLogS3Url:a,token:c,whitelabel:u!=null?be(u):void 0,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:h,fernignorePath:b,skipFernignore:I,retryRateLimited:C,automationMode:B,autoMerge:O,skipIfNoDiff:N,loginCommand:P});n.logger.debug(`Job ID: ${pt.jobId}`);let it=pt.taskIds[0];if(it==null){n.failAndThrow("Did not receive a task ID.",void 0,{code:Q.Code.NetworkError});return}n.logger.debug(`Task ID: ${it}`);let ut=new Q$n({job:pt,taskId:it,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d}),Tt=await zdu({job:pt,taskHandler:ut,taskId:it,context:n});if(Tt!=null&&Tt.actualVersion==null){let ye=CRm(je);ye!=null&&(Tt={...Tt,actualVersion:ye})}let qt=Tt?.actualVersion??je;if(Tt!=null&&qt!=null&&i.language!=null&&re!=null&&!me)try{await Jdu({fdr:U,organization:t,version:qt,language:i.language,packageName:re,ir:Me,smartCasing:i.smartCasing,dynamicGeneratorConfig:he,context:n})}catch(ye){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${ni(ye)}`)}return Tt}function ERm({generatorInvocation:e}){return e.outputMode._visit({downloadFiles:()=>{},github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:t=>t._visit({mavenOverride:()=>{},pypiOverride:()=>{},nugetOverride:()=>{},npmOverride:()=>{},rubyGemsOverride:()=>{},cratesOverride:()=>{},postman:r=>{let n;return e.raw?.output?.location==="postman"&&(n=e.raw.output?.["collection-id"]),ir.PublishingConfig.direct({target:ir.PublishTarget.postman({apiKey:r.apiKey,workspaceId:r.workspaceId,collectionId:n})})},_other:()=>{}}),_other:()=>{}})}function vRm(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var IRm={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};async function Jdu({fdr:e,organization:t,version:r,language:n,packageName:i,ir:o,smartCasing:s,dynamicGeneratorConfig:a,context:c}){c.logger.debug(`Uploading dynamic IR for ${n} SDK...`);let u;try{u=await e.api.register.getSdkDynamicIrUploadUrls({orgId:fn.OrgId(t),apiId:"",irVersions:[]})}catch(m){c.logger.warn(`Failed to get dynamic IR upload URLs: ${m}`);return}let l=u.uploadUrls[n]?.uploadUrl;if(l==null){c.logger.warn(`No upload URL returned for ${n}`);return}let p=iMe({ir:o,disableExamples:!0,smartCasing:s,generationLanguage:n,generatorConfig:a}),d=JSON.stringify(p),f=await fetch(l,{method:"PUT",body:d,headers:{"Content-Type":"application/octet-stream","Content-Length":d.length.toString()}});f.ok?c.logger.debug(`Uploaded dynamic IR for ${n}:${i} (${r})`):c.logger.warn(`Failed to upload dynamic IR for ${n}: ${f.status}`)}function CRm(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function iPe({projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:h,skipFernignore:A,dynamicIrOnly:b,validateWorkspace:I,retryRateLimited:x,requireEnvVars:C,automationMode:w,autoMerge:B,skipIfNoDiff:O,automation:N,occurrenceTracker:P,loginCommand:U}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let Y=[],Z=P??new C4e;P==null&&Z.recordOccurrences(i.generators);let re=r.generatorsConfiguration?.absolutePathToConfiguration,me=await Promise.all(i.generators.map(be=>n.runInteractiveTask({name:be.name},ce=>xRm({generatorInvocation:be,interactiveTaskContext:ce,projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:h,skipFernignore:A,dynamicIrOnly:b,validateWorkspace:I,retryRateLimited:x,requireEnvVars:C,automationMode:w,autoMerge:B,skipIfNoDiff:O,automation:N,generatorsYmlAbsolutePath:re,occurrenceTracker:Z,loginCommand:U,onSnippetsProduced:he=>Y.push(he)}))));if(N==null&&me.some(be=>!be))throw new bu;return{snippetsProducedBy:Y}}async function xRm({generatorInvocation:e,interactiveTaskContext:t,projectConfig:r,organization:n,workspace:i,context:o,generatorGroup:s,version:a,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,mode:A,fernignorePath:b,skipFernignore:I,dynamicIrOnly:x,validateWorkspace:C,retryRateLimited:w,requireEnvVars:B,automationMode:O,autoMerge:N,skipIfNoDiff:P,automation:U,generatorsYmlAbsolutePath:Y,occurrenceTracker:Z,loginCommand:re,onSnippetsProduced:me}){let be=Date.now();try{let ce=yYe(e),he=await i.toFernWorkspace({context:o},ce,e.apiOverride?.specs);C&&await BH({workspace:he,context:o,logWarnings:!1,ossWorkspace:i instanceof Rd?i:void 0});let je=I?void 0:b??await Rdu({generatorInvocation:e,context:t}),Me=await Ydu({projectConfig:r,organization:n,workspace:he,interactiveTaskContext:t,generatorInvocation:{...e,outputMode:e.outputMode._visit({downloadFiles:()=>e.outputMode,github:oe=>Kr.OutputMode.github({...oe,makePr:A==="pull-request"}),githubV2:oe=>A==="pull-request"?Kr.OutputMode.githubV2(Kr.GithubOutputModeV2.pullRequest(oe)):e.outputMode,publish:()=>e.outputMode,publishV2:()=>e.outputMode,_other:()=>e.outputMode})},version:a,audiences:s.audiences,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,readme:e.readme,irVersionOverride:e.irVersionOverride,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,fernignorePath:je,skipFernignore:I,dynamicIrOnly:x,retryRateLimited:w,requireEnvVars:B,automationMode:O,autoMerge:N,skipIfNoDiff:P,loginCommand:re});if(Me?.createdSnippets&&(me(e),e.absolutePathToLocalSnippets!=null&&Me.snippetsS3PreSignedReadUrl!=null&&await Ddu({snippetsS3PreSignedReadUrl:Me.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:t})),U!=null){let oe=Y!=null?await w4e(Y,e.name,Z.lookup(e)):void 0;U.recorder.recordSuccess({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,version:Me?.actualVersion??null,durationMs:Date.now()-be,pullRequestUrl:Me?.pullRequestUrl,noChangesDetected:Me?.noChangesDetected,publishTarget:Me?.publishTarget,outputRepoUrl:x4e(e),generatorsYmlAbsolutePath:Y,generatorsYmlLineNumber:oe})}}catch(ce){if(U==null)throw ce;if(ce instanceof bu){let Me=Y!=null?await w4e(Y,e.name,Z.lookup(e)):void 0;throw U.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:t.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-be,outputRepoUrl:x4e(e),generatorsYmlAbsolutePath:Y,generatorsYmlLineNumber:Me}),ce}let he=ni(ce),je=Y!=null?await w4e(Y,e.name,Z.lookup(e)):void 0;U.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:he,durationMs:Date.now()-be,outputRepoUrl:x4e(e),generatorsYmlAbsolutePath:Y,generatorsYmlLineNumber:je}),t.failWithoutThrowing(he)}}Ut();Ut();eg();rr();var Gmu=require("crypto"),L7t=require("fs/promises");no();var YUo=Se(bMe(),1);Ut();var jmu=Se(Nmu(),1);no();var Qmu=require("util"),p2m=(0,Qmu.promisify)(jmu.default);async function Mmu(e,t,r){let n=HBt(e,t),i=[];for(let o of n){let s=await Promise.all(o.map(async a=>{try{let c=await p2m(a);return c==null||c.height==null||c.width==null?void 0:{filePath:a,width:c.width,height:c.height,blurDataUrl:void 0}}catch(c){r.logger.error(`Failed to measure image size for ${a}. ${c?.message}`);return}}));i.push(...s.filter(qa))}return new Map(i.map(o=>[o.filePath,o]))}async function KUo(e,t,r){let n=new Array(t.length),i=new Set;for(let o=0;o<t.length;o++){let s=t[o];if(s===void 0)continue;let a=(async()=>{let c=await r(s,o);n[o]=c})().then(()=>{i.delete(a)});i.add(a),i.size>=e&&await Promise.race(i)}return await Promise.all(i),n}var f2m=10,Lmu=10,Aei=parseInt(process.env.FERN_DOCS_ASSET_HASH_CONCURRENCY??"32",10);function d2m(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}var zbt=class extends Error{constructor(){super("Another docs publish is currently in progress for this domain."),this.name="DocsPublishConflictError"}};async function zmu({fdrOrigin:e,token:t,domain:r,basepath:n}){try{await Ny.post(`${e}/docs-deployment/unlock`,{domain:r,basepath:n},{headers:{Authorization:`Bearer ${t}`}})}catch{}}async function Umu(e){let t=await(0,L7t.readFile)(e);return(0,Gmu.createHash)("sha256").update(new Uint8Array(t)).digest("hex")}function m2m(e){return e.replace(/\.\.\//g,"_dot_dot_/")}async function Wmu({token:e,organization:t,docsWorkspace:r,domain:n,customDomains:i,apiWorkspaces:o,ossWorkspaces:s,context:a,preview:c,previewId:u,editThisPage:l,disableTemplates:p=!1,skipUpload:d=!1,withAiExamples:f=!0,excludeApis:m=!1,targetAudiences:h,docsUrl:A,cliVersion:b,ciSource:I,deployerAuthor:x,loginCommand:C="fern login",multiSource:w=!1}){let B="https://registry.buildwithfern.com";await $Lt(`${B}/health`,a.logger)&&a.logger.debug("Detected air-gapped environment - skipping external FDR service calls");let N={};b!=null&&(N["X-CLI-Version"]=b),I!=null&&(N["X-CI-Source"]=JSON.stringify(I),a.logger.debug(`CI source detected: ${I.type} (${I.repo??"unknown repo"})`)),x?.username!=null&&(N["X-Deployer-Author"]=x.username),x?.email!=null&&(N["X-Deployer-Author-Email"]=x.email);let P=tk({token:e.value,...Object.keys(N).length>0&&{headers:N}}),U={type:"public"};m&&a.logger.debug("Experimental flag 'exclude-apis' is enabled - API references will be excluded from S3 upload");let Y,Z=i[0]??n,re=I2m(n),me=r.config.experimental&&r.config.experimental.dynamicSnippets===!1;r.config.experimental?.basepathAware===!0&&a.logger.warn("experimental.basepath-aware is deprecated. Use 'multi-source: true' on the instance instead.");let be=w||r.config.experimental?.basepathAware===!0;be&&a.logger.debug("Basepath-aware mode is enabled - using basepath-aware S3 key format");let ce=!1,he=()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to early exit..."),zmu({fdrOrigin:B,token:e.value,domain:n,basepath:re}))},je=async()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to signal..."),await zmu({fdrOrigin:B,token:e.value,domain:n,basepath:re})),process.exit(1)};process.on("SIGINT",je),process.on("SIGTERM",je);try{let Me=await z5t({docsWorkspace:r,organization:t,fdrOrigin:B,token:e.value,taskContext:a}),oe=new fz({domain:n,docsWorkspace:Me,ossWorkspaces:s,apiWorkspaces:o,taskContext:a,editThisPage:l,uploadFiles:async rt=>{let xe=rt.map(T=>({...T,sanitizedPath:m2m(T.relativeFilePath)})),Ne=new Map(xe.map(T=>[T.absoluteFilePath,T])),Ot=new Map(xe.map(T=>[T.sanitizedPath,T.absoluteFilePath])),Ge=xe.map(T=>({...T,mediaType:YUo.lookup(T.absoluteFilePath)})).filter(T=>T.mediaType!==!1).filter(T=>rd.parse(T.mediaType)?.isImage()??!1).map(T=>T.absoluteFilePath),er=await Mmu(Ge,f2m,a);a.logger.debug(`Hashing ${er.size} image files with concurrency ${Aei}...`);let jt=performance.now(),sr=Array.from(er.values()),nr=(await KUo(Aei,sr,async T=>{let _=Ne.get(T.filePath);if(_==null)return null;let $=_.sanitizedPath;return{filePath:fn.docs.v1.write.FilePath(_Ot($)),width:T.width,height:T.height,blurDataUrl:T.blurDataUrl,alt:void 0,fileHash:await Umu(_.absoluteFilePath)}})).filter(T=>T!=null),Oi=performance.now()-jt;a.logger.debug(`Hashed ${nr.length} images in ${Oi.toFixed(0)}ms`);let g=xe.filter(({absoluteFilePath:T})=>!er.has(T));a.logger.debug(`Hashing ${g.length} non-image files with concurrency ${Aei}...`);let y=performance.now(),E=await KUo(Aei,g,async T=>({path:fn.docs.v1.write.FilePath(_Ot(T.sanitizedPath)),fileHash:await Umu(T.absoluteFilePath)})),S=performance.now()-y;if(a.logger.debug(`Hashed ${E.length} non-image files in ${S.toFixed(0)}ms`),c){let T;try{T=await P.docs.v2.write.startDocsPreviewRegister({orgId:fn.OrgId(t),authConfig:U,filepaths:E,images:nr,basePath:re,previewId:u!=null?d2m(u):void 0})}catch(_){return await qmu(_,a,t,n,C)}if(Z=T.previewUrl,Y=T.docsRegistrationId,a.logger.debug(`Received preview registration ID: ${Y}`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs preview");else{let _=new Set(T.skippedFiles||[]),$=Object.fromEntries(Object.entries(T.uploadUrls).filter(([ft])=>!_.has(ft))),We=Object.keys($).length,Ct=_.size;We>0?(a.logger.debug(`Uploading ${We} files (${Ct} skipped)...`),await _mu($,r.absoluteFilePath,a,Lmu,Ot)):a.logger.debug(`No files to upload (all ${Ct} up to date)`)}return Vmu(T.uploadUrls,r.absoluteFilePath,Ot)}else{let T;try{T=await P.docs.v2.write.startDocsRegister({domain:n,customDomains:i,authConfig:U,orgId:fn.OrgId(t),filepaths:E,images:nr,...be&&{basepathAware:!0}})}catch($){return qmu($,a,t,n,C)}Y=T.docsRegistrationId,ce=!0,a.logger.debug(`Received production registration ID: ${Y}`);let _=T.skippedFiles?.length||0;if(_>0&&a.logger.info(`Skipped ${_} unchanged file${_===1?"":"s"} (already uploaded)`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs");else{let $=new Set(T.skippedFiles||[]),We=Object.fromEntries(Object.entries(T.uploadUrls).filter(([ft])=>!$.has(ft))),Ct=Object.keys(We).length;Ct>0?(a.logger.info(`\u2191 Uploading ${Ct} files...`),await _mu(We,r.absoluteFilePath,a,Lmu,Ot)):a.logger.info("No files to upload (all up to date)")}return Vmu(T.uploadUrls,r.absoluteFilePath,Ot)}},registerApi:async({ir:rt,snippetsConfig:xe,playgroundConfig:Ne,apiName:Ot,workspace:wt,graphqlOperations:Ge,graphqlTypes:er})=>{let jt=cN({ir:rt,snippetsConfig:xe,playgroundConfig:Ne,graphqlOperations:Ge,graphqlTypes:er,context:a,apiNameOverride:Ot}),sr=O2m(f,r.config.aiExamples?.style??r.config.experimental?.aiExampleStyleInstructions);if(sr){let y=wt?.getSources()?.filter(E=>E.type==="openapi").map(E=>({absoluteFilePath:E.absoluteFilePath,absoluteFilePathToOverrides:E.absoluteFilePathToOverrides}));y==null||y.length===0?a.logger.debug("Skipping AI example enhancement: no OpenAPI source file paths available"):jt=await byt(jt,sr,a,e,t,y)}let zn,nr=new Set;if(Object.keys(xe).length===0)a.logger.debug("No snippets configuration defined, skipping snippet generation...");else if(!me){let g=await C2m({fdr:P,workspace:wt,organization:t,context:a,snippetsConfig:xe});g&&Object.keys(g).length>0&&(zn=g,nr=new Set(Object.keys(g)),a.logger.debug(`Using existing SDK dynamic IRs for: ${Object.keys(g).join(", ")}`));let y=await S2m({workspace:wt,organization:t,context:a,snippetsConfig:xe,skipLanguages:nr});y&&(zn={...zn,...y})}let Oi;try{Oi=await P.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Ot??Ur(rt.apiName)),definition:jt,dynamicIRs:zn})}catch(g){let y=Jmu(g);return a.logger.error(`FDR registerApiDefinition failed. Error details:
|
|
3777
|
+
`):void 0);for(let i of t.logs.slice(this.lengthOfLastLogs))this.context.logger.log(mRm(i.level),i.message),this.#n==null&&(this.#n=pRm(i.message)??this.#n);this.lengthOfLastLogs=t.logs.length;let n=i=>{this.context.logger.debug(`Generated files. ${Pde("View here",i,{fallback:(o,s)=>`${o}: ${s}`})}`)};return await t.status._visit({notStarted:vt,running:vt,failed:({message:i,s3PreSignedReadUrl:o})=>{o!=null&&n(o),this.context.failAndThrow(i,void 0,{code:Q.Code.ContainerError})},finished:async i=>{if(i.s3PreSignedReadUrlV2!=null){n(i.s3PreSignedReadUrlV2);let o=this.getAbsolutePathToLocalOutput();o!=null&&await fRm({s3PreSignedReadUrl:i.s3PreSignedReadUrlV2,absolutePathToLocalOutput:o,context:this.context})}if(this.absolutePathToPreview==null)for(let o of r)this.context.logger.info(`Published ${o}`);this.#e=!0,this.#t=i.createdSnippets!=null?i.createdSnippets:!1,this.#r=i.snippetsS3PreSignedReadUrl,this.#o=i.pullRequestUrl,this.#s=i.noChangesDetected,i.actualVersion!=null&&(this.#n=i.actualVersion)},_other:()=>{this.context.logger.warn("Received unknown update type: "+t.status.type)}}),this.#e?{createdSnippets:this.#t,snippetsS3PreSignedReadUrl:this.#r,actualVersion:this.#n,pullRequestUrl:this.#o,noChangesDetected:this.#s,publishTarget:this.#i}:void 0}getAbsolutePathToLocalOutput(){return this.absolutePathToPreview!=null?nt(this.absolutePathToPreview,Fe.of(O4e.default.basename(this.generatorInvocation.name))):this.generatorInvocation.absolutePathToLocalOutput}#e=!1;get isFinished(){return this.#e}#t=!1;get createdSnippets(){return this.#t}#r=void 0;get snippetsS3PreSignedReadUrl(){return this.#r}#n=void 0;get actualVersion(){return this.#n}#i=void 0;get publishTarget(){return this.#i}#o=void 0;get pullRequestUrl(){return this.#o}#s=void 0;get noChangesDetected(){return this.#s}},lRm=/Tagging release (v?\d+\.\d+\.\d+(?:-[\w.-]+)?)/;function pRm(e){let t=e.match(lRm);if(t?.[1]!=null)return t[1].replace(/^v/,"")}async function fRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){try{let n=await hRm(t),i=await gRm(t);n&&i?await ARm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):n&&!i?await yRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):await dRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(we.green(`Downloaded to ${t}`))}catch(n){r.failAndThrow("Failed to download files",n,{code:Q.Code.NetworkError})}}async function dRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await Ny.get(e,{responseType:"stream"}),n=await L$n.default.dir({prefix:"fern",unsafeCleanup:!0}),i=O4e.default.join(n.path,"output.zip");await(0,TUo.pipeline)(r.data,(0,M$n.createWriteStream)(i)),await SUo(t),await(0,pM.mkdir)(t,{recursive:!0}),await Hdu(i,t)}async function SUo(e){await ar(e)&&(await Gdu(e),await(0,pM.rm)(e,{recursive:!0,force:!0}))}async function Gdu(e){try{let t=await(0,pM.readdir)(e,{withFileTypes:!0});for(let r of t){let n=Yt.of(O4e.default.join(e,r.name));r.isDirectory()&&await Gdu(n);try{await(0,pM.chmod)(n,493)}catch{}}await(0,pM.chmod)(e,493)}catch{}}function mRm(e){switch(e){case"DEBUG":return _n.Debug;case"INFO":return _n.Info;case"WARN":return _n.Warn;case"ERROR":return _n.Error;default:return _n.Info}}async function hRm(e){let t=nt(e,Fe.of(WP));return await ar(t)}async function gRm(e){let t=nt(e,Fe.of(".git"));return await ar(t)}async function OH(e,t,r){return(await Fl(r.logger,"git",e,{cwd:t,doNotPipeOutput:!0})).stdout}async function ARm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=nt(t,Fe.of(WP)),i=await iye({absolutePathToFernignore:n});await OH(["rm","-rf","."],t,r),await Wdu({s3PreSignedReadUrl:e,outputPath:t}),await OH(["add","."],t,r),await OH(["reset","--",...i],t,r),await OH(["restore","."],t,r)}async function yRm({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Yt.of((await L$n.default.dir({})).path),i=nt(t,Fe.of(WP)),o=await iye({absolutePathToFernignore:i});await(0,pM.cp)(t,n,{recursive:!0}),await OH(["init"],n,r),await OH(["add","."],n,r),await OH(["-c","user.name=fern","-c","user.email=hey@buildwithfern.com","-c","commit.gpgsign=false","commit","--allow-empty","--no-verify","-m","init"],n,r),await OH(["rm","-rf","."],n,r),await Wdu({s3PreSignedReadUrl:e,outputPath:n}),await OH(["add","."],n,r),await OH(["reset","--",...o],n,r),await OH(["restore","."],n,r),await SUo(nt(n,Fe.of(".git"))),await SUo(t),await(0,pM.cp)(n,t,{recursive:!0})}async function Wdu({s3PreSignedReadUrl:e,outputPath:t}){let r=await Ny.get(e,{responseType:"stream"}),n=await L$n.default.dir({prefix:"fern",unsafeCleanup:!0}),i=O4e.default.join(n.path,"output.zip");await(0,TUo.pipeline)(r.data,(0,M$n.createWriteStream)(i)),await Hdu(i,t)}async function Hdu(e,t){return new Promise((r,n)=>{qdu.default.open(e,{lazyEntries:!0},(i,o)=>{if(i||!o){n(i??new Error("Failed to open zip file"));return}o.on("error",n),o.on("end",r),o.on("entry",s=>{let a=O4e.default.join(t,s.fileName);if(s.fileName.endsWith("/")){(0,pM.mkdir)(a,{recursive:!0}).then(()=>o.readEntry()).catch(n);return}(0,pM.mkdir)(O4e.default.dirname(a),{recursive:!0}).then(()=>{o.openReadStream(s,(c,u)=>{if(c||!u){n(c??new Error("Failed to open read stream"));return}u.pipe((0,M$n.createWriteStream)(a)).on("finish",()=>o.readEntry()).on("error",n)})}).catch(n)}),o.readEntry()})})}rr();Vw();var z$n=require("fs/promises"),Kdu=Se(bw(),1),bRm="proto.zip",j7t=class{sourceTypes;context;sources;constructor(t,r){this.context=t,this.sources=Object.fromEntries(r.map(n=>[n.id,n])),this.sourceTypes=new Set(Object.values(this.sources).map(n=>n.type))}async uploadSources(t){for(let[r,n]of Object.entries(t)){let i=this.getSourceOrThrow(r);await this.uploadSource(i,n.uploadUrl)}return this.convertFdrSourceUploadsToSourceConfig(t)}async uploadSource(t,r){let n=await this.getUploadCommand(t),i=await(0,z$n.readFile)(n.absoluteFilePath),o=await fetch(r,{method:"PUT",body:i,headers:{"Content-Type":"application/octet-stream"}});await n.cleanup(),o.ok||this.context.failAndThrow(`Failed to upload source file: ${t.absoluteFilePath}. Status: ${o.status}, ${o.statusText}`,void 0,{code:Q.Code.NetworkError})}async getUploadCommand(t){if(t.type==="protobuf"){let r=await this.zipSource(t.absoluteFilePath);return{absoluteFilePath:r,cleanup:async()=>{this.context.logger.debug(`Removing ${r}`),await(0,z$n.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await Kdu.default.dir(),n=nt(Yt.of(r.path),Fe.of(bRm));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Fl(this.context.logger,"zip",["-r",n,"."],{cwd:t,doNotPipeOutput:!0}),n}convertFdrSourceUploadsToSourceConfig(t){let r=[];for(let[n,i]of Object.entries(t))switch(this.getSourceOrThrow(n).type){case"protobuf":r.push(Sj.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(Sj.openapi());continue;case"asyncapi":continue}return{sources:r}}getSourceOrThrow(t){let r=this.sources[t];return r==null&&this.context.failAndThrow(`Internal error; server responded with source id "${t}" which does not exist in the workspace.`,void 0,{code:Q.Code.InternalError}),r}};async function Ydu({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,readme:A,fernignorePath:b,skipFernignore:I,dynamicIrOnly:x,retryRateLimited:C,requireEnvVars:w,automationMode:B,autoMerge:O,skipIfNoDiff:N,loginCommand:P}){let U=tk({token:c.value}),Z=await $Lt("https://registry.buildwithfern.com/health",n.logger),re=Qn.getPackageName({generatorInvocation:i}),me=f??d!=null,be=ye=>Ey(ye,{onError:ue=>{!me&&w&&n.failAndThrow(void 0,ue,{code:Q.Code.EnvironmentError})}},{substituteAsEmpty:me}),ce=be(i),he=S4e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:ce}),je=o??await iDt({packageName:re,generatorInvocation:i});o!=null&&(me?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await nmr({version:o,packageName:re,generatorInvocation:i,context:n}));let Me=Hg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:A,packageName:re,version:je,context:n,sourceResolver:new Mh(n,r),dynamicGeneratorConfig:he,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:UJ(),originGitCommitIsDirty:_J(),invokedBy:LJ(),requestedVersion:o,ciProvider:zJ()}}),oe=Qf({token:c.value});if(!Z){let ye=await oe.organization.get(e.organization);ye.ok&&(ye.body.isWhitelabled&&(Me.readmeConfig==null&&(Me.readmeConfig=IRm),Me.readmeConfig.whiteLabel=!0),Me.selfHosted=ye.body.selfHostedSdKs)}let ae=r.getSources(),Ce,ve,ke=cN({ir:Me,snippetsConfig:{typescriptSdk:void 0,pythonSdk:void 0,javaSdk:void 0,rubySdk:void 0,goSdk:void 0,csharpSdk:void 0,phpSdk:void 0,swiftSdk:void 0,rustSdk:void 0},context:n});try{let ye=await U.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Ur(Me.apiName)),definition:ke,sources:ae.length>0?vRm(ae):void 0});Ce=ye.apiDefinitionId,ve=ye.sources??void 0}catch(ye){new j7t(n,ae).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(ye)}`)}let qe=new j7t(n,ae);if(ve==null&&qe.sourceTypes.has("protobuf")&&n.failAndThrow("Did not successfully upload Protobuf source files.",void 0,{code:Q.Code.NetworkError}),ve!=null){n.logger.debug("Uploading source files ...");let ye=await qe.uploadSources(ve);n.logger.debug("Setting IR source configuration ..."),Me.sourceConfig=ye}if(x){if(n.logger.info("Dynamic IR only mode: skipping SDK generation and uploading dynamic IR only"),o==null){n.failAndThrow("Version is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}if(i.language==null){n.failAndThrow("Language is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}if(re==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:Q.Code.ConfigError});return}try{await Jdu({fdr:U,organization:t,version:o,language:i.language,packageName:re,ir:Me,smartCasing:i.smartCasing,dynamicGeneratorConfig:he,context:n})}catch(ye){n.failAndThrow(`Failed to upload dynamic IR: ${ni(ye)}`,void 0,{code:Q.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let pt=await Mdu({projectConfig:e,workspace:r,organization:t,generatorInvocation:ce,context:n,version:je,intermediateRepresentation:{...Me,fdrApiDefinitionId:Ce,publishConfig:ERm({generatorInvocation:ce})},shouldLogS3Url:a,token:c,whitelabel:u!=null?be(u):void 0,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:h,fernignorePath:b,skipFernignore:I,retryRateLimited:C,automationMode:B,autoMerge:O,skipIfNoDiff:N,loginCommand:P});n.logger.debug(`Job ID: ${pt.jobId}`);let it=pt.taskIds[0];if(it==null){n.failAndThrow("Did not receive a task ID.",void 0,{code:Q.Code.NetworkError});return}n.logger.debug(`Task ID: ${it}`);let ut=new Q$n({job:pt,taskId:it,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d}),Tt=await zdu({job:pt,taskHandler:ut,taskId:it,context:n});if(Tt!=null&&Tt.actualVersion==null){let ye=CRm(je);ye!=null&&(Tt={...Tt,actualVersion:ye})}let qt=Tt?.actualVersion??je;if(Tt!=null&&qt!=null&&i.language!=null&&re!=null&&!me)try{await Jdu({fdr:U,organization:t,version:qt,language:i.language,packageName:re,ir:Me,smartCasing:i.smartCasing,dynamicGeneratorConfig:he,context:n})}catch(ye){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${ni(ye)}`)}return Tt}function ERm({generatorInvocation:e}){return e.outputMode._visit({downloadFiles:()=>{},github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:t=>t._visit({mavenOverride:()=>{},pypiOverride:()=>{},nugetOverride:()=>{},npmOverride:()=>{},rubyGemsOverride:()=>{},cratesOverride:()=>{},postman:r=>{let n;return e.raw?.output?.location==="postman"&&(n=e.raw.output?.["collection-id"]),ir.PublishingConfig.direct({target:ir.PublishTarget.postman({apiKey:r.apiKey,workspaceId:r.workspaceId,collectionId:n})})},_other:()=>{}}),_other:()=>{}})}function vRm(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var IRm={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};async function Jdu({fdr:e,organization:t,version:r,language:n,packageName:i,ir:o,smartCasing:s,dynamicGeneratorConfig:a,context:c}){c.logger.debug(`Uploading dynamic IR for ${n} SDK...`);let u;try{u=await e.api.register.getSdkDynamicIrUploadUrls({orgId:fn.OrgId(t),apiId:Ur(o.apiName),irVersions:[n]})}catch(m){c.logger.warn(`Failed to get dynamic IR upload URLs (non-fatal, dynamic snippets may be stale): ${m}`);return}let l=u.uploadUrls[n]?.uploadUrl;if(l==null){c.logger.warn(`No upload URL returned for ${n}`);return}let p=iMe({ir:o,disableExamples:!0,smartCasing:s,generationLanguage:n,generatorConfig:a}),d=JSON.stringify(p),f=await fetch(l,{method:"PUT",body:d,headers:{"Content-Type":"application/octet-stream","Content-Length":d.length.toString()}});f.ok?c.logger.debug(`Uploaded dynamic IR for ${n}:${i} (${r})`):c.logger.warn(`Failed to upload dynamic IR for ${n}: ${f.status}`)}function CRm(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function iPe({projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:h,skipFernignore:A,dynamicIrOnly:b,validateWorkspace:I,retryRateLimited:x,requireEnvVars:C,automationMode:w,autoMerge:B,skipIfNoDiff:O,automation:N,occurrenceTracker:P,loginCommand:U}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let Y=[],Z=P??new C4e;P==null&&Z.recordOccurrences(i.generators);let re=r.generatorsConfiguration?.absolutePathToConfiguration,me=await Promise.all(i.generators.map(be=>n.runInteractiveTask({name:be.name},ce=>xRm({generatorInvocation:be,interactiveTaskContext:ce,projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:h,skipFernignore:A,dynamicIrOnly:b,validateWorkspace:I,retryRateLimited:x,requireEnvVars:C,automationMode:w,autoMerge:B,skipIfNoDiff:O,automation:N,generatorsYmlAbsolutePath:re,occurrenceTracker:Z,loginCommand:U,onSnippetsProduced:he=>Y.push(he)}))));if(N==null&&me.some(be=>!be))throw new bu;return{snippetsProducedBy:Y}}async function xRm({generatorInvocation:e,interactiveTaskContext:t,projectConfig:r,organization:n,workspace:i,context:o,generatorGroup:s,version:a,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,mode:A,fernignorePath:b,skipFernignore:I,dynamicIrOnly:x,validateWorkspace:C,retryRateLimited:w,requireEnvVars:B,automationMode:O,autoMerge:N,skipIfNoDiff:P,automation:U,generatorsYmlAbsolutePath:Y,occurrenceTracker:Z,loginCommand:re,onSnippetsProduced:me}){let be=Date.now();try{let ce=yYe(e),he=await i.toFernWorkspace({context:o},ce,e.apiOverride?.specs);C&&await BH({workspace:he,context:o,logWarnings:!1,ossWorkspace:i instanceof Rd?i:void 0});let je=I?void 0:b??await Rdu({generatorInvocation:e,context:t}),Me=await Ydu({projectConfig:r,organization:n,workspace:he,interactiveTaskContext:t,generatorInvocation:{...e,outputMode:e.outputMode._visit({downloadFiles:()=>e.outputMode,github:oe=>Kr.OutputMode.github({...oe,makePr:A==="pull-request"}),githubV2:oe=>A==="pull-request"?Kr.OutputMode.githubV2(Kr.GithubOutputModeV2.pullRequest(oe)):e.outputMode,publish:()=>e.outputMode,publishV2:()=>e.outputMode,_other:()=>e.outputMode})},version:a,audiences:s.audiences,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,readme:e.readme,irVersionOverride:e.irVersionOverride,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:h,fernignorePath:je,skipFernignore:I,dynamicIrOnly:x,retryRateLimited:w,requireEnvVars:B,automationMode:O,autoMerge:N,skipIfNoDiff:P,loginCommand:re});if(Me?.createdSnippets&&(me(e),e.absolutePathToLocalSnippets!=null&&Me.snippetsS3PreSignedReadUrl!=null&&await Ddu({snippetsS3PreSignedReadUrl:Me.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:t})),U!=null){let oe=Y!=null?await w4e(Y,e.name,Z.lookup(e)):void 0;U.recorder.recordSuccess({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,version:Me?.actualVersion??null,durationMs:Date.now()-be,pullRequestUrl:Me?.pullRequestUrl,noChangesDetected:Me?.noChangesDetected,publishTarget:Me?.publishTarget,outputRepoUrl:x4e(e),generatorsYmlAbsolutePath:Y,generatorsYmlLineNumber:oe})}}catch(ce){if(U==null)throw ce;if(ce instanceof bu){let Me=Y!=null?await w4e(Y,e.name,Z.lookup(e)):void 0;throw U.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:t.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-be,outputRepoUrl:x4e(e),generatorsYmlAbsolutePath:Y,generatorsYmlLineNumber:Me}),ce}let he=ni(ce),je=Y!=null?await w4e(Y,e.name,Z.lookup(e)):void 0;U.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:he,durationMs:Date.now()-be,outputRepoUrl:x4e(e),generatorsYmlAbsolutePath:Y,generatorsYmlLineNumber:je}),t.failWithoutThrowing(he)}}Ut();Ut();eg();rr();var Gmu=require("crypto"),L7t=require("fs/promises");no();var YUo=Se(bMe(),1);Ut();var jmu=Se(Nmu(),1);no();var Qmu=require("util"),p2m=(0,Qmu.promisify)(jmu.default);async function Mmu(e,t,r){let n=HBt(e,t),i=[];for(let o of n){let s=await Promise.all(o.map(async a=>{try{let c=await p2m(a);return c==null||c.height==null||c.width==null?void 0:{filePath:a,width:c.width,height:c.height,blurDataUrl:void 0}}catch(c){r.logger.error(`Failed to measure image size for ${a}. ${c?.message}`);return}}));i.push(...s.filter(qa))}return new Map(i.map(o=>[o.filePath,o]))}async function KUo(e,t,r){let n=new Array(t.length),i=new Set;for(let o=0;o<t.length;o++){let s=t[o];if(s===void 0)continue;let a=(async()=>{let c=await r(s,o);n[o]=c})().then(()=>{i.delete(a)});i.add(a),i.size>=e&&await Promise.race(i)}return await Promise.all(i),n}var f2m=10,Lmu=10,Aei=parseInt(process.env.FERN_DOCS_ASSET_HASH_CONCURRENCY??"32",10);function d2m(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}var zbt=class extends Error{constructor(){super("Another docs publish is currently in progress for this domain."),this.name="DocsPublishConflictError"}};async function zmu({fdrOrigin:e,token:t,domain:r,basepath:n}){try{await Ny.post(`${e}/docs-deployment/unlock`,{domain:r,basepath:n},{headers:{Authorization:`Bearer ${t}`}})}catch{}}async function Umu(e){let t=await(0,L7t.readFile)(e);return(0,Gmu.createHash)("sha256").update(new Uint8Array(t)).digest("hex")}function m2m(e){return e.replace(/\.\.\//g,"_dot_dot_/")}async function Wmu({token:e,organization:t,docsWorkspace:r,domain:n,customDomains:i,apiWorkspaces:o,ossWorkspaces:s,context:a,preview:c,previewId:u,editThisPage:l,disableTemplates:p=!1,skipUpload:d=!1,withAiExamples:f=!0,excludeApis:m=!1,targetAudiences:h,docsUrl:A,cliVersion:b,ciSource:I,deployerAuthor:x,loginCommand:C="fern login",multiSource:w=!1}){let B="https://registry.buildwithfern.com";await $Lt(`${B}/health`,a.logger)&&a.logger.debug("Detected air-gapped environment - skipping external FDR service calls");let N={};b!=null&&(N["X-CLI-Version"]=b),I!=null&&(N["X-CI-Source"]=JSON.stringify(I),a.logger.debug(`CI source detected: ${I.type} (${I.repo??"unknown repo"})`)),x?.username!=null&&(N["X-Deployer-Author"]=x.username),x?.email!=null&&(N["X-Deployer-Author-Email"]=x.email);let P=tk({token:e.value,...Object.keys(N).length>0&&{headers:N}}),U={type:"public"};m&&a.logger.debug("Experimental flag 'exclude-apis' is enabled - API references will be excluded from S3 upload");let Y,Z=i[0]??n,re=I2m(n),me=r.config.experimental&&r.config.experimental.dynamicSnippets===!1;r.config.experimental?.basepathAware===!0&&a.logger.warn("experimental.basepath-aware is deprecated. Use 'multi-source: true' on the instance instead.");let be=w||r.config.experimental?.basepathAware===!0;be&&a.logger.debug("Basepath-aware mode is enabled - using basepath-aware S3 key format");let ce=!1,he=()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to early exit..."),zmu({fdrOrigin:B,token:e.value,domain:n,basepath:re}))},je=async()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to signal..."),await zmu({fdrOrigin:B,token:e.value,domain:n,basepath:re})),process.exit(1)};process.on("SIGINT",je),process.on("SIGTERM",je);try{let Me=await z5t({docsWorkspace:r,organization:t,fdrOrigin:B,token:e.value,taskContext:a}),oe=new fz({domain:n,docsWorkspace:Me,ossWorkspaces:s,apiWorkspaces:o,taskContext:a,editThisPage:l,uploadFiles:async rt=>{let xe=rt.map(T=>({...T,sanitizedPath:m2m(T.relativeFilePath)})),Ne=new Map(xe.map(T=>[T.absoluteFilePath,T])),Ot=new Map(xe.map(T=>[T.sanitizedPath,T.absoluteFilePath])),Ge=xe.map(T=>({...T,mediaType:YUo.lookup(T.absoluteFilePath)})).filter(T=>T.mediaType!==!1).filter(T=>rd.parse(T.mediaType)?.isImage()??!1).map(T=>T.absoluteFilePath),er=await Mmu(Ge,f2m,a);a.logger.debug(`Hashing ${er.size} image files with concurrency ${Aei}...`);let jt=performance.now(),sr=Array.from(er.values()),nr=(await KUo(Aei,sr,async T=>{let _=Ne.get(T.filePath);if(_==null)return null;let $=_.sanitizedPath;return{filePath:fn.docs.v1.write.FilePath(_Ot($)),width:T.width,height:T.height,blurDataUrl:T.blurDataUrl,alt:void 0,fileHash:await Umu(_.absoluteFilePath)}})).filter(T=>T!=null),Oi=performance.now()-jt;a.logger.debug(`Hashed ${nr.length} images in ${Oi.toFixed(0)}ms`);let g=xe.filter(({absoluteFilePath:T})=>!er.has(T));a.logger.debug(`Hashing ${g.length} non-image files with concurrency ${Aei}...`);let y=performance.now(),E=await KUo(Aei,g,async T=>({path:fn.docs.v1.write.FilePath(_Ot(T.sanitizedPath)),fileHash:await Umu(T.absoluteFilePath)})),S=performance.now()-y;if(a.logger.debug(`Hashed ${E.length} non-image files in ${S.toFixed(0)}ms`),c){let T;try{T=await P.docs.v2.write.startDocsPreviewRegister({orgId:fn.OrgId(t),authConfig:U,filepaths:E,images:nr,basePath:re,previewId:u!=null?d2m(u):void 0})}catch(_){return await qmu(_,a,t,n,C)}if(Z=T.previewUrl,Y=T.docsRegistrationId,a.logger.debug(`Received preview registration ID: ${Y}`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs preview");else{let _=new Set(T.skippedFiles||[]),$=Object.fromEntries(Object.entries(T.uploadUrls).filter(([ft])=>!_.has(ft))),We=Object.keys($).length,Ct=_.size;We>0?(a.logger.debug(`Uploading ${We} files (${Ct} skipped)...`),await _mu($,r.absoluteFilePath,a,Lmu,Ot)):a.logger.debug(`No files to upload (all ${Ct} up to date)`)}return Vmu(T.uploadUrls,r.absoluteFilePath,Ot)}else{let T;try{T=await P.docs.v2.write.startDocsRegister({domain:n,customDomains:i,authConfig:U,orgId:fn.OrgId(t),filepaths:E,images:nr,...be&&{basepathAware:!0}})}catch($){return qmu($,a,t,n,C)}Y=T.docsRegistrationId,ce=!0,a.logger.debug(`Received production registration ID: ${Y}`);let _=T.skippedFiles?.length||0;if(_>0&&a.logger.info(`Skipped ${_} unchanged file${_===1?"":"s"} (already uploaded)`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs");else{let $=new Set(T.skippedFiles||[]),We=Object.fromEntries(Object.entries(T.uploadUrls).filter(([ft])=>!$.has(ft))),Ct=Object.keys(We).length;Ct>0?(a.logger.info(`\u2191 Uploading ${Ct} files...`),await _mu(We,r.absoluteFilePath,a,Lmu,Ot)):a.logger.info("No files to upload (all up to date)")}return Vmu(T.uploadUrls,r.absoluteFilePath,Ot)}},registerApi:async({ir:rt,snippetsConfig:xe,playgroundConfig:Ne,apiName:Ot,workspace:wt,graphqlOperations:Ge,graphqlTypes:er})=>{let jt=cN({ir:rt,snippetsConfig:xe,playgroundConfig:Ne,graphqlOperations:Ge,graphqlTypes:er,context:a,apiNameOverride:Ot}),sr=O2m(f,r.config.aiExamples?.style??r.config.experimental?.aiExampleStyleInstructions);if(sr){let y=wt?.getSources()?.filter(E=>E.type==="openapi").map(E=>({absoluteFilePath:E.absoluteFilePath,absoluteFilePathToOverrides:E.absoluteFilePathToOverrides}));y==null||y.length===0?a.logger.debug("Skipping AI example enhancement: no OpenAPI source file paths available"):jt=await byt(jt,sr,a,e,t,y)}let zn,nr=new Set;if(Object.keys(xe).length===0)a.logger.debug("No snippets configuration defined, skipping snippet generation...");else if(!me){let g=await C2m({fdr:P,workspace:wt,organization:t,context:a,snippetsConfig:xe});g&&Object.keys(g).length>0&&(zn=g,nr=new Set(Object.keys(g)),a.logger.debug(`Using existing SDK dynamic IRs for: ${Object.keys(g).join(", ")}`));let y=await S2m({workspace:wt,organization:t,context:a,snippetsConfig:xe,skipLanguages:nr});y&&(zn={...zn,...y})}let Oi;try{Oi=await P.api.register.registerApiDefinition({orgId:fn.OrgId(t),apiId:fn.ApiId(Ot??Ur(rt.apiName)),definition:jt,dynamicIRs:zn})}catch(g){let y=Jmu(g);return a.logger.error(`FDR registerApiDefinition failed. Error details:
|
|
3778
3778
|
${JSON.stringify(y,void 0,2)}`),Ot!=null?a.failAndThrow(`Failed to publish docs because API definition (${Ot}) could not be uploaded. Please contact support@buildwithfern.com`,y,{code:Q.Code.NetworkError}):a.failAndThrow("Failed to publish docs because API definition could not be uploaded. Please contact support@buildwithfern.com",y,{code:Q.Code.NetworkError})}return a.logger.debug(`Registered API Definition ${Ot}: ${Oi.apiDefinitionId}`),Oi.dynamicIRs&&zn&&(d?a.logger.debug("Skip-upload mode: skipping dynamic IR uploads"):await T2m({dynamicIRs:zn,dynamicIRUploadUrls:Oi.dynamicIRs,context:a,apiId:Oi.apiDefinitionId})),Oi.apiDefinitionId},targetAudiences:h});a.logger.info("Resolving docs definition...");let ae=performance.now(),Ce=await oe.resolve(),ve=performance.now()-ae;if(r.config.settings?.substituteEnvVars){a.logger.debug("Applying environment variable substitution to docs definition...");let{jsFiles:rt,...xe}=Ce;Ce={...Ey(xe,{onError:Ot=>a.failAndThrow(void 0,Ot,{code:Q.Code.EnvironmentError})},{substituteAsEmpty:!1}),jsFiles:rt}}let ke=Object.keys(Ce.pages).length,qe=o.length,pt=process.memoryUsage();if(a.logger.info(`Resolved docs definition in ${ve.toFixed(0)}ms: ${ke} pages${qe?`, ${qe} API workspaces`:""}`),a.logger.debug(`Memory after resolve: RSS=${(pt.rss/1024/1024).toFixed(2)}MB, Heap=${(pt.heapUsed/1024/1024).toFixed(2)}MB`),Y==null)return he(),a.failAndThrow("Failed to publish docs.","Docs registration ID is missing.",{code:Q.Code.InternalError});a.logger.info("Publishing docs to FDR...");let it=performance.now();try{await P.docs.v2.write.finishDocsRegister({docsRegistrationId:Y,docsDefinition:Ce,excludeApis:m,...be&&!c&&{basepathAware:!0}})}catch(rt){return a.failAndThrow("Failed to publish docs to "+n,rt,{code:Q.Code.NetworkError})}let ut=performance.now()-it;a.logger.debug(`Docs published to FDR in ${ut.toFixed(0)}ms`);let Tt=oe.getTranslationPages(),qt=oe.getTranslationNavigationOverlays(),ye=c?Z:n;Tt!=null&&Object.keys(Tt).length>0&&(a.logger.info(`Registering translations for ${Object.keys(Tt).length} locale(s)...`),await Promise.all(Object.entries(Tt).map(async([rt,xe])=>{try{let Ne=oe.getCollectedFileIds(),Ot=oe.getDocsWorkspacePath(),wt=async T=>{let _=Es(Ot,T),$=qi(Ot,Fe.of(`translations/${rt}/${_}`));return await ar($)?$:T},Ge=async T=>{let _=await wt(T),$=await(0,L7t.readFile)(_,"utf-8"),We=$.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return We!=null?$.slice(We[0].length):$},er=async T=>{let _=await wt(T);return(0,L7t.readFile)(_,"utf-8")},jt=await Promise.all(Object.entries(xe).map(async([T,_])=>{try{let $=Ce.pages[T],We=qi(Ot,Fe.of(T)),{markdown:Ct}=await sN({markdown:_,absolutePathToFernFolder:Ot,absolutePathToMarkdownFile:We,context:a,markdownLoader:Ge}),ft=await t7({markdown:Ct,absolutePathToFernFolder:Ot,absolutePathToMarkdownFile:We,context:a,fileLoader:er}),ht=r7({markdown:ft,absolutePathToFernFolder:Ot,absolutePathToMarkdownFile:We}),Vt=fF(ht);Vt=e7(Vt,Ne,{},{absolutePathToMarkdownFile:We,absolutePathToFernFolder:Ot},a);let cs=$?.editThisPageUrl;if(cs!=null){let hf=`/fern/${T}`,Sr=`/fern/translations/${rt}/${T}`;cs=cs.replace(hf,Sr)}return[T,{markdown:Vt,rawMarkdown:Vt,editThisPageUrl:cs,editThisPageLaunch:$?.editThisPageLaunch}]}catch($){a.logger.warn(`Failed to process translated page "${T}" for locale "${rt}": ${String($)}. Falling back to base page.`);return}})),sr={...Ce.pages,...Object.fromEntries(jt.filter(T=>T!=null))},zn=Tze(Ce.config.root,xe,a),nr=qt?.[rt],Oi=Ce.config.announcement,g=Ce.config.navbarLinks;nr!=null&&(zn=Bze(zn,nr),Oi=Oze(nr)??Oi,nr.navbarLinks!=null&&(g=nr.navbarLinks));let y={...Ce,pages:sr,config:{...Ce.config,root:zn,announcement:Oi,navbarLinks:g}},E=Object.keys(xe).length;a.logger.debug(`Sending translation for locale "${rt}" (${E} page${E===1?"":"s"})`);let S=await fetch(`${B}/v2/registry/docs/translations/register`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.value}`,...N},body:JSON.stringify({domain:ye,customDomains:c?[]:i,orgId:t,locale:rt,docsDefinition:y})});if(!S.ok){let T=await S.text();throw new Error(`HTTP ${S.status}: ${T}`)}a.logger.debug(`Registered translations for locale "${rt}"`)}catch(Ne){a.logger.warn(`Failed to register translations for locale "${rt}": ${String(Ne)}`)}})));let ue=uN(Z);await B2m({docsDefinition:Ce,isPreview:c,context:a});let _e=Pde(ue,ue);return a.logger.info(we.green(`Published docs to ${_e}`)),ue}catch(Me){throw he(),Me}finally{ce=!1,process.removeListener("SIGINT",je),process.removeListener("SIGTERM",je)}}function Hmu(e){return typeof e=="object"&&e!==null&&"uploadUrl"in e&&typeof e.uploadUrl=="string"&&"fileId"in e&&typeof e.fileId=="string"}function h2m(e){if(typeof e=="string")return e;if(Hmu(e))return e.uploadUrl;throw new Error(`Unexpected upload URL value: ${JSON.stringify(e)}`)}function g2m(e,t){return Hmu(t)?Nw.FileId(t.fileId):Nw.FileId(e)}async function _mu(e,t,r,n,i){let o=Date.now(),s=Object.keys(e).length;r.logger.debug(`Start uploading ${s} files...`);let a=HBt(Object.entries(e),n),c=0;for(let l of a){await Promise.all(l.map(async([d,f])=>{let m=i.get(d)||qi(t,Fe.of(d));try{let h=h2m(f),A=YUo.lookup(m);await Ny.put(h,await(0,L7t.readFile)(m),{headers:{"Content-Type":A===!1?"application/octet-stream":A,"Cache-Control":"public, max-age=31536000, immutable"}})}catch(h){r.failAndThrow(`Failed to upload ${m}`,h,{code:Q.Code.NetworkError})}}));let p=Date.now();c+=l.length,r.logger.debug(`Uploaded ${c}/${s} files in ${p-o}ms`)}let u=Date.now();r.logger.debug(`Finished uploading ${s} files in ${u-o}ms`)}function Vmu(e,t,r){let n=[];for(let[i,o]of Object.entries(e)){let s=Fe.of(i),a=r?.get(i)||qi(t,s);n.push({relativeFilePath:s,absoluteFilePath:a,fileId:g2m(i,o)})}return n}async function qmu(e,t,r,n,i){t.instrumentPostHogEvent({command:"docs-generation",properties:{error:JSON.stringify(e)}});let o=Jmu(e);t.logger.debug(`startDocsRegister failed for domain '${n}', org '${r}'. Error details:
|
|
3779
3779
|
${JSON.stringify(o,void 0,2)}`);let s=e,a=s?.content;if(a?.reason==="status-code"&&a?.statusCode===409)throw new zbt;let c=A2m(e,r,n,i);if(c!=null)return t.failAndThrow(c,void 0,{code:Q.Code.AuthError});switch(s?.error){case"InvalidCustomDomainError":return t.failAndThrow("Your docs domain should end with docs.buildwithfern.com",void 0,{code:Q.Code.ConfigError});case"InvalidDomainError":return t.failAndThrow("Please make sure that none of your custom domains are not overlapping (i.e. one is a substring of another)",void 0,{code:Q.Code.ConfigError});case"UnauthorizedError":return t.failAndThrow(Kmu(n,r,a,i),void 0,{code:Q.Code.AuthError});case"UserNotInOrgError":return t.failAndThrow(`You do not belong to organization '${r}'. Please run '${i}' to ensure you are logged in with the correct account.
|
|
3780
3780
|
|
|
@@ -3782,7 +3782,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
|
|
|
3782
3782
|
|
|
3783
3783
|
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`:r}function E2m(e,t,r){return t!=null&&t.includes("Invalid authorization token")?`Your authentication token is invalid or expired. Please run '${r}' to re-authenticate.`:`You are not authorized to publish docs under organization '${e}'. Please run '${r}' to ensure you are logged in with the correct account.
|
|
3784
3784
|
|
|
3785
|
-
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function v2m(e){if(e==null)return{code:void 0,message:void 0};let t=e.body;if(t!=null&&typeof t=="object"){let n=typeof t.code=="string"?t.code:void 0,i=typeof t.message=="string"?t.message:void 0;return{code:n,message:i}}return{code:void 0,message:typeof t=="string"&&t.length>0?t:typeof e.errorMessage=="string"?e.errorMessage:typeof e.message=="string"?e.message:void 0}}function I2m(e){try{return new URL(uN(e)).pathname}catch{return}}async function C2m({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await x2m({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let a=(await e.api.register.checkSdkDynamicIrExists({orgId:fn.OrgId(r),apiId:"",irVersions:[]})).existingDynamicIrs??{};if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let c={};for(let[u,l]of Object.entries(a??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${u}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();c[u]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${u}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${u}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${u}: ${p}`)}return Object.keys(c).length>0?c:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function JUo(e){return e.replace(/^https:\/\//,"")}async function x2m({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package??void 0,explicitVersion:r.typescriptSdk?.version??void 0},{language:"python",snippetName:r.pythonSdk?.package??void 0,explicitVersion:r.pythonSdk?.version??void 0},{language:"java",snippetName:r.javaSdk?.coordinate??void 0,explicitVersion:r.javaSdk?.version??void 0},{language:"go",snippetName:r.goSdk?.githubRepo&&JUo(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version??void 0},{language:"csharp",snippetName:r.csharpSdk?.package??void 0,explicitVersion:r.csharpSdk?.version??void 0},{language:"ruby",snippetName:r.rubySdk?.gem??void 0,explicitVersion:r.rubySdk?.version??void 0},{language:"php",snippetName:r.phpSdk?.package??void 0,explicitVersion:r.phpSdk?.version??void 0},{language:"swift",snippetName:r.swiftSdk?.package??void 0,explicitVersion:r.swiftSdk?.version??void 0},{language:"rust",snippetName:r.rustSdk?.package??void 0,explicitVersion:r.rustSdk?.version??void 0}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion??void 0;a||(a=(await w2m({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 w2m({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,c;if(t.generatorsConfiguration?.groups){let u=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=Qn.getPackageName({generatorInvocation:p});d&&u.push(d),!a&&d&&(a=d,c=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let u=await e.sdks.computeSemanticVersion({githubRepository:s,language:o,package:a});return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${u.version} for package "${a}"`),{version:u.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function S2m({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&&JUo(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let c of a.generators){let u=S4e({apiName:e.workspaceName??"",organization:t,generatorInvocation:c}),l="";if(u?.outputConfig.type==="publish")switch(u.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=u.outputConfig.value.packageName;break;case"maven":l=u.outputConfig.value.coordinate;break;case"go":l=u.outputConfig.value.repoUrl;break;case"swift":l=u.outputConfig.value.repoUrl;break;case"crates":l=u.outputConfig.value.packageName;break}if(c.language==="php"&&c.config&&typeof c.config=="object"&&"packageName"in c.config&&(l=c.config.packageName??""),c.language==="go"&&l&&(l=JUo(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=Hg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new Mh(r,e),dynamicGeneratorConfig:u}),d=iMe({ir:p,disableExamples:!0,smartCasing:c.smartCasing,generationLanguage:c.language,generatorConfig:u});d?o[c.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${c.language}`)}}}for(let[a,c]of Object.entries(s))a&&c&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${c}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${c} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function T2m({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 B2m({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(we.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function O2m(e,t){if(e)return{enabled:!0,model:process.env.FERN_AI_MODEL||"gpt-4o-mini",maxRetries:parseInt(process.env.FERN_AI_MAX_RETRIES||"3"),requestTimeoutMs:parseInt(process.env.FERN_AI_TIMEOUT_MS||"25000"),styleInstructions:t}}function Jmu(e){let t=e,r=t?.content;return{errorType:t?.error,statusCode:t?.statusCode??r?.statusCode,reason:r?.reason,errorMessage:r?.errorMessage??r?.message,body:r?.body,cause:r?.cause,rawError:e}}var z7t=[60*1e3,300*1e3,300*1e3];async function U7t({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,previewId:c,disableTemplates:u,skipUpload:l,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m}){let h=a&&!n.config.settings?.substituteEnvVars;n.config=Ey(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:Q.Code.EnvironmentError})},{substituteAsEmpty:h});let A=n.config.instances;if(A.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.",void 0,{code:Q.Code.ConfigError});return}if(A.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${A[0]?.url})`,void 0,{code:Q.Code.ConfigError});return}let b=A.find(C=>C.url===s)??A[0];if(b==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:Q.Code.ConfigError});return}let I=[];b.customDomain!=null&&(typeof b.customDomain=="string"?I.push(b.customDomain):Array.isArray(b.customDomain)&&I.push(...b.customDomain)),b.multiSource===!0&&P2m(b.url,I,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${b.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let x;return await i.runInteractiveTask({name:b.url},async()=>{let C=performance.now(),w=()=>Wmu({docsWorkspace:n,customDomains:I,domain:b.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:b.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:b.audiences?Array.isArray(b.audiences)?b.audiences:[b.audiences]:void 0,docsUrl:b.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:b.multiSource??!1});for(let O=0;;O++)try{x=await w();break}catch(N){if(!(N instanceof zbt)||O>=z7t.length){if(N instanceof zbt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:Q.Code.NetworkError});throw N}let P=z7t[O]??z7t[z7t.length-1]??6e4,U=P/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${U} minute${U===1?"":"s"} (attempt ${O+1}/${z7t.length})...`),await new Promise(Y=>setTimeout(Y,P))}let B=performance.now()-C;i.logger.debug(`Docs publishing completed in ${B.toFixed(0)}ms`)}),x}function Ymu(e){try{let t=e.startsWith("https://")||e.startsWith("http://")?e:`https://${e}`;return new URL(t).pathname}catch{return"/"}}function P2m(e,t,r){let n=Ymu(e);for(let i of t){let o=Ymu(i);o!=="/"&&n!==o&&r.failAndThrow(`When multi-source is enabled, the url and custom-domain must share the same basepath. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:Q.Code.ConfigError})}}var yei=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,previewId:n,skipUpload:i}){let o=new Qh({context:this.context,task:this.task});try{let s=await U7t({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:o,token:this.token,instanceUrl:t,preview:r,previewId:n,disableTemplates:void 0,skipUpload:i,cliVersion:"5.13.0",loginCommand:"fern auth login"});return o.getResult()===Gf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:ni(s)}}}};Ut();var Ubt=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(`
|
|
3785
|
+
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function v2m(e){if(e==null)return{code:void 0,message:void 0};let t=e.body;if(t!=null&&typeof t=="object"){let n=typeof t.code=="string"?t.code:void 0,i=typeof t.message=="string"?t.message:void 0;return{code:n,message:i}}return{code:void 0,message:typeof t=="string"&&t.length>0?t:typeof e.errorMessage=="string"?e.errorMessage:typeof e.message=="string"?e.message:void 0}}function I2m(e){try{return new URL(uN(e)).pathname}catch{return}}async function C2m({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await x2m({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let a=(await e.api.register.checkSdkDynamicIrExists({orgId:fn.OrgId(r),apiId:t.definition.rootApiFile.contents.name,irVersions:Object.keys(o)})).existingDynamicIrs??{};if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let c={};for(let[u,l]of Object.entries(a??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${u}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();c[u]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${u}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${u}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${u}: ${p}`)}return Object.keys(c).length>0?c:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function JUo(e){return e.replace(/^https:\/\//,"")}async function x2m({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package??void 0,explicitVersion:r.typescriptSdk?.version??void 0},{language:"python",snippetName:r.pythonSdk?.package??void 0,explicitVersion:r.pythonSdk?.version??void 0},{language:"java",snippetName:r.javaSdk?.coordinate??void 0,explicitVersion:r.javaSdk?.version??void 0},{language:"go",snippetName:r.goSdk?.githubRepo&&JUo(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version??void 0},{language:"csharp",snippetName:r.csharpSdk?.package??void 0,explicitVersion:r.csharpSdk?.version??void 0},{language:"ruby",snippetName:r.rubySdk?.gem??void 0,explicitVersion:r.rubySdk?.version??void 0},{language:"php",snippetName:r.phpSdk?.package??void 0,explicitVersion:r.phpSdk?.version??void 0},{language:"swift",snippetName:r.swiftSdk?.package??void 0,explicitVersion:r.swiftSdk?.version??void 0},{language:"rust",snippetName:r.rustSdk?.package??void 0,explicitVersion:r.rustSdk?.version??void 0}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion??void 0;a||(a=(await w2m({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 w2m({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,c;if(t.generatorsConfiguration?.groups){let u=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=Qn.getPackageName({generatorInvocation:p});d&&u.push(d),!a&&d&&(a=d,c=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let u=await e.sdks.computeSemanticVersion({githubRepository:s,language:o,package:a});return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${u.version} for package "${a}"`),{version:u.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function S2m({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&&JUo(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let c of a.generators){let u=S4e({apiName:e.workspaceName??"",organization:t,generatorInvocation:c}),l="";if(u?.outputConfig.type==="publish")switch(u.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=u.outputConfig.value.packageName;break;case"maven":l=u.outputConfig.value.coordinate;break;case"go":l=u.outputConfig.value.repoUrl;break;case"swift":l=u.outputConfig.value.repoUrl;break;case"crates":l=u.outputConfig.value.packageName;break}if(c.language==="php"&&c.config&&typeof c.config=="object"&&"packageName"in c.config&&(l=c.config.packageName??""),c.language==="go"&&l&&(l=JUo(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=Hg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new Mh(r,e),dynamicGeneratorConfig:u}),d=iMe({ir:p,disableExamples:!0,smartCasing:c.smartCasing,generationLanguage:c.language,generatorConfig:u});d?o[c.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${c.language}`)}}}for(let[a,c]of Object.entries(s))a&&c&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${c}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${c} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function T2m({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 B2m({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(we.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function O2m(e,t){if(e)return{enabled:!0,model:process.env.FERN_AI_MODEL||"gpt-4o-mini",maxRetries:parseInt(process.env.FERN_AI_MAX_RETRIES||"3"),requestTimeoutMs:parseInt(process.env.FERN_AI_TIMEOUT_MS||"25000"),styleInstructions:t}}function Jmu(e){let t=e,r=t?.content;return{errorType:t?.error,statusCode:t?.statusCode??r?.statusCode,reason:r?.reason,errorMessage:r?.errorMessage??r?.message,body:r?.body,cause:r?.cause,rawError:e}}var z7t=[60*1e3,300*1e3,300*1e3];async function U7t({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,previewId:c,disableTemplates:u,skipUpload:l,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m}){let h=a&&!n.config.settings?.substituteEnvVars;n.config=Ey(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:Q.Code.EnvironmentError})},{substituteAsEmpty:h});let A=n.config.instances;if(A.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.",void 0,{code:Q.Code.ConfigError});return}if(A.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${A[0]?.url})`,void 0,{code:Q.Code.ConfigError});return}let b=A.find(C=>C.url===s)??A[0];if(b==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:Q.Code.ConfigError});return}let I=[];b.customDomain!=null&&(typeof b.customDomain=="string"?I.push(b.customDomain):Array.isArray(b.customDomain)&&I.push(...b.customDomain)),b.multiSource===!0&&P2m(b.url,I,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${b.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let x;return await i.runInteractiveTask({name:b.url},async()=>{let C=performance.now(),w=()=>Wmu({docsWorkspace:n,customDomains:I,domain:b.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:b.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:b.audiences?Array.isArray(b.audiences)?b.audiences:[b.audiences]:void 0,docsUrl:b.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:b.multiSource??!1});for(let O=0;;O++)try{x=await w();break}catch(N){if(!(N instanceof zbt)||O>=z7t.length){if(N instanceof zbt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:Q.Code.NetworkError});throw N}let P=z7t[O]??z7t[z7t.length-1]??6e4,U=P/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${U} minute${U===1?"":"s"} (attempt ${O+1}/${z7t.length})...`),await new Promise(Y=>setTimeout(Y,P))}let B=performance.now()-C;i.logger.debug(`Docs publishing completed in ${B.toFixed(0)}ms`)}),x}function Ymu(e){try{let t=e.startsWith("https://")||e.startsWith("http://")?e:`https://${e}`;return new URL(t).pathname}catch{return"/"}}function P2m(e,t,r){let n=Ymu(e);for(let i of t){let o=Ymu(i);o!=="/"&&n!==o&&r.failAndThrow(`When multi-source is enabled, the url and custom-domain must share the same basepath. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:Q.Code.ConfigError})}}var yei=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,previewId:n,skipUpload:i}){let o=new Qh({context:this.context,task:this.task});try{let s=await U7t({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:o,token:this.token,instanceUrl:t,preview:r,previewId:n,disableTemplates:void 0,skipUpload:i,cliVersion:"5.13.1",loginCommand:"fern auth login"});return o.getResult()===Gf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:ni(s)}}}};Ut();var Ubt=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(`
|
|
3786
3786
|
`),this.stream.write(`${we.cyan("\u25C6")} ${we.bold(t.title)}
|
|
3787
3787
|
`),t.subtitle!=null&&this.stream.write(` ${we.dim(t.subtitle)}
|
|
3788
3788
|
`),this.stream.write(`
|
|
@@ -4460,7 +4460,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
|
|
|
4460
4460
|
Run ${we.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
|
|
4461
4461
|
Run ${we.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),sit(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function ghs({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!lWu(e))return;let i=t??"",o=e.filter(a=>a.isUpgradeAvailable);r!=null&&(o=o.slice(0,r+1));let s=o.sort((a,c)=>a.generatorName.localeCompare(c.generatorName)||a.currentVersion.localeCompare(c.currentVersion));for(let a of s)i+=`
|
|
4462
4462
|
${await ZWh(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+we.dim(a.currentVersion)+we.reset(" \u2192 ")+we.green(a.latestVersion);return i+=`
|
|
4463
|
-
`,n?sit(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function ZWh(e){let r=await new uWu.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Q({message:`Generator ${e} not found`,code:Q.Code.ConfigError});return r.body.displayName}async function $Wh({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await fWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=x6e(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await FD({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await fWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=x6e(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await FD({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function fWu({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 SL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?ey(n):void 0;for(let u of a.groups)if(!(i!=null&&u.groupName!==i))for(let l of u.generators)c!=null&&l.name!==c||await r(o.workspaceName,u.groupName,l,s)})}))}function dWu(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let c;try{c=CQ(a.latestVersion,a.previousVersion)}catch{throw new Q({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:Q.Code.ConfigError})}r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Rmi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await $Wh({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...dWu(u,c,t.logger));else s.push(...dWu(a.versions,void 0,t.logger))}return s}async function the({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await nDt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new Q({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:Q.Code.NetworkError})}}var mWu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Fmi=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=_n.Info;isLocal;stdoutRedirector=new Dmi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await wUt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new PMt(t,r),this.isLocal=n??!1,this.posthogManager=i;let o=this.getPackageName(),s=this.getPackageVersion(),a=this.getCliName();(o==null||s==null||a==null)&&this.exitProgram(),this.environment={packageName:o,packageVersion:s,cliName:a},this.sentryClient=new Pmi({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"5.13.
|
|
4463
|
+
`,n?sit(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function ZWh(e){let r=await new uWu.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Q({message:`Generator ${e} not found`,code:Q.Code.ConfigError});return r.body.displayName}async function $Wh({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await fWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=x6e(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await FD({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await fWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=x6e(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await FD({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function fWu({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 SL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?ey(n):void 0;for(let u of a.groups)if(!(i!=null&&u.groupName!==i))for(let l of u.generators)c!=null&&l.name!==c||await r(o.workspaceName,u.groupName,l,s)})}))}function dWu(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let c;try{c=CQ(a.latestVersion,a.previousVersion)}catch{throw new Q({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:Q.Code.ConfigError})}r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Rmi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await $Wh({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...dWu(u,c,t.logger));else s.push(...dWu(a.versions,void 0,t.logger))}return s}async function the({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await nDt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new Q({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:Q.Code.NetworkError})}}var mWu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Fmi=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=_n.Info;isLocal;stdoutRedirector=new Dmi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await wUt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new PMt(t,r),this.isLocal=n??!1,this.posthogManager=i;let o=this.getPackageName(),s=this.getPackageVersion(),a=this.getCliName();(o==null||s==null||a==null)&&this.exitProgram(),this.environment={packageName:o,packageVersion:s,cliName:a},this.sentryClient=new Pmi({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"5.13.1"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${we.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),new bu}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof bu)&&(dMt({message:t,error:r,logger:this.logger}),Omi(this,r,{...n,message:t}))}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}writeJsonToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(JSON.stringify(t,null,2)+`
|
|
4464
4464
|
`),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish();try{await this.posthogManager.flush()}catch{}await this.sentryClient.flush(),this.exitProgram({code:t})}async nudgeUpgradeIfAvailable(){try{let t=await Promise.race([this.isUpgradeAvailable(),new Promise((n,i)=>setTimeout(()=>i("Request timed out"),300))]),r=await pWu({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
|
|
4465
4465
|
`)||(r+=`
|
|
4466
4466
|
`),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=v1i(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 jKt(t);return this.ttyAwareLogger.registerTask(r),r}USE_NODE_18_OR_ABOVE_MESSAGE="The Fern CLI requires Node 18+ or above.";async runTaskWithInit(t,r){let n=this.addTaskWithInit(t).start(),i;try{i=await r(n)}catch(o){throw n.failWithoutThrowing(void 0,o),new bu}finally{n.finish()}return i}instrumentPostHogEvent(t){this.isLocal||this.posthogManager.sendEvent(t)}captureException(t,r){this.sentryClient.captureException(t,r)}logger=RS((t,...r)=>this.log(t,...r));stderr=RS((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=hWu(r),i=1+(this.longestWorkspaceName!=null?hWu(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=mWu[this.numTasks++%mWu.length],a=we.hex(s)(o);return{...this.constructTaskInit(),logPrefix:a,title:we.hex(s).bold(r)}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Gf.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:t=>{this.instrumentPostHogEvent(t)},shouldBufferLogs:!1,captureException:(t,r)=>{this.sentryClient.captureException(t,r)}}}log(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}])}logStderr(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}],{stderr:!0})}logImmediately(t,{stderr:r=!1}={}){let n=t.filter(i=>DS.indexOf(i.level)>=DS.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===_n.Debug,stderr:r||this.jsonMode})}_suppressUpgradeMessage=!1;suppressUpgradeMessage(){this._suppressUpgradeMessage=!0}_isUpgradeAvailable;async isUpgradeAvailable({includePreReleases:t=!1}={}){if(this._isUpgradeAvailable==null){this.logger.debug(`Checking if ${this.environment.packageName} upgrade is available...`);let r=await the({cliEnvironment:this.environment,includePreReleases:t}),n=CQ(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await Rmi({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await mhs({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:we.yellow("?"),style:{answer:i=>we.cyan(i),message:i=>we.bold(i),highlight:i=>we.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
|
package/package.json
CHANGED