fern-api 4.30.2 → 4.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/cli.cjs +5 -4
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -1573,6 +1573,7 @@ plugins:
1573
1573
  - enum_type=string
1574
1574
  - default_response=false
1575
1575
  - flatten_oneofs=true
1576
+ - include_all_methods=true
1576
1577
  - source_root=${e}
1577
1578
  `}async function U4({context:e,specs:t,relativePathToDependency:r}){let n=new vmr({context:e}),i=t.filter(u=>u.type==="openapi").map(u=>({...u,relativePathToDependency:r})),o=t.filter(u=>u.type==="protobuf"),a=(await Promise.all(o.map(async u=>{if(u.absoluteFilepathToProtobufTarget!=null){let d=await dfa({generator:n,protobufSpec:u,relativePathToDependency:r});return d?[d.openApiSpec]:[]}let c=await hw(u.absoluteFilepathToProtobufRoot,"proto"),l,p=[];for(let d of c){let f=await dfa({generator:n,protobufSpec:{...u,absoluteFilepathToProtobufTarget:d},relativePathToDependency:r,existingBufLockContents:l});f!=null&&(p.push(f.openApiSpec),f.bufLockContents!=null&&(l=f.bufLockContents))}return p}))).flat().filter(u=>ma(u));return[...i,...a]}async function dfa({generator:e,protobufSpec:t,relativePathToDependency:r,existingBufLockContents:n}){if(t.absoluteFilepathToProtobufTarget==null)return;let i=await e.generate({absoluteFilepathToProtobufRoot:t.absoluteFilepathToProtobufRoot,absoluteFilepathToProtobufTarget:t.absoluteFilepathToProtobufTarget,relativeFilepathToProtobufRoot:t.relativeFilepathToProtobufRoot,local:t.generateLocally,deps:t.dependencies,existingBufLockContents:n});return{bufLockContents:i.bufLockContents,openApiSpec:{type:"openapi",absoluteFilepath:i.absoluteFilepath,absoluteFilepathToOverrides:t.absoluteFilepathToOverrides,absoluteFilepathToOverlays:void 0,settings:t.settings,source:{type:"protobuf",relativePathToDependency:r,root:t.absoluteFilepathToProtobufRoot,file:t.absoluteFilepathToProtobufTarget}}}}function q6(e,t){let r=e.map(i=>t(i.settings));if(r.some(i=>i!=null))return r.every(i=>i==null||i===!0)}function oVp(e){return e.every(t=>t.settings?.removeDiscriminantsFromSchemas===yn.RemoveDiscriminantsFromSchemas.Never)?yn.RemoveDiscriminantsFromSchemas.Never:yn.RemoveDiscriminantsFromSchemas.Always}var kp=class e extends Nmt{type="oss";allSpecs;specs;sources;loader;parseOptions;groupMultiApiEnvironments;graphqlOperations={};graphqlTypes={};constructor({allSpecs:t,specs:r,...n}){let i=r.filter(s=>s.type==="openapi"&&s.source.type==="openapi");super({...n,respectReadonlySchemas:q6(r,s=>s?.respectReadonlySchemas),respectNullableSchemas:q6(r,s=>s?.respectNullableSchemas),wrapReferencesToNullableInOptional:q6(r,s=>s?.wrapReferencesToNullableInOptional),removeDiscriminantsFromSchemas:oVp(r),coerceOptionalSchemasToNullable:q6(r,s=>s?.coerceOptionalSchemasToNullable),coerceEnumsToLiterals:q6(r,s=>s?.coerceEnumsToLiterals),onlyIncludeReferencedSchemas:q6(r,s=>s?.onlyIncludeReferencedSchemas),inlinePathParameters:q6(r,s=>s?.inlinePathParameters),objectQueryParameters:q6(r,s=>s?.objectQueryParameters),useBytesForBinaryResponse:q6(i,s=>s?.useBytesForBinaryResponse),respectForwardCompatibleEnums:q6(i,s=>s?.respectForwardCompatibleEnums),inlineAllOfSchemas:q6(r,s=>s?.inlineAllOfSchemas),resolveAliases:(()=>{let s=r.map(c=>c.settings?.resolveAliases);return s.some(c=>c!=null)?s.some(c=>c===!1)?!1:{except:r.flatMap(c=>typeof c.settings?.resolveAliases=="object"?c.settings.resolveAliases.except??[]:[])}:void 0})(),exampleGeneration:r[0]?.settings?.exampleGeneration,groupEnvironmentsByHost:r.some(s=>s.settings?.groupEnvironmentsByHost),defaultIntegerFormat:r[0]?.settings?.defaultIntegerFormat,pathParameterOrder:r[0]?.settings?.pathParameterOrder,coerceConstsTo:r[0]?.settings?.coerceConstsTo}),this.specs=r,this.allSpecs=t,this.sources=this.convertSpecsToIdentifiableSources(r),this.loader=new Q6(this.absoluteFilePath),this.groupMultiApiEnvironments=this.specs.some(s=>s.settings?.groupMultiApiEnvironments);let o=r.some(s=>s.type==="protobuf");this.parseOptions={onlyIncludeReferencedSchemas:this.onlyIncludeReferencedSchemas,respectReadonlySchemas:this.respectReadonlySchemas,respectNullableSchemas:this.respectNullableSchemas,wrapReferencesToNullableInOptional:this.wrapReferencesToNullableInOptional,coerceOptionalSchemasToNullable:this.coerceOptionalSchemasToNullable,coerceEnumsToLiterals:this.coerceEnumsToLiterals,inlinePathParameters:this.inlinePathParameters,objectQueryParameters:this.objectQueryParameters,exampleGeneration:this.exampleGeneration,useBytesForBinaryResponse:this.useBytesForBinaryResponse,respectForwardCompatibleEnums:this.respectForwardCompatibleEnums,inlineAllOfSchemas:this.inlineAllOfSchemas,resolveAliases:this.resolveAliases,removeDiscriminantsFromSchemas:this.removeDiscriminantsFromSchemas,groupMultiApiEnvironments:this.groupMultiApiEnvironments,groupEnvironmentsByHost:this.groupEnvironmentsByHost,defaultIntegerFormat:this.defaultIntegerFormat,pathParameterOrder:this.pathParameterOrder,coerceConstsTo:this.coerceConstsTo,respectByteFormat:o}}getGraphqlOperations(){return this.graphqlOperations}getGraphqlTypes(){return this.graphqlTypes}getGraphqlOperationsCount(){return Object.keys(this.graphqlOperations).length}getGraphqlTypesCount(){return Object.keys(this.graphqlTypes).length}async processGraphQLSpecs(t){let{GraphQLConverter:r}=await Promise.resolve().then(()=>(vwi(),jma)),n=this.allSpecs.filter(i=>i.type==="graphql");for(let i of n)try{let s=await new r({context:t,filePath:i.absoluteFilepath}).convert();Object.assign(this.graphqlOperations,s.graphqlOperations),Object.assign(this.graphqlTypes,s.types)}catch(o){t.logger.error(`Failed to process GraphQL spec ${i.absoluteFilepath}:`,o instanceof Error?o.message:String(o))}}async getOpenAPIIr({context:t,relativePathToDependency:r,loadAiExamples:n=!1},i){let o=await U4({context:t,specs:this.specs,relativePathToDependency:r});return T_e({context:t,documents:await this.loader.loadDocuments({context:t,specs:o,loadAiExamples:n}),options:{...i,...this.parseOptions}})}async getIntermediateRepresentation({context:t,audiences:r,enableUniqueErrorsPerEndpoint:n,generateV1Examples:i,logWarnings:o}){let s=await U4({context:t,specs:this.specs}),a=await this.loader.loadDocuments({context:t,specs:s}),u=this.generatorsConfiguration?.api?.auth!=null?{...this.generatorsConfiguration?.api}:void 0;u&&t.logger.trace("Using auth overrides from generators configuration");let c=this.generatorsConfiguration?.api?.environments!=null?{...this.generatorsConfiguration?.api}:void 0;c&&t.logger.trace("Using environment overrides from generators configuration");let l=this.generatorsConfiguration?.api?.headers!=null?{...this.generatorsConfiguration?.api}:void 0;l&&t.logger.trace("Using global header overrides from generators configuration");let p,d=[];for(let f of a){let m=We(this.absoluteFilePath,Se.of(f.source?.file??"")),h=Hy(nl(),m),g=new M4({logger:t.logger,relativeFilepathToSpec:h});d.push(g);let A;switch(f.type){case"openapi":{let v=f.value,b=f.namespace??v["x-fern-sdk-namespace"],I=new koe({namespace:b,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:v,exampleGenerationArgs:{disabled:!1},errorCollector:g,authOverrides:u,environmentOverrides:c,globalHeaderOverrides:l,enableUniqueErrorsPerEndpoint:n,generateV1Examples:i,settings:l8({options:f.settings}),documentBaseDir:vn(m)});A=await new bIt({context:I,audiences:r}).convert();break}case"asyncapi":{let v=f.namespace??f.value["x-fern-sdk-namespace"],b=new gIt({namespace:v,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:f.value,exampleGenerationArgs:{disabled:!1},errorCollector:g,enableUniqueErrorsPerEndpoint:n,settings:l8({options:f.settings}),generateV1Examples:i});A=await new hIt({context:b,audiences:r}).convert();break}default:g.collect({message:`Unsupported document type: ${f}`,path:[]});break}let E=PI({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});A!=null&&(p=p===void 0?A:UBe(p,A,E))}for(let f of this.allSpecs)if(f.type==="openrpc"){let m=f.absoluteFilepath,h=Hy(nl(),m),g=new M4({logger:t.logger,relativeFilepathToSpec:h});d.push(g);let A=new vIt({namespace:f.namespace,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:await aIi({context:t,absoluteFilePath:f.absoluteFilepath,absoluteFilePathToOverrides:f.absoluteFilepathToOverrides}),exampleGenerationArgs:{disabled:!1},errorCollector:g,enableUniqueErrorsPerEndpoint:n,generateV1Examples:i,settings:l8()}),v=await new EIt({context:A,audiences:r}).convert(),b=PI({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});v!=null&&(p=p===void 0?v:UBe(p,v,b))}else if(f.type==="protobuf")try{let h=await new Emr({context:t}).generate({absoluteFilepathToProtobufRoot:f.absoluteFilepathToProtobufRoot,absoluteFilepathToProtobufTarget:f.absoluteFilepathToProtobufTarget,local:!0,deps:f.dependencies}),g=await(0,Mma.readFile)(h,"utf-8"),A=PI({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});if(g!=null){let E;try{if(E=Pi.IntermediateRepresentation.parse(JSON.parse(g),{allowUnrecognizedEnumValues:!0,skipValidation:!0}),E.ok)p=p===void 0?E.value:UBe(p,E.value,A);else throw new Error}catch{t.logger.log("error","Failed to parse protobuf IR: ")}}}catch(m){t.logger.log("warn","Failed to parse protobuf IR: "+m)}for(let f of d)if(f.hasErrors()){let m=f.getErrorStats(),h=f.relativeFilepathToSpec?` for ${f.relativeFilepathToSpec}`:"";m.numErrors>0?t.logger.log("error",`API validation${h} completed with ${m.numErrors} errors.`):m.numWarnings>0&&o&&t.logger.log("warn",`API validation${h} completed with ${m.numWarnings} warnings.`),await f.logErrors({logWarnings:o})}if(p===void 0)throw new Error("Failed to generate intermediate representation");return p}async toFernWorkspace({context:t},r,n){if(n!=null)return this.createWorkspaceWithSpecsOverride({context:t},n,r);let i=await this.getDefinition({context:t},r);return new LD({absoluteFilePath:this.absoluteFilePath,workspaceName:this.workspaceName,generatorsConfiguration:this.generatorsConfiguration,dependenciesConfiguration:{dependencies:{}},definition:i,cliVersion:this.cliVersion,sources:this.sources})}async createWorkspaceWithSpecsOverride({context:t},r,n){let i=await this.convertSpecsOverrideToSpecs(r),o=i.filter(u=>u.type!=="protobuf"||!u.fromOpenAPI),s=new e({allSpecs:o,specs:i.filter(u=>u.type==="openapi"||u.type==="protobuf"),generatorsConfiguration:this.generatorsConfiguration,workspaceName:this.workspaceName,cliVersion:this.cliVersion,absoluteFilePath:this.absoluteFilePath,changelog:this.changelog}),a=await s.getDefinition({context:t},n);return new LD({absoluteFilePath:this.absoluteFilePath,workspaceName:this.workspaceName,generatorsConfiguration:this.generatorsConfiguration,dependenciesConfiguration:{dependencies:{}},definition:a,cliVersion:this.cliVersion,sources:s.sources})}async convertSpecsOverrideToSpecs(t){if(!Array.isArray(t))throw new Error("Conjure specs override is not yet supported");let r=[];for(let n of t)if(yn.isOpenApiSpecSchema(n)){let i=We(this.absoluteFilePath,Se.of(n.openapi)),o,s=[];n.overrides!=null&&(Array.isArray(n.overrides)?s.push(...n.overrides.map(c=>We(this.absoluteFilePath,Se.of(c)))):s.push(We(this.absoluteFilePath,Se.of(n.overrides)))),s.length>0&&(o=s.length===1?s[0]:s);let a=n.overlays?We(this.absoluteFilePath,Se.of(n.overlays)):void 0,u={type:"openapi",absoluteFilepath:i,absoluteFilepathToOverrides:o,absoluteFilepathToOverlays:a,settings:this.specs.length>0?this.specs[0]?.settings:void 0,source:{type:"openapi",file:i},namespace:n.namespace??void 0};r.push(u)}else throw new Error("Spec type override not yet supported. Only OpenAPI specs are currently supported in specs override.");return r}getAbsoluteFilePaths(){return[this.absoluteFilePath,...this.allSpecs.flatMap(t=>{let r=t.type==="protobuf"?t.absoluteFilepathToProtobufTarget:t.absoluteFilepath,n=Array.isArray(t.absoluteFilepathToOverrides)?t.absoluteFilepathToOverrides:t.absoluteFilepathToOverrides!=null?[t.absoluteFilepathToOverrides]:[];return[r,...n]}).filter(ma)]}getSources(){return this.sources}convertSpecsToIdentifiableSources(t){let r=new Set,n=[];return t.reduce((i,o)=>{let s=o.type==="protobuf"?o.absoluteFilepathToProtobufRoot:o.absoluteFilepath;return r.has(s)||(r.add(s),i.push({type:o.type,id:mC(),absoluteFilePath:s,absoluteFilePathToOverrides:o.type==="openapi"?o.absoluteFilepathToOverrides:void 0})),i},n)}};Vt();var Lma=require("fs/promises"),Iwi={name:"no-component-schema-collisions",run:async({workspace:e,specs:t,context:r})=>{let n=[],i=t.filter(a=>a.type==="openapi");if(i.length<2||i.some(a=>a.settings?.resolveSchemaCollisions===!0))return n;let s=new Map;for(let a of i){let u=(await(0,Lma.readFile)(a.absoluteFilepath)).toString(),c=u.includes("asyncapi:");if(!(u.includes("openapi")||u.includes("swagger"))&&!c)continue;let p=ha(e.absoluteFilePath,a.source.file),d=await k6({absolutePathToOpenAPI:a.absoluteFilepath,context:r,absolutePathToOpenAPIOverrides:a.absoluteFilepathToOverrides,absolutePathToOpenAPIOverlays:a.absoluteFilepathToOverlays}),m=(p8(d)?await F6(d):d).components?.schemas??{};for(let h of Object.keys(m)){let g=s.get(h);g!=null?n.push({name:"no-component-schema-collisions",severity:"warning",relativeFilepath:p,nodePath:["components","schemas",h],message:`Component schema collision detected: Schema '${h}' is defined in both '${g.specFile}' and '${p}'. One will overwrite the other. Rename the schema in one of the specs or use namespaces to avoid conflicts.`}):s.set(h,{schemaId:h,specFile:p})}}return n}};Vt();var zma=require("fs/promises"),Cwi={name:"no-duplicate-auth-header-parameters",run:async({workspace:e,specs:t,context:r})=>{let n=[];for(let i of t){if(i.type!=="openapi")continue;let o=(await(0,zma.readFile)(i.absoluteFilepath)).toString();if(!o.includes("openapi")&&!o.includes("swagger"))continue;let s=await k6({absolutePathToOpenAPI:i.absoluteFilepath,context:r,absolutePathToOpenAPIOverrides:i.absoluteFilepathToOverrides,absolutePathToOpenAPIOverlays:i.absoluteFilepathToOverlays}),a=p8(s)?await F6(s):s,u=sVp(a);if(u.size===0)continue;let c=ha(e.absoluteFilePath,i.source.file);for(let[l,p]of Object.entries(a.paths??{})){if(p==null)continue;let d=p,f=d.parameters;if(Array.isArray(f))for(let m of f){let h=wwi(m,a);h!=null&&Uma(h,u)&&n.push({name:"no-duplicate-auth-header-parameters",severity:"warning",relativeFilepath:c,nodePath:["paths",l,"parameters"],message:`Header parameter '${h.name}' conflicts with the '${h.name}' header already defined by a security scheme. This parameter will be ignored during SDK generation.`})}for(let m of["get","put","post","delete","options","head","patch","trace"]){let h=d[m];if(h?.parameters!=null)for(let g of h.parameters){let A=wwi(g,a);A!=null&&Uma(A,u)&&n.push({name:"no-duplicate-auth-header-parameters",severity:"warning",relativeFilepath:c,nodePath:["paths",l,m],message:`Header parameter '${A.name}' conflicts with the '${A.name}' header already defined by a security scheme. This parameter will be ignored during SDK generation.`})}}}}return n}};function sVp(e){let t=new Set,r=e.components?.securitySchemes;if(r==null)return t;for(let n of Object.values(r)){if(typeof n!="object"||n==null||typeof n.$ref=="string")continue;let i=n.type;if(i==="http")t.add("authorization");else if(i==="apiKey"&&n.in==="header"){let o=n.name;o!=null&&t.add(o.toLowerCase())}else(i==="oauth2"||i==="openIdConnect")&&t.add("authorization")}return t}function wwi(e,t,r=new Set){if(typeof e!="object"||e==null)return;let n=e;if(typeof n.$ref=="string"){let i=n.$ref;if(r.has(i))return;if(i.startsWith("#/components/parameters/")){let o=i.substring(24),a=t.components?.parameters?.[o];if(a!=null)return r.add(i),wwi(a,t,r)}return}if(typeof n.in=="string"&&typeof n.name=="string")return{in:n.in,name:n.name}}function Uma(e,t){return e.in==="header"&&t.has(e.name.toLowerCase())}Vt();var Vma=require("fs/promises"),xwi={name:"no-duplicate-overrides",run:async({workspace:e,specs:t,context:r})=>{let n=[],i=new Map;for(let o of t){let s=(await(0,Vma.readFile)(o.absoluteFilepath)).toString();if(s.includes("openapi")||s.includes("swagger")){let a=await k6({absolutePathToOpenAPI:o.absoluteFilepath,context:r,absolutePathToOpenAPIOverrides:o.absoluteFilepathToOverrides,absolutePathToOpenAPIOverlays:o.absoluteFilepathToOverlays}),u=p8(a)?await F6(a):a;for(let[c,l]of Object.entries(u.paths??{}))for(let[p,d]of Object.entries(l??{})){if(p==="parameters"||p==="$ref")continue;let f=d,m=f?.["x-fern-sdk-group-name"],h=Array.isArray(m)?m.join("."):m,g=f?.["x-fern-sdk-method-name"];if(h&&g){let A=f?.["x-fern-audiences"],E=A?Array.isArray(A)?A.map(w=>w.trim()).filter(w=>w.length>0):[A.trim()].filter(w=>w.length>0):[],b=`${o.namespace??""}:${h}:${g}`,I=i.get(b)||[];for(let w of I)if(aVp(E,w)){let x=o.namespace!=null?`${o.namespace}.${h}`:h;n.push({name:"no-duplicate-overrides",severity:"fatal",relativeFilepath:ha(e.absoluteFilePath,o.source.file),nodePath:["paths",c,p],message:`SDK method ${x}.${g} already exists (x-fern-sdk-group-name: ${h}, x-fern-sdk-method-name: ${g})`});break}I.push(E),i.set(b,I)}}}}return n}};function aVp(e,t){return e.length===0||t.length===0?!0:e.some(r=>t.includes(r))}Vt();var qma=require("fs/promises"),_wi={name:"no-schema-title-collisions",run:async({workspace:e,specs:t,context:r})=>{let n=[],i=new Map;for(let o of t){if(o.type!=="openapi")continue;let s=o.settings;if(s?.useTitlesAsName!==!0||s?.resolveSchemaCollisions===!0)continue;let a=(await(0,qma.readFile)(o.absoluteFilepath)).toString(),u=a.includes("asyncapi:");if(!(a.includes("openapi")||a.includes("swagger"))&&!u)continue;let l=ha(e.absoluteFilePath,o.source.file),p=await k6({absolutePathToOpenAPI:o.absoluteFilepath,context:r,absolutePathToOpenAPIOverrides:o.absoluteFilepathToOverrides,absolutePathToOpenAPIOverlays:o.absoluteFilepathToOverlays}),f=(p8(p)?await F6(p):p).components?.schemas??{};for(let[m,h]of Object.entries(f)){if(typeof h!="object"||h==null||!("title"in h))continue;let g=h.title;if(typeof g!="string"||g.trim()==="")continue;let A=i.get(g);A!=null?n.push({name:"no-schema-title-collisions",severity:"error",relativeFilepath:l,nodePath:["components","schemas",m,"title"],message:`Schema title collision detected: Multiple schemas use title '${g}'. Schema '${m}' conflicts with schema '${A.schemaId}'. Use 'resolve-schema-collisions: true' to automatically resolve collisions.`}):i.set(g,{schemaId:m,specFile:l})}}return n}};function Gma(){return[Cwi,xwi,_wi,Iwi]}async function GVe(e,t){return await uVp({workspace:e,context:t,rules:Gma()})}async function uVp({workspace:e,context:t,rules:r}){let n=await U4({context:t,specs:e.specs});return(await Promise.all(r.map(async o=>(await o.run({workspace:e,specs:n,context:t})).map(a=>({...a,name:a.name??o.name}))))).flat()}var mhr=class{context;task;logLevel;enabled=!0;collectedErrors=[];constructor({context:t,task:r,logLevel:n=zn.Warn}){this.context=t,this.task=r,this.logLevel=n}disable(){this.enabled=!1}enable(){this.enabled=!0}trace(...t){}debug(...t){let r=t.join(" ");this.writeLog({level:zn.Debug,message:r}),this.shouldLogToTask(zn.Debug)&&(this.task.logs==null&&(this.task.logs=[]),this.task.logs.push({level:"debug",message:r}))}info(...t){let r=t.join(" ");this.writeLog({level:zn.Info,message:r}),this.shouldLogToTask(zn.Info)&&(this.task.logs==null&&(this.task.logs=[]),this.task.logs.push({level:"debug",message:r}))}warn(...t){let r=t.join(" ");this.writeLog({level:zn.Warn,message:r}),this.shouldLogToTask(zn.Warn)&&(this.task.logs==null&&(this.task.logs=[]),this.task.logs.push({level:"warn",message:r}))}error(...t){let r=t.join(" ");this.writeLog({level:zn.Error,message:r}),this.shouldLogToTask(zn.Error)&&(this.collectedErrors.push(r),this.task.logs==null&&(this.task.logs=[]),this.task.logs.push({level:"error",message:r}))}log(t,...r){switch(t){case zn.Debug:this.debug(...r);break;case zn.Info:this.info(...r);break;case zn.Warn:this.warn(...r);break;case zn.Error:this.error(...r);break}}writeLog({level:t,message:r}){if(this.context.logs.write({taskName:this.task.name,level:t,message:r}),this.context.isTTY||!this.enabled)return;let n=Ie.dim(`[${this.task.name}]`);switch(t){case zn.Warn:process.stderr.write(`${n}: ${Ie.yellow(r)}
1578
1579
  `);break;case zn.Error:process.stderr.write(`${n}: ${Ie.red(r)}
@@ -1652,7 +1653,7 @@ ${Txa.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&jSi(th
1652
1653
  `+DPe.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?DPe.default.cyan(Lxa(t,this.opt.mask)):DPe.default.italic(DPe.default.dim("[hidden]")):this.opt.mask?Lxa(t,this.opt.mask):DPe.default.italic(DPe.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 FEr=_e(jI(),1);var M_a=_e(bBi(),1),DEr=require("child_process"),x9e=require("fs"),TEr=_e(require("path"),1),L_a=_e(require("os"),1),U_a=require("crypto"),nOi=_e(N_a(),1);var BEr=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var RCt=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var OEr=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var PEr=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function REr(e="",t,r){let n=new iOi(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 j_a(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function pbf(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 iOi=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=pbf(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??L_a.default.tmpdir(),r=(0,U_a.randomUUID)(),n=j_a(this.fileOptions.prefix),i=j_a(this.fileOptions.postfix),o=`${n}${r}${i}`,s=TEr.default.resolve(t,o),a=TEr.default.resolve(t)+TEr.default.sep;if(!s.startsWith(a))throw new Error("Resolved temporary file escaped the base directory");this.tempFile=s;let u={encoding:"utf8",flag:"wx"};Object.prototype.hasOwnProperty.call(this.fileOptions,"mode")&&(u.mode=this.fileOptions.mode),(0,x9e.writeFileSync)(this.tempFile,this.text,u)}catch(t){throw new BEr(t)}}readTemporaryFile(){try{let t=(0,x9e.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,M_a.detect)(t)??"utf8";nOi.default.encodingExists(r)||(r="utf8"),this.text=nOi.default.decode(t,r)}}catch(t){throw new OEr(t)}}removeTemporaryFile(){try{(0,x9e.unlinkSync)(this.tempFile)}catch(t){throw new PEr(t)}}launchEditor(){try{let t=(0,DEr.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new RCt(t)}}launchEditorAsync(t){try{(0,DEr.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new RCt(r)}}};var z_a=_e(LQ(),1);var FCt=class extends MI{_run(t){this.done=t,this.editorResult=new z_a.Subject;let r=t1(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"?FEr.default.dim("Received"):FEr.default.dim("Press <enter> to launch your preferred editor."),t&&(r=FEr.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),REr(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 $_a=require("stream");var G_a=_e(require("readline"),1),W_a=_e(q_a(),1),QPe=class{constructor(t){this.rl||=G_a.default.createInterface(dbf(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 dbf(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 W_a.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var kCt=class extends QPe{constructor(t={}){super(t),this.log=new $_a.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return yCt(this.rl,this.bottomBar.split(`
1653
1654
  `).length),this}updateBottomBar(t){return yCt(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+`
1654
1655
  `}write(t){let r=t.split(/\n/);this.height=r.length,this.rl.setPrompt(r.at(-1)),this.rl.output.rows===0&&this.rl.output.columns===0&&rEr(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var bf=_e(LQ(),1),J_a=_e(Kwt(),1);var kEr=_e(LQ(),1),H_a=_e(Kwt(),1),QEr=function(e,t,r){return typeof e[t]!="function"?(0,kEr.of)(e):(0,kEr.from)((0,H_a.default)(e[t])(r).then(n=>(e[t]=n,e)))};var K_a={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}},_9e=class extends QPe{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,bf.from)(t):(0,bf.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,bf.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,bf.from)([t]),this.process=n.pipe((0,bf.concatMap)(this.processQuestion.bind(this)),(0,bf.publish)()),this.process.connect(),this.process.pipe((0,bf.reduce)((i,o)=>(K_a.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,bf.defer)(()=>(0,bf.of)(t).pipe((0,bf.concatMap)(this.setDefaultType.bind(this)),(0,bf.concatMap)(this.filterIfRunnable.bind(this)),(0,bf.concatMap)(()=>QEr(t,"message",this.answers)),(0,bf.concatMap)(()=>QEr(t,"default",this.answers)),(0,bf.concatMap)(()=>QEr(t,"choices",this.answers)),(0,bf.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,bf.defer)(()=>(0,bf.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,bf.defer)(()=>(0,bf.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&K_a.get(this.answers,t.name)!==void 0)return bf.EMPTY;if(t.when===!1)return bf.EMPTY;if(typeof t.when!="function")return(0,bf.of)(t);let{answers:r}=this;return(0,bf.defer)(()=>(0,bf.from)((0,J_a.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,bf.filter)(n=>n!=null)))}};function Y_a(e){let t=function(r,n){let i;try{i=new _9e(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",ECt),this.registerPrompt("input",TPe),this.registerPrompt("number",vCt),this.registerPrompt("confirm",ICt),this.registerPrompt("rawlist",wCt),this.registerPrompt("expand",CCt),this.registerPrompt("checkbox",xCt),this.registerPrompt("password",_Ct),this.registerPrompt("editor",FCt)},t.restoreDefaultPrompts(),t}var sOi=Y_a();function hbf(e,t){sOi.registerPrompt(e,t)}function gbf(){sOi.restoreDefaultPrompts()}var Abf={prompt:sOi,ui:{BottomBar:kCt,Prompt:_9e},createPromptModule:Y_a,registerPrompt:hbf,restoreDefaultPrompts:gbf,Separator:gF},lp=Abf;var S9e=require("path");function Z_a(){let e=ybf();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function ybf(e=process.argv[1]?(0,S9e.dirname)(process.argv[1]):process.cwd(),t=S9e.sep==="\\"){let r=t?X_a(e):e;return n=>{if(!n)return;let i=t?X_a(n):n,{dir:o,base:s,ext:a}=S9e.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(s=s.slice(0,-1*a.length));let u=decodeURIComponent(s);o||(o=".");let c=o.lastIndexOf("/node_modules");if(c>-1)return`${o.slice(c+14).replace(/\//g,".")}:${u}`;if(o.startsWith(r)){let l=o.slice(r.length+1).replace(/\//g,".");return l?`${l}:${u}`:u}return u}}function X_a(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var aOi=e=>{if("flags"in e){let t=e1a(e.flags),r=t1a(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,uOi(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,bbf(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function bbf(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 e1a=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,QCt(r)]).filter(([,t])=>t!==void 0)),t1a=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?uOi(n):void 0]}))};var QCt=e=>e===void 0?void 0:e.variant??e.enabled,uOi=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var NEr="0123456789abcdef",jEr=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+=NEr.charAt(this.bytes[r]>>>4),t+=NEr.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+=NEr.charAt(this.bytes[r]>>>4),t+=NEr.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}},cOi=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??Ebf()}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 jEr.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,jEr.ofInner(t)}},Ebf=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),r1a,iK=()=>vbf().toString(),vbf=()=>(r1a||(r1a=new cOi)).generate();var yF=(function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e})({});var Ibf=["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"],n1a=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return Ibf.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var Cbf=Array.isArray,i1a=Object.prototype,WQy=i1a.hasOwnProperty,lOi=i1a.toString,pOi=Cbf||function(e){return lOi.call(e)==="[object Array]"};var fOi=e=>e===Object(e)&&!pOi(e);var B9e=e=>e===void 0,NCt=e=>lOi.call(e)=="[object String]",o1a=e=>NCt(e)&&e.trim().length===0;var s1a=e=>lOi.call(e)=="[object Number]"&&e===e;var dOi=e=>e instanceof Error;function jCt(e){return e===null||typeof e!="object"}function NPe(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function a1a(e){return NPe(e,"ErrorEvent")}function MEr(e){return!B9e(Event)&&xbf(e,Event)}function u1a(e){return NPe(e,"Object")}function xbf(e,t){try{return e instanceof t}catch{return!1}}function MCt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),s1a(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),MCt(i||r,t,r,n))}var _bf=864e5,LEr=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=MCt(t.bucketSize,0,100,t._logger),this._refillRate=MCt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=MCt(t.refillInterval,0,_bf,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 UEr=class{add(t){let r=iK();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 Sbf(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var c1a=(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=>c1a(`${e} ${o}`,t,r)}},Bbf=e=>e();function l1a(e,t=Bbf){return c1a(e,t,Sbf())}var P9e="Mobile",VEr="iOS",O9e="Android",p1a="Tablet",iNy=O9e+" "+p1a;var Obf="Apple",oNy=Obf+" Watch",f1a="Safari",qEr="BlackBerry",d1a="Samsung",Pbf=d1a+"Browser",Tbf=d1a+" Internet",GEr="Chrome",Dbf=GEr+" OS",Rbf=GEr+" "+VEr,m1a="Internet Explorer",Fbf=m1a+" "+P9e,hOi="Opera",sNy=hOi+" Mini",h1a="Edge",kbf="Microsoft "+h1a,gOi="Firefox",Qbf=gOi+" "+VEr,AOi="Nintendo",yOi="PlayStation",zEr="Xbox",Nbf=O9e+" "+P9e,jbf=P9e+" "+f1a,LCt="Windows",Mbf=LCt+" Phone";var g1a="Generic",aNy=g1a+" "+P9e.toLowerCase(),uNy=g1a+" "+p1a.toLowerCase(),Lbf="Konqueror",TP="(\\d+(\\.\\d+)?)",mOi=new RegExp("Version/"+TP),cNy=new RegExp(zEr,"i"),lNy=new RegExp(yOi+" \\w+","i"),pNy=new RegExp(AOi+" \\w+","i"),Ubf=new RegExp(qEr+"|PlayBook|BB10","i"),zbf={"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 fNy={[Fbf]:[new RegExp("rv:"+TP)],[kbf]:[new RegExp(h1a+"?\\/"+TP)],[GEr]:[new RegExp("("+GEr+"|CrMo)\\/"+TP)],[Rbf]:[new RegExp("CriOS\\/"+TP)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+TP)],[f1a]:[mOi],[jbf]:[mOi],[hOi]:[new RegExp("("+hOi+"|OPR)\\/"+TP)],[gOi]:[new RegExp(gOi+"\\/"+TP)],[Qbf]:[new RegExp("FxiOS\\/"+TP)],[Lbf]:[new RegExp("Konqueror[:/]?"+TP,"i")],[qEr]:[new RegExp(qEr+" "+TP),mOi],[Nbf]:[new RegExp("android\\s"+TP,"i")],[Tbf]:[new RegExp(Pbf+"\\/"+TP)],[m1a]:[new RegExp("(rv:|MSIE )"+TP)],Mozilla:[new RegExp("rv:"+TP)]};var dNy=[[new RegExp(zEr+"; "+zEr+" (.*?)[);]","i"),e=>[zEr,e&&e[1]||""]],[new RegExp(AOi,"i"),[AOi,""]],[new RegExp(yOi,"i"),[yOi,""]],[Ubf,[qEr,""]],[new RegExp(LCt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[Mbf,""];if(new RegExp(P9e).test(t)&&!/IEMobile\b/.test(t))return[LCt+" "+P9e,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=zbf[n]||"";return/arm/i.test(t)&&(i="RT"),[LCt,i]}return[LCt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[VEr,t.join(".")]}return[VEr,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=B9e(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+O9e+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+O9e+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[O9e,t.join(".")]}return[O9e,""]}],[/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/,[Dbf,""]],[/Linux|debian/i,["Linux",""]]];var A1a="utf8";function y1a(e,t){if(!e||typeof e!="string"||Vbf(e))throw new Error(t)}function Vbf(e){return e.trim().length===0}function b1a(e){return e?.replace(/\/+$/,"")}async function E1a(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 WEr(){return new Date().toISOString()}function jPe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var v1a=e=>e instanceof Error;function bOi(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var $Er=class{constructor(){this.events={},this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),()=>{this.events[t]=this.events[t].filter(n=>n!==r)}}emit(t,r){for(let n of this.events[t]||[])n(r);for(let n of this.events["*"]||[])n(t,r)}};function I1a(){return"CompressionStream"in globalThis}async function EOi(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 MPe=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()}},T9e=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function w1a(e){if(e instanceof MPe){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 vOi(e){return typeof e=="object"&&(e instanceof MPe||e instanceof T9e)}function C1a(e){return typeof e=="object"&&e instanceof MPe&&e.status===413}var UCt=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new UEr,this._events=new $Er,this._isInitialized=!1,y1a(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=b1a(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:vOi},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=l1a("[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=!I1a()||(r?.disableCompression??!1)}logMsgIfDebug(t){this.isDebug&&t()}wrap(t){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return t();this._initPromise.then(()=>t())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(yF.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(yF.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(yF.OptedOut,!0)})}on(t,r){return this._events.on(t,r)}debug(t=!0){if(this.removeDebugCallback?.(),t){let r=this.on("*",(n,i)=>this._logger.info(n,i));this.removeDebugCallback=()=>{r(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(t){return{distinct_id:t.distinct_id,event:t.event,properties:{...t.properties||{},...this.getCommonEventProperties()}}}addPendingPromise(t){return this.promiseQueue.add(t)}identifyStateless(t,r,n){this.wrap(()=>{let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};this.enqueue("identify",i,n)})}async identifyStatelessImmediate(t,r,n){let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};await this.sendImmediate("identify",i,n)}captureStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({distinct_id:t,event:r,properties:n});this.enqueue("capture",o,i)})}async captureStatelessImmediate(t,r,n,i){let o=this.buildPayload({distinct_id:t,event:r,properties:n});await this.sendImmediate("capture",o,i)}aliasStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});this.enqueue("alias",o,i)})}async aliasStatelessImmediate(t,r,n,i){let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});await this.sendImmediate("alias",o,i)}groupIdentifyStateless(t,r,n,i,o,s){this.wrap(()=>{let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});this.enqueue("capture",a,i)})}async getRemoteConfig(){await this._initPromise;let t=this.host;t==="https://us.i.posthog.com"?t="https://us-assets.i.posthog.com":t==="https://eu.i.posthog.com"&&(t="https://eu-assets.i.posthog.com");let r=`${t}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(r,n,{retryCount:0},this.remoteConfigRequestTimeoutMs).then(i=>i.json()).catch(i=>{this._logger.error("Remote config could not be loaded",i),this._events.emit("error",i)})}async getFlags(t,r={},n={},i={},o={},s=!0){await this._initPromise;let a=s?"&config=true":"",u=`${this.host}/flags/?v=2${a}`,c={token:this.apiKey,distinct_id:t,groups:r,person_properties:n,group_properties:i,...o};this.evaluationContexts&&this.evaluationContexts.length>0&&(c.evaluation_contexts=this.evaluationContexts);let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(c)};return this._logger.info("Flags URL",u),this.fetchWithRetry(u,l,{retryCount:0},this.featureFlagsRequestTimeoutMs).then(p=>p.json()).then(p=>({success:!0,response:aOi(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof MPe)return{type:"api_error",statusCode:t.status};if(t instanceof T9e){let r=t.error;return r instanceof Error&&(r.name==="AbortError"||r.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(t,r,n,i,o,s);if(a===void 0)return{response:void 0,requestId:void 0};let u=QCt(a.response);return u===void 0&&(u=!1),{response:u,requestId:a.requestId}}async getFeatureFlagDetailStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(r,n,i,o,s,[t]);return a===void 0?void 0:{response:a.flags[t],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(r,n,i,o,s,[t]);if(!a)return;let u=a[t];return u===void 0?null:u}async getFeatureFlagPayloadsStateless(t,r={},n={},i={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)).payloads}async getFeatureFlagsStateless(t,r={},n={},i={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)}async getFeatureFlagsAndPayloadsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,r,n,i,o,s);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a={};(o??this.disableGeoip)&&(a.geoip_disable=!0),s&&(a.flag_keys_to_evaluate=s);let u=await this.getFlags(t,r,n,i,a);if(!u.success)return;let c=u.response;return c.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),c.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:c?.requestId,quotaLimited:c.quotaLimited}):c}async getSurveysStateless(){if(await this._initPromise,this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let t=`${this.host}/api/surveys/?token=${this.apiKey}`,r={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},i=(await this.fetchWithRetry(t,r).then(o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);this._logger.error(a),this._events.emit("error",new Error(s));return}return o.json()}).catch(o=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;return i&&this._logger.info("Surveys fetched from API: ",JSON.stringify(i)),i??[]}get props(){return this._props||(this._props=this.getPersistedProperty(yF.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(yF.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(yF.Props,this.props)})}processBeforeEnqueue(t){return t}async flushStorage(){}enqueue(t,r,n){this.wrap(()=>{if(this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o=this.getPersistedProperty(yF.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(yF.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=jPe(()=>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:WEr()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,u=this.disableCompression?null:await EOi(s,this.isDebug),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...u!==null&&{"Content-Encoding":"gzip"}},body:u||s};try{await this.fetchWithRetry(a,c)}catch(l){this._events.emit("error",l)}}prepareMessage(t,r,n){let i={...r,type:t,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:n?.timestamp?n?.timestamp:WEr(),uuid:n?.uuid?n.uuid:iK()};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 w1a(t)})}async flush(){let t=bOi([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),bOi([t]).then(()=>{this.flushPromise===t&&(this.flushPromise=null)}),t}getCustomHeaders(){let t=this.getCustomUserAgent(),r={};return t&&t!==""&&(r["User-Agent"]=t),r}async _flush(){this.clearFlushTimer(),await this._initPromise;let t=this.getPersistedProperty(yF.Queue)||[];if(!t.length)return;let r=[],n=t.length;for(;t.length>0&&r.length<n;){let i=t.slice(0,this.maxBatchSize),o=i.map(f=>f.message),s=async()=>{let m=(this.getPersistedProperty(yF.Queue)||[]).slice(i.length);this.setPersistedProperty(yF.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:WEr()};this.historicalMigration&&(a.historical_migration=!0);let u=JSON.stringify(a),c=`${this.host}/batch/`,l=this.disableCompression?null:await EOi(u,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||u},d={retryCheck:f=>C1a(f)?!1:vOi(f)};try{await this.fetchWithRetry(c,p,d)}catch(f){if(C1a(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 T9e||await s(),this._events.emit("error",f),f}await s(),r.push(...o)}this._events.emit("flush",r)}async fetchWithRetry(t,r,n,i){AbortSignal.timeout??=function(a){let u=new AbortController;return setTimeout(()=>u.abort(),a),u.signal};let o=r.body?r.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,A1a)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await E1a(async()=>{let a=null;try{a=await this.fetch(t,{signal:AbortSignal.timeout(i??this.requestTimeout),...r})}catch(c){throw new T9e(c)}if(!(r.mode==="no-cors")&&(a.status<200||a.status>=400))throw new MPe(a,s);return a},{...this._retryOptions,...n})}async _shutdown(t=3e4){await this._initPromise;let r=!1;this.clearFlushTimer();let n=async()=>{try{for(await this.promiseQueue.join();!((this.getPersistedProperty(yF.Queue)||[]).length===0||(await this.flush(),r)););}catch(i){if(!vOi(i))throw i;await w1a(i)}};return Promise.race([new Promise((i,o)=>{jPe(()=>{this._logger.error("Timed out while shutting down PostHog"),r=!0,o("Timeout while shutting down PostHog. Some events may not have been sent.")},t)}),n()])}async shutdown(t=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(t).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var bF={};Y(bF,{DOMExceptionCoercer:()=>xOi,ErrorCoercer:()=>_Oi,ErrorEventCoercer:()=>SOi,ErrorPropertiesBuilder:()=>IOi,EventCoercer:()=>POi,ObjectCoercer:()=>OOi,PrimitiveCoercer:()=>TOi,PromiseRejectionEventCoercer:()=>DOi,ReduceableCache:()=>ROi,StringCoercer:()=>BOi,chromeStackLineParser:()=>wOi,createDefaultStackParser:()=>i0f,createStackParser:()=>k1a,geckoStackLineParser:()=>COi,nodeStackLineParser:()=>T1a,opera10StackLineParser:()=>B1a,opera11StackLineParser:()=>O1a,reverseAndStripFrames:()=>F1a,winjsStackLineParser:()=>S1a});var HEr,x1a,KEr;function _1a(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return KEr&&r.length===x1a||(x1a=r.length,KEr=r.reduce((n,i)=>{HEr||(HEr={});let o=HEr[i];if(o)n[o[0]]=o[1];else{let s=e(i);for(let a=s.length-1;a>=0;a--){let c=s[a]?.filename,l=t[i];if(c&&l){n[c]=l,HEr[i]=[c,l];break}}}return n},{})),KEr}var Gbf=4,IOi=class{constructor(t,r,n=[]){this.coercers=t,this.stackParser=r,this.modifiers=n}buildFromUnknown(t,r={}){let i=r&&r.mechanism||{handled:!0,type:"generic"},s=this.buildCoercingContext(i,r,0).apply(t),a=this.buildParsingContext(r),u=this.parseStacktrace(s,a);return{$exception_list:this.convertToExceptionList(u,i),$exception_level:"error"}}async modifyFrames(t){for(let r of t)r.stacktrace&&r.stacktrace.frames&&pOi(r.stacktrace.frames)&&(r.stacktrace.frames=await this.applyModifiers(r.stacktrace.frames));return t}coerceFallback(t){return{type:"Error",value:"Unknown error",stack:t.syntheticException?.stack,synthetic:!0}}parseStacktrace(t,r){let n;t.cause!=null&&(n=this.parseStacktrace(t.cause,r));let i;return t.stack!=""&&t.stack!=null&&(i=this.applyChunkIds(this.stackParser(t.stack,t.synthetic?r.skipFirstLines:0),r.chunkIdMap)),{...t,cause:n,stack:i}}applyChunkIds(t,r){return t.map(n=>(n.filename&&r&&(n.chunk_id=r[n.filename]),n))}applyCoercers(t,r){for(let n of this.coercers)if(n.match(t))return n.coerce(t,r);return this.coerceFallback(r)}async applyModifiers(t){let r=t;for(let n of this.modifiers)r=await n(r);return r}convertToExceptionList(t,r){let n={type:t.type,value:t.value,mechanism:{type:r.type??"generic",handled:r.handled??!0,synthetic:t.synthetic??!1}};t.stack&&(n.stacktrace={type:"raw",frames:t.stack});let i=[n];return t.cause!=null&&i.push(...this.convertToExceptionList(t.cause,{...r,handled:!0})),i}buildParsingContext(t){return{chunkIdMap:_1a(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=Gbf){let u=this.buildCoercingContext(t,r,a);return this.applyCoercers(s,u)}};return{...r,syntheticException:n==0?r.syntheticException:void 0,mechanism:t,apply:s=>i(s,n),next:s=>i(s,n+1)}}};var n1="?";function oK(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?n1:r,in_app:!0};return B9e(n)||(o.lineno=n),B9e(i)||(o.colno=i),o}var JEr=(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]:n1,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var Wbf=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,$bf=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Hbf=/\((\S*)(?::(\d+))(?::(\d+))\)/,wOi=(e,t)=>{let r=Wbf.exec(e);if(r){let[,i,o,s]=r;return oK(t,i,n1,+o,+s)}let n=$bf.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=Hbf.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=JEr(n[1]||n1,n[2]);return oK(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var Kbf=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Jbf=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,COi=(e,t)=>{let r=Kbf.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=Jbf.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]||n1;return[o,i]=JEr(o,i),oK(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var Ybf=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,S1a=(e,t)=>{let r=Ybf.exec(e);return r?oK(t,r[2],r[1]||n1,+r[3],r[4]?+r[4]:void 0):void 0};var Xbf=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,B1a=(e,t)=>{let r=Xbf.exec(e);return r?oK(t,r[2],r[3]||n1,+r[1]):void 0},Zbf=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,O1a=(e,t)=>{let r=Zbf.exec(e);return r?oK(t,r[5],r[3]||r[4]||n1,+r[1],+r[2]):void 0};var e0f=/^\s*[-]{4,}$/,t0f=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,T1a=(e,t)=>{let r=e.match(t0f);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||n1,o=s?`${s}.${a}`:a);let u=r[2]?.startsWith("file://")?r[2].slice(7):r[2],c=r[5]==="native";return u?.match(/\/[A-Z]:/)&&(u=u.slice(1)),!u&&r[5]&&!c&&(u=r[5]),{filename:u?decodeURI(u):void 0,module:void 0,function:o,lineno:P1a(r[3]),colno:P1a(r[4]),in_app:r0f(u||"",c),platform:t}}if(e.match(e0f))return{filename:e,platform:t}};function r0f(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 P1a(e){return parseInt(e||"",10)||void 0}var D1a=/\(error: (.*)\)/,R1a=50;function F1a(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,R1a).map(r=>({...r,filename:r.filename||n0f(t).filename,function:r.function||n1}))}function n0f(e){return e[e.length-1]||{}}function i0f(){return k1a("web:javascript",wOi,COi)}function k1a(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
1655
- `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let u=D1a.test(a)?a.replace(D1a,"$1"):a;if(!u.match(/\S*Error: /)){for(let c of t){let l=c(u,e);if(l){i.push(l);break}}if(i.length>=R1a)break}}return F1a(i)}}var xOi=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=NCt(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 NPe(t,"DOMException")}isDOMError(t){return NPe(t,"DOMError")}};var _Oi=class{match(t){return dOi(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var SOi=class{constructor(){}match(t){return a1a(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 o0f=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,BOi=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(o0f);return i&&(r=i[1],n=i[2]),[r,n]}};var Q1a=["fatal","error","warning","log","info","debug"];function YEr(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 OOi=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 MEr(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=YEr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return NCt(t)&&!o1a(t)&&Q1a.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(v1a(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var POi=class{match(t){return MEr(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${YEr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var TOi=class{match(t){return jCt(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var DOi=class{match(t){return NPe(t,"PromiseRejectionEvent")}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return jCt(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){if(jCt(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var ROi=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 M1a=require("fs"),L1a=require("readline"),XEr=new bF.ReduceableCache(25),U1a=new bF.ReduceableCache(20),FOi=7,s0f=1e3,a0f=1e4;async function z1a(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"||p0f(s)||f0f(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(U1a.get(i))continue;let o=t[i];if(!o)continue;o.sort((u,c)=>u-c);let s=m0f(o);if(s.every(u=>d0f(i,u)))continue;let a=h0f(XEr,i,{});n.push(u0f(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&c0f(e,XEr),XEr.reduce(),e}function u0f(e,t,r){return new Promise(n=>{let i=(0,M1a.createReadStream)(e),o=(0,L1a.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,u=0,c=t[u];if(c===void 0)return void s();let l=c[0],p=c[1];function d(){U1a.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]=g0f(f,0),a>=p)){if(u===t.length-1){o.close(),o.removeAllListeners();return}u++;let m=t[u];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function c0f(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;l0f(r.lineno,r,n)}}function l0f(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=V1a(e);i<e;i++){let o=r[i];if(o===void 0)return void N1a(t);t.pre_context.push(o)}if(r[e]===void 0)return void N1a(t);t.context_line=r[e];let n=q1a(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 N1a(e){delete e.pre_context,delete e.context_line,delete e.post_context}function p0f(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function f0f(e){return e.lineno!==void 0&&e.lineno>a0f||e.colno!==void 0&&e.colno>s0f}function d0f(e,t){let r=XEr.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 m0f(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=j1a(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+FOi:(i.push(n),n=j1a(o)),t++}return i}function j1a(e){return[V1a(e),q1a(e)]}function V1a(e){return Math.max(1,e-FOi)}function q1a(e){return e+FOi}function h0f(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function g0f(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 A0f(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 G1a(e,t){globalThis.process?.on("uncaughtException",A0f(e,t))}function W1a(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var y0f=2e3,iV=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new LEr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return fOi(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i};n||(o.$process_person_profile=!1);let s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n||iK(),properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(G1a(this.onException.bind(this),this.onFatalError.bind(this)),W1a(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(y0f),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var $1a="5.26.2";var zCt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function H1a(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 b0f=6e4,E0f=1152921504606847e3,v0f=["is_not"],D9e=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},ah=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},sK=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},ZEr=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let u=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,u)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(c){c instanceof sK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${t}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${c}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(u=>this.featureFlagsByKey[u]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async u=>{try{let{value:c,payload:l}=await this.computeFlagAndPayloadLocally(u,a);n[u.key]=c,l&&(i[u.key]=l)}catch(c){c instanceof sK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${u.key}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${u.key}: ${c}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new ah("Flag has experience continuity enabled");if(!t.active)return!1;let u=(t.filters||{}).aggregation_group_type_index;if(u!=null){let c=this.groupTypeMapping[String(u)];if(!c)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${u} for feature flag ${t.key}`)),new ah("Flag has unknown group type index");if(!(c in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[c];return await this.matchFeatureFlagProperties(t,i[c],l,r)}{let c=this.getBucketingValueForFlag(t,n,o);if(c===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new ah(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,c,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new ah("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new ah(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new ah(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new ah(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let u of s){if(!(u in i)){let l=this.featureFlagsByKey[u];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[u]=p}catch(p){throw new ah(`Error evaluating flag dependency '${u}' for flag '${o}': ${p}`)}else i[u]=!1;else throw new ah(`Missing flag dependency '${u}' for flag '${o}'`)}if(i[u]==null)throw new ah(`Dependency '${u}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,u;for(let c of s)try{if(await this.isConditionMatch(t,r,c,n,i)){let l=c.variant,p=o.multivariate?.variants||[];u=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof sK)throw l;if(l instanceof ah)a=!0;else throw l}if(u!==void 0)return u;if(a)throw new ah("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=u=>{this.logMsgIfDebug(()=>console.warn(u))};if((n.properties||[]).length>0){for(let u of n.properties){let c=u.type,l=!1;if(l=c==="cohort"?Z1a(u,i,this.cohorts,this.debugMode):c==="flag"?await this.evaluateFlagDependency(u,i,o):X1a(u,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await K1a(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await K1a(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(b0f,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 D9e(`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 D9e(`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 D9e(`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 D9e&&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=jPe(()=>{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 K1a(e,t,r=""){let n=await H1a(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/E0f}function X1a(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")throw new ah("Operator is_not_set is not supported")}else throw new ah(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!v0f.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(c,l){return Array.isArray(c)?c.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(c).toLowerCase()===String(l).toLowerCase()}function u(c,l,p){if(p==="gt")return c>l;if(p==="gte")return c>=l;if(p==="lt")return c<l;if(p==="lte")return c<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return J1a(String(i))&&String(s).match(String(i))!==null;case"not_regex":return J1a(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let c=typeof i=="number"?i:null;if(typeof i=="string")try{c=parseFloat(i)}catch{}return c==null||s==null?u(String(s),String(i),o):typeof s=="string"?u(s,String(i),o):u(s,c,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new ah("Date operations cannot be performed on boolean values");let c=w0f(String(i));if(c==null&&(c=Y1a(i)),c==null)throw new ah(`Invalid date: ${i}`);let l=Y1a(s);return["is_date_before"].includes(o)?l<c:l>c}default:throw new ah(`Unknown operator: ${o}`)}}function I0f(e,t){if(!(e in t))throw new sK(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function Z1a(e,t,r,n=!1){let i=String(e.value);I0f(i,r);let o=r[i];return eSa(o,t,r,n)}function eSa(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let u=eSa(a,t,r,n);if(i==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof sK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let u;if(a.type==="cohort")u=Z1a(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else u=X1a(a,t);let c=a.negation||!1;if(i==="AND"){if(!u&&!c||u&&c)return!1}else if(u&&!c||!u&&c)return!0}catch(u){if(u instanceof sK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("can't match cohort without a given cohort property value");return i==="AND"}function J1a(e){try{return new RegExp(e),!0}catch{return!1}}function Y1a(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new ah(`${e} is in an invalid date format`)}throw new ah(`The date provided ${e} must be a string, number, or date object`)}function w0f(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 evr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var C0f=100,tSa=3e4,x0f=5e4,tvr=class extends UCt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new evr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,C0f):tSa,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 ZEr({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 iV(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||x0f}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 $1a}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=tSa){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let w=this._flagOverrides[t];if(w===void 0)return;let x=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:x}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f,m=!1,h,g,A,E,v,b;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let x=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(x){m=!0;let C=x.value;E=w.id,b="Evaluated locally",f={key:t,enabled:C!==!1,variant:typeof C=="string"?C:void 0,payload:x.payload??void 0}}}catch(x){if(x instanceof sK||x instanceof ah)this._logger?.info(`${x.name} when computing flag locally: ${t}: ${x.message}`);else throw x}}if(!m&&!u){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)A=zCt.UNKNOWN_ERROR;else{h=w.requestId,g=w.evaluatedAt;let x=[];w.errorsWhileComputingFlags&&x.push(zCt.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&x.push(zCt.QUOTA_LIMITED);let C=w.flags[t];if(C===void 0)x.push(zCt.FLAG_MISSING);else{E=C.metadata?.id,v=C.metadata?.version,b=C.reason?.description??C.reason?.code;let _;if(C.metadata?.payload!==void 0)try{_=JSON.parse(C.metadata.payload)}catch{_=C.metadata.payload}f={key:t,enabled:C.enabled,variant:C.variant,payload:_}}x.length>0&&(A=x.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,x=`${t}_${w}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(x)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(x):this.distinctIdHasSentFlagCalls[r]=[x];let C={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:E,$feature_flag_version:v,$feature_flag_reason:b,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():g};if(m&&this.featureFlagsPoller){let _=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();_!==void 0&&(C.$feature_flag_definitions_loaded_at=_)}A&&(C.$feature_flag_error=A),this.capture({distinctId:r,event:"$feature_flag_called",properties:C,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},g=!0;if(f&&(m=f.response,h=f.payloads,g=f.fallbackToFlags),g&&!u){let A=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...A.flags||{}},h={...h,...A.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){return this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown(),super._shutdown(t)}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=jPe(()=>{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(u1a(s)&&r&&o in r){let a={};for(let[u,c]of Object.entries(s))a[String(u)]=String(c);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!iV.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(iV.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!iV.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");this.addPendingPromise(iV.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=iK(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,u,h)}return f.event,{}}).then(h=>{let g={};if(h)for(let[E,v]of Object.entries(h))g[`$feature/${E}`]=v;let A=Object.keys(h||{}).filter(E=>h?.[E]!==!1).sort();return A.length>0&&(g.$active_feature_flags=A),g}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&n1a(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 rSa=require("async_hooks"),rvr=class{constructor(){this.storage=new rSa.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 nSa="posthog-node";function _0f(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let u=s.tags[kOi.POSTHOG_ID_TAG];if(u===void 0)return s;let c=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${u}`,c).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:u,properties:f}),s}}var kOi=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=nSa,this.name=nSa,this.setupOnce=function(s,a){let u=a()?.getClient()?.getDsn()?.projectId;s(_0f(t,{organization:r,projectId:u,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};iV.errorPropertiesBuilder=new bF.ErrorPropertiesBuilder([new bF.EventCoercer,new bF.ErrorCoercer,new bF.ObjectCoercer,new bF.StringCoercer,new bF.PrimitiveCoercer],bF.createStackParser("node:javascript",bF.nodeStackLineParser),[Z_a(),z1a]);var R9e=class extends tvr{getLibraryId(){return"posthog-node"}initializeContext(){return new rvr}};var nvr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new R9e(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"4.30.2",usingAccessToken:!0}})}async flush(){await this.posthog.flush()}};var VCt=class{async sendEvent(){}async identify(){}async flush(){}};Vt();var F9e=require("fs/promises"),iSa=require("os"),oSa=require("path");var S0f="id",B0f=".fern",qCt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new R9e(r),this.userId=t==null?void 0:Xwi(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"4.30.2",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){await this.posthog.flush()}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await FA({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=We(Ut.of((0,iSa.homedir)()),Se.of(B0f),Se.of(S0f));await Xt(t)||(await(0,F9e.mkdir)((0,oSa.dirname)(t),{recursive:!0}),await(0,F9e.writeFile)(t,mC())),this.persistedDistinctId=(await(0,F9e.readFile)(t)).toString()}return this.persistedDistinctId}};var QOi;async function k9e(){return QOi==null&&(QOi=await O0f()),QOi}async function O0f(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new VCt;let r=await ghr();return r!=null?new qCt({token:r,posthogApiKey:e}):await UH()!=null?new nvr({posthogApiKey:e}):new qCt({token:void 0,posthogApiKey:e})}catch{return new VCt}}Qt();var GCt=_e(require("process"),1);rNe();var uSa=_e(oAi(),1),cSa=_e(aSa(),1);function TC(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=h5(e),e.length===0))return 0;e=e.replace((0,cSa.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(uSa.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function ivr(e){let t=0;for(let r of e.split(`
1656
+ `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let u=D1a.test(a)?a.replace(D1a,"$1"):a;if(!u.match(/\S*Error: /)){for(let c of t){let l=c(u,e);if(l){i.push(l);break}}if(i.length>=R1a)break}}return F1a(i)}}var xOi=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=NCt(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 NPe(t,"DOMException")}isDOMError(t){return NPe(t,"DOMError")}};var _Oi=class{match(t){return dOi(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var SOi=class{constructor(){}match(t){return a1a(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 o0f=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,BOi=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(o0f);return i&&(r=i[1],n=i[2]),[r,n]}};var Q1a=["fatal","error","warning","log","info","debug"];function YEr(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 OOi=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 MEr(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=YEr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return NCt(t)&&!o1a(t)&&Q1a.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(v1a(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var POi=class{match(t){return MEr(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${YEr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var TOi=class{match(t){return jCt(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var DOi=class{match(t){return NPe(t,"PromiseRejectionEvent")}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return jCt(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){if(jCt(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var ROi=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 M1a=require("fs"),L1a=require("readline"),XEr=new bF.ReduceableCache(25),U1a=new bF.ReduceableCache(20),FOi=7,s0f=1e3,a0f=1e4;async function z1a(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"||p0f(s)||f0f(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(U1a.get(i))continue;let o=t[i];if(!o)continue;o.sort((u,c)=>u-c);let s=m0f(o);if(s.every(u=>d0f(i,u)))continue;let a=h0f(XEr,i,{});n.push(u0f(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&c0f(e,XEr),XEr.reduce(),e}function u0f(e,t,r){return new Promise(n=>{let i=(0,M1a.createReadStream)(e),o=(0,L1a.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,u=0,c=t[u];if(c===void 0)return void s();let l=c[0],p=c[1];function d(){U1a.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]=g0f(f,0),a>=p)){if(u===t.length-1){o.close(),o.removeAllListeners();return}u++;let m=t[u];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function c0f(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;l0f(r.lineno,r,n)}}function l0f(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=V1a(e);i<e;i++){let o=r[i];if(o===void 0)return void N1a(t);t.pre_context.push(o)}if(r[e]===void 0)return void N1a(t);t.context_line=r[e];let n=q1a(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 N1a(e){delete e.pre_context,delete e.context_line,delete e.post_context}function p0f(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function f0f(e){return e.lineno!==void 0&&e.lineno>a0f||e.colno!==void 0&&e.colno>s0f}function d0f(e,t){let r=XEr.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 m0f(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=j1a(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+FOi:(i.push(n),n=j1a(o)),t++}return i}function j1a(e){return[V1a(e),q1a(e)]}function V1a(e){return Math.max(1,e-FOi)}function q1a(e){return e+FOi}function h0f(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function g0f(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 A0f(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 G1a(e,t){globalThis.process?.on("uncaughtException",A0f(e,t))}function W1a(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var y0f=2e3,iV=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new LEr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return fOi(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i};n||(o.$process_person_profile=!1);let s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n||iK(),properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(G1a(this.onException.bind(this),this.onFatalError.bind(this)),W1a(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(y0f),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var $1a="5.26.2";var zCt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function H1a(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 b0f=6e4,E0f=1152921504606847e3,v0f=["is_not"],D9e=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},ah=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},sK=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},ZEr=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let u=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,u)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(c){c instanceof sK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${t}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${c}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(u=>this.featureFlagsByKey[u]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async u=>{try{let{value:c,payload:l}=await this.computeFlagAndPayloadLocally(u,a);n[u.key]=c,l&&(i[u.key]=l)}catch(c){c instanceof sK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${u.key}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${u.key}: ${c}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new ah("Flag has experience continuity enabled");if(!t.active)return!1;let u=(t.filters||{}).aggregation_group_type_index;if(u!=null){let c=this.groupTypeMapping[String(u)];if(!c)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${u} for feature flag ${t.key}`)),new ah("Flag has unknown group type index");if(!(c in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[c];return await this.matchFeatureFlagProperties(t,i[c],l,r)}{let c=this.getBucketingValueForFlag(t,n,o);if(c===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new ah(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,c,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new ah("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new ah(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new ah(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new ah(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let u of s){if(!(u in i)){let l=this.featureFlagsByKey[u];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[u]=p}catch(p){throw new ah(`Error evaluating flag dependency '${u}' for flag '${o}': ${p}`)}else i[u]=!1;else throw new ah(`Missing flag dependency '${u}' for flag '${o}'`)}if(i[u]==null)throw new ah(`Dependency '${u}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,u;for(let c of s)try{if(await this.isConditionMatch(t,r,c,n,i)){let l=c.variant,p=o.multivariate?.variants||[];u=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof sK)throw l;if(l instanceof ah)a=!0;else throw l}if(u!==void 0)return u;if(a)throw new ah("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=u=>{this.logMsgIfDebug(()=>console.warn(u))};if((n.properties||[]).length>0){for(let u of n.properties){let c=u.type,l=!1;if(l=c==="cohort"?Z1a(u,i,this.cohorts,this.debugMode):c==="flag"?await this.evaluateFlagDependency(u,i,o):X1a(u,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await K1a(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await K1a(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(b0f,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 D9e(`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 D9e(`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 D9e(`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 D9e&&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=jPe(()=>{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 K1a(e,t,r=""){let n=await H1a(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/E0f}function X1a(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")throw new ah("Operator is_not_set is not supported")}else throw new ah(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!v0f.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(c,l){return Array.isArray(c)?c.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(c).toLowerCase()===String(l).toLowerCase()}function u(c,l,p){if(p==="gt")return c>l;if(p==="gte")return c>=l;if(p==="lt")return c<l;if(p==="lte")return c<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return J1a(String(i))&&String(s).match(String(i))!==null;case"not_regex":return J1a(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let c=typeof i=="number"?i:null;if(typeof i=="string")try{c=parseFloat(i)}catch{}return c==null||s==null?u(String(s),String(i),o):typeof s=="string"?u(s,String(i),o):u(s,c,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new ah("Date operations cannot be performed on boolean values");let c=w0f(String(i));if(c==null&&(c=Y1a(i)),c==null)throw new ah(`Invalid date: ${i}`);let l=Y1a(s);return["is_date_before"].includes(o)?l<c:l>c}default:throw new ah(`Unknown operator: ${o}`)}}function I0f(e,t){if(!(e in t))throw new sK(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function Z1a(e,t,r,n=!1){let i=String(e.value);I0f(i,r);let o=r[i];return eSa(o,t,r,n)}function eSa(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let u=eSa(a,t,r,n);if(i==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof sK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let u;if(a.type==="cohort")u=Z1a(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else u=X1a(a,t);let c=a.negation||!1;if(i==="AND"){if(!u&&!c||u&&c)return!1}else if(u&&!c||!u&&c)return!0}catch(u){if(u instanceof sK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("can't match cohort without a given cohort property value");return i==="AND"}function J1a(e){try{return new RegExp(e),!0}catch{return!1}}function Y1a(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new ah(`${e} is in an invalid date format`)}throw new ah(`The date provided ${e} must be a string, number, or date object`)}function w0f(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 evr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var C0f=100,tSa=3e4,x0f=5e4,tvr=class extends UCt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new evr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,C0f):tSa,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 ZEr({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 iV(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||x0f}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 $1a}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=tSa){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let w=this._flagOverrides[t];if(w===void 0)return;let x=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:x}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f,m=!1,h,g,A,E,v,b;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let x=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(x){m=!0;let C=x.value;E=w.id,b="Evaluated locally",f={key:t,enabled:C!==!1,variant:typeof C=="string"?C:void 0,payload:x.payload??void 0}}}catch(x){if(x instanceof sK||x instanceof ah)this._logger?.info(`${x.name} when computing flag locally: ${t}: ${x.message}`);else throw x}}if(!m&&!u){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)A=zCt.UNKNOWN_ERROR;else{h=w.requestId,g=w.evaluatedAt;let x=[];w.errorsWhileComputingFlags&&x.push(zCt.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&x.push(zCt.QUOTA_LIMITED);let C=w.flags[t];if(C===void 0)x.push(zCt.FLAG_MISSING);else{E=C.metadata?.id,v=C.metadata?.version,b=C.reason?.description??C.reason?.code;let _;if(C.metadata?.payload!==void 0)try{_=JSON.parse(C.metadata.payload)}catch{_=C.metadata.payload}f={key:t,enabled:C.enabled,variant:C.variant,payload:_}}x.length>0&&(A=x.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,x=`${t}_${w}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(x)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(x):this.distinctIdHasSentFlagCalls[r]=[x];let C={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:E,$feature_flag_version:v,$feature_flag_reason:b,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():g};if(m&&this.featureFlagsPoller){let _=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();_!==void 0&&(C.$feature_flag_definitions_loaded_at=_)}A&&(C.$feature_flag_error=A),this.capture({distinctId:r,event:"$feature_flag_called",properties:C,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},g=!0;if(f&&(m=f.response,h=f.payloads,g=f.fallbackToFlags),g&&!u){let A=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...A.flags||{}},h={...h,...A.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){return this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown(),super._shutdown(t)}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=jPe(()=>{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(u1a(s)&&r&&o in r){let a={};for(let[u,c]of Object.entries(s))a[String(u)]=String(c);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!iV.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(iV.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!iV.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");this.addPendingPromise(iV.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=iK(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,u,h)}return f.event,{}}).then(h=>{let g={};if(h)for(let[E,v]of Object.entries(h))g[`$feature/${E}`]=v;let A=Object.keys(h||{}).filter(E=>h?.[E]!==!1).sort();return A.length>0&&(g.$active_feature_flags=A),g}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&n1a(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 rSa=require("async_hooks"),rvr=class{constructor(){this.storage=new rSa.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 nSa="posthog-node";function _0f(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let u=s.tags[kOi.POSTHOG_ID_TAG];if(u===void 0)return s;let c=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${u}`,c).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:u,properties:f}),s}}var kOi=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=nSa,this.name=nSa,this.setupOnce=function(s,a){let u=a()?.getClient()?.getDsn()?.projectId;s(_0f(t,{organization:r,projectId:u,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};iV.errorPropertiesBuilder=new bF.ErrorPropertiesBuilder([new bF.EventCoercer,new bF.ErrorCoercer,new bF.ObjectCoercer,new bF.StringCoercer,new bF.PrimitiveCoercer],bF.createStackParser("node:javascript",bF.nodeStackLineParser),[Z_a(),z1a]);var R9e=class extends tvr{getLibraryId(){return"posthog-node"}initializeContext(){return new rvr}};var nvr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new R9e(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"4.31.0",usingAccessToken:!0}})}async flush(){await this.posthog.flush()}};var VCt=class{async sendEvent(){}async identify(){}async flush(){}};Vt();var F9e=require("fs/promises"),iSa=require("os"),oSa=require("path");var S0f="id",B0f=".fern",qCt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new R9e(r),this.userId=t==null?void 0:Xwi(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"4.31.0",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){await this.posthog.flush()}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await FA({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=We(Ut.of((0,iSa.homedir)()),Se.of(B0f),Se.of(S0f));await Xt(t)||(await(0,F9e.mkdir)((0,oSa.dirname)(t),{recursive:!0}),await(0,F9e.writeFile)(t,mC())),this.persistedDistinctId=(await(0,F9e.readFile)(t)).toString()}return this.persistedDistinctId}};var QOi;async function k9e(){return QOi==null&&(QOi=await O0f()),QOi}async function O0f(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new VCt;let r=await ghr();return r!=null?new qCt({token:r,posthogApiKey:e}):await UH()!=null?new nvr({posthogApiKey:e}):new qCt({token:void 0,posthogApiKey:e})}catch{return new VCt}}Qt();var GCt=_e(require("process"),1);rNe();var uSa=_e(oAi(),1),cSa=_e(aSa(),1);function TC(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=h5(e),e.length===0))return 0;e=e.replace((0,cSa.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(uSa.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function ivr(e){let t=0;for(let r of e.split(`
1656
1657
  `))t=Math.max(t,TC(r));return t}var OSa=_e(jOi(),1);var T0f=/[\p{Lu}]/u,D0f=/[\p{Ll}]/u,fSa=/^[\p{Lu}](?![\p{Lu}])/gu,hSa=/([\p{Alpha}\p{N}_]|$)/u,MOi=/[_.\- ]+/,R0f=new RegExp("^"+MOi.source),dSa=new RegExp(MOi.source+hSa.source,"gu"),mSa=new RegExp("\\d+"+hSa.source,"gu"),F0f=(e,t,r,n)=>{let i=!1,o=!1,s=!1,a=!1;for(let u=0;u<e.length;u++){let c=e[u];a=u>2?e[u-3]==="-":!0,i&&T0f.test(c)?(e=e.slice(0,u)+"-"+e.slice(u),i=!1,s=o,o=!0,u++):o&&s&&D0f.test(c)&&(!a||n)?(e=e.slice(0,u-1)+"-"+e.slice(u-1),s=o,o=!1,i=!0):(i=t(c)===c&&r(c)!==c,s=o,o=r(c)===c&&t(c)!==c)}return e},k0f=(e,t)=>(fSa.lastIndex=0,e.replace(fSa,r=>t(r))),Q0f=(e,t)=>(dSa.lastIndex=0,mSa.lastIndex=0,e.replace(dSa,(r,n)=>t(n)).replace(mSa,r=>t(r)));function LOi(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?MOi.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=F0f(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(R0f,""),e=t.preserveConsecutiveUppercase?k0f(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),Q0f(e,n))}var qOi=_e(ASa(),1);rNe();var ySa=(e=0)=>t=>`\x1B[${t+e}m`,bSa=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,ESa=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,Iy={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},v4y=Object.keys(Iy.modifier),L0f=Object.keys(Iy.color),U0f=Object.keys(Iy.bgColor),I4y=[...L0f,...U0f];function z0f(){let e=new Map;for(let[t,r]of Object.entries(Iy)){for(let[n,i]of Object.entries(r))Iy[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=Iy[n],e.set(i[0],i[1]);Object.defineProperty(Iy,t,{value:r,enumerable:!1})}return Object.defineProperty(Iy,"codes",{value:e,enumerable:!1}),Iy.color.close="\x1B[39m",Iy.bgColor.close="\x1B[49m",Iy.color.ansi=ySa(),Iy.color.ansi256=bSa(),Iy.color.ansi16m=ESa(),Iy.bgColor.ansi=ySa(10),Iy.bgColor.ansi256=bSa(10),Iy.bgColor.ansi16m=ESa(10),Object.defineProperties(Iy,{rgbToAnsi256:{value(t,r,n){return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[n]=r;n.length===3&&(n=[...n].map(o=>o+o).join(""));let i=Number.parseInt(n,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:t=>Iy.rgbToAnsi256(...Iy.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,n,i;if(t>=232)r=((t-232)*10+8)/255,n=r,i=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,n=Math.floor(a/6)/5,i=a%6/5}let o=Math.max(r,n,i)*2;if(o===0)return 30;let s=30+(Math.round(i)<<2|Math.round(n)<<1|Math.round(r));return o===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,n)=>Iy.ansi256ToAnsi(Iy.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>Iy.ansi256ToAnsi(Iy.hexToAnsi256(t)),enumerable:!1}}),Iy}var V0f=z0f(),vSa=V0f;var ovr=new Set(["\x1B","\x9B"]),q0f=39,zOi="\x07",CSa="[",G0f="]",xSa="m",VOi=`${G0f}8;;`,ISa=e=>`${ovr.values().next().value}${CSa}${e}${xSa}`,wSa=e=>`${ovr.values().next().value}${VOi}${e}${zOi}`,W0f=e=>e.split(" ").map(t=>TC(t)),UOi=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=TC(h5(e[e.length-1]));for(let[a,u]of n.entries()){let c=TC(u);if(s+c<=r?e[e.length-1]+=u:(e.push(u),s=0),ovr.has(u)&&(i=!0,o=n.slice(a+1).join("").startsWith(VOi)),i){o?u===zOi&&(i=!1,o=!1):u===xSa&&(i=!1);continue}s+=c,s===r&&a<n.length-1&&(e.push(""),s=0)}!s&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},$0f=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(TC(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},H0f=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=W0f(e),a=[""];for(let[c,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=TC(a[a.length-1]);if(c!==0&&(p>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),p=0),(p>0||r.trim===!1)&&(a[a.length-1]+=" ",p++)),r.hard&&s[c]>t){let d=t-p,f=1+Math.floor((s[c]-d-1)/t);Math.floor((s[c]-1)/t)<f&&a.push(""),UOi(a,l,t);continue}if(p+s[c]>t&&p>0&&s[c]>0){if(r.wordWrap===!1&&p<t){UOi(a,l,t);continue}a.push("")}if(p+s[c]>t&&r.wordWrap===!1){UOi(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(c=>$0f(c)));let u=[...a.join(`
1657
1658
  `)];for(let[c,l]of u.entries()){if(n+=l,ovr.has(l)){let{groups:d}=new RegExp(`(?:\\${CSa}(?<code>\\d+)m|\\${VOi}(?<uri>.*)${zOi})`).exec(u.slice(c).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===q0f?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=vSa.codes.get(Number(i));u[c+1]===`
1658
1659
  `?(o&&(n+=wSa("")),i&&p&&(n+=ISa(p))):l===`
@@ -2159,7 +2160,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
2159
2160
  Example: package-name: "@scope/package"`)}return{success:!1,warnings:[{type:"conflict",message:`Failed to parse generators.yml: ${o}`}]}}}checkDeprecatedFields(t,r){t.openapi!=null&&r.push({type:"deprecated",message:"The 'openapi' field is deprecated",suggestion:"Use 'api.specs' instead"}),t["openapi-overrides"]!=null&&r.push({type:"deprecated",message:"The 'openapi-overrides' field is deprecated",suggestion:"Use 'api.specs.[].overrides' instead"}),t["spec-origin"]!=null&&r.push({type:"deprecated",message:"The 'spec-origin' field is deprecated",suggestion:"Use 'api.specs.[].origin' instead"}),t["async-api"]!=null&&r.push({type:"deprecated",message:"The 'async-api' field is deprecated",suggestion:"Use 'api.specs' with asyncapi instead"}),t["api-settings"]!=null&&r.push({type:"deprecated",message:"The 'api-settings' field is deprecated",suggestion:"Use 'api.specs.[].settings' instead"}),t.whitelabel!=null&&r.push({type:"unsupported",message:"Whitelabel configuration is not yet supported in fern.yml"}),t.metadata!=null&&r.push({type:"unsupported",message:"Metadata configuration is not yet supported in fern.yml"}),t.reviewers!=null&&r.push({type:"unsupported",message:"Reviewers configuration is not yet supported in fern.yml"}),t.aliases!=null&&r.push({type:"unsupported",message:"Group aliases are not yet supported in fern.yml",suggestion:"Use multiple group names in target.group array instead"}),t["auth-schemes"]!=null&&r.push({type:"info",message:"Auth schemes configuration detected but not yet migrated",suggestion:"Auth schemes will be supported in a future version"})}async getAbsoluteFilePath(){let t=We(this.cwd,Se.of(Hd)),r=We(this.cwd,Se.of(u4e));if(await Xt(t,"file"))return t;if(await Xt(r,"file"))return r}};var ESt=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 bSt({cwd:n}).migrate();if(t.push(...o.warnings),!o.success||o.org==null)return{success:!1,warnings:[...t,{type:"conflict",message:"Failed to migrate fern.config.json - organization is required"}],migratedFiles:r};o.absoluteFilePath!=null&&r.push(o.absoluteFilePath);let s=We(n,Se.of(GO)),a=await Xt(s,"directory"),u;if(a){let p=await this.migrateMultiApi({fernDir:n,apisDir:s,org:o.org,warnings:t,migratedFiles:r});if(!p.success)return{success:!1,warnings:t,migratedFiles:r};u=p.fernYml}else{let p=await this.migrateSingleApi({fernDir:n,org:o.org,warnings:t,migratedFiles:r});if(!p.success)return{success:!1,warnings:t,migratedFiles:r};u=p.fernYml}let c=We(this.cwd,Se.of(A1)),l=this.serializeFernYml(u);if(await(0,lrt.writeFile)(c,l,"utf-8"),this.deleteOriginals)for(let p of r)try{await(0,lrt.rm)(p),this.logger.debug(`Deleted ${p}`)}catch{t.push({type:"info",message:`Could not delete ${p}`})}return this.logger.info(`Created ${c}`),{success:!0,warnings:t,migratedFiles:r,outputPath:c}}async migrateSingleApi(t){let{fernDir:r,org:n,warnings:i,migratedFiles:o}=t,a=await new CDe({cwd:r}).migrate();i.push(...a.warnings),a.absoluteFilePath!=null&&o.push(a.absoluteFilePath);let u=await _5i({fernDir:r,generatorsYmlApi:a.rawApi});i.push(...u.warnings);let c={org:n};return u.api!=null&&(c.api=u.api),a.sdks!=null&&(c.sdks=a.sdks),{success:!0,fernYml:c}}async migrateMultiApi(t){let{fernDir:r,apisDir:n,org:i,warnings:o,migratedFiles:s}=t,u=(await(0,lrt.readdir)(n,{withFileTypes:!0})).filter(A=>A.isDirectory()).map(A=>A.name);if(u.length===0)return o.push({type:"conflict",message:"No API directories found in fern/apis/"}),{success:!1,fernYml:{org:i}};let c={},l={targets:{}},p,d;for(let A of u){let E=We(n,Se.of(A)),b=await new CDe({cwd:E,apiName:A}).migrate();if(o.push(...b.warnings),b.absoluteFilePath!=null&&s.push(b.absoluteFilePath),c[A]=b.rawApi,b.sdks!=null){for(let[I,w]of Object.entries(b.sdks.targets))l.targets[I]=w;b.sdks.defaultGroup!=null&&p==null&&(p=b.sdks.defaultGroup),b.sdks.autorelease!=null&&d==null&&(d=b.sdks.autorelease)}}let f=await S5i({fernDir:r,apisDir:n,generatorsYmlApis:c});o.push(...f.warnings);let m={org:i,apis:f.apis};Object.keys(l.targets).length>0&&(p!=null&&(l.defaultGroup=p),d!=null&&(l.autorelease=d),m.sdks=l);let g=await new CDe({cwd:r}).detect();return g.found&&g.absoluteFilePath!=null&&(o.push({type:"info",message:"Found generators.yml in fern root alongside apis/ directory",suggestion:"Review the migrated configuration to ensure it's correct"}),s.push(g.absoluteFilePath)),{success:!0,fernYml:m}}async findFernDirectory(){if(this.cwd.split("/").pop()===$h)return this.cwd;let r=We(this.cwd,Se.of($h));if(await Xt(r,"directory"))return r}serializeFernYml(t){let r={edition:t.edition,org:t.org};return t.api!=null&&(r.api=t.api),t.apis!=null&&(r.apis=t.apis),t.ai!=null&&(r.ai=t.ai),t.cli!=null&&(r.cli=t.cli),t.sdks!=null&&(r.sdks=this.simplifySdks(t.sdks)),wr.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 B5i=class{async handle(t,r){let i=await new ESt({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 gn({message:"Migration failed"})}};function O5i(e,t){let r=new B5i;qa(e,"migrate","Migrate legacy configuration files to fern.yml",(n,i)=>r.handle(n,i),n=>n.option("delete",{type:"boolean",description:"Keep original files after migration",default:!0}),t)}function P5i(e){U1(e,"config","Configure, edit, and inspect your settings",[O5i])}var T5i=class{async handle(t,r){let n=await t.loadWorkspaceOrThrow();if(n.docs==null)throw new gn({message:`No docs configuration found in fern.yml.
2160
2161
 
2161
2162
  Add a 'docs:' section to your fern.yml to get started.`});let o=await new fve({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 gn.exit();return}if(o.violations.length>0)for(let a of o.violations){let u=a.severity==="warning"?Ie.yellow:Ie.red;process.stderr.write(`${u(`${a.displayRelativeFilepath}:${a.line}:${a.column}: ${a.message}`)}
2162
- `)}if(s)throw gn.exit();if(o.warningCount>0){t.stderr.info(`${ns.warning} ${Ie.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(Ie.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${ns.success} ${Ie.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>fK(i))),{success:!r,results:n}}};function D5i(e,t){let r=new T5i;qa(e,"check","Validate docs configuration",(n,i)=>r.handle(n,i),n=>n.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}),t)}var BWa=_e(require("net"),1),OWa=_e(require("os"),1),I0n=class extends Error{constructor(t){super(`${t} is locked`)}},prt={old:new Set,young:new Set},jKf=1e3*15;var vSt,MKf=()=>{let e=OWa.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},_Wa=e=>new Promise((t,r)=>{let n=BWa.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),SWa=async(e,t)=>{if(e.host||e.port===0)return _Wa(e);for(let r of t)try{await _Wa({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},LKf=function*(e){e&&(yield*e),yield 0};async function dve(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let i=e.exclude;if(typeof i[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let o of i){if(typeof o!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(o))throw new TypeError(`Number ${o} in the exclude option is not a safe integer and can't be used`)}r=new Set(i)}vSt===void 0&&(vSt=setTimeout(()=>{vSt=void 0,prt.old=prt.young,prt.young=new Set},jKf),vSt.unref&&vSt.unref());let n=MKf();for(let i of LKf(t))try{if(r.has(i))continue;let o=await SWa({...e,port:i},n);for(;prt.old.has(o)||prt.young.has(o);){if(i!==0)throw new I0n(i);o=await SWa({...e,port:i},n)}return prt.young.add(o),o}catch(o){if(!["EADDRINUSE","EACCES"].includes(o.code)&&!(o instanceof I0n))throw o}throw new Error("No available ports found")}_g();Vt();var Wiu=_e(k5i(),1),$iu=_e(uEn(),1),Wvn=require("fs/promises"),Hiu=_e(require("http"),1),Kiu=_e(require("path"),1);var SYa=require("events"),dEn=_e(require("fs"),1),FDe=_e(require("path"),1);var cYa=_e(require("os"),1),lYa=300,Eve=20,WSt=1e7,pYa=cYa.default.platform();var tnd=pYa==="darwin",e6i=pYa==="win32",vve=tnd||e6i,fYa=3e3,dYa=2e4,t6i=1250;var FX;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(FX||(FX={}));var RDe;(function(e){e.CHANGE="change",e.RENAME="rename"})(RDe||(RDe={}));var $St;(function(e){e.CHANGE="change",e.ERROR="error"})($St||($St={}));var Za;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(Za||(Za={}));var kT;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(kT||(kT={}));var rnd=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,u=0,c=0,l=()=>{let b=Date.now(),I=b-u,w=b-c,x=I>=t||w>=o;return[b,x]},p=b=>{if(c=b,!s)return;let I=s;s=void 0,e.apply(void 0,I)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=b=>{if(c=b,n)return p(b)},h=b=>{if(i&&s)return p(b);s=void 0},g=()=>{a=void 0;let[b,I]=l();return I?h(b):A(b)},A=b=>{let I=b-u,w=b-c,x=t-I,C=o-w,_=Math.min(x,C);return E(_)},E=b=>{a&&clearTimeout(a),!(b<=0)&&(a=setTimeout(g,b))},v=(...b)=>{let[I,w]=l(),x=!!a;if(s=b,u=I,(w||!a)&&E(t),w)return x?p(I):m(I)};return v.cancel=d,v.flush=f,v},cEn=rnd;var o6i=_e(require("fs"),1),pEn=_e(require("path"),1);var vf=_e(require("fs"),1),y1=require("util");var cae=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},kX=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var r6i=_e(require("process"),1),mYa=r6i.default.getuid?!r6i.default.getuid():!1,hYa=1e4,Bk=()=>{};var HSt={isChangeErrorOk:e=>{if(!HSt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!mYa&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!HSt.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(!HSt.isNodeError(e))throw e;if(!HSt.isChangeErrorOk(e))throw e}},CE=HSt;var n6i=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=hYa,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()}}}}},gYa=new n6i;var lae=(e,t)=>function(n){return function i(...o){return gYa.schedule().then(s=>{let a=c=>(s(),c),u=c=>{if(s(),Date.now()>=n)throw c;if(t(c)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw c};return e.apply(void 0,o).then(a,u)})}},pae=(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 nnd={attempt:{chmod:cae((0,y1.promisify)(vf.default.chmod),CE.onChangeError),chown:cae((0,y1.promisify)(vf.default.chown),CE.onChangeError),close:cae((0,y1.promisify)(vf.default.close),Bk),fsync:cae((0,y1.promisify)(vf.default.fsync),Bk),mkdir:cae((0,y1.promisify)(vf.default.mkdir),Bk),realpath:cae((0,y1.promisify)(vf.default.realpath),Bk),stat:cae((0,y1.promisify)(vf.default.stat),Bk),unlink:cae((0,y1.promisify)(vf.default.unlink),Bk),chmodSync:kX(vf.default.chmodSync,CE.onChangeError),chownSync:kX(vf.default.chownSync,CE.onChangeError),closeSync:kX(vf.default.closeSync,Bk),existsSync:kX(vf.default.existsSync,Bk),fsyncSync:kX(vf.default.fsync,Bk),mkdirSync:kX(vf.default.mkdirSync,Bk),realpathSync:kX(vf.default.realpathSync,Bk),statSync:kX(vf.default.statSync,Bk),unlinkSync:kX(vf.default.unlinkSync,Bk)},retry:{close:lae((0,y1.promisify)(vf.default.close),CE.isRetriableError),fsync:lae((0,y1.promisify)(vf.default.fsync),CE.isRetriableError),open:lae((0,y1.promisify)(vf.default.open),CE.isRetriableError),readFile:lae((0,y1.promisify)(vf.default.readFile),CE.isRetriableError),rename:lae((0,y1.promisify)(vf.default.rename),CE.isRetriableError),stat:lae((0,y1.promisify)(vf.default.stat),CE.isRetriableError),write:lae((0,y1.promisify)(vf.default.write),CE.isRetriableError),writeFile:lae((0,y1.promisify)(vf.default.writeFile),CE.isRetriableError),closeSync:pae(vf.default.closeSync,CE.isRetriableError),fsyncSync:pae(vf.default.fsyncSync,CE.isRetriableError),openSync:pae(vf.default.openSync,CE.isRetriableError),readFileSync:pae(vf.default.readFileSync,CE.isRetriableError),renameSync:pae(vf.default.renameSync,CE.isRetriableError),statSync:pae(vf.default.statSync,CE.isRetriableError),writeSync:pae(vf.default.writeSync,CE.isRetriableError),writeFileSync:pae(vf.default.writeFileSync,CE.isRetriableError)}},AYa=nnd;var lEn=_e(require("fs"),1),KSt=_e(require("path"),1);var i6i=()=>{};var ind=()=>{let e=i6i,t=i6i,r=!1,n=!1;return{promise:new Promise((u,c)=>{e=l=>(r=!0,u(l)),t=l=>(n=!0,c(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},yYa=ind;var ond=()=>{let{promise:e,resolve:t,isPending:r}=yYa(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},bYa=ond;var EYa={then:e=>{e()}};var vYa=e=>Array.isArray(e)?e:[e],IYa=e=>typeof e=="function";var snd=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=vYa(o).map(J=>IYa(J)?J:H=>J.test(H)),a=J=>s.some(H=>H(J)),u=t?.signal??{aborted:!1},c=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},g=[],A=new Set,E={},v={},b=new Set,I={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},w={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:g,symlinksNames:A,symlinksNamesToPaths:E,map:v},{promise:x,increment:C,decrement:_}=bYa(),R=0,U=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.directories.push(H),J.directoriesNames.add(ge),l.push(H),p.add(ge),d.propertyIsEnumerable(ge)||(d[ge]=[]),d[ge].push(H),b.add(H),!(me>=n)&&(R>=i||K(H,me+1)))},q=(J,H,ge)=>{b.has(H)||R>=i||(R+=1,J.files.push(H),J.filesNames.add(ge),f.push(H),m.add(ge),h.propertyIsEnumerable(ge)||(h[ge]=[]),h[ge].push(H),b.add(H))},z=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.symlinks.push(H),J.symlinksNames.add(ge),g.push(H),A.add(ge),E.propertyIsEnumerable(ge)||(E[ge]=[]),E[ge].push(H),b.add(H),r&&(me>=n||R>=i||be(H,me+1)))},Z=(J,H,ge,me,we)=>{u.aborted||a(H)||(me.isDirectory()?U(J,H,ge,we):me.isFile()?q(J,H,ge):me.isSymbolicLink()&&z(J,H,ge,we))},oe=(J,H,ge,me)=>{if(u.aborted)return;let we=H===KSt.default.sep?"":KSt.default.sep,Be=ge.name,le=`${H}${we}${Be}`;a(le)||(ge.isDirectory()?U(J,le,Be,me):ge.isFile()?q(J,le,Be):ge.isSymbolicLink()&&z(J,le,Be,me))},V=(J,H,ge,me)=>{for(let we=0,Be=ge.length;we<Be;we++)oe(J,H,ge[we],me)},K=(J,H)=>{u.aborted||H>n||R>=i||(C(),lEn.default.readdir(J,{withFileTypes:!0},(ge,me)=>{if(ge||u.aborted||!me.length)return _();(c(me)||EYa).then(()=>{let Be=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};V(Be,J,me,H),_()})}))},be=(J,H)=>{C(),lEn.default.realpath(J,(ge,me)=>{if(ge||u.aborted)return _();lEn.default.stat(me,(we,Be)=>{if(we||u.aborted)return _();let le=KSt.default.basename(me),ue=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};Z(ue,me,le,Be,H),_()})})};return(async(J,H=1)=>(J=KSt.default.normalize(J),b.add(J),K(J,H),await x,u.aborted?I:w))(e)},wYa=snd;var QX={lang:{debounce:cEn,attempt:e=>{try{return e()}catch(t){return QX.lang.castError(t)}},castArray:e=>QX.lang.isArray(e)?e:[e],castError:e=>QX.lang.isError(e)?e:QX.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(QX.lang.isNaN(e))return QX.lang.isNaN(t);if(QX.lang.isPrimitive(e)||QX.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(pEn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?o6i.default.realpathSync.native(e):o6i.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===pEn.default.sep&&t.length-e.length>pEn.default.sep.length,poll:(e,t=dYa)=>AYa.retry.stat(t)(e,{bigint:!0}).catch(QX.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 wYa(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},cl=QX;var fEn=_e(require("path"),1);var s6i=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||cl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=lYa){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,u)=>{let c=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...u]),p=this.eventsDeduplicate([...c,...l]);this.onTargetEvents(p)},s=cl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,u="",c=!1)=>{c?await this.eventsPopulate([u],n,!0):i.add(u),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===Za.CHANGE&&a===Za.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===Za.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Za.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??Eve:Math.min(1,this.options.depth??Eve),s=this.options.limit??WSt,[a,u]=await cl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),c=[...a,...u];return await Promise.all(c.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())cl.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(Za.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!vve&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(Za.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Za.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(fEn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(fEn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Za.ADD?this.onTargetAdd(n):r===Za.ADD_DIR?this.onTargetAddDir(n):r===Za.CHANGE?this.onTargetChange(n):r===Za.UNLINK?this.onTargetUnlink(n):r===Za.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=RDe.CHANGE,r){if(this.watcher.isClosed())return;let n=fEn.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){e6i&&t.code==="EPERM"?this.onWatcherChange(RDe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on($St.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on($St.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(RDe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&vve&&this.options.native!==!1?this.options.depth??Eve:Math.min(1,this.options.depth??Eve),n=this.options.limit??WSt,[i,o]=await cl.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(RDe.CHANGE,a,t)}))}}},CYa=s6i;var QT={interval:100,intervalId:void 0,fns:new Map,init:()=>{QT.intervalId||(QT.intervalId=setInterval(QT.resolve,QT.interval))},reset:()=>{QT.intervalId&&(clearInterval(QT.intervalId),delete QT.intervalId)},add:(e,t)=>{QT.fns.set(e,Date.now()+t),QT.init()},remove:e=>{QT.fns.delete(e)},resolve:()=>{if(!QT.fns.size)return QT.reset();let e=Date.now();for(let[t,r]of QT.fns)r>=e||(QT.remove(t),t())}},JSt=QT;var YSt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=t6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(cl.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let u=()=>{s.add.delete(n),JSt.remove(c)},c=()=>{u(),a()};JSt.add(c,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;u();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=t6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let u=()=>{s.unlink.delete(n),JSt.remove(c)},c=()=>{u(),a()};JSt.add(c,r);let l=()=>(u(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Za.ADD,FX.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,Za.ADD_DIR,FX.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK,FX.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK_DIR,FX.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}}};YSt.DIR_EVENTS={add:Za.ADD_DIR,rename:Za.RENAME_DIR,unlink:Za.UNLINK_DIR};YSt.FILE_EVENTS={add:Za.ADD,change:Za.CHANGE,rename:Za.RENAME,unlink:Za.UNLINK};var xYa=YSt;var a6i=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(cl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(cl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return cl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);cl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},u6i=a6i;var c6i=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}},_Ya=c6i;var l6i=class{constructor(){this.inos={},this.paths=new u6i,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await cl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new _Ya(n)}reset(){this.inos={},this.paths=new u6i,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,Za.ADD,i),[Za.ADD];if(i.isDirectory())return this.updateIno(t,Za.ADD_DIR,i),[Za.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Za.UNLINK,n),[Za.UNLINK];if(n.isDirectory())return this.updateIno(t,Za.UNLINK_DIR,n),[Za.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Za.CHANGE,i),[Za.CHANGE]);if(i.isDirectory())return this.updateIno(t,Za.UNLINK,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK,Za.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD,i),[Za.UNLINK_DIR,Za.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK_DIR,Za.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?FX.FILE:FX.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)}}},p6i=l6i;var f6i=class e extends SYa.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(kT.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(kT.CLOSE,i)),this._readyWait=new Promise(i=>this.on(kT.READY,i)),this._locker=new xYa(this),this._roots=new Set,this._poller=new p6i,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(cl.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(kT.CLOSE))}error(t){if(this.isClosed())return!1;let r=cl.lang.castError(t);return this.emit(kT.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(kT.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(kT.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)cl.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new CYa(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=cl.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=FDe.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??Eve))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&vve&&l.options.native!==!1)))return!0;if(!vve)break;let c=FDe.default.dirname(t);if(s===c)break;s=c}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=cl.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let u=!r.recursive||vve&&r.native!==!1?r:{...r,recursive:!1},l={watcher:dEn.default.watch(a,u),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=FDe.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(u){this.error(u)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||vve&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??Eve,a=r.limit??WSt,[u]=await cl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let c=await this.watchDirectories([t],r,n,i,o);if(u.length){let l=cl.fs.getDepth(t);for(let p of u){let d=cl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||c)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(c,l)=>{l===t&&(u(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(kT.CLOSE,u),s.watchFile(t,r,o)},u=()=>{this._subwatchers.delete(i),this.removeListener(kT.CLOSE,u),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=FDe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new p6i,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return cl.lang.noop;if(this.pollerExists(t,r))return cl.lang.noop;let i={...r,interval:r.pollingInterval??fYa},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(kT.CLOSE,a),dEn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(kT.CLOSE,a),dEn.default.unwatchFile(t,n)};return cl.lang.attempt(s),()=>cl.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=cl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,u)=>u===s||!cl.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=FDe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await cl.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=FDe.default.dirname(t);return(await cl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=cl.lang.noop){if(cl.lang.isFunction(t))return this.watch([],{},t);if(cl.lang.isUndefined(t))return this.watch([],r,n);if(cl.lang.isFunction(r))return this.watch(t,{},r);if(cl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=cl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==cl.lang.noop&&this.on(kT.ALL,n),r.readdirMap=void 0,this.ready())}},mEn=f6i;BEn();Vt();var krt=require("fs/promises"),RXa=require("os"),FXa=_e(require("path"),1),Oid=".fern",Pid="logs";function Tid(){return"cli@4.30.2"}var LDe=class{logFilePath=null;initialized=!1;sessionStartTime;constructor(){this.sessionStartTime=Date.now()}async initialize(){if(this.initialized)return;let t=We(Ut.of((0,RXa.homedir)()),Se.of(Oid)),r=We(t,Se.of(Pid));await Xt(r)||await(0,krt.mkdir)(r,{recursive:!0});let i=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=We(r,Se.of(i));let o=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${FXa.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
2163
+ `)}if(s)throw gn.exit();if(o.warningCount>0){t.stderr.info(`${ns.warning} ${Ie.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(Ie.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${ns.success} ${Ie.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>fK(i))),{success:!r,results:n}}};function D5i(e,t){let r=new T5i;qa(e,"check","Validate docs configuration",(n,i)=>r.handle(n,i),n=>n.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}),t)}var BWa=_e(require("net"),1),OWa=_e(require("os"),1),I0n=class extends Error{constructor(t){super(`${t} is locked`)}},prt={old:new Set,young:new Set},jKf=1e3*15;var vSt,MKf=()=>{let e=OWa.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},_Wa=e=>new Promise((t,r)=>{let n=BWa.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),SWa=async(e,t)=>{if(e.host||e.port===0)return _Wa(e);for(let r of t)try{await _Wa({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},LKf=function*(e){e&&(yield*e),yield 0};async function dve(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let i=e.exclude;if(typeof i[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let o of i){if(typeof o!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(o))throw new TypeError(`Number ${o} in the exclude option is not a safe integer and can't be used`)}r=new Set(i)}vSt===void 0&&(vSt=setTimeout(()=>{vSt=void 0,prt.old=prt.young,prt.young=new Set},jKf),vSt.unref&&vSt.unref());let n=MKf();for(let i of LKf(t))try{if(r.has(i))continue;let o=await SWa({...e,port:i},n);for(;prt.old.has(o)||prt.young.has(o);){if(i!==0)throw new I0n(i);o=await SWa({...e,port:i},n)}return prt.young.add(o),o}catch(o){if(!["EADDRINUSE","EACCES"].includes(o.code)&&!(o instanceof I0n))throw o}throw new Error("No available ports found")}_g();Vt();var Wiu=_e(k5i(),1),$iu=_e(uEn(),1),Wvn=require("fs/promises"),Hiu=_e(require("http"),1),Kiu=_e(require("path"),1);var SYa=require("events"),dEn=_e(require("fs"),1),FDe=_e(require("path"),1);var cYa=_e(require("os"),1),lYa=300,Eve=20,WSt=1e7,pYa=cYa.default.platform();var tnd=pYa==="darwin",e6i=pYa==="win32",vve=tnd||e6i,fYa=3e3,dYa=2e4,t6i=1250;var FX;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(FX||(FX={}));var RDe;(function(e){e.CHANGE="change",e.RENAME="rename"})(RDe||(RDe={}));var $St;(function(e){e.CHANGE="change",e.ERROR="error"})($St||($St={}));var Za;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(Za||(Za={}));var kT;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(kT||(kT={}));var rnd=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,u=0,c=0,l=()=>{let b=Date.now(),I=b-u,w=b-c,x=I>=t||w>=o;return[b,x]},p=b=>{if(c=b,!s)return;let I=s;s=void 0,e.apply(void 0,I)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=b=>{if(c=b,n)return p(b)},h=b=>{if(i&&s)return p(b);s=void 0},g=()=>{a=void 0;let[b,I]=l();return I?h(b):A(b)},A=b=>{let I=b-u,w=b-c,x=t-I,C=o-w,_=Math.min(x,C);return E(_)},E=b=>{a&&clearTimeout(a),!(b<=0)&&(a=setTimeout(g,b))},v=(...b)=>{let[I,w]=l(),x=!!a;if(s=b,u=I,(w||!a)&&E(t),w)return x?p(I):m(I)};return v.cancel=d,v.flush=f,v},cEn=rnd;var o6i=_e(require("fs"),1),pEn=_e(require("path"),1);var vf=_e(require("fs"),1),y1=require("util");var cae=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},kX=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var r6i=_e(require("process"),1),mYa=r6i.default.getuid?!r6i.default.getuid():!1,hYa=1e4,Bk=()=>{};var HSt={isChangeErrorOk:e=>{if(!HSt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!mYa&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!HSt.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(!HSt.isNodeError(e))throw e;if(!HSt.isChangeErrorOk(e))throw e}},CE=HSt;var n6i=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=hYa,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()}}}}},gYa=new n6i;var lae=(e,t)=>function(n){return function i(...o){return gYa.schedule().then(s=>{let a=c=>(s(),c),u=c=>{if(s(),Date.now()>=n)throw c;if(t(c)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw c};return e.apply(void 0,o).then(a,u)})}},pae=(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 nnd={attempt:{chmod:cae((0,y1.promisify)(vf.default.chmod),CE.onChangeError),chown:cae((0,y1.promisify)(vf.default.chown),CE.onChangeError),close:cae((0,y1.promisify)(vf.default.close),Bk),fsync:cae((0,y1.promisify)(vf.default.fsync),Bk),mkdir:cae((0,y1.promisify)(vf.default.mkdir),Bk),realpath:cae((0,y1.promisify)(vf.default.realpath),Bk),stat:cae((0,y1.promisify)(vf.default.stat),Bk),unlink:cae((0,y1.promisify)(vf.default.unlink),Bk),chmodSync:kX(vf.default.chmodSync,CE.onChangeError),chownSync:kX(vf.default.chownSync,CE.onChangeError),closeSync:kX(vf.default.closeSync,Bk),existsSync:kX(vf.default.existsSync,Bk),fsyncSync:kX(vf.default.fsync,Bk),mkdirSync:kX(vf.default.mkdirSync,Bk),realpathSync:kX(vf.default.realpathSync,Bk),statSync:kX(vf.default.statSync,Bk),unlinkSync:kX(vf.default.unlinkSync,Bk)},retry:{close:lae((0,y1.promisify)(vf.default.close),CE.isRetriableError),fsync:lae((0,y1.promisify)(vf.default.fsync),CE.isRetriableError),open:lae((0,y1.promisify)(vf.default.open),CE.isRetriableError),readFile:lae((0,y1.promisify)(vf.default.readFile),CE.isRetriableError),rename:lae((0,y1.promisify)(vf.default.rename),CE.isRetriableError),stat:lae((0,y1.promisify)(vf.default.stat),CE.isRetriableError),write:lae((0,y1.promisify)(vf.default.write),CE.isRetriableError),writeFile:lae((0,y1.promisify)(vf.default.writeFile),CE.isRetriableError),closeSync:pae(vf.default.closeSync,CE.isRetriableError),fsyncSync:pae(vf.default.fsyncSync,CE.isRetriableError),openSync:pae(vf.default.openSync,CE.isRetriableError),readFileSync:pae(vf.default.readFileSync,CE.isRetriableError),renameSync:pae(vf.default.renameSync,CE.isRetriableError),statSync:pae(vf.default.statSync,CE.isRetriableError),writeSync:pae(vf.default.writeSync,CE.isRetriableError),writeFileSync:pae(vf.default.writeFileSync,CE.isRetriableError)}},AYa=nnd;var lEn=_e(require("fs"),1),KSt=_e(require("path"),1);var i6i=()=>{};var ind=()=>{let e=i6i,t=i6i,r=!1,n=!1;return{promise:new Promise((u,c)=>{e=l=>(r=!0,u(l)),t=l=>(n=!0,c(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},yYa=ind;var ond=()=>{let{promise:e,resolve:t,isPending:r}=yYa(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},bYa=ond;var EYa={then:e=>{e()}};var vYa=e=>Array.isArray(e)?e:[e],IYa=e=>typeof e=="function";var snd=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=vYa(o).map(J=>IYa(J)?J:H=>J.test(H)),a=J=>s.some(H=>H(J)),u=t?.signal??{aborted:!1},c=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},g=[],A=new Set,E={},v={},b=new Set,I={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},w={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:g,symlinksNames:A,symlinksNamesToPaths:E,map:v},{promise:x,increment:C,decrement:_}=bYa(),R=0,U=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.directories.push(H),J.directoriesNames.add(ge),l.push(H),p.add(ge),d.propertyIsEnumerable(ge)||(d[ge]=[]),d[ge].push(H),b.add(H),!(me>=n)&&(R>=i||K(H,me+1)))},q=(J,H,ge)=>{b.has(H)||R>=i||(R+=1,J.files.push(H),J.filesNames.add(ge),f.push(H),m.add(ge),h.propertyIsEnumerable(ge)||(h[ge]=[]),h[ge].push(H),b.add(H))},z=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.symlinks.push(H),J.symlinksNames.add(ge),g.push(H),A.add(ge),E.propertyIsEnumerable(ge)||(E[ge]=[]),E[ge].push(H),b.add(H),r&&(me>=n||R>=i||be(H,me+1)))},Z=(J,H,ge,me,we)=>{u.aborted||a(H)||(me.isDirectory()?U(J,H,ge,we):me.isFile()?q(J,H,ge):me.isSymbolicLink()&&z(J,H,ge,we))},oe=(J,H,ge,me)=>{if(u.aborted)return;let we=H===KSt.default.sep?"":KSt.default.sep,Be=ge.name,le=`${H}${we}${Be}`;a(le)||(ge.isDirectory()?U(J,le,Be,me):ge.isFile()?q(J,le,Be):ge.isSymbolicLink()&&z(J,le,Be,me))},V=(J,H,ge,me)=>{for(let we=0,Be=ge.length;we<Be;we++)oe(J,H,ge[we],me)},K=(J,H)=>{u.aborted||H>n||R>=i||(C(),lEn.default.readdir(J,{withFileTypes:!0},(ge,me)=>{if(ge||u.aborted||!me.length)return _();(c(me)||EYa).then(()=>{let Be=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};V(Be,J,me,H),_()})}))},be=(J,H)=>{C(),lEn.default.realpath(J,(ge,me)=>{if(ge||u.aborted)return _();lEn.default.stat(me,(we,Be)=>{if(we||u.aborted)return _();let le=KSt.default.basename(me),ue=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};Z(ue,me,le,Be,H),_()})})};return(async(J,H=1)=>(J=KSt.default.normalize(J),b.add(J),K(J,H),await x,u.aborted?I:w))(e)},wYa=snd;var QX={lang:{debounce:cEn,attempt:e=>{try{return e()}catch(t){return QX.lang.castError(t)}},castArray:e=>QX.lang.isArray(e)?e:[e],castError:e=>QX.lang.isError(e)?e:QX.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(QX.lang.isNaN(e))return QX.lang.isNaN(t);if(QX.lang.isPrimitive(e)||QX.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(pEn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?o6i.default.realpathSync.native(e):o6i.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===pEn.default.sep&&t.length-e.length>pEn.default.sep.length,poll:(e,t=dYa)=>AYa.retry.stat(t)(e,{bigint:!0}).catch(QX.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 wYa(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},cl=QX;var fEn=_e(require("path"),1);var s6i=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||cl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=lYa){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,u)=>{let c=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...u]),p=this.eventsDeduplicate([...c,...l]);this.onTargetEvents(p)},s=cl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,u="",c=!1)=>{c?await this.eventsPopulate([u],n,!0):i.add(u),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===Za.CHANGE&&a===Za.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===Za.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Za.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??Eve:Math.min(1,this.options.depth??Eve),s=this.options.limit??WSt,[a,u]=await cl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),c=[...a,...u];return await Promise.all(c.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())cl.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(Za.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!vve&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(Za.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Za.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(fEn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(fEn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Za.ADD?this.onTargetAdd(n):r===Za.ADD_DIR?this.onTargetAddDir(n):r===Za.CHANGE?this.onTargetChange(n):r===Za.UNLINK?this.onTargetUnlink(n):r===Za.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=RDe.CHANGE,r){if(this.watcher.isClosed())return;let n=fEn.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){e6i&&t.code==="EPERM"?this.onWatcherChange(RDe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on($St.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on($St.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(RDe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&vve&&this.options.native!==!1?this.options.depth??Eve:Math.min(1,this.options.depth??Eve),n=this.options.limit??WSt,[i,o]=await cl.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(RDe.CHANGE,a,t)}))}}},CYa=s6i;var QT={interval:100,intervalId:void 0,fns:new Map,init:()=>{QT.intervalId||(QT.intervalId=setInterval(QT.resolve,QT.interval))},reset:()=>{QT.intervalId&&(clearInterval(QT.intervalId),delete QT.intervalId)},add:(e,t)=>{QT.fns.set(e,Date.now()+t),QT.init()},remove:e=>{QT.fns.delete(e)},resolve:()=>{if(!QT.fns.size)return QT.reset();let e=Date.now();for(let[t,r]of QT.fns)r>=e||(QT.remove(t),t())}},JSt=QT;var YSt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=t6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(cl.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let u=()=>{s.add.delete(n),JSt.remove(c)},c=()=>{u(),a()};JSt.add(c,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;u();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=t6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let u=()=>{s.unlink.delete(n),JSt.remove(c)},c=()=>{u(),a()};JSt.add(c,r);let l=()=>(u(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Za.ADD,FX.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,Za.ADD_DIR,FX.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK,FX.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK_DIR,FX.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}}};YSt.DIR_EVENTS={add:Za.ADD_DIR,rename:Za.RENAME_DIR,unlink:Za.UNLINK_DIR};YSt.FILE_EVENTS={add:Za.ADD,change:Za.CHANGE,rename:Za.RENAME,unlink:Za.UNLINK};var xYa=YSt;var a6i=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(cl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(cl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return cl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);cl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},u6i=a6i;var c6i=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}},_Ya=c6i;var l6i=class{constructor(){this.inos={},this.paths=new u6i,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await cl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new _Ya(n)}reset(){this.inos={},this.paths=new u6i,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,Za.ADD,i),[Za.ADD];if(i.isDirectory())return this.updateIno(t,Za.ADD_DIR,i),[Za.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Za.UNLINK,n),[Za.UNLINK];if(n.isDirectory())return this.updateIno(t,Za.UNLINK_DIR,n),[Za.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Za.CHANGE,i),[Za.CHANGE]);if(i.isDirectory())return this.updateIno(t,Za.UNLINK,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK,Za.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD,i),[Za.UNLINK_DIR,Za.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK_DIR,Za.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?FX.FILE:FX.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)}}},p6i=l6i;var f6i=class e extends SYa.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(kT.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(kT.CLOSE,i)),this._readyWait=new Promise(i=>this.on(kT.READY,i)),this._locker=new xYa(this),this._roots=new Set,this._poller=new p6i,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(cl.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(kT.CLOSE))}error(t){if(this.isClosed())return!1;let r=cl.lang.castError(t);return this.emit(kT.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(kT.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(kT.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)cl.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new CYa(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=cl.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=FDe.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??Eve))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&vve&&l.options.native!==!1)))return!0;if(!vve)break;let c=FDe.default.dirname(t);if(s===c)break;s=c}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=cl.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let u=!r.recursive||vve&&r.native!==!1?r:{...r,recursive:!1},l={watcher:dEn.default.watch(a,u),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=FDe.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(u){this.error(u)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||vve&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??Eve,a=r.limit??WSt,[u]=await cl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let c=await this.watchDirectories([t],r,n,i,o);if(u.length){let l=cl.fs.getDepth(t);for(let p of u){let d=cl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||c)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(c,l)=>{l===t&&(u(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(kT.CLOSE,u),s.watchFile(t,r,o)},u=()=>{this._subwatchers.delete(i),this.removeListener(kT.CLOSE,u),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=FDe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new p6i,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return cl.lang.noop;if(this.pollerExists(t,r))return cl.lang.noop;let i={...r,interval:r.pollingInterval??fYa},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(kT.CLOSE,a),dEn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(kT.CLOSE,a),dEn.default.unwatchFile(t,n)};return cl.lang.attempt(s),()=>cl.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=cl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,u)=>u===s||!cl.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=FDe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await cl.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=FDe.default.dirname(t);return(await cl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=cl.lang.noop){if(cl.lang.isFunction(t))return this.watch([],{},t);if(cl.lang.isUndefined(t))return this.watch([],r,n);if(cl.lang.isFunction(r))return this.watch(t,{},r);if(cl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=cl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==cl.lang.noop&&this.on(kT.ALL,n),r.readdirMap=void 0,this.ready())}},mEn=f6i;BEn();Vt();var krt=require("fs/promises"),RXa=require("os"),FXa=_e(require("path"),1),Oid=".fern",Pid="logs";function Tid(){return"cli@4.31.0"}var LDe=class{logFilePath=null;initialized=!1;sessionStartTime;constructor(){this.sessionStartTime=Date.now()}async initialize(){if(this.initialized)return;let t=We(Ut.of((0,RXa.homedir)()),Se.of(Oid)),r=We(t,Se.of(Pid));await Xt(r)||await(0,krt.mkdir)(r,{recursive:!0});let i=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=We(r,Se.of(i));let o=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${FXa.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
2163
2164
  `);await(0,krt.writeFile)(this.logFilePath,o,"utf-8"),this.initialized=!0}getLogFilePath(){return this.logFilePath}async writeEntry(t){if(!this.initialized||!this.logFilePath)return;let r=JSON.stringify(t)+`
2164
2165
  `;try{await(0,krt.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:Tid(),level:r,eventType:t.type,data:{durationMs:t.durationMs,metadata:t.metadata}};await this.writeEntry(n)}async logCliMemory(){let t=process.memoryUsage(),r={type:"cli_memory",timestamp:new Date().toISOString(),metadata:{heapUsed:t.heapUsed,heapTotal:t.heapTotal,external:t.external,rss:t.rss,heapUsedMB:Math.round(t.heapUsed/1024/1024*100)/100,heapTotalMB:Math.round(t.heapTotal/1024/1024*100)/100,rssMB:Math.round(t.rss/1024/1024*100)/100}};await this.logCliMetric(r)}async logCliReloadStart(){let t={type:"cli_reload_start",timestamp:new Date().toISOString()};await this.logCliMetric(t)}async logCliReloadFinish(t,r){let n={type:"cli_reload_finish",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliDocsGeneration(t,r){let n={type:"cli_docs_generation",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliValidation(t,r){let n={type:"cli_validation",timestamp:new Date().toISOString(),durationMs:t,metadata:{success:r}};await this.logCliMetric(n)}getEventType(t,r){return r?"aggregate_summary":"type"in t&&typeof t.type=="string"?t.type:"unknown"}static isMetricsMessage(t){if(typeof t!="object"||t===null)return!1;let r=t;return r.type==="metrics"&&typeof r.timestamp=="string"&&typeof r.source=="string"}};var F6i={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function kXa(e){let t=Did();if(t==null)return;let{port:r,debugLogger:n,getDocsLoadResponse:i}=e,o=new Map;function s(u){let c=JSON.stringify(u),l=[];for(let[p]of o)try{p.send(c)}catch{l.push(p)}for(let p of l){let d=o.get(p);d&&(clearInterval(d.pingInterval),o.delete(p))}}let a=t.serve({port:r,fetch(u,c){if(u.method==="OPTIONS")return new Response(null,{status:204,headers:F6i});let l=new URL(u.url);if(u.headers.get("upgrade")?.toLowerCase()==="websocket"){c.upgrade(u,{data:{connectionId:`${Date.now()}`}});return}if(u.method==="POST"&&l.pathname==="/v2/registry/docs/load-with-url")return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...F6i}});let p=/^\/_local\/(.*)/.exec(l.pathname);return u.method==="GET"&&p!=null?new Response(t.file(`/${p[1]}`),{headers:F6i}):new Response("Not Found",{status:404})},websocket:{open(u){let{connectionId:c}=u.data,l=setInterval(()=>{let p=o.get(u);if(!p)return;let d=Date.now();if(d-p.lastPong>9e4){u.close();return}try{u.send(JSON.stringify({type:"ping",timestamp:d}))}catch{u.close()}},3e4);o.set(u,{pingInterval:l,lastPong:Date.now()});try{u.send(JSON.stringify({type:"connected",connectionId:c}))}catch{}},message(u,c){try{let l=JSON.parse(c.toString());if(l.type==="pong"){let p=o.get(u);p&&(p.lastPong=Date.now())}else LDe.isMetricsMessage(l)&&n.logFrontendMetrics(l)}catch{}},close(u){let c=o.get(u);c&&(clearInterval(c.pingInterval),o.delete(u))}}});return{sendData:s,stop:u=>a.stop(u)}}function Did(){return globalThis.Bun}Vt();var mqi=_e(V6i(),1),jiu=_e(rqi(),1),Ok=require("fs/promises"),Miu=require("os"),Liu=_e(Aw(),1),Uiu=_e(Qiu(),1),Lvn=process.platform==="win32",dqi=Ie.cyan("[docs]:"),ucd="etag",ccd=23,Niu=e=>e.padEnd(ccd," "),lcd="preview",pcd="app-preview",fcd="bundle",dcd=".next",mcd="standalone",hcd=".fern",gcd="packages/fern-docs/bundle/.next/server/instrumentation.js",Acd=".npmrc",ycd=".pnpmfile.cjs",bcd="pnpm-workspace.yaml",Ecd='Cannot find matching keyid: {"signatures":';function vcd(){return We(Ut.of((0,Miu.homedir)()),Se.of(hcd))}function Zrt({app:e=!1}){return We(vcd(),Se.of(e?pcd:lcd))}function Dve({app:e=!1}){return We(Zrt({app:e}),Se.of(e?dcd:fcd))}function PBt({app:e=!1}){return We(Dve({app:e}),Se.of(mcd))}function Icd({app:e=!1}){return We(PBt({app:e}),Se.of(gcd))}function wcd({app:e=!1}){return We(PBt({app:e}),Se.of(bcd))}function Ccd({app:e=!1}){return We(PBt({app:e}),Se.of(ycd))}function xcd({app:e=!1}){return We(PBt({app:e}),Se.of(Acd))}function KDe(e){return new Error(`${e}. Please reach out to support@buildwithfern.com.`)}function _cd({app:e=!1}){return We(Zrt({app:e}),Se.of(ucd))}var Scd=`module.exports = {
2165
2166
  hooks: {
@@ -2200,7 +2201,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
2200
2201
 
2201
2202
  Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`);case"UnavailableError":return t.failAndThrow("Failed to publish docs. Please try again later or reach out to Fern support at support@buildwithfern.com.");default:return t.failAndThrow("Failed to publish docs.",e)}}function yfd(e,t){let n=e?.content;if(n?.reason==="status-code"){let i=n.statusCode;if(i===401||i===403)return`${`You do not have permission to publish docs to organization '${t}'. Please run 'fern login' to ensure you are logged in with the correct account.`}
2202
2203
 
2203
- Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}}function bfd(e){try{return new URL(BT(e)).pathname}catch{return}}async function Efd({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await vfd({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=await e.api.v1.register.checkSdkDynamicIrExists({orgId:Cr.OrgId(r),snippetConfiguration:o});if(!s.ok||!s.body){n.logger.debug("[SDK Dynamic IR] API call failed or returned empty body");return}let a=s.body.existingDynamicIrs;if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[c,l]of Object.entries(a))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${c}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();u[c]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${c}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${c}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${c}: ${p}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function Ssu(e){return e.replace(/^https:\/\//,"")}async function vfd({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package,explicitVersion:r.typescriptSdk?.version},{language:"python",snippetName:r.pythonSdk?.package,explicitVersion:r.pythonSdk?.version},{language:"java",snippetName:r.javaSdk?.coordinate,explicitVersion:r.javaSdk?.version},{language:"go",snippetName:r.goSdk?.githubRepo&&Ssu(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version},{language:"csharp",snippetName:r.csharpSdk?.package,explicitVersion:r.csharpSdk?.version},{language:"ruby",snippetName:r.rubySdk?.gem,explicitVersion:r.rubySdk?.version},{language:"php",snippetName:r.phpSdk?.package,explicitVersion:r.phpSdk?.version},{language:"swift",snippetName:r.swiftSdk?.package,explicitVersion:r.swiftSdk?.version},{language:"rust",snippetName:r.rustSdk?.package,explicitVersion:r.rustSdk?.version}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion;a||(a=(await Ifd({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 Ifd({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,u;if(t.generatorsConfiguration?.groups){let c=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=yn.getPackageName({generatorInvocation:p});d&&c.push(d),!a&&d&&(a=d,u=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let c=await e.sdks.versions.computeSemanticVersion({githubRepository:s,language:o,package:a});if(!c.ok){i.logger.debug(`[SDK Dynamic IR] ${r}: version computation failed for package "${a}"`);return}return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${c.body.version} for package "${a}"`),{version:c.body.version,generatorPackage:a}}catch(c){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${c}`);return}}async function wfd({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&&Ssu(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let u of a.generators){let c=JDe({apiName:e.workspaceName??"",organization:t,generatorInvocation:u}),l="";if(c?.outputConfig.type==="publish")switch(c.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=c.outputConfig.value.packageName;break;case"maven":l=c.outputConfig.value.coordinate;break;case"go":l=c.outputConfig.value.repoUrl;break;case"swift":l=c.outputConfig.value.repoUrl;break;case"crates":l=c.outputConfig.value.packageName;break}if(u.language==="php"&&u.config&&typeof u.config=="object"&&"packageName"in u.config&&(l=u.config.packageName??""),!!u.language){if(i.has(u.language)){r.logger.debug(`Skipping dynamic IR generation for ${u.language} (using existing SDK dynamic IR)`);continue}if(u.language&&s[u.language]===l){let p=Zm({workspace:e,generationLanguage:u.language,keywords:void 0,smartCasing:u.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new tm(r,e),dynamicGeneratorConfig:c}),d=qBe({ir:p,disableExamples:!0,smartCasing:u.smartCasing,generationLanguage:u.language,generatorConfig:c});d?o[u.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${u.language}`)}}}for(let[a,u]of Object.entries(s))a&&u&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${u}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${u} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function Cfd({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 xfd({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(Ie.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function _fd(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 Sfd(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 jBt=[60*1e3,300*1e3,300*1e3];async function MBt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,disableTemplates:u,skipUpload:c,cliVersion:l}){let p=a&&!n.config.settings?.substituteEnvVars;n.config=$y(n.config,{onError:g=>i.failAndThrow(g)},{substituteAsEmpty:p});let d=n.config.instances;if(d.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.");return}if(d.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${d[0]?.url})`);return}let f=d.find(g=>g.url===s)??d[0];if(f==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`);return}let m=[];f.customDomain!=null&&(typeof f.customDomain=="string"?m.push(f.customDomain):Array.isArray(f.customDomain)&&m.push(...f.customDomain)),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${f.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let h;return await i.runInteractiveTask({name:f.url},async()=>{let g=performance.now(),A=()=>_su({docsWorkspace:n,customDomains:m,domain:f.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,editThisPage:f.editThisPage,isPrivate:f.private,disableTemplates:u,skipUpload:c,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:f.audiences?Array.isArray(f.audiences)?f.audiences:[f.audiences]:void 0,docsUrl:f.url,cliVersion:l});for(let v=0;;v++)try{h=await A();break}catch(b){if(!(b instanceof nnt)||v>=jBt.length){if(b instanceof nnt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.");throw b}let I=jBt[v]??jBt[jBt.length-1]??6e4,w=I/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${w} minute${w===1?"":"s"} (attempt ${v+1}/${jBt.length})...`),await new Promise(x=>setTimeout(x,I))}let E=performance.now()-g;i.logger.debug(`Docs publishing completed in ${E.toFixed(0)}ms`)}),h}var QIn=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,skipUpload:n}){let i=new ih({context:this.context,task:this.task});try{let o=await MBt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:i,token:this.token,instanceUrl:t,preview:r,disableTemplates:void 0,skipUpload:n,cliVersion:"4.30.2"});return i.getResult()===Op.Failure?{success:!1}:{success:!0,url:o}}catch(o){return{success:!1,error:o instanceof Error?o.message:String(o)}}}};Qt();var int=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(`
2204
+ Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}}function bfd(e){try{return new URL(BT(e)).pathname}catch{return}}async function Efd({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await vfd({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=await e.api.v1.register.checkSdkDynamicIrExists({orgId:Cr.OrgId(r),snippetConfiguration:o});if(!s.ok||!s.body){n.logger.debug("[SDK Dynamic IR] API call failed or returned empty body");return}let a=s.body.existingDynamicIrs;if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[c,l]of Object.entries(a))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${c}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();u[c]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${c}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${c}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${c}: ${p}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function Ssu(e){return e.replace(/^https:\/\//,"")}async function vfd({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package,explicitVersion:r.typescriptSdk?.version},{language:"python",snippetName:r.pythonSdk?.package,explicitVersion:r.pythonSdk?.version},{language:"java",snippetName:r.javaSdk?.coordinate,explicitVersion:r.javaSdk?.version},{language:"go",snippetName:r.goSdk?.githubRepo&&Ssu(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version},{language:"csharp",snippetName:r.csharpSdk?.package,explicitVersion:r.csharpSdk?.version},{language:"ruby",snippetName:r.rubySdk?.gem,explicitVersion:r.rubySdk?.version},{language:"php",snippetName:r.phpSdk?.package,explicitVersion:r.phpSdk?.version},{language:"swift",snippetName:r.swiftSdk?.package,explicitVersion:r.swiftSdk?.version},{language:"rust",snippetName:r.rustSdk?.package,explicitVersion:r.rustSdk?.version}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion;a||(a=(await Ifd({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 Ifd({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,u;if(t.generatorsConfiguration?.groups){let c=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=yn.getPackageName({generatorInvocation:p});d&&c.push(d),!a&&d&&(a=d,u=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let c=await e.sdks.versions.computeSemanticVersion({githubRepository:s,language:o,package:a});if(!c.ok){i.logger.debug(`[SDK Dynamic IR] ${r}: version computation failed for package "${a}"`);return}return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${c.body.version} for package "${a}"`),{version:c.body.version,generatorPackage:a}}catch(c){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${c}`);return}}async function wfd({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&&Ssu(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let u of a.generators){let c=JDe({apiName:e.workspaceName??"",organization:t,generatorInvocation:u}),l="";if(c?.outputConfig.type==="publish")switch(c.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=c.outputConfig.value.packageName;break;case"maven":l=c.outputConfig.value.coordinate;break;case"go":l=c.outputConfig.value.repoUrl;break;case"swift":l=c.outputConfig.value.repoUrl;break;case"crates":l=c.outputConfig.value.packageName;break}if(u.language==="php"&&u.config&&typeof u.config=="object"&&"packageName"in u.config&&(l=u.config.packageName??""),!!u.language){if(i.has(u.language)){r.logger.debug(`Skipping dynamic IR generation for ${u.language} (using existing SDK dynamic IR)`);continue}if(u.language&&s[u.language]===l){let p=Zm({workspace:e,generationLanguage:u.language,keywords:void 0,smartCasing:u.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new tm(r,e),dynamicGeneratorConfig:c}),d=qBe({ir:p,disableExamples:!0,smartCasing:u.smartCasing,generationLanguage:u.language,generatorConfig:c});d?o[u.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${u.language}`)}}}for(let[a,u]of Object.entries(s))a&&u&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${u}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${u} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function Cfd({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 xfd({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(Ie.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function _fd(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 Sfd(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 jBt=[60*1e3,300*1e3,300*1e3];async function MBt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,disableTemplates:u,skipUpload:c,cliVersion:l}){let p=a&&!n.config.settings?.substituteEnvVars;n.config=$y(n.config,{onError:g=>i.failAndThrow(g)},{substituteAsEmpty:p});let d=n.config.instances;if(d.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.");return}if(d.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${d[0]?.url})`);return}let f=d.find(g=>g.url===s)??d[0];if(f==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`);return}let m=[];f.customDomain!=null&&(typeof f.customDomain=="string"?m.push(f.customDomain):Array.isArray(f.customDomain)&&m.push(...f.customDomain)),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${f.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let h;return await i.runInteractiveTask({name:f.url},async()=>{let g=performance.now(),A=()=>_su({docsWorkspace:n,customDomains:m,domain:f.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,editThisPage:f.editThisPage,isPrivate:f.private,disableTemplates:u,skipUpload:c,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:f.audiences?Array.isArray(f.audiences)?f.audiences:[f.audiences]:void 0,docsUrl:f.url,cliVersion:l});for(let v=0;;v++)try{h=await A();break}catch(b){if(!(b instanceof nnt)||v>=jBt.length){if(b instanceof nnt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.");throw b}let I=jBt[v]??jBt[jBt.length-1]??6e4,w=I/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${w} minute${w===1?"":"s"} (attempt ${v+1}/${jBt.length})...`),await new Promise(x=>setTimeout(x,I))}let E=performance.now()-g;i.logger.debug(`Docs publishing completed in ${E.toFixed(0)}ms`)}),h}var QIn=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,skipUpload:n}){let i=new ih({context:this.context,task:this.task});try{let o=await MBt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:i,token:this.token,instanceUrl:t,preview:r,disableTemplates:void 0,skipUpload:n,cliVersion:"4.31.0"});return i.getResult()===Op.Failure?{success:!1}:{success:!0,url:o}}catch(o){return{success:!1,error:o instanceof Error?o.message:String(o)}}}};Qt();var int=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(`
2204
2205
  `),this.stream.write(`${Ie.cyan("\u25C6")} ${Ie.bold(t.title)}
2205
2206
  `),t.subtitle!=null&&this.stream.write(` ${Ie.dim(t.subtitle)}
2206
2207
  `),this.stream.write(`
@@ -3589,7 +3590,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
3589
3590
  Run ${Ie.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
3590
3591
  Run ${Ie.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),Q9e(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function Abo({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!KUu(e))return;let i=t??"",o=e.filter(a=>a.isUpgradeAvailable);r!=null&&(o=o.slice(0,r+1));let s=o.sort((a,u)=>a.generatorName.localeCompare(u.generatorName)||a.currentVersion.localeCompare(u.currentVersion));for(let a of s)i+=`
3591
3592
  ${await pBm(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+Ie.dim(a.currentVersion)+Ie.reset(" \u2192 ")+Ie.green(a.latestVersion);return i+=`
3592
- `,n?Q9e(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function pBm(e){let r=await new HUu.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Error(`Generator ${e} not found`);return r.body.displayName}async function fBm({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await YUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(u,c,l,p)=>{a.versions[c]==null&&(a.versions[c]={});let d=iBe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await jS({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[c][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await YUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,u,c,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][u]==null&&(s.versions[a][u]={});let p=iBe(c.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${c.name}`);return}let d=await jS({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:c.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][u][c.name]={previousVersion:c.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function YUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await bQ({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let u=n!=null?oC(n):void 0;for(let c of a.groups)if(!(i!=null&&c.groupName!==i))for(let l of c.generators)u!=null&&l.name!==u||await r(o.workspaceName,c.groupName,l,s)})}))}function XUu(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let u=XR(a.latestVersion,a.previousVersion);r.debug(`Latest version: ${a.latestVersion}. `+(u?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:u,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Mkn({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await fBm({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[u,c]of Object.entries(a.versions))s.push(...XUu(c,u,t.logger));else s.push(...XUu(a.versions,void 0,t.logger))}return s}async function Zue({cliEnvironment:e,includePreReleases:t=!1}){return e.packageName!=="fern-api"?e.packageVersion:hdt(e.packageName,{version:t?"prerelease":"latest"})}var ZUu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Lkn=class{environment;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=zn.Info;isLocal;stdoutRedirector=new jkn;jsonMode=!1;constructor(t,r,{isLocal:n}){this.ttyAwareLogger=new oOe(t,r),this.isLocal=n??!1;let i=this.getPackageName(),o=this.getPackageVersion(),s=this.getCliName();(i==null||o==null||s==null)&&this.exitProgram(),this.environment={packageName:i,packageVersion:o,cliName:s}}getPackageName(){return"fern-api"}getPackageVersion(){return"4.30.2"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${Ie.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r){throw this.failWithoutThrowing(t,r),new pm}failWithoutThrowing(t,r){this.didSucceed=!1,nEt({message:t,error:r,logger:this.logger})}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}writeJsonToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(JSON.stringify(t,null,2)+`
3593
+ `,n?Q9e(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function pBm(e){let r=await new HUu.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Error(`Generator ${e} not found`);return r.body.displayName}async function fBm({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await YUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(u,c,l,p)=>{a.versions[c]==null&&(a.versions[c]={});let d=iBe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await jS({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[c][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await YUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,u,c,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][u]==null&&(s.versions[a][u]={});let p=iBe(c.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${c.name}`);return}let d=await jS({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:c.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][u][c.name]={previousVersion:c.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function YUu({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await bQ({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let u=n!=null?oC(n):void 0;for(let c of a.groups)if(!(i!=null&&c.groupName!==i))for(let l of c.generators)u!=null&&l.name!==u||await r(o.workspaceName,c.groupName,l,s)})}))}function XUu(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let u=XR(a.latestVersion,a.previousVersion);r.debug(`Latest version: ${a.latestVersion}. `+(u?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:u,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Mkn({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await fBm({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[u,c]of Object.entries(a.versions))s.push(...XUu(c,u,t.logger));else s.push(...XUu(a.versions,void 0,t.logger))}return s}async function Zue({cliEnvironment:e,includePreReleases:t=!1}){return e.packageName!=="fern-api"?e.packageVersion:hdt(e.packageName,{version:t?"prerelease":"latest"})}var ZUu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Lkn=class{environment;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=zn.Info;isLocal;stdoutRedirector=new jkn;jsonMode=!1;constructor(t,r,{isLocal:n}){this.ttyAwareLogger=new oOe(t,r),this.isLocal=n??!1;let i=this.getPackageName(),o=this.getPackageVersion(),s=this.getCliName();(i==null||o==null||s==null)&&this.exitProgram(),this.environment={packageName:i,packageVersion:o,cliName:s}}getPackageName(){return"fern-api"}getPackageVersion(){return"4.31.0"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${Ie.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r){throw this.failWithoutThrowing(t,r),new pm}failWithoutThrowing(t,r){this.didSucceed=!1,nEt({message:t,error:r,logger:this.logger})}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}writeJsonToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(JSON.stringify(t,null,2)+`
3593
3594
  `),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish(),await(await k9e()).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 JUu({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
3594
3595
  `)||(r+=`
3595
3596
  `),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=yLn(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 OFt(t);return this.ttyAwareLogger.registerTask(r),r}USE_NODE_18_OR_ABOVE_MESSAGE="The Fern CLI requires Node 18+ or above.";async runTaskWithInit(t,r){let n=this.addTaskWithInit(t).start(),i;try{i=await r(n)}catch(o){throw o.message.includes("globalThis")?(n.logger.error(this.USE_NODE_18_OR_ABOVE_MESSAGE),n.failWithoutThrowing()):n.failWithoutThrowing(void 0,o),new pm}finally{n.finish()}return i}async instrumentPostHogEvent(t){this.isLocal||(await k9e()).sendEvent(t)}logger=aP((t,...r)=>this.log(t,...r));stderr=aP((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=e3u(t.type==="docs"?"docs":t.workspaceName??"api"),n=1+(this.longestWorkspaceName!=null?e3u(this.longestWorkspaceName):r).length,i=r.padEnd(n),o=ZUu[this.numTasks++%ZUu.length],s=Ie.hex(o)(i);return{...this.constructTaskInit(),logPrefix:s}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Op.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:async t=>{await this.instrumentPostHogEvent(t)},shouldBufferLogs:!1}}log(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}])}logStderr(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}],{stderr:!0})}logImmediately(t,{stderr:r=!1}={}){let n=t.filter(i=>b_.indexOf(i.level)>=b_.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===zn.Debug,stderr:r||this.jsonMode})}_suppressUpgradeMessage=!1;suppressUpgradeMessage(){this._suppressUpgradeMessage=!0}_isUpgradeAvailable;async isUpgradeAvailable({includePreReleases:t=!1}={}){if(this._isUpgradeAvailable==null){this.logger.debug(`Checking if ${this.environment.packageName} upgrade is available...`);let r=await Zue({cliEnvironment:this.environment,includePreReleases:t}),n=XR(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await Mkn({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await hbo({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:Ie.yellow("?"),style:{answer:i=>Ie.cyan(i),message:i=>Ie.bold(i),highlight:i=>Ie.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.30.2",
2
+ "version": "4.31.0",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",