fern-api 5.15.2 → 5.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.cjs +5 -5
- package/package.json +1 -1
package/cli.cjs
CHANGED
|
@@ -2624,7 +2624,7 @@ plugins:
|
|
|
2624
2624
|
- flatten_oneofs=true
|
|
2625
2625
|
- include_all_methods=true
|
|
2626
2626
|
- source_root=${e}
|
|
2627
|
-
`}async function f3e({context:e,specs:t,relativePathToDependency:r}){let n=new b3r({context:e}),i=t.filter(c=>c.type==="openapi").map(c=>({...c,relativePathToDependency:r})),o=t.filter(c=>c.type==="protobuf"),s=new Map;for(let c of o){let u=c.absoluteFilepathToProtobufRoot,l=s.get(u)??[];l.push(c),s.set(u,l)}let a=[];for(let c of s.values()){let u=c[0];if(u==null)continue;let l=await n.prepare({absoluteFilepathToProtobufRoot:u.absoluteFilepathToProtobufRoot,relativeFilepathToProtobufRoot:u.relativeFilepathToProtobufRoot,local:u.generateLocally,deps:u.dependencies}),p=[];for(let d of c)if(d.absoluteFilepathToProtobufTarget!=null)p.push({target:d.absoluteFilepathToProtobufTarget,spec:d});else{let f=await LS(d.absoluteFilepathToProtobufRoot,"proto");for(let m of f)p.push({target:m,spec:d})}for(let{target:d,spec:f}of p){let m=await n.generateFromPrepared({preparedDir:l,absoluteFilepathToProtobufRoot:f.absoluteFilepathToProtobufRoot,absoluteFilepathToProtobufTarget:d});a.push(ood({result:m,protobufSpec:f,relativePathToDependency:r,target:d}))}}return[...i,...a]}function ood({result:e,protobufSpec:t,relativePathToDependency:r,target:n}){return{type:"openapi",absoluteFilepath:e.absoluteFilepath,absoluteFilepathToOverrides:t.absoluteFilepathToOverrides,absoluteFilepathToOverlays:void 0,settings:t.settings,source:{type:"protobuf",relativePathToDependency:r,root:t.absoluteFilepathToProtobufRoot,file:n}}}function K_(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 dLr(e,t){try{return Fe.of(e)}catch{throw new Q({message:`"${t}: ${e}" must be a relative path, not an absolute one.`,code:Q.Code.ConfigError})}}function Qsd(e){return e.every(t=>t.settings?.removeDiscriminantsFromSchemas===Qn.RemoveDiscriminantsFromSchemas.Never)?Qn.RemoveDiscriminantsFromSchemas.Never:Qn.RemoveDiscriminantsFromSchemas.Always}var Rd=class e extends BRt{type="oss";allSpecs;specs;sources;loader;parseOptions;groupMultiApiEnvironments;graphqlOperations={};graphqlTypes={};openApiSpecsCache=new Map;constructor({allSpecs:t,specs:r,...n}){let i=r.filter(s=>s.type==="openapi"&&s.source.type==="openapi");super({...n,respectReadonlySchemas:K_(r,s=>s?.respectReadonlySchemas),respectNullableSchemas:K_(r,s=>s?.respectNullableSchemas),wrapReferencesToNullableInOptional:K_(r,s=>s?.wrapReferencesToNullableInOptional),removeDiscriminantsFromSchemas:Qsd(r),coerceOptionalSchemasToNullable:K_(r,s=>s?.coerceOptionalSchemasToNullable),coerceEnumsToLiterals:K_(r,s=>s?.coerceEnumsToLiterals),onlyIncludeReferencedSchemas:K_(r,s=>s?.onlyIncludeReferencedSchemas),inlinePathParameters:K_(r,s=>s?.inlinePathParameters),objectQueryParameters:K_(r,s=>s?.objectQueryParameters),useBytesForBinaryResponse:K_(i,s=>s?.useBytesForBinaryResponse),respectForwardCompatibleEnums:K_(i,s=>s?.respectForwardCompatibleEnums),inlineAllOfSchemas:K_(r,s=>s?.inlineAllOfSchemas),resolveAliases:(()=>{let s=r.map(u=>u.settings?.resolveAliases);return s.some(u=>u!=null)?s.some(u=>u===!1)?!1:{except:r.flatMap(u=>typeof u.settings?.resolveAliases=="object"?u.settings.resolveAliases.except??[]:[])}:void 0})(),exampleGeneration:r[0]?.settings?.exampleGeneration,groupEnvironmentsByHost:r.some(s=>s.settings?.groupEnvironmentsByHost),multiServerStrategy:r.find(s=>s.settings?.multiServerStrategy!=null)?.settings?.multiServerStrategy,inferDefaultEnvironment:K_(r,s=>s?.inferDefaultEnvironment),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 vpe(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(()=>(JAo(),OIc)),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}:`,ni(o))}}getOpenAPISpecsCached({context:t,relativePathToDependency:r}){let n=r??"",i=this.openApiSpecsCache.get(n);return i==null&&(i=f3e({context:t,specs:this.specs,relativePathToDependency:r}),this.openApiSpecsCache.set(n,i)),i}async getOpenAPIIr({context:t,relativePathToDependency:r,loadAiExamples:n=!1},i){let o=await this.getOpenAPISpecsCached({context:t,relativePathToDependency:r});return dNe({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=this.generateAllProtobufIRs({context:t}),a=await this.getOpenAPISpecsCached({context:t}),c=await this.loader.loadDocuments({context:t,specs:a}),u=this.generatorsConfiguration?.api?.auth!=null?{...this.generatorsConfiguration?.api}:void 0;u==null&&(u=await PIc(a));let l=this.generatorsConfiguration?.api?.environments!=null?{...this.generatorsConfiguration?.api}:void 0;l&&t.logger.trace("Using environment overrides from generators configuration");let p=this.generatorsConfiguration?.api?.headers!=null?{...this.generatorsConfiguration?.api}:void 0;p&&t.logger.trace("Using global header overrides from generators configuration");let d,f=[];for(let A of c){let y=nt(this.absoluteFilePath,Fe.of(A.source?.file??"")),I=CE(Xu(),y),x=new V_({logger:t.logger,relativeFilepathToSpec:I});f.push(x);let C;switch(A.type){case"openapi":{let B=A.value,O=A.namespace??B["x-fern-sdk-namespace"],N=new Ipe({namespace:O,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:B,exampleGenerationArgs:{disabled:!1},errorCollector:x,authOverrides:u,environmentOverrides:l,globalHeaderOverrides:p,enableUniqueErrorsPerEndpoint:n,generateV1Examples:i,settings:i9({options:A.settings}),documentBaseDir:Pn(y)});C=await new qLt({context:N,audiences:r}).convert();break}case"asyncapi":{let B=A.namespace??A.value["x-fern-sdk-namespace"],O=new ULt({namespace:B,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:A.value,exampleGenerationArgs:{disabled:!1},errorCollector:x,authOverrides:u,enableUniqueErrorsPerEndpoint:n,settings:i9({options:A.settings}),generateV1Examples:i});C=await new zLt({context:O,audiences:r}).convert();break}default:x.collect({message:`Unsupported document type: ${A}`,path:[]});break}let w=Lw({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});C!=null&&(d=d===void 0?C:rMe(d,C,w))}for(let A of this.allSpecs)if(A.type==="openrpc"){let y=A.absoluteFilepath,I=CE(Xu(),y),x=new V_({logger:t.logger,relativeFilepathToSpec:I});f.push(x);let C=new WLt({namespace:A.namespace,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:await Tgo({context:t,absoluteFilePath:A.absoluteFilepath,absoluteFilePathToOverrides:A.absoluteFilepathToOverrides}),exampleGenerationArgs:{disabled:!1},errorCollector:x,enableUniqueErrorsPerEndpoint:n,generateV1Examples:i,settings:i9()}),B=await new GLt({context:C,audiences:r}).convert(),O=Lw({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});B!=null&&(d=d===void 0?B:rMe(d,B,O))}let m=await s,h=Lw({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});for(let A of m)d=d===void 0?A:rMe(d,A,h);for(let A of f)if(A.hasErrors()){let y=A.getErrorStats(),I=A.relativeFilepathToSpec?` for ${A.relativeFilepathToSpec}`:"";y.numErrors>0?t.logger.log("error",`API validation${I} completed with ${y.numErrors} errors.`):y.numWarnings>0&&o&&t.logger.log("warn",`API validation${I} completed with ${y.numWarnings} warnings.`),await A.logErrors({logWarnings:o})}if(d===void 0)throw new Q({message:"Failed to generate intermediate representation",code:Q.Code.IrConversionError});return u!=null&&(d=Cgo({ir:d,authOverrides:u})),d}async generateAllProtobufIRs({context:t}){let r=this.allSpecs.filter(i=>i.type==="protobuf");if(r.length===0)return[];let n=[];for(let i of r)try{let s=await new g3r({context:t}).generate({absoluteFilepathToProtobufRoot:i.absoluteFilepathToProtobufRoot,absoluteFilepathToProtobufTarget:i.absoluteFilepathToProtobufTarget,local:!0,deps:i.dependencies}),a=await(0,YAo.readFile)(s,"utf-8");if(a!=null){let c=io.IntermediateRepresentation.parse(JSON.parse(a),{allowUnrecognizedEnumValues:!0,skipValidation:!0});if(c.ok){n.push(c.value);continue}t.logger.log("error","Failed to parse protobuf IR")}}catch(o){t.logger.log("warn","Failed to parse protobuf IR: "+o)}return n}async toFernWorkspace({context:t},r,n){if(n!=null)return this.createWorkspaceWithSpecsOverride({context:t},n,r);let i=r;if(this.generatorsConfiguration?.api?.auth==null&&r?.auth==null){let s=await this.getOpenAPISpecsCached({context:t}),a=await PIc(s);a!=null&&(i={...r,auth:a.auth,authSchemes:a["auth-schemes"]})}let o=await this.getDefinition({context:t},i);return new Dj({absoluteFilePath:this.absoluteFilePath,workspaceName:this.workspaceName,generatorsConfiguration:this.generatorsConfiguration,dependenciesConfiguration:{dependencies:{}},definition:o,cliVersion:this.cliVersion,sources:this.sources})}async createWorkspaceWithSpecsOverride({context:t},r,n){let i=await this.convertSpecsOverrideToSpecs(r),o=i.filter(c=>c.type!=="protobuf"||!c.fromOpenAPI),s=new e({allSpecs:o,specs:i.filter(c=>c.type==="openapi"||c.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 Dj({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 Q({message:"Conjure specs override is not yet supported",code:Q.Code.InternalError});let r=[];for(let n of t)if(Qn.isOpenApiSpecSchema(n)){let i=nt(this.absoluteFilePath,dLr(n.openapi,"openapi")),o,s=[];n.overrides!=null&&(Array.isArray(n.overrides)?s.push(...n.overrides.map(u=>nt(this.absoluteFilePath,dLr(u,"overrides")))):s.push(nt(this.absoluteFilePath,dLr(n.overrides,"overrides")))),s.length>0&&(o=s.length===1?s[0]:s);let a=n.overlays?nt(this.absoluteFilePath,dLr(n.overlays,"overlays")):void 0,c={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(c)}else throw new Q({message:"Spec type override not yet supported. Only OpenAPI specs are currently supported in specs override.",code:Q.Code.InternalError});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(qa)]}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:PQ(),absoluteFilePath:s,absoluteFilePathToOverrides:o.type==="openapi"?o.absoluteFilepathToOverrides:void 0})),i},n)}};async function PIc(e){for(let t of e){if(t.type!=="openapi")continue;let r=t.absoluteFilepathToOverrides==null?[]:Array.isArray(t.absoluteFilepathToOverrides)?t.absoluteFilepathToOverrides:[t.absoluteFilepathToOverrides];for(let n of r)try{let i=(await(0,YAo.readFile)(n)).toString(),o=Br.load(i);if(o!=null&&o.auth!=null)return{auth:o.auth,...o["auth-schemes"]!=null?{"auth-schemes":o["auth-schemes"]}:{}}}catch{}}}var kIc=require("fs/promises");rr();var XAo={name:"no-component-schema-collisions",run:async({workspace:e,specs:t,loadedDocuments: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 c=r.get(a.absoluteFilepath);if(c==null)continue;let u=Es(e.absoluteFilePath,a.source.file),p=(j2(c)?await nk(c):c).components?.schemas??{};for(let d of Object.keys(p)){let f=s.get(d);f!=null?n.push({name:"no-component-schema-collisions",severity:"warning",relativeFilepath:u,nodePath:["components","schemas",d],message:`Component schema collision detected: Schema '${d}' is defined in both '${f.specFile}' and '${u}'. One will overwrite the other. Rename the schema in one of the specs or use namespaces to avoid conflicts.`}):s.set(d,{schemaId:d,specFile:u})}}return n}};rr();var $Ao={name:"no-conflicting-parameter-names",run:async({workspace:e,specs:t,loadedDocuments:r})=>{let n=[];for(let i of t){if(i.type!=="openapi")continue;let o=r.get(i.absoluteFilepath);if(o==null)continue;let s=j2(o)?await nk(o):o,a=Es(e.absoluteFilePath,i.source.file);for(let[c,u]of Object.entries(s.paths??{})){if(u==null||typeof u!="object")continue;let l=u,p=DIc(l.parameters,s);for(let d of["get","put","post","delete","options","head","patch","trace"]){let f=l[d];if(f==null)continue;let m=DIc(f.parameters,s),h=Msd(p,m),A={};for(let y of h){let I=Lsd(y.name);if(I==="")continue;(A[I]??=[]).push(y)}for(let[y,I]of Object.entries(A)){if(I.length<=1||new Set(I.map(w=>w.in)).size<=1)continue;let C=I.map(w=>`${w.in} parameter '${w.name}'`).join(", ");n.push({name:"no-conflicting-parameter-names",severity:"error",relativeFilepath:a,nodePath:["paths",c,d],message:`Parameters ${C} all normalize to '${y}' in generated SDKs. This causes broken code (duplicate keyword arguments in Python, duplicate properties in TypeScript). Rename one of the parameters to avoid the collision.`})}}}}return n}};function DIc(e,t){if(!Array.isArray(e))return[];let r=[];for(let n of e){let i=ZAo(n,t);i!=null&&r.push(i)}return r}function ZAo(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),ZAo(a,t,r)}if(i.startsWith("#/parameters/")){let o=i.substring(13),a=t.parameters?.[o];if(a!=null)return r.add(i),ZAo(a,t,r)}return}if(typeof n.in=="string"&&typeof n.name=="string")return{in:n.in,name:n.name}}function Msd(e,t){let r=new Set(t.map(i=>`${i.in}:${i.name}`)),n=[...t];for(let i of e){let o=`${i.in}:${i.name}`;r.has(o)||n.push(i)}return n}function Lsd(e){return e.replace(/[-_]+(.)?/g,(t,r)=>r!=null?r.toUpperCase():"").replace(/^[A-Z]/,t=>t.toLowerCase())}rr();var tyo={name:"no-duplicate-auth-header-parameters",run:async({workspace:e,specs:t,loadedDocuments:r})=>{let n=[];for(let i of t){if(i.type!=="openapi")continue;let o=r.get(i.absoluteFilepath);if(o==null)continue;let s=j2(o)?await nk(o):o,a=zsd(s);if(a.size===0)continue;let c=Es(e.absoluteFilePath,i.source.file);for(let[u,l]of Object.entries(s.paths??{})){if(l==null)continue;let p=l,d=p.parameters;if(Array.isArray(d))for(let f of d){let m=eyo(f,s);m!=null&&RIc(m,a)&&n.push({name:"no-duplicate-auth-header-parameters",severity:"warning",relativeFilepath:c,nodePath:["paths",u,"parameters"],message:`Header parameter '${m.name}' conflicts with the '${m.name}' header already defined by a security scheme. This parameter will be ignored during SDK generation.`})}for(let f of["get","put","post","delete","options","head","patch","trace"]){let m=p[f];if(m?.parameters!=null)for(let h of m.parameters){let A=eyo(h,s);A!=null&&RIc(A,a)&&n.push({name:"no-duplicate-auth-header-parameters",severity:"warning",relativeFilepath:c,nodePath:["paths",u,f],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 zsd(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 eyo(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),eyo(a,t,r)}return}if(typeof n.in=="string"&&typeof n.name=="string")return{in:n.in,name:n.name}}function RIc(e,t){return e.in==="header"&&t.has(e.name.toLowerCase())}rr();var ryo={name:"no-duplicate-overrides",run:async({workspace:e,specs:t,loadedDocuments:r})=>{let n=[],i=new Map;for(let o of t){let s=r.get(o.absoluteFilepath);if(s!=null){let a=j2(s)?await nk(s):s;for(let[c,u]of Object.entries(a.paths??{}))for(let[l,p]of Object.entries(u??{})){if(l==="parameters"||l==="$ref")continue;let d=p,f=d?.["x-fern-sdk-group-name"],m=Array.isArray(f)?f.join("."):f,h=d?.["x-fern-sdk-method-name"];if(m&&h){let A=d?.["x-fern-audiences"],y=A?Array.isArray(A)?A.map(w=>w.trim()).filter(w=>w.length>0):[A.trim()].filter(w=>w.length>0):[],x=`${o.namespace??""}:${m}:${h}`,C=i.get(x)||[];for(let w of C)if(Usd(y,w)){let B=o.namespace!=null?`${o.namespace}.${m}`:m;n.push({name:"no-duplicate-overrides",severity:"fatal",relativeFilepath:Es(e.absoluteFilePath,o.source.file),nodePath:["paths",c,l],message:`SDK method ${B}.${h} already exists (x-fern-sdk-group-name: ${m}, x-fern-sdk-method-name: ${h})`});break}C.push(y),i.set(x,C)}}}}return n}};function Usd(e,t){return e.length===0||t.length===0?!0:e.some(r=>t.includes(r))}rr();var mLr=new RegExp("[^\\x00-\\x7F]"),_sd=/(?:^|\n)\s*---\s*(?:\n|$)/,Vsd=["get","post","put","delete","patch","options","head","trace"],nyo={name:"no-invalid-tag-names-or-frontmatter",run:async({workspace:e,specs:t,loadedDocuments:r})=>{let n=[];for(let i of t){if(i.type!=="openapi")continue;let o=r.get(i.absoluteFilepath);if(o==null)continue;let s=j2(o)?await nk(o):o,a=Es(e.absoluteFilePath,i.source.file),c=s;if(Array.isArray(c.tags)){for(let u of c.tags)if(typeof u=="object"&&u!=null&&typeof u.name=="string"&&mLr.test(u.name)){let l=[...u.name].filter(p=>mLr.test(p));n.push({name:"no-invalid-tag-names-or-frontmatter",severity:"error",relativeFilepath:a,nodePath:["tags",u.name],message:`Tag name "${u.name}" contains non-ASCII characters: ${l.join(", ")}. Non-ASCII characters in tag names will be included in URL paths and HTTP headers, which only support ASCII characters. This will cause runtime errors (ERR_INVALID_CHAR). Remove non-ASCII characters from the tag name.`})}}if(c.paths!=null&&typeof c.paths=="object"){let u=new Set;for(let[l,p]of Object.entries(c.paths)){if(p==null||typeof p!="object")continue;let d=p;for(let f of Vsd){let m=d[f];if(m==null||typeof m!="object")continue;let h=m;if(typeof h.description=="string"&&_sd.test(h.description)&&n.push({name:"no-invalid-tag-names-or-frontmatter",severity:"error",relativeFilepath:a,nodePath:["paths",l,f,"description"],message:`Endpoint description for ${f.toUpperCase()} ${l} contains "---" which will be interpreted as a YAML frontmatter delimiter by the docs renderer, causing parsing failures and 500 errors on the generated docs site. Remove the "---" delimiters from the description.`}),Array.isArray(h.tags)&&!Array.isArray(c.tags)){for(let A of h.tags)if(typeof A=="string"&&!u.has(A)&&mLr.test(A)){u.add(A);let y=[...A].filter(I=>mLr.test(I));n.push({name:"no-invalid-tag-names-or-frontmatter",severity:"error",relativeFilepath:a,nodePath:["paths",l,f,"tags"],message:`Tag name "${A}" contains non-ASCII characters: ${y.join(", ")}. Non-ASCII characters in tag names will be included in URL paths and HTTP headers, which only support ASCII characters. This will cause runtime errors (ERR_INVALID_CHAR). Remove non-ASCII characters from the tag name.`})}}}}}}return n}};rr();var iyo={name:"no-schema-title-collisions",run:async({workspace:e,specs:t,loadedDocuments: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=r.get(o.absoluteFilepath);if(a==null)continue;let c=Es(e.absoluteFilePath,o.source.file),l=(j2(a)?await nk(a):a).components?.schemas??{};for(let[p,d]of Object.entries(l)){if(typeof d!="object"||d==null||!("title"in d))continue;let f=d.title;if(typeof f!="string"||f.trim()==="")continue;let m=i.get(f);m!=null?n.push({name:"no-schema-title-collisions",severity:"error",relativeFilepath:c,nodePath:["components","schemas",p,"title"],message:`Schema title collision detected: Multiple schemas use title '${f}'. Schema '${p}' conflicts with schema '${m.schemaId}'. Use 'resolve-schema-collisions: true' to automatically resolve collisions.`}):i.set(f,{schemaId:p,specFile:c})}}return n}};function FIc(){return[tyo,ryo,iyo,XAo,nyo,$Ao]}async function kve(e,t){return await Gsd({workspace:e,context:t,rules:FIc()})}async function qsd({specs:e,context:t}){let r=new Map;for(let n of e){let i=(await(0,kIc.readFile)(n.absoluteFilepath)).toString();if(!i.includes("openapi")&&!i.includes("swagger"))continue;let o=await LLt({absolutePathToOpenAPI:n.absoluteFilepath,context:t,absolutePathToOpenAPIOverrides:n.absoluteFilepathToOverrides,absolutePathToOpenAPIOverlays:n.absoluteFilepathToOverlays});r.set(n.absoluteFilepath,o)}return r}async function Gsd({workspace:e,context:t,rules:r}){let n=await e.getOpenAPISpecsCached({context:t}),i=await qsd({specs:n,context:t});return(await Promise.all(r.map(async s=>(await s.run({workspace:e,specs:n,context:t,loadedDocuments:i})).map(c=>({...c,name:c.name??s.name}))))).flat()}var Ope=class e extends Q{platform;cause;constructor(t,r){super({message:Wsd(t),code:Q.Code.AuthError}),Object.setPrototypeOf(this,e.prototype),this.platform=t,this.cause=r}};function Wsd(e){switch(e){case"darwin":return`Cannot access macOS Keychain
|
|
2627
|
+
`}async function f3e({context:e,specs:t,relativePathToDependency:r}){let n=new b3r({context:e}),i=t.filter(c=>c.type==="openapi").map(c=>({...c,relativePathToDependency:r})),o=t.filter(c=>c.type==="protobuf"),s=new Map;for(let c of o){let u=c.absoluteFilepathToProtobufRoot,l=s.get(u)??[];l.push(c),s.set(u,l)}let a=[];for(let c of s.values()){let u=c[0];if(u==null)continue;let l=await n.prepare({absoluteFilepathToProtobufRoot:u.absoluteFilepathToProtobufRoot,relativeFilepathToProtobufRoot:u.relativeFilepathToProtobufRoot,local:u.generateLocally,deps:u.dependencies}),p=[];for(let d of c)if(d.absoluteFilepathToProtobufTarget!=null)p.push({target:d.absoluteFilepathToProtobufTarget,spec:d});else{let f=await LS(d.absoluteFilepathToProtobufRoot,"proto");for(let m of f)p.push({target:m,spec:d})}for(let{target:d,spec:f}of p){let m=await n.generateFromPrepared({preparedDir:l,absoluteFilepathToProtobufRoot:f.absoluteFilepathToProtobufRoot,absoluteFilepathToProtobufTarget:d});a.push(ood({result:m,protobufSpec:f,relativePathToDependency:r,target:d}))}}return[...i,...a]}function ood({result:e,protobufSpec:t,relativePathToDependency:r,target:n}){return{type:"openapi",absoluteFilepath:e.absoluteFilepath,absoluteFilepathToOverrides:t.absoluteFilepathToOverrides,absoluteFilepathToOverlays:void 0,settings:t.settings,source:{type:"protobuf",relativePathToDependency:r,root:t.absoluteFilepathToProtobufRoot,file:n}}}function K_(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 dLr(e,t){try{return Fe.of(e)}catch{throw new Q({message:`"${t}: ${e}" must be a relative path, not an absolute one.`,code:Q.Code.ConfigError})}}function Qsd(e){return e.every(t=>t.settings?.removeDiscriminantsFromSchemas===Qn.RemoveDiscriminantsFromSchemas.Never)?Qn.RemoveDiscriminantsFromSchemas.Never:Qn.RemoveDiscriminantsFromSchemas.Always}var Rd=class e extends BRt{type="oss";allSpecs;specs;sources;loader;parseOptions;groupMultiApiEnvironments;graphqlOperations={};graphqlTypes={};openApiSpecsCache=new Map;constructor({allSpecs:t,specs:r,...n}){let i=r.filter(s=>s.type==="openapi"&&s.source.type==="openapi");super({...n,respectReadonlySchemas:K_(r,s=>s?.respectReadonlySchemas),respectNullableSchemas:K_(r,s=>s?.respectNullableSchemas),wrapReferencesToNullableInOptional:K_(r,s=>s?.wrapReferencesToNullableInOptional),removeDiscriminantsFromSchemas:Qsd(r),coerceOptionalSchemasToNullable:K_(r,s=>s?.coerceOptionalSchemasToNullable),coerceEnumsToLiterals:K_(r,s=>s?.coerceEnumsToLiterals),onlyIncludeReferencedSchemas:K_(r,s=>s?.onlyIncludeReferencedSchemas),inlinePathParameters:K_(r,s=>s?.inlinePathParameters),objectQueryParameters:K_(r,s=>s?.objectQueryParameters),useBytesForBinaryResponse:K_(i,s=>s?.useBytesForBinaryResponse),respectForwardCompatibleEnums:K_(i,s=>s?.respectForwardCompatibleEnums),inlineAllOfSchemas:K_(r,s=>s?.inlineAllOfSchemas),resolveAliases:(()=>{let s=r.map(u=>u.settings?.resolveAliases);return s.some(u=>u!=null)?s.some(u=>u===!1)?!1:{except:r.flatMap(u=>typeof u.settings?.resolveAliases=="object"?u.settings.resolveAliases.except??[]:[])}:void 0})(),exampleGeneration:r[0]?.settings?.exampleGeneration,groupEnvironmentsByHost:r.some(s=>s.settings?.groupEnvironmentsByHost),multiServerStrategy:r.find(s=>s.settings?.multiServerStrategy!=null)?.settings?.multiServerStrategy,inferDefaultEnvironment:K_(r,s=>s?.inferDefaultEnvironment),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 vpe(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(()=>(JAo(),OIc)),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}:`,ni(o))}}getOpenAPISpecsCached({context:t,relativePathToDependency:r}){let n=r??"",i=this.openApiSpecsCache.get(n);return i==null&&(i=f3e({context:t,specs:this.specs,relativePathToDependency:r}),this.openApiSpecsCache.set(n,i)),i}async getOpenAPIIr({context:t,relativePathToDependency:r,loadAiExamples:n=!1},i){let o=await this.getOpenAPISpecsCached({context:t,relativePathToDependency:r});return dNe({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=this.generateAllProtobufIRs({context:t}),a=await this.getOpenAPISpecsCached({context:t}),c=await this.loader.loadDocuments({context:t,specs:a}),u=this.generatorsConfiguration?.api?.auth!=null?{...this.generatorsConfiguration?.api}:void 0;u==null&&(u=await PIc(a));let l=this.generatorsConfiguration?.api?.environments!=null?{...this.generatorsConfiguration?.api}:void 0;l&&t.logger.trace("Using environment overrides from generators configuration");let p=this.generatorsConfiguration?.api?.headers!=null?{...this.generatorsConfiguration?.api}:void 0;p&&t.logger.trace("Using global header overrides from generators configuration");let d,f=[];for(let A of c){let y=nt(this.absoluteFilePath,Fe.of(A.source?.file??"")),I=CE(Xu(),y),x=new V_({logger:t.logger,relativeFilepathToSpec:I});f.push(x);let C;switch(A.type){case"openapi":{let B=A.value,O=A.namespace??B["x-fern-sdk-namespace"],N=new Ipe({namespace:O,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:B,exampleGenerationArgs:{disabled:!1},errorCollector:x,authOverrides:u,environmentOverrides:l,globalHeaderOverrides:p,enableUniqueErrorsPerEndpoint:n,generateV1Examples:i,settings:i9({options:A.settings}),documentBaseDir:Pn(y)});C=await new qLt({context:N,audiences:r}).convert();break}case"asyncapi":{let B=A.namespace??A.value["x-fern-sdk-namespace"],O=new ULt({namespace:B,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:A.value,exampleGenerationArgs:{disabled:!1},errorCollector:x,authOverrides:u,enableUniqueErrorsPerEndpoint:n,settings:i9({options:A.settings}),generateV1Examples:i});C=await new zLt({context:O,audiences:r}).convert();break}default:x.collect({message:`Unsupported document type: ${A}`,path:[]});break}let w=Lw({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});C!=null&&(d=d===void 0?C:rMe(d,C,w))}for(let A of this.allSpecs)if(A.type==="openrpc"){let y=A.absoluteFilepath,I=CE(Xu(),y),x=new V_({logger:t.logger,relativeFilepathToSpec:I});f.push(x);let C=new WLt({namespace:A.namespace,generationLanguage:"typescript",logger:t.logger,smartCasing:!1,spec:await Tgo({context:t,absoluteFilePath:A.absoluteFilepath,absoluteFilePathToOverrides:A.absoluteFilepathToOverrides}),exampleGenerationArgs:{disabled:!1},errorCollector:x,enableUniqueErrorsPerEndpoint:n,generateV1Examples:i,settings:i9()}),B=await new GLt({context:C,audiences:r}).convert(),O=Lw({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});B!=null&&(d=d===void 0?B:rMe(d,B,O))}let m=await s,h=Lw({generationLanguage:"typescript",keywords:void 0,smartCasing:!1});for(let A of m)d=d===void 0?A:rMe(d,A,h);for(let A of f)if(A.hasErrors()){let y=A.getErrorStats(),I=A.relativeFilepathToSpec?` for ${A.relativeFilepathToSpec}`:"";y.numErrors>0?t.logger.log("error",`API validation${I} completed with ${y.numErrors} errors.`):y.numWarnings>0&&o&&t.logger.log("warn",`API validation${I} completed with ${y.numWarnings} warnings.`),await A.logErrors({logWarnings:o})}if(d===void 0)throw new Q({message:"Failed to generate intermediate representation",code:Q.Code.IrConversionError});return u!=null&&(d=Cgo({ir:d,authOverrides:u})),d}async generateAllProtobufIRs({context:t}){let r=this.allSpecs.filter(i=>i.type==="protobuf");if(r.length===0)return[];let n=[];for(let i of r)try{let s=await new g3r({context:t}).generate({absoluteFilepathToProtobufRoot:i.absoluteFilepathToProtobufRoot,absoluteFilepathToProtobufTarget:i.absoluteFilepathToProtobufTarget,local:!0,deps:i.dependencies}),a=await(0,YAo.readFile)(s,"utf-8");if(a!=null){let c=io.IntermediateRepresentation.parse(JSON.parse(a),{allowUnrecognizedEnumValues:!0,skipValidation:!0});if(c.ok){n.push(c.value);continue}t.logger.log("error","Failed to parse protobuf IR")}}catch(o){t.logger.log("warn","Failed to parse protobuf IR: "+o)}return n}async toFernWorkspace({context:t},r,n){if(n!=null)return this.createWorkspaceWithSpecsOverride({context:t},n,r);let i=r;if(this.generatorsConfiguration?.api?.auth==null&&r?.auth==null){let s=await this.getOpenAPISpecsCached({context:t}),a=await PIc(s);a!=null&&(i={...r,auth:a.auth,authSchemes:a["auth-schemes"]})}let o=await this.getDefinition({context:t},i);return new Dj({absoluteFilePath:this.absoluteFilePath,workspaceName:this.workspaceName,generatorsConfiguration:this.generatorsConfiguration,dependenciesConfiguration:{dependencies:{}},definition:o,cliVersion:this.cliVersion,sources:this.sources})}async createWorkspaceWithSpecsOverride({context:t},r,n){let i=await this.convertSpecsOverrideToSpecs(r),o=i.filter(c=>c.type!=="protobuf"||!c.fromOpenAPI),s=new e({allSpecs:o,specs:i.filter(c=>c.type==="openapi"||c.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 Dj({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 Q({message:"Conjure specs override is not yet supported",code:Q.Code.InternalError});let r=[];for(let n of t)if(Qn.isOpenApiSpecSchema(n)){let i=nt(this.absoluteFilePath,dLr(n.openapi,"openapi")),o,s=[];n.overrides!=null&&(Array.isArray(n.overrides)?s.push(...n.overrides.map(u=>nt(this.absoluteFilePath,dLr(u,"overrides")))):s.push(nt(this.absoluteFilePath,dLr(n.overrides,"overrides")))),s.length>0&&(o=s.length===1?s[0]:s);let a=n.overlays?nt(this.absoluteFilePath,dLr(n.overlays,"overlays")):void 0,c={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(c)}else throw new Q({message:"Spec type override not yet supported. Only OpenAPI specs are currently supported in specs override.",code:Q.Code.InternalError});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(qa)]}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:PQ(),absoluteFilePath:s,absoluteFilePathToOverrides:o.type==="openapi"?o.absoluteFilepathToOverrides:void 0})),i},n)}};async function PIc(e){for(let t of e){if(t.type!=="openapi")continue;let r=t.absoluteFilepathToOverrides==null?[]:Array.isArray(t.absoluteFilepathToOverrides)?t.absoluteFilepathToOverrides:[t.absoluteFilepathToOverrides];for(let n of r)try{let i=(await(0,YAo.readFile)(n)).toString(),o=Br.load(i);if(o!=null&&o.auth!=null)return{auth:o.auth,...o["auth-schemes"]!=null?{"auth-schemes":o["auth-schemes"]}:{}}}catch{}}}var kIc=require("fs/promises");rr();var XAo={name:"no-component-schema-collisions",run:async({workspace:e,specs:t,loadedDocuments: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 c=r.get(a.absoluteFilepath);if(c==null)continue;let u=Es(e.absoluteFilePath,a.source.file),p=(j2(c)?await nk(c):c).components?.schemas??{};for(let d of Object.keys(p)){let f=s.get(d);f!=null?n.push({name:"no-component-schema-collisions",severity:"warning",relativeFilepath:u,nodePath:["components","schemas",d],message:`Component schema collision detected: Schema '${d}' is defined in both '${f.specFile}' and '${u}'. One will overwrite the other. Rename the schema in one of the specs or use namespaces to avoid conflicts.`}):s.set(d,{schemaId:d,specFile:u})}}return n}};rr();var $Ao={name:"no-conflicting-parameter-names",run:async({workspace:e,specs:t,loadedDocuments:r})=>{let n=[];for(let i of t){if(i.type!=="openapi")continue;let o=r.get(i.absoluteFilepath);if(o==null)continue;let s=j2(o)?await nk(o):o,a=Es(e.absoluteFilePath,i.source.file);for(let[c,u]of Object.entries(s.paths??{})){if(u==null||typeof u!="object")continue;let l=u,p=DIc(l.parameters,s);for(let d of["get","put","post","delete","options","head","patch","trace"]){let f=l[d];if(f==null)continue;let m=DIc(f.parameters,s),h=Msd(p,m),A={};for(let y of h){let I=Lsd(y.name);if(I==="")continue;(A[I]??=[]).push(y)}for(let[y,I]of Object.entries(A)){if(I.length<=1||new Set(I.map(w=>w.in)).size<=1)continue;let C=I.map(w=>`${w.in} parameter '${w.name}'`).join(", ");n.push({name:"no-conflicting-parameter-names",severity:"error",relativeFilepath:a,nodePath:["paths",c,d],message:`Parameters ${C} all normalize to '${y}' in generated SDKs. This causes broken code (duplicate keyword arguments in Python, duplicate properties in TypeScript). Rename one of the parameters to avoid the collision.`})}}}}return n}};function DIc(e,t){if(!Array.isArray(e))return[];let r=[];for(let n of e){let i=ZAo(n,t);i!=null&&r.push(i)}return r}function ZAo(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),ZAo(a,t,r)}if(i.startsWith("#/parameters/")){let o=i.substring(13),a=t.parameters?.[o];if(a!=null)return r.add(i),ZAo(a,t,r)}return}if(typeof n.in=="string"&&typeof n.name=="string")return{in:n.in,name:n.name}}function Msd(e,t){let r=new Set(t.map(i=>`${i.in}:${i.name}`)),n=[...t];for(let i of e){let o=`${i.in}:${i.name}`;r.has(o)||n.push(i)}return n}function Lsd(e){return e.replace(/[-_]+(.)?/g,(t,r)=>r!=null?r.toUpperCase():"").replace(/^[A-Z]/,t=>t.toLowerCase())}rr();var tyo={name:"no-duplicate-auth-header-parameters",run:async({workspace:e,specs:t,loadedDocuments:r})=>{let n=[];for(let i of t){if(i.type!=="openapi")continue;let o=r.get(i.absoluteFilepath);if(o==null)continue;let s=j2(o)?await nk(o):o,a=zsd(s);if(a.size===0)continue;let c=Es(e.absoluteFilePath,i.source.file);for(let[u,l]of Object.entries(s.paths??{})){if(l==null)continue;let p=l,d=p.parameters;if(Array.isArray(d))for(let f of d){let m=eyo(f,s);m!=null&&RIc(m,a)&&n.push({name:"no-duplicate-auth-header-parameters",severity:"warning",relativeFilepath:c,nodePath:["paths",u,"parameters"],message:`Header parameter '${m.name}' conflicts with the '${m.name}' header already defined by a security scheme. This parameter will be ignored during SDK generation.`})}for(let f of["get","put","post","delete","options","head","patch","trace"]){let m=p[f];if(m?.parameters!=null)for(let h of m.parameters){let A=eyo(h,s);A!=null&&RIc(A,a)&&n.push({name:"no-duplicate-auth-header-parameters",severity:"warning",relativeFilepath:c,nodePath:["paths",u,f],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 zsd(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 eyo(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),eyo(a,t,r)}return}if(typeof n.in=="string"&&typeof n.name=="string")return{in:n.in,name:n.name}}function RIc(e,t){return e.in==="header"&&t.has(e.name.toLowerCase())}rr();var ryo={name:"no-duplicate-overrides",run:async({workspace:e,specs:t,loadedDocuments:r})=>{let n=[],i=new Map;for(let o of t){let s=r.get(o.absoluteFilepath);if(s!=null){let a=j2(s)?await nk(s):s;for(let[c,u]of Object.entries(a.paths??{}))for(let[l,p]of Object.entries(u??{})){if(l==="parameters"||l==="$ref")continue;let d=p;if(d?.["x-fern-ignore"]===!0)continue;let f=d?.["x-fern-sdk-group-name"],m=Array.isArray(f)?f.join("."):f,h=d?.["x-fern-sdk-method-name"];if(m&&h){let A=d?.["x-fern-audiences"],y=A?Array.isArray(A)?A.map(w=>w.trim()).filter(w=>w.length>0):[A.trim()].filter(w=>w.length>0):[],x=`${o.namespace??""}:${m}:${h}`,C=i.get(x)||[];for(let w of C)if(Usd(y,w)){let B=o.namespace!=null?`${o.namespace}.${m}`:m;n.push({name:"no-duplicate-overrides",severity:"fatal",relativeFilepath:Es(e.absoluteFilePath,o.source.file),nodePath:["paths",c,l],message:`SDK method ${B}.${h} already exists (x-fern-sdk-group-name: ${m}, x-fern-sdk-method-name: ${h})`});break}C.push(y),i.set(x,C)}}}}return n}};function Usd(e,t){return e.length===0||t.length===0?!0:e.some(r=>t.includes(r))}rr();var mLr=new RegExp("[^\\x00-\\x7F]"),_sd=/(?:^|\n)\s*---\s*(?:\n|$)/,Vsd=["get","post","put","delete","patch","options","head","trace"],nyo={name:"no-invalid-tag-names-or-frontmatter",run:async({workspace:e,specs:t,loadedDocuments:r})=>{let n=[];for(let i of t){if(i.type!=="openapi")continue;let o=r.get(i.absoluteFilepath);if(o==null)continue;let s=j2(o)?await nk(o):o,a=Es(e.absoluteFilePath,i.source.file),c=s;if(Array.isArray(c.tags)){for(let u of c.tags)if(typeof u=="object"&&u!=null&&typeof u.name=="string"&&mLr.test(u.name)){let l=[...u.name].filter(p=>mLr.test(p));n.push({name:"no-invalid-tag-names-or-frontmatter",severity:"error",relativeFilepath:a,nodePath:["tags",u.name],message:`Tag name "${u.name}" contains non-ASCII characters: ${l.join(", ")}. Non-ASCII characters in tag names will be included in URL paths and HTTP headers, which only support ASCII characters. This will cause runtime errors (ERR_INVALID_CHAR). Remove non-ASCII characters from the tag name.`})}}if(c.paths!=null&&typeof c.paths=="object"){let u=new Set;for(let[l,p]of Object.entries(c.paths)){if(p==null||typeof p!="object")continue;let d=p;for(let f of Vsd){let m=d[f];if(m==null||typeof m!="object")continue;let h=m;if(typeof h.description=="string"&&_sd.test(h.description)&&n.push({name:"no-invalid-tag-names-or-frontmatter",severity:"error",relativeFilepath:a,nodePath:["paths",l,f,"description"],message:`Endpoint description for ${f.toUpperCase()} ${l} contains "---" which will be interpreted as a YAML frontmatter delimiter by the docs renderer, causing parsing failures and 500 errors on the generated docs site. Remove the "---" delimiters from the description.`}),Array.isArray(h.tags)&&!Array.isArray(c.tags)){for(let A of h.tags)if(typeof A=="string"&&!u.has(A)&&mLr.test(A)){u.add(A);let y=[...A].filter(I=>mLr.test(I));n.push({name:"no-invalid-tag-names-or-frontmatter",severity:"error",relativeFilepath:a,nodePath:["paths",l,f,"tags"],message:`Tag name "${A}" contains non-ASCII characters: ${y.join(", ")}. Non-ASCII characters in tag names will be included in URL paths and HTTP headers, which only support ASCII characters. This will cause runtime errors (ERR_INVALID_CHAR). Remove non-ASCII characters from the tag name.`})}}}}}}return n}};rr();var iyo={name:"no-schema-title-collisions",run:async({workspace:e,specs:t,loadedDocuments: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=r.get(o.absoluteFilepath);if(a==null)continue;let c=Es(e.absoluteFilePath,o.source.file),l=(j2(a)?await nk(a):a).components?.schemas??{};for(let[p,d]of Object.entries(l)){if(typeof d!="object"||d==null||!("title"in d))continue;let f=d.title;if(typeof f!="string"||f.trim()==="")continue;let m=i.get(f);m!=null?n.push({name:"no-schema-title-collisions",severity:"error",relativeFilepath:c,nodePath:["components","schemas",p,"title"],message:`Schema title collision detected: Multiple schemas use title '${f}'. Schema '${p}' conflicts with schema '${m.schemaId}'. Use 'resolve-schema-collisions: true' to automatically resolve collisions.`}):i.set(f,{schemaId:p,specFile:c})}}return n}};function FIc(){return[tyo,ryo,iyo,XAo,nyo,$Ao]}async function kve(e,t){return await Gsd({workspace:e,context:t,rules:FIc()})}async function qsd({specs:e,context:t}){let r=new Map;for(let n of e){let i=(await(0,kIc.readFile)(n.absoluteFilepath)).toString();if(!i.includes("openapi")&&!i.includes("swagger"))continue;let o=await LLt({absolutePathToOpenAPI:n.absoluteFilepath,context:t,absolutePathToOpenAPIOverrides:n.absoluteFilepathToOverrides,absolutePathToOpenAPIOverlays:n.absoluteFilepathToOverlays});r.set(n.absoluteFilepath,o)}return r}async function Gsd({workspace:e,context:t,rules:r}){let n=await e.getOpenAPISpecsCached({context:t}),i=await qsd({specs:n,context:t});return(await Promise.all(r.map(async s=>(await s.run({workspace:e,specs:n,context:t,loadedDocuments:i})).map(c=>({...c,name:c.name??s.name}))))).flat()}var Ope=class e extends Q{platform;cause;constructor(t,r){super({message:Wsd(t),code:Q.Code.AuthError}),Object.setPrototypeOf(this,e.prototype),this.platform=t,this.cause=r}};function Wsd(e){switch(e){case"darwin":return`Cannot access macOS Keychain
|
|
2628
2628
|
|
|
2629
2629
|
Fern requires the system keyring to securely store access tokens.
|
|
2630
2630
|
|
|
@@ -2699,7 +2699,7 @@ ${yFc.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&AIo(th
|
|
|
2699
2699
|
`+Y3e.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?Y3e.default.cyan(TFc(t,this.opt.mask)):Y3e.default.italic(Y3e.default.dim("[hidden]")):this.opt.mask?TFc(t,this.opt.mask):Y3e.default.italic(Y3e.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 k5r=we(Hw(),1);var S2c=we(ZIo(),1),R5r=require("child_process"),$nt=require("fs"),D5r=we(require("path"),1),T2c=we(require("os"),1),B2c=require("crypto"),jCo=we(x2c(),1);var B5r=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var gUt=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var O5r=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var P5r=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function F5r(e="",t,r){let n=new QCo(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 w2c(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function KNd(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 QCo=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=KNd(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??T2c.default.tmpdir(),r=(0,B2c.randomUUID)(),n=w2c(this.fileOptions.prefix),i=w2c(this.fileOptions.postfix),o=`${n}${r}${i}`,s=D5r.default.resolve(t,o),a=D5r.default.resolve(t)+D5r.default.sep;if(!s.startsWith(a))throw new Error("Resolved temporary file escaped the base directory");this.tempFile=s;let c={encoding:"utf8",flag:"wx"};Object.prototype.hasOwnProperty.call(this.fileOptions,"mode")&&(c.mode=this.fileOptions.mode),(0,$nt.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new B5r(t)}}readTemporaryFile(){try{let t=(0,$nt.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,S2c.detect)(t)??"utf8";jCo.default.encodingExists(r)||(r="utf8"),this.text=jCo.default.decode(t,r)}}catch(t){throw new O5r(t)}}removeTemporaryFile(){try{(0,$nt.unlinkSync)(this.tempFile)}catch(t){throw new P5r(t)}}launchEditor(){try{let t=(0,R5r.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new gUt(t)}}launchEditorAsync(t){try{(0,R5r.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new gUt(r)}}};var O2c=we(HL(),1);var AUt=class extends Kw{_run(t){this.done=t,this.editorResult=new O2c.Subject;let r=PO(this.rl);this.lineSubscription=r.line.subscribe(this.startExternalEditor.bind(this));let n=this.opt.waitUserInput===void 0?!0:this.opt.waitUserInput,i=this.handleSubmitEvents(this.editorResult);return i.success.forEach(this.onEnd.bind(this)),i.error.forEach(this.onError.bind(this)),this.currentText=this.opt.default,this.opt.default=null,n?this.render():this.startExternalEditor(),this}render(t){let r="",n=this.getQuestion();n+=this.status==="answered"?k5r.default.dim("Received"):k5r.default.dim("Press <enter> to launch your preferred editor."),t&&(r=k5r.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),F5r(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 k2c=require("stream");var R2c=we(require("readline"),1),F2c=we(D2c(),1),eLe=class{constructor(t){this.rl||=R2c.default.createInterface(YNd(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 YNd(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 F2c.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var yUt=class extends eLe{constructor(t={}){super(t),this.log=new k2c.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return tUt(this.rl,this.bottomBar.split(`
|
|
2700
2700
|
`).length),this}updateBottomBar(t){return tUt(this.rl,1),this.rl.output.unmute(),this.clean(),this.bottomBar=t,this.render(),this.rl.output.mute(),this}writeLog(t){return this.rl.output.unmute(),this.clean(),this.rl.output.write(this.enforceLF(t.toString())),this.render(),this.rl.output.mute(),this}enforceLF(t){return/[\n\r]$/.test(t)?t:t+`
|
|
2701
2701
|
`}write(t){let r=t.split(/\n/);this.height=r.length,this.rl.setPrompt(r.at(-1)),this.rl.output.rows===0&&this.rl.output.columns===0&&r5r(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var kd=we(HL(),1),Q2c=we(R4t(),1);var N5r=we(HL(),1),N2c=we(R4t(),1),j5r=function(e,t,r){return typeof e[t]!="function"?(0,N5r.of)(e):(0,N5r.from)((0,N2c.default)(e[t])(r).then(n=>(e[t]=n,e)))};var j2c={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}},eit=class extends eLe{constructor(t,r){super(r),this.prompts=t}run(t,r){this.answers=typeof r=="object"?{...r}:{};let n;return Array.isArray(t)?n=(0,kd.from)(t):(0,kd.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,kd.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,kd.from)([t]),this.process=n.pipe((0,kd.concatMap)(this.processQuestion.bind(this)),(0,kd.publish)()),this.process.connect(),this.process.pipe((0,kd.reduce)((i,o)=>(j2c.set(i,o.name,o.answer),i),this.answers)).toPromise(Promise).then(this.onCompletion.bind(this),this.onError.bind(this))}onCompletion(){return this.close(),this.answers}onError(t){return this.close(),Promise.reject(t)}processQuestion(t){return t={...t},(0,kd.defer)(()=>(0,kd.of)(t).pipe((0,kd.concatMap)(this.setDefaultType.bind(this)),(0,kd.concatMap)(this.filterIfRunnable.bind(this)),(0,kd.concatMap)(()=>j5r(t,"message",this.answers)),(0,kd.concatMap)(()=>j5r(t,"default",this.answers)),(0,kd.concatMap)(()=>j5r(t,"choices",this.answers)),(0,kd.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,kd.defer)(()=>(0,kd.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,kd.defer)(()=>(0,kd.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&j2c.get(this.answers,t.name)!==void 0)return kd.EMPTY;if(t.when===!1)return kd.EMPTY;if(typeof t.when!="function")return(0,kd.of)(t);let{answers:r}=this;return(0,kd.defer)(()=>(0,kd.from)((0,Q2c.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,kd.filter)(n=>n!=null)))}};function M2c(e){let t=function(r,n){let i;try{i=new eit(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",nUt),this.registerPrompt("input",J3e),this.registerPrompt("number",iUt),this.registerPrompt("confirm",oUt),this.registerPrompt("rawlist",sUt),this.registerPrompt("expand",aUt),this.registerPrompt("checkbox",cUt),this.registerPrompt("password",uUt),this.registerPrompt("editor",AUt)},t.restoreDefaultPrompts(),t}var LCo=M2c();function ZNd(e,t){LCo.registerPrompt(e,t)}function $Nd(){LCo.restoreDefaultPrompts()}var ejd={prompt:LCo,ui:{BottomBar:yUt,Prompt:eit},createPromptModule:M2c,registerPrompt:ZNd,restoreDefaultPrompts:$Nd,Separator:VQ},Xp=ejd;var tit=require("path");function z2c(){let e=tjd();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function tjd(e=process.argv[1]?(0,tit.dirname)(process.argv[1]):process.cwd(),t=tit.sep==="\\"){let r=t?L2c(e):e;return n=>{if(!n)return;let i=t?L2c(n):n,{dir:o,base:s,ext:a}=tit.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(s=s.slice(0,-1*a.length));let c=decodeURIComponent(s);o||(o=".");let u=o.lastIndexOf("/node_modules");if(u>-1)return`${o.slice(u+14).replace(/\//g,".")}:${c}`;if(o.startsWith(r)){let l=o.slice(r.length+1).replace(/\//g,".");return l?`${l}:${c}`:c}return c}}function L2c(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var zCo=e=>{if("flags"in e){let t=U2c(e.flags),r=_2c(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,UCo(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,rjd(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function rjd(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 U2c=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,bUt(r)]).filter(([,t])=>t!==void 0)),_2c=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?UCo(n):void 0]}))};var bUt=e=>e===void 0?void 0:e.variant??e.enabled,UCo=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};function V2c(){return"CompressionStream"in globalThis}async function Q5r(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 M5r="0123456789abcdef",L5r=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+=M5r.charAt(this.bytes[r]>>>4),t+=M5r.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+=M5r.charAt(this.bytes[r]>>>4),t+=M5r.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}},_Co=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??njd()}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 L5r.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,L5r.ofInner(t)}},njd=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),q2c,CIe=()=>ijd().toString(),ijd=()=>(q2c||(q2c=new _Co)).generate();var GQ=(function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e.DeviceId="device_id",e})({});var ojd=["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"],G2c=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return ojd.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var ajd=Array.isArray,W2c=Object.prototype,m_0=W2c.hasOwnProperty,VCo=W2c.toString,qCo=ajd||function(e){return VCo.call(e)==="[object Array]"};var GCo=e=>e===Object(e)&&!qCo(e);var EUt=e=>e===void 0,vUt=e=>VCo.call(e)=="[object String]",H2c=e=>vUt(e)&&e.trim().length===0;var K2c=e=>VCo.call(e)=="[object Number]"&&e===e;var WCo=e=>e instanceof Error;function z5r(e){return e===null||typeof e!="object"}function tLe(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function J2c(e){return tLe(e,"ErrorEvent")}function rit(e){return typeof Event<"u"&&cjd(e,Event)}function Y2c(e){return tLe(e,"Object")}function cjd(e,t){try{return e instanceof t}catch{return!1}}function IUt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),K2c(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),IUt(i||r,t,r,n))}var ujd=864e5,U5r=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=IUt(t.bucketSize,0,100,t._logger),this._refillRate=IUt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=IUt(t.refillInterval,0,ujd,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 _5r=class{add(t){let r=CIe();return this.promiseByIds[r]=t,t.catch(()=>{}).finally(()=>{delete this.promiseByIds[r]}),t}async join(){let t=Object.values(this.promiseByIds),r=t.length;for(;r>0;)await Promise.all(t),t=Object.values(this.promiseByIds),r=t.length}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={}}};function ljd(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var X2c=(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=>X2c(`${e} ${o}`,t,r)}},pjd=e=>e();function Z2c(e,t=pjd){return X2c(e,t,ljd())}var iit="Mobile",q5r="iOS",nit="Android",$2c="Tablet",S_0=nit+" "+$2c;var fjd="Apple",T_0=fjd+" Watch",ekc="Safari",G5r="BlackBerry",tkc="Samsung",djd=tkc+"Browser",mjd=tkc+" Internet",W5r="Chrome",hjd=W5r+" OS",gjd=W5r+" "+q5r,rkc="Internet Explorer",Ajd=rkc+" "+iit,KCo="Opera",B_0=KCo+" Mini",nkc="Edge",yjd="Microsoft "+nkc,JCo="Firefox",bjd=JCo+" "+q5r,YCo="Nintendo",XCo="PlayStation",V5r="Xbox",Ejd=nit+" "+iit,vjd=iit+" "+ekc,CUt="Windows",Ijd=CUt+" Phone";var ikc="Generic",O_0=ikc+" "+iit.toLowerCase(),P_0=ikc+" "+$2c.toLowerCase(),Cjd="Konqueror",uk="(\\d+(\\.\\d+)?)",HCo=new RegExp("Version/"+uk),D_0=new RegExp(V5r,"i"),R_0=new RegExp(XCo+" \\w+","i"),F_0=new RegExp(YCo+" \\w+","i"),xjd=new RegExp(G5r+"|PlayBook|BB10","i"),wjd={"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 k_0={[Ajd]:[new RegExp("rv:"+uk)],[yjd]:[new RegExp(nkc+"?\\/"+uk)],[W5r]:[new RegExp("("+W5r+"|CrMo)\\/"+uk)],[gjd]:[new RegExp("CriOS\\/"+uk)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+uk)],[ekc]:[HCo],[vjd]:[HCo],[KCo]:[new RegExp("("+KCo+"|OPR)\\/"+uk)],[JCo]:[new RegExp(JCo+"\\/"+uk)],[bjd]:[new RegExp("FxiOS\\/"+uk)],[Cjd]:[new RegExp("Konqueror[:/]?"+uk,"i")],[G5r]:[new RegExp(G5r+" "+uk),HCo],[Ejd]:[new RegExp("android\\s"+uk,"i")],[mjd]:[new RegExp(djd+"\\/"+uk)],[rkc]:[new RegExp("(rv:|MSIE )"+uk)],Mozilla:[new RegExp("rv:"+uk)]};var N_0=[[new RegExp(V5r+"; "+V5r+" (.*?)[);]","i"),e=>[V5r,e&&e[1]||""]],[new RegExp(YCo,"i"),[YCo,""]],[new RegExp(XCo,"i"),[XCo,""]],[xjd,[G5r,""]],[new RegExp(CUt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[Ijd,""];if(new RegExp(iit).test(t)&&!/IEMobile\b/.test(t))return[CUt+" "+iit,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=wjd[n]||"";return/arm/i.test(t)&&(i="RT"),[CUt,i]}return[CUt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[q5r,t.join(".")]}return[q5r,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=EUt(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+nit+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+nit+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[nit,t.join(".")]}return[nit,""]}],[/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/,[hjd,""]],[/Linux|debian/i,["Linux",""]]];var okc="utf8";function skc(e,t){if(!e||typeof e!="string"||Sjd(e))throw new Error(t)}function Sjd(e){return e.trim().length===0}function akc(e){return e?.replace(/\/+$/,"")}async function ckc(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 H5r(){return new Date().toISOString()}function Hpe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var ukc=e=>e instanceof Error;function ZCo(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var K5r=class{constructor(){this.events={},this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),()=>{this.events[t]=this.events[t].filter(n=>n!==r)}}emit(t,r){for(let n of this.events[t]||[])n(r);for(let n of this.events["*"]||[])n(t,r)}};var rLe=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()}},oit=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function lkc(e){if(e instanceof rLe){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 $Co(e){return typeof e=="object"&&(e instanceof rLe||e instanceof oit)}function pkc(e){return typeof e=="object"&&e instanceof rLe&&e.status===413}var xUt=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new _5r,this._events=new K5r,this._isInitialized=!1,skc(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=akc(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:$Co},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=Z2c("[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=!V2c()||(r?.disableCompression??!1)}logMsgIfDebug(t){this.isDebug&&t()}wrap(t){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return t();this._initPromise.then(()=>t())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(GQ.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(GQ.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(GQ.OptedOut,!0)})}on(t,r){return this._events.on(t,r)}debug(t=!0){if(this.removeDebugCallback?.(),t){let r=this.on("*",(n,i)=>this._logger.info(n,i));this.removeDebugCallback=()=>{r(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(t){return{distinct_id:t.distinct_id,event:t.event,properties:{...t.properties||{},...this.getCommonEventProperties()}}}addPendingPromise(t){return this.promiseQueue.add(t)}identifyStateless(t,r,n){this.wrap(()=>{let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};this.enqueue("identify",i,n)})}async identifyStatelessImmediate(t,r,n){let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};await this.sendImmediate("identify",i,n)}captureStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({distinct_id:t,event:r,properties:n});this.enqueue("capture",o,i)})}async captureStatelessImmediate(t,r,n,i){let o=this.buildPayload({distinct_id:t,event:r,properties:n});await this.sendImmediate("capture",o,i)}aliasStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});this.enqueue("alias",o,i)})}async aliasStatelessImmediate(t,r,n,i){let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});await this.sendImmediate("alias",o,i)}groupIdentifyStateless(t,r,n,i,o,s){this.wrap(()=>{let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});this.enqueue("capture",a,i)})}async getRemoteConfig(){await this._initPromise;let t=this.host;t==="https://us.i.posthog.com"?t="https://us-assets.i.posthog.com":t==="https://eu.i.posthog.com"&&(t="https://eu-assets.i.posthog.com");let r=`${t}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(r,n,{retryCount:0},this.remoteConfigRequestTimeoutMs).then(i=>i.json()).catch(i=>{this._logger.error("Remote config could not be loaded",i),this._events.emit("error",i)})}async getFlags(t,r={},n={},i={},o={},s=!1){await this._initPromise;let a=s?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,u={token:this.apiKey,distinct_id:t,groups:r,person_properties:n,group_properties:i,...o};this.evaluationContexts&&this.evaluationContexts.length>0&&(u.evaluation_contexts=this.evaluationContexts);let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(u)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,l,{retryCount:0},this.featureFlagsRequestTimeoutMs).then(p=>p.json()).then(p=>({success:!0,response:zCo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof rLe)return{type:"api_error",statusCode:t.status};if(t instanceof oit){let r=t.error;return r instanceof Error&&(r.name==="AbortError"||r.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(t,r,n,i,o,s);if(a===void 0)return{response:void 0,requestId:void 0};let c=bUt(a.response);return c===void 0&&(c=!1),{response:c,requestId:a.requestId}}async getFeatureFlagDetailStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(r,n,i,o,s,[t]);return a===void 0?void 0:{response:a.flags[t],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(r,n,i,o,s,[t]);if(!a)return;let c=a[t];return c===void 0?null:c}async getFeatureFlagPayloadsStateless(t,r={},n={},i={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)).payloads}async getFeatureFlagsStateless(t,r={},n={},i={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)}async getFeatureFlagsAndPayloadsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,r,n,i,o,s);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a={};(o??this.disableGeoip)&&(a.geoip_disable=!0),s&&(a.flag_keys_to_evaluate=s);let c=await this.getFlags(t,r,n,i,a);if(!c.success)return;let u=c.response;return u.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),u.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:u?.requestId,quotaLimited:u.quotaLimited}):u}async getSurveysStateless(){if(await this._initPromise,this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let t=`${this.host}/api/surveys/?token=${this.apiKey}`,r={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},i=(await this.fetchWithRetry(t,r).then(o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);this._logger.error(a),this._events.emit("error",new Error(s));return}return o.json()}).catch(o=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;return i&&this._logger.info("Surveys fetched from API: ",JSON.stringify(i)),i??[]}get props(){return this._props||(this._props=this.getPersistedProperty(GQ.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(GQ.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(GQ.Props,this.props)})}processBeforeEnqueue(t){return t}async flushStorage(){}enqueue(t,r,n){this.wrap(()=>{if(this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o=this.getPersistedProperty(GQ.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(GQ.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=Hpe(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(t,r,n){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o={api_key:this.apiKey,batch:[i],sent_at:H5r()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await Q5r(s,this.isDebug),u={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...c!==null&&{"Content-Encoding":"gzip"}},body:c||s};try{await this.fetchWithRetry(a,u)}catch(l){this._events.emit("error",l)}}prepareMessage(t,r,n){let i={...r,type:t,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:n?.timestamp?n?.timestamp:H5r(),uuid:n?.uuid?n.uuid:CIe()};return(n?.disableGeoip??this.disableGeoip)&&(i.properties||(i.properties={}),i.properties.$geoip_disable=!0),i.distinctId&&(i.distinct_id=i.distinctId,delete i.distinctId),i}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.flush().catch(async t=>{await lkc(t)})}async flush(){let t=ZCo([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),ZCo([t]).then(()=>{this.flushPromise===t&&(this.flushPromise=null)}),t}getCustomHeaders(){let t=this.getCustomUserAgent(),r={};return t&&t!==""&&(r["User-Agent"]=t),r}async _flush(){this.clearFlushTimer(),await this._initPromise;let t=this.getPersistedProperty(GQ.Queue)||[];if(!t.length)return;let r=[],n=t.length;for(;t.length>0&&r.length<n;){let i=t.slice(0,this.maxBatchSize),o=i.map(f=>f.message),s=async()=>{let m=(this.getPersistedProperty(GQ.Queue)||[]).slice(i.length);this.setPersistedProperty(GQ.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:H5r()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await Q5r(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>pkc(f)?!1:$Co(f)};try{await this.fetchWithRetry(u,p,d)}catch(f){if(pkc(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 oit||await s(),this._events.emit("error",f),f}await s(),r.push(...o)}this._events.emit("flush",r)}async fetchWithRetry(t,r,n,i){let o=r.body?r.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,okc)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await ckc(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=Hpe(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new oit(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new rLe(l,s);return l},{...this._retryOptions,...n})}async _shutdown(t=3e4){await this._initPromise;let r=!1;this.clearFlushTimer();let n=async()=>{try{for(await this.promiseQueue.join();!((this.getPersistedProperty(GQ.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!$Co(o))throw o;await lkc(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=Hpe(()=>{this._logger.error("Timed out while shutting down PostHog"),r=!0,s("Timeout while shutting down PostHog. Some events may not have been sent.")},t)}),n()])}finally{clearTimeout(i)}}async shutdown(t=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(t).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var WQ={};te(WQ,{DOMExceptionCoercer:()=>nxo,ErrorCoercer:()=>ixo,ErrorEventCoercer:()=>oxo,ErrorPropertiesBuilder:()=>exo,EventCoercer:()=>cxo,ObjectCoercer:()=>axo,PrimitiveCoercer:()=>uxo,PromiseRejectionEventCoercer:()=>lxo,ReduceableCache:()=>pxo,StringCoercer:()=>sxo,chromeStackLineParser:()=>txo,createDefaultStackParser:()=>Ujd,createStackParser:()=>Ikc,geckoStackLineParser:()=>rxo,nodeStackLineParser:()=>ykc,opera10StackLineParser:()=>hkc,opera11StackLineParser:()=>gkc,reverseAndStripFrames:()=>vkc,winjsStackLineParser:()=>mkc});var J5r,fkc,Y5r;function dkc(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return Y5r&&r.length===fkc||(fkc=r.length,Y5r=r.reduce((n,i)=>{J5r||(J5r={});let o=J5r[i];if(o)n[o[0]]=o[1];else{let s=e(i);for(let a=s.length-1;a>=0;a--){let u=s[a]?.filename,l=t[i];if(u&&l){n[u]=l,J5r[i]=[u,l];break}}}return n},{})),Y5r}var Bjd=4,exo=class{constructor(t,r,n=[]){this.coercers=t,this.stackParser=r,this.modifiers=n}buildFromUnknown(t,r={}){let i=r&&r.mechanism||{handled:!0,type:"generic"},s=this.buildCoercingContext(i,r,0).apply(t),a=this.buildParsingContext(r),c=this.parseStacktrace(s,a);return{$exception_list:this.convertToExceptionList(c,i),$exception_level:"error"}}async modifyFrames(t){for(let r of t)r.stacktrace&&r.stacktrace.frames&&qCo(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:dkc(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=Bjd){let c=this.buildCoercingContext(t,r,a);return this.applyCoercers(s,c)}};return{...r,syntheticException:n==0?r.syntheticException:void 0,mechanism:t,apply:s=>i(s,n),next:s=>i(s,n+1)}}};var RO="?";function k$(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?RO:r,in_app:!0};return EUt(n)||(o.lineno=n),EUt(i)||(o.colno=i),o}var X5r=(e,t)=>{let r=e.indexOf("safari-extension")!==-1,n=e.indexOf("safari-web-extension")!==-1;return r||n?[e.indexOf("@")!==-1?e.split("@")[0]:RO,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var Ojd=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Pjd=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Djd=/\((\S*)(?::(\d+))(?::(\d+))\)/,txo=(e,t)=>{let r=Ojd.exec(e);if(r){let[,i,o,s]=r;return k$(t,i,RO,+o,+s)}let n=Pjd.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=Djd.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=X5r(n[1]||RO,n[2]);return k$(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var Rjd=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Fjd=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,rxo=(e,t)=>{let r=Rjd.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=Fjd.exec(r[3]);s&&(r[1]=r[1]||"eval",r[3]=s[1],r[4]=s[2],r[5]="")}let i=r[3],o=r[1]||RO;return[o,i]=X5r(o,i),k$(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var kjd=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,mkc=(e,t)=>{let r=kjd.exec(e);return r?k$(t,r[2],r[1]||RO,+r[3],r[4]?+r[4]:void 0):void 0};var Njd=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,hkc=(e,t)=>{let r=Njd.exec(e);return r?k$(t,r[2],r[3]||RO,+r[1]):void 0},jjd=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,gkc=(e,t)=>{let r=jjd.exec(e);return r?k$(t,r[5],r[3]||r[4]||RO,+r[1],+r[2]):void 0};var Qjd=/^\s*[-]{4,}$/,Mjd=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,ykc=(e,t)=>{let r=e.match(Mjd);if(r){let n,i,o,s,a;if(r[1]){o=r[1];let l=o.lastIndexOf(".");if(o[l-1]==="."&&l--,l>0){n=o.slice(0,l),i=o.slice(l+1);let p=n.indexOf(".Module");p>0&&(o=o.slice(p+1),n=n.slice(0,p))}s=void 0}i&&(s=n,a=i),i==="<anonymous>"&&(a=void 0,o=void 0),o===void 0&&(a=a||RO,o=s?`${s}.${a}`:a);let c=r[2]?.startsWith("file://")?r[2].slice(7):r[2],u=r[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&r[5]&&!u&&(c=r[5]),{filename:c?decodeURI(c):void 0,module:void 0,function:o,lineno:Akc(r[3]),colno:Akc(r[4]),in_app:Ljd(c||"",u),platform:t}}if(e.match(Qjd))return{filename:e,platform:t}};function Ljd(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 Akc(e){return parseInt(e||"",10)||void 0}var bkc=/\(error: (.*)\)/,Ekc=50;function vkc(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,Ekc).map(r=>({...r,filename:r.filename||zjd(t).filename,function:r.function||RO}))}function zjd(e){return e[e.length-1]||{}}function Ujd(){return Ikc("web:javascript",txo,rxo)}function Ikc(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
|
|
2702
|
-
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=bkc.test(a)?a.replace(bkc,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=Ekc)break}}return vkc(i)}}var nxo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=vUt(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 tLe(t,"DOMException")}isDOMError(t){return tLe(t,"DOMError")}};var ixo=class{match(t){return WCo(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 oxo=class{constructor(){}match(t){return J2c(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 _jd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,sxo=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(_jd);return i&&(r=i[1],n=i[2]),[r,n]}};var Ckc=["fatal","error","warning","log","info","debug"];function Z5r(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 axo=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 rit(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=Z5r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return vUt(t)&&!H2c(t)&&Ckc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(ukc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var cxo=class{match(t){return rit(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${Z5r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var uxo=class{match(t){return z5r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var lxo=class{match(t){return tLe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!rit(t))return!1;try{let r=t.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return z5r(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&t.detail!=null&&typeof t.detail=="object"&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var pxo=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 Skc=require("fs"),Tkc=require("readline"),$5r=new WQ.ReduceableCache(25),Bkc=new WQ.ReduceableCache(20),fxo=7,Vjd=1e3,qjd=1e4;async function Okc(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"||Kjd(s)||Jjd(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(Bkc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=Xjd(o);if(s.every(c=>Yjd(i,c)))continue;let a=Zjd($5r,i,{});n.push(Gjd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&Wjd(e,$5r),$5r.reduce(),e}function Gjd(e,t,r){return new Promise(n=>{let i=(0,Skc.createReadStream)(e),o=(0,Tkc.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){Bkc.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]=$jd(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function Wjd(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;Hjd(r.lineno,r,n)}}function Hjd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=Pkc(e);i<e;i++){let o=r[i];if(o===void 0)return void xkc(t);t.pre_context.push(o)}if(r[e]===void 0)return void xkc(t);t.context_line=r[e];let n=Dkc(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 xkc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Kjd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Jjd(e){return e.lineno!==void 0&&e.lineno>qjd||e.colno!==void 0&&e.colno>Vjd}function Yjd(e,t){let r=$5r.get(e);if(r===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(r[n]===void 0)return!1;return!0}function Xjd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=wkc(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+fxo:(i.push(n),n=wkc(o)),t++}return i}function wkc(e){return[Pkc(e),Dkc(e)]}function Pkc(e){return Math.max(1,e-fxo)}function Dkc(e){return e+fxo}function Zjd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function $jd(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 eQd(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 Rkc(e,t){globalThis.process?.on("uncaughtException",eQd(e,t))}function Fkc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var tQd=2e3,OW=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new U5r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return GCo(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(Rkc(this.onException.bind(this),this.onFatalError.bind(this)),Fkc(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(tQd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var kkc="5.29.1";var wUt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function Nkc(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 rQd=6e4,nQd=1152921504606847e3,iQd=["is_not"],sit=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Nd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},N$=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},e8r=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof N$||u instanceof Nd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof N$||u instanceof Nd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new Nd("Flag has experience continuity enabled");if(!t.active)return!1;let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Nd("Flag has unknown group type index");if(!(u in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[u];return await this.matchFeatureFlagProperties(t,i[u],l,r)}{let u=this.getBucketingValueForFlag(t,n,o);if(u===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new Nd(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new Nd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Nd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Nd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Nd(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Nd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Nd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Nd(`Dependency '${c}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,c;for(let u of s)try{if(await this.isConditionMatch(t,r,u,n,i)){let l=u.variant,p=o.multivariate?.variants||[];c=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof N$)throw l;if(l instanceof Nd)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Nd("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?zkc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):Lkc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await jkc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await jkc(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(rQd,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 sit(`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 sit(`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 sit(`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 sit&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/api/feature_flag/local_evaluation?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=Hpe(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function jkc(e,t,r=""){let n=await Nkc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/nQd}function Lkc(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")throw new Nd("Operator is_not_set is not supported")}else throw new Nd(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!iQd.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return Qkc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return Qkc(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:null;if(typeof i=="string")try{u=parseFloat(i)}catch{}return u==null||s==null?c(String(s),String(i),o):typeof s=="string"?c(s,String(i),o):c(s,u,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Nd("Date operations cannot be performed on boolean values");let u=uQd(String(i));if(u==null&&(u=Mkc(i)),u==null)throw new Nd(`Invalid date: ${i}`);let l=Mkc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return lV(FO(String(s)),FO(String(i)))===0;case"semver_neq":return lV(FO(String(s)),FO(String(i)))!==0;case"semver_gt":return lV(FO(String(s)),FO(String(i)))>0;case"semver_gte":return lV(FO(String(s)),FO(String(i)))>=0;case"semver_lt":return lV(FO(String(s)),FO(String(i)))<0;case"semver_lte":return lV(FO(String(s)),FO(String(i)))<=0;case"semver_tilde":{let u=FO(String(s)),{lower:l,upper:p}=sQd(String(i));return lV(u,l)>=0&&lV(u,p)<0}case"semver_caret":{let u=FO(String(s)),{lower:l,upper:p}=aQd(String(i));return lV(u,l)>=0&&lV(u,p)<0}case"semver_wildcard":{let u=FO(String(s)),{lower:l,upper:p}=cQd(String(i));return lV(u,l)>=0&&lV(u,p)<0}default:throw new Nd(`Unknown operator: ${o}`)}}function oQd(e,t){if(!(e in t))throw new N$(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function zkc(e,t,r,n=!1){let i=String(e.value);oQd(i,r);let o=r[i];return Ukc(o,t,r,n)}function Ukc(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let c=Ukc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof N$)throw c;if(c instanceof Nd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Nd("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let c;if(a.type==="cohort")c=zkc(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else c=Lkc(a,t);let u=a.negation||!1;if(i==="AND"){if(!c&&!u||c&&u)return!1}else if(c&&!u||!c&&u)return!0}catch(c){if(c instanceof N$)throw c;if(c instanceof Nd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Nd("can't match cohort without a given cohort property value");return i==="AND"}function Qkc(e){try{return new RegExp(e),!0}catch{return!1}}function FO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Nd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Nd(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function lV(e,t){for(let r=0;r<3;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0}function sQd(e){let t=FO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function aQd(e){let t=FO(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function cQd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Nd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Nd(`Invalid wildcard semver: ${e}`);let o,s;if(n.length===1)o=[i,0,0],s=[i+1,0,0];else{let a=parseInt(n[1],10);if(isNaN(a))throw new Nd(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function Mkc(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new Nd(`${e} is in an invalid date format`)}throw new Nd(`The date provided ${e} must be a string, number, or date object`)}function uQd(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 t8r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var lQd=100,_kc=3e4,pQd=5e4,fQd=50,dQd=500,r8r=class extends xUt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new t8r,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,lQd):_kc,typeof r.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(r.waitUntilDebounceMs,0)),typeof r.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(r.waitUntilMaxWaitMs,0)),r.personalApiKey){if(r.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');r.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new e8r({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 OW(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||pQd}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??dQd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??fQd;this._waitUntilCycle.timer=Hpe(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return kkc}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=_kc){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let B=this._flagOverrides[t];if(B===void 0)return;let O=this._payloadOverrides?.[t];return{key:t,enabled:B!==!1,variant:typeof B=="string"?B:void 0,payload:O}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,h,A,y,I,x,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let B=this.featureFlagsPoller?.featureFlagsByKey[t];if(B)try{let O=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(B,d,{matchValue:i});if(O){m=!0;let N=O.value;I=B.id,C="Evaluated locally",f={key:t,enabled:N!==!1,variant:typeof N=="string"?N:void 0,payload:O.payload??void 0}}}catch(O){if(O instanceof N$||O instanceof Nd)this._logger?.info(`${O.name} when computing flag locally: ${t}: ${O.message}`);else throw O}}if(!m&&!c){let B=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(B===void 0)y=wUt.UNKNOWN_ERROR;else{h=B.requestId,A=B.evaluatedAt;let O=[];B.errorsWhileComputingFlags&&O.push(wUt.ERRORS_WHILE_COMPUTING),B.quotaLimited?.includes("feature_flags")&&O.push(wUt.QUOTA_LIMITED);let N=B.flags[t];if(N===void 0)O.push(wUt.FLAG_MISSING);else{I=N.metadata?.id,x=N.metadata?.version,C=N.reason?.description??N.reason?.code;let P;if(N.metadata?.payload!==void 0)try{P=JSON.parse(N.metadata.payload)}catch{P=N.metadata.payload}f={key:t,enabled:N.enabled,variant:N.variant,payload:P}}O.length>0&&(y=O.join(","))}}if(o){let B=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,O=`${t}_${B}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(O)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(O):this.distinctIdHasSentFlagCalls[r]=[O];let N={$feature_flag:t,$feature_flag_response:B,$feature_flag_id:I,$feature_flag_version:x,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:B,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(N.$feature_flag_definitions_loaded_at=P)}y&&(N.$feature_flag_error=y),this.capture({distinctId:r,event:"$feature_flag_called",properties:N,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},A=!0;if(f&&(m=f.response,h=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},h={...h,...y.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=Hpe(()=>{o.abort()},this.options.requestTimeout),n.signal=o.signal}try{return await this.fetch(r,n)}catch(o){this._events.emit("error",o);return}finally{i&&clearTimeout(i)}}extractPropertiesFromEvent(t,r){if(!t)return{personProperties:{},groupProperties:{}};let n={},i={};for(let[o,s]of Object.entries(t))if(Y2c(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!OW.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(OW.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!OW.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(OW.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=CIe(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,c,h)}return f.event,{}}).then(h=>{let A={};if(h)for(let[I,x]of Object.entries(h))A[`$feature/${I}`]=x;let y=Object.keys(h||{}).filter(I=>h?.[I]!==!1).sort();return y.length>0&&(A.$active_feature_flags=y),A}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&G2c(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 Vkc=require("async_hooks"),n8r=class{constructor(){this.storage=new Vkc.AsyncLocalStorage}get(){return this.storage.getStore()}run(t,r,n){return this.storage.run(this.resolve(t,n),r)}enter(t,r){this.storage.enterWith(this.resolve(t,r))}resolve(t,r){if(r?.fresh===!0)return t;let n=this.get()||{};return{distinctId:t.distinctId??n.distinctId,sessionId:t.sessionId??n.sessionId,properties:{...n.properties||{},...t.properties||{}}}}};var qkc="posthog-node";function mQd(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let c=s.tags[dxo.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:c,properties:f}),s}}var dxo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=qkc,this.name=qkc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(mQd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};OW.errorPropertiesBuilder=new WQ.ErrorPropertiesBuilder([new WQ.EventCoercer,new WQ.ErrorCoercer,new WQ.ObjectCoercer,new WQ.StringCoercer,new WQ.PrimitiveCoercer],WQ.createStackParser("node:javascript",WQ.nodeStackLineParser),[z2c(),Okc]);var xIe=class extends r8r{getLibraryId(){return"posthog-node"}initializeContext(){return new n8r}};var i8r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new xIe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.15.2",usingAccessToken:!0}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var SUt=class{async sendEvent(){}async identify(){}async flush(){}};rr();var ait=require("fs/promises"),Gkc=require("os"),Wkc=require("path");var hQd="id",gQd=".fern",TUt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new xIe(r),this.userId=t==null?void 0:Pyo(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"5.15.2",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await Qf({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=nt(Yt.of((0,Gkc.homedir)()),Fe.of(gQd),Fe.of(hQd));await ar(t)||(await(0,ait.mkdir)((0,Wkc.dirname)(t),{recursive:!0}),await(0,ait.writeFile)(t,PQ())),this.persistedDistinctId=(await(0,ait.readFile)(t)).toString()}return this.persistedDistinctId}};var mxo;async function BUt(){return mxo==null&&(mxo=await AQd()),mxo}async function AQd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new SUt;let r=await hLr();return r!=null?new TUt({token:r,posthogApiKey:e}):await A$()!=null?new i8r({posthogApiKey:e}):new TUt({token:void 0,posthogApiKey:e})}catch{return new SUt}}Ut();var OUt=we(require("process"),1);Dqe();var Jkc=we(Buo(),1),Ykc=we(Kkc(),1);function J1(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=fG(e),e.length===0))return 0;e=e.replace((0,Ykc.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(Jkc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function o8r(e){let t=0;for(let r of e.split(`
|
|
2702
|
+
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=bkc.test(a)?a.replace(bkc,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=Ekc)break}}return vkc(i)}}var nxo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=vUt(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 tLe(t,"DOMException")}isDOMError(t){return tLe(t,"DOMError")}};var ixo=class{match(t){return WCo(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 oxo=class{constructor(){}match(t){return J2c(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 _jd=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,sxo=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(_jd);return i&&(r=i[1],n=i[2]),[r,n]}};var Ckc=["fatal","error","warning","log","info","debug"];function Z5r(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 axo=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 rit(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=Z5r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return vUt(t)&&!H2c(t)&&Ckc.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(ukc(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var cxo=class{match(t){return rit(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${Z5r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var uxo=class{match(t){return z5r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var lxo=class{match(t){return tLe(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!rit(t))return!1;try{let r=t.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return z5r(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&t.detail!=null&&typeof t.detail=="object"&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var pxo=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 Skc=require("fs"),Tkc=require("readline"),$5r=new WQ.ReduceableCache(25),Bkc=new WQ.ReduceableCache(20),fxo=7,Vjd=1e3,qjd=1e4;async function Okc(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"||Kjd(s)||Jjd(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(Bkc.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=Xjd(o);if(s.every(c=>Yjd(i,c)))continue;let a=Zjd($5r,i,{});n.push(Gjd(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&Wjd(e,$5r),$5r.reduce(),e}function Gjd(e,t,r){return new Promise(n=>{let i=(0,Skc.createReadStream)(e),o=(0,Tkc.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){Bkc.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]=$jd(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function Wjd(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;Hjd(r.lineno,r,n)}}function Hjd(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=Pkc(e);i<e;i++){let o=r[i];if(o===void 0)return void xkc(t);t.pre_context.push(o)}if(r[e]===void 0)return void xkc(t);t.context_line=r[e];let n=Dkc(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 xkc(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Kjd(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Jjd(e){return e.lineno!==void 0&&e.lineno>qjd||e.colno!==void 0&&e.colno>Vjd}function Yjd(e,t){let r=$5r.get(e);if(r===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(r[n]===void 0)return!1;return!0}function Xjd(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=wkc(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+fxo:(i.push(n),n=wkc(o)),t++}return i}function wkc(e){return[Pkc(e),Dkc(e)]}function Pkc(e){return Math.max(1,e-fxo)}function Dkc(e){return e+fxo}function Zjd(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function $jd(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 eQd(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 Rkc(e,t){globalThis.process?.on("uncaughtException",eQd(e,t))}function Fkc(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var tQd=2e3,OW=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new U5r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return GCo(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(Rkc(this.onException.bind(this),this.onFatalError.bind(this)),Fkc(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(tQd),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var kkc="5.29.1";var wUt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function Nkc(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 rQd=6e4,nQd=1152921504606847e3,iQd=["is_not"],sit=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Nd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},N$=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},e8r=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof N$||u instanceof Nd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof N$||u instanceof Nd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new Nd("Flag has experience continuity enabled");if(!t.active)return!1;let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Nd("Flag has unknown group type index");if(!(u in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[u];return await this.matchFeatureFlagProperties(t,i[u],l,r)}{let u=this.getBucketingValueForFlag(t,n,o);if(u===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new Nd(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new Nd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Nd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Nd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Nd(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Nd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Nd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Nd(`Dependency '${c}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,c;for(let u of s)try{if(await this.isConditionMatch(t,r,u,n,i)){let l=u.variant,p=o.multivariate?.variants||[];c=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof N$)throw l;if(l instanceof Nd)a=!0;else throw l}if(c!==void 0)return c;if(a)throw new Nd("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?zkc(c,i,this.cohorts,this.debugMode):u==="flag"?await this.evaluateFlagDependency(c,i,o):Lkc(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await jkc(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await jkc(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(rQd,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 sit(`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 sit(`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 sit(`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 sit&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/api/feature_flag/local_evaluation?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=Hpe(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function jkc(e,t,r=""){let n=await Nkc(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/nQd}function Lkc(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")throw new Nd("Operator is_not_set is not supported")}else throw new Nd(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!iQd.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return Qkc(String(i))&&String(s).match(String(i))!==null;case"not_regex":return Qkc(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:null;if(typeof i=="string")try{u=parseFloat(i)}catch{}return u==null||s==null?c(String(s),String(i),o):typeof s=="string"?c(s,String(i),o):c(s,u,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Nd("Date operations cannot be performed on boolean values");let u=uQd(String(i));if(u==null&&(u=Mkc(i)),u==null)throw new Nd(`Invalid date: ${i}`);let l=Mkc(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return lV(FO(String(s)),FO(String(i)))===0;case"semver_neq":return lV(FO(String(s)),FO(String(i)))!==0;case"semver_gt":return lV(FO(String(s)),FO(String(i)))>0;case"semver_gte":return lV(FO(String(s)),FO(String(i)))>=0;case"semver_lt":return lV(FO(String(s)),FO(String(i)))<0;case"semver_lte":return lV(FO(String(s)),FO(String(i)))<=0;case"semver_tilde":{let u=FO(String(s)),{lower:l,upper:p}=sQd(String(i));return lV(u,l)>=0&&lV(u,p)<0}case"semver_caret":{let u=FO(String(s)),{lower:l,upper:p}=aQd(String(i));return lV(u,l)>=0&&lV(u,p)<0}case"semver_wildcard":{let u=FO(String(s)),{lower:l,upper:p}=cQd(String(i));return lV(u,l)>=0&&lV(u,p)<0}default:throw new Nd(`Unknown operator: ${o}`)}}function oQd(e,t){if(!(e in t))throw new N$(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function zkc(e,t,r,n=!1){let i=String(e.value);oQd(i,r);let o=r[i];return Ukc(o,t,r,n)}function Ukc(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let c=Ukc(a,t,r,n);if(i==="AND"){if(!c)return!1}else if(c)return!0}catch(c){if(c instanceof N$)throw c;if(c instanceof Nd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Nd("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let c;if(a.type==="cohort")c=zkc(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else c=Lkc(a,t);let u=a.negation||!1;if(i==="AND"){if(!c&&!u||c&&u)return!1}else if(c&&!u||!c&&u)return!0}catch(c){if(c instanceof N$)throw c;if(c instanceof Nd)n&&console.debug(`Failed to compute property ${a} locally: ${c}`),s=!0;else throw c}if(s)throw new Nd("can't match cohort without a given cohort property value");return i==="AND"}function Qkc(e){try{return new RegExp(e),!0}catch{return!1}}function FO(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Nd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>{if(c===void 0||c==="")return 0;if(!/^\d+$/.test(c))throw new Nd(`Invalid semver: ${e}`);return parseInt(c,10)},o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function lV(e,t){for(let r=0;r<3;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0}function sQd(e){let t=FO(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function aQd(e){let t=FO(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function cQd(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Nd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=parseInt(n[0],10);if(isNaN(i))throw new Nd(`Invalid wildcard semver: ${e}`);let o,s;if(n.length===1)o=[i,0,0],s=[i+1,0,0];else{let a=parseInt(n[1],10);if(isNaN(a))throw new Nd(`Invalid wildcard semver: ${e}`);o=[i,a,0],s=[i,a+1,0]}return{lower:o,upper:s}}function Mkc(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new Nd(`${e} is in an invalid date format`)}throw new Nd(`The date provided ${e} must be a string, number, or date object`)}function uQd(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 t8r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var lQd=100,_kc=3e4,pQd=5e4,fQd=50,dQd=500,r8r=class extends xUt{constructor(t,r={}){if(super(t,r),this._memoryStorage=new t8r,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,lQd):_kc,typeof r.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(r.waitUntilDebounceMs,0)),typeof r.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(r.waitUntilMaxWaitMs,0)),r.personalApiKey){if(r.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');r.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new e8r({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 OW(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||pQd}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??dQd,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??fQd;this._waitUntilCycle.timer=Hpe(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return kkc}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=_kc){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let B=this._flagOverrides[t];if(B===void 0)return;let O=this._payloadOverrides?.[t];return{key:t,enabled:B!==!1,variant:typeof B=="string"?B:void 0,payload:O}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,h,A,y,I,x,C;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let B=this.featureFlagsPoller?.featureFlagsByKey[t];if(B)try{let O=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(B,d,{matchValue:i});if(O){m=!0;let N=O.value;I=B.id,C="Evaluated locally",f={key:t,enabled:N!==!1,variant:typeof N=="string"?N:void 0,payload:O.payload??void 0}}}catch(O){if(O instanceof N$||O instanceof Nd)this._logger?.info(`${O.name} when computing flag locally: ${t}: ${O.message}`);else throw O}}if(!m&&!c){let B=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(B===void 0)y=wUt.UNKNOWN_ERROR;else{h=B.requestId,A=B.evaluatedAt;let O=[];B.errorsWhileComputingFlags&&O.push(wUt.ERRORS_WHILE_COMPUTING),B.quotaLimited?.includes("feature_flags")&&O.push(wUt.QUOTA_LIMITED);let N=B.flags[t];if(N===void 0)O.push(wUt.FLAG_MISSING);else{I=N.metadata?.id,x=N.metadata?.version,C=N.reason?.description??N.reason?.code;let P;if(N.metadata?.payload!==void 0)try{P=JSON.parse(N.metadata.payload)}catch{P=N.metadata.payload}f={key:t,enabled:N.enabled,variant:N.variant,payload:P}}O.length>0&&(y=O.join(","))}}if(o){let B=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,O=`${t}_${B}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(O)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(O):this.distinctIdHasSentFlagCalls[r]=[O];let N={$feature_flag:t,$feature_flag_response:B,$feature_flag_id:I,$feature_flag_version:x,$feature_flag_reason:C,locally_evaluated:m,[`$feature/${t}`]:B,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(N.$feature_flag_definitions_loaded_at=P)}y&&(N.$feature_flag_error=y),this.capture({distinctId:r,event:"$feature_flag_called",properties:N,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},A=!0;if(f&&(m=f.response,h=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},h={...h,...y.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=Hpe(()=>{o.abort()},this.options.requestTimeout),n.signal=o.signal}try{return await this.fetch(r,n)}catch(o){this._events.emit("error",o);return}finally{i&&clearTimeout(i)}}extractPropertiesFromEvent(t,r){if(!t)return{personProperties:{},groupProperties:{}};let n={},i={};for(let[o,s]of Object.entries(t))if(Y2c(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!OW.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(OW.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!OW.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(OW.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=CIe(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:c,uuid:u});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,c,h)}return f.event,{}}).then(h=>{let A={};if(h)for(let[I,x]of Object.entries(h))A[`$feature/${I}`]=x;let y=Object.keys(h||{}).filter(I=>h?.[I]!==!1).sort();return y.length>0&&(A.$active_feature_flags=y),A}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&G2c(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 Vkc=require("async_hooks"),n8r=class{constructor(){this.storage=new Vkc.AsyncLocalStorage}get(){return this.storage.getStore()}run(t,r,n){return this.storage.run(this.resolve(t,n),r)}enter(t,r){this.storage.enterWith(this.resolve(t,r))}resolve(t,r){if(r?.fresh===!0)return t;let n=this.get()||{};return{distinctId:t.distinctId??n.distinctId,sessionId:t.sessionId??n.sessionId,properties:{...n.properties||{},...t.properties||{}}}}};var qkc="posthog-node";function mQd(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let c=s.tags[dxo.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:c,properties:f}),s}}var dxo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=qkc,this.name=qkc,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(mQd(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};OW.errorPropertiesBuilder=new WQ.ErrorPropertiesBuilder([new WQ.EventCoercer,new WQ.ErrorCoercer,new WQ.ObjectCoercer,new WQ.StringCoercer,new WQ.PrimitiveCoercer],WQ.createStackParser("node:javascript",WQ.nodeStackLineParser),[z2c(),Okc]);var xIe=class extends r8r{getLibraryId(){return"posthog-node"}initializeContext(){return new n8r}};var i8r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new xIe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.15.3",usingAccessToken:!0}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var SUt=class{async sendEvent(){}async identify(){}async flush(){}};rr();var ait=require("fs/promises"),Gkc=require("os"),Wkc=require("path");var hQd="id",gQd=".fern",TUt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new xIe(r),this.userId=t==null?void 0:Pyo(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"5.15.3",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await Qf({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=nt(Yt.of((0,Gkc.homedir)()),Fe.of(gQd),Fe.of(hQd));await ar(t)||(await(0,ait.mkdir)((0,Wkc.dirname)(t),{recursive:!0}),await(0,ait.writeFile)(t,PQ())),this.persistedDistinctId=(await(0,ait.readFile)(t)).toString()}return this.persistedDistinctId}};var mxo;async function BUt(){return mxo==null&&(mxo=await AQd()),mxo}async function AQd(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new SUt;let r=await hLr();return r!=null?new TUt({token:r,posthogApiKey:e}):await A$()!=null?new i8r({posthogApiKey:e}):new TUt({token:void 0,posthogApiKey:e})}catch{return new SUt}}Ut();var OUt=we(require("process"),1);Dqe();var Jkc=we(Buo(),1),Ykc=we(Kkc(),1);function J1(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=fG(e),e.length===0))return 0;e=e.replace((0,Ykc.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(Jkc.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function o8r(e){let t=0;for(let r of e.split(`
|
|
2703
2703
|
`))t=Math.max(t,J1(r));return t}var gNc=we(gxo(),1);var bQd=/[\p{Lu}]/u,EQd=/[\p{Ll}]/u,$kc=/^[\p{Lu}](?![\p{Lu}])/gu,rNc=/([\p{Alpha}\p{N}_]|$)/u,Axo=/[_.\- ]+/,vQd=new RegExp("^"+Axo.source),eNc=new RegExp(Axo.source+rNc.source,"gu"),tNc=new RegExp("\\d+"+rNc.source,"gu"),IQd=(e,t,r,n)=>{let i=!1,o=!1,s=!1,a=!1;for(let c=0;c<e.length;c++){let u=e[c];a=c>2?e[c-3]==="-":!0,i&&bQd.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&EQd.test(u)&&(!a||n)?(e=e.slice(0,c-1)+"-"+e.slice(c-1),s=o,o=!1,i=!0):(i=t(u)===u&&r(u)!==u,s=o,o=r(u)===u&&t(u)!==u)}return e},CQd=(e,t)=>($kc.lastIndex=0,e.replace($kc,r=>t(r))),xQd=(e,t)=>(eNc.lastIndex=0,tNc.lastIndex=0,e.replace(eNc,(r,n)=>t(n)).replace(tNc,r=>t(r)));function yxo(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?Axo.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=IQd(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(vQd,""),e=t.preserveConsecutiveUppercase?CQd(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),xQd(e,n))}var Ixo=we(iNc(),1);Dqe();var oNc=(e=0)=>t=>`\x1B[${t+e}m`,sNc=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,aNc=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,V0={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},V80=Object.keys(V0.modifier),BQd=Object.keys(V0.color),OQd=Object.keys(V0.bgColor),q80=[...BQd,...OQd];function PQd(){let e=new Map;for(let[t,r]of Object.entries(V0)){for(let[n,i]of Object.entries(r))V0[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=V0[n],e.set(i[0],i[1]);Object.defineProperty(V0,t,{value:r,enumerable:!1})}return Object.defineProperty(V0,"codes",{value:e,enumerable:!1}),V0.color.close="\x1B[39m",V0.bgColor.close="\x1B[49m",V0.color.ansi=oNc(),V0.color.ansi256=sNc(),V0.color.ansi16m=aNc(),V0.bgColor.ansi=oNc(10),V0.bgColor.ansi256=sNc(10),V0.bgColor.ansi16m=aNc(10),Object.defineProperties(V0,{rgbToAnsi256:{value(t,r,n){return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[n]=r;n.length===3&&(n=[...n].map(o=>o+o).join(""));let i=Number.parseInt(n,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:t=>V0.rgbToAnsi256(...V0.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,n,i;if(t>=232)r=((t-232)*10+8)/255,n=r,i=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,n=Math.floor(a/6)/5,i=a%6/5}let o=Math.max(r,n,i)*2;if(o===0)return 30;let s=30+(Math.round(i)<<2|Math.round(n)<<1|Math.round(r));return o===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,n)=>V0.ansi256ToAnsi(V0.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>V0.ansi256ToAnsi(V0.hexToAnsi256(t)),enumerable:!1}}),V0}var DQd=PQd(),cNc=DQd;var s8r=new Set(["\x1B","\x9B"]),RQd=39,Exo="\x07",pNc="[",FQd="]",fNc="m",vxo=`${FQd}8;;`,uNc=e=>`${s8r.values().next().value}${pNc}${e}${fNc}`,lNc=e=>`${s8r.values().next().value}${vxo}${e}${Exo}`,kQd=e=>e.split(" ").map(t=>J1(t)),bxo=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=J1(fG(e[e.length-1]));for(let[a,c]of n.entries()){let u=J1(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),s8r.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(vxo)),i){o?c===Exo&&(i=!1,o=!1):c===fNc&&(i=!1);continue}s+=u,s===r&&a<n.length-1&&(e.push(""),s=0)}!s&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},NQd=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(J1(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},jQd=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=kQd(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=J1(a[a.length-1]);if(u!==0&&(p>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),p=0),(p>0||r.trim===!1)&&(a[a.length-1]+=" ",p++)),r.hard&&s[u]>t){let d=t-p,f=1+Math.floor((s[u]-d-1)/t);Math.floor((s[u]-1)/t)<f&&a.push(""),bxo(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){bxo(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){bxo(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>NQd(u)));let c=[...a.join(`
|
|
2704
2704
|
`)];for(let[u,l]of c.entries()){if(n+=l,s8r.has(l)){let{groups:d}=new RegExp(`(?:\\${pNc}(?<code>\\d+)m|\\${vxo}(?<uri>.*)${Exo})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===RQd?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=cNc.codes.get(Number(i));c[u+1]===`
|
|
2705
2705
|
`?(o&&(n+=lNc("")),i&&p&&(n+=uNc(p))):l===`
|
|
@@ -3589,7 +3589,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
|
|
|
3589
3589
|
`)}var S8t=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 w8t({cwd:n}).migrate();if(t.push(...o.warnings),!o.success||o.org==null)return{success:!1,warnings:[...t,{type:"conflict",message:"Failed to migrate fern.config.json - organization is required"}],migratedFiles:r};o.absoluteFilePath!=null&&r.push(o.absoluteFilePath);let s=nt(n,Fe.of(b2)),a=await ar(s,"directory"),c;if(a){let d=await this.migrateMultiApi({fernDir:n,apisDir:s,org:o.org,warnings:t,migratedFiles:r});if(!d.success)return{success:!1,warnings:t,migratedFiles:r};c=d.fernYml}else{let d=await this.migrateSingleApi({fernDir:n,org:o.org,warnings:t,migratedFiles:r});if(!d.success)return{success:!1,warnings:t,migratedFiles:r};c=d.fernYml}let u=await A3o(n);u.docsRef!=null&&(c.docs=u.docsRef);let l=nt(this.cwd,Fe.of(mC)),p=this.serializeFernYml(c);if(await(0,Kyt.writeFile)(l,p,"utf-8"),this.deleteOriginals)for(let d of r)try{await(0,Kyt.rm)(d),this.logger.debug(`Deleted ${d}`)}catch{t.push({type:"info",message:`Could not delete ${d}`})}return this.logger.info(`Created ${l}`),t.push(...await y3o(this.cwd)),{success:!0,warnings:t,migratedFiles:r,outputPath:l}}async migrateSingleApi(t){let{fernDir:r,org:n,warnings:i,migratedFiles:o}=t,a=await new Yze({cwd:r}).migrate();i.push(...a.warnings),a.absoluteFilePath!=null&&o.push(a.absoluteFilePath);let c=await h3o({fernDir:r,generatorsYmlApi:a.rawApi});i.push(...c.warnings);let u={org:n};return c.api!=null&&(u.api=c.api),a.sdks!=null&&(u.sdks=a.sdks),{success:!0,fernYml:u}}async migrateMultiApi(t){let{fernDir:r,apisDir:n,org:i,warnings:o,migratedFiles:s}=t,c=(await(0,Kyt.readdir)(n,{withFileTypes:!0})).filter(A=>A.isDirectory()).map(A=>A.name);if(c.length===0)return o.push({type:"conflict",message:"No API directories found in fern/apis/"}),{success:!1,fernYml:{org:i}};let u={},l={targets:{}},p;for(let A of c){let y=nt(n,Fe.of(A)),x=await new Yze({cwd:y,apiName:A}).migrate();if(o.push(...x.warnings),x.absoluteFilePath!=null&&s.push(x.absoluteFilePath),u[A]=x.rawApi,x.sdks!=null){for(let[C,w]of Object.entries(x.sdks.targets))l.targets[C]=w;x.sdks.autorelease!=null&&p==null&&(p=x.sdks.autorelease)}}let d=await g3o({fernDir:r,apisDir:n,generatorsYmlApis:u});o.push(...d.warnings);let f={org:i,apis:d.apis};Object.keys(l.targets).length>0&&(p!=null&&(l.autorelease=p),f.sdks=l);let h=await new Yze({cwd:r}).detect();return h.found&&h.absoluteFilePath!=null&&(o.push({type:"info",message:"Found generators.yml in fern root alongside apis/ directory",suggestion:"Review the migrated configuration to ensure it's correct"}),s.push(h.absoluteFilePath)),{success:!0,fernYml:f}}async findFernDirectory(){if(this.cwd.split("/").pop()===Lg)return this.cwd;let r=nt(this.cwd,Fe.of(Lg));if(await ar(r,"directory"))return r}serializeFernYml(t){let r={edition:t.edition,org:t.org};return t.api!=null&&(r.api=t.api),t.apis!=null&&(r.apis=t.apis),t.ai!=null&&(r.ai=t.ai),t.cli!=null&&(r.cli=t.cli),t.docs!=null&&(r.docs=t.docs),t.sdks!=null&&(r.sdks=this.simplifySdks(t.sdks)),Br.dump(r,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"',forceQuotes:!1})}simplifySdks(t){let r={...t},n={};for(let[i,o]of Object.entries(t.targets)){let s=o.output;if(typeof s=="string"){n[i]=o;continue}if(s.git==null&&s.path!=null){n[i]={...o,output:s.path};continue}n[i]=o}return r.targets=n,r}};var b3o=class{async handle(t,r){let i=await new S8t({cwd:t.cwd,logger:t.stdout,deleteOriginals:r.delete}).migrate();for(let o of i.warnings){switch(o.type){case"deprecated":t.stdout.warn(`Deprecated: ${o.message}`);break;case"unsupported":t.stdout.warn(`Unsupported: ${o.message}`);break;case"conflict":t.stderr.error(`Error: ${o.message}`);break;case"info":t.stdout.info(o.message);break}o.suggestion!=null&&t.stdout.info(` Suggestion: ${o.suggestion}`)}if(i.success){i.outputPath!=null&&t.stdout.debug(`Created: ${i.outputPath}`);return}throw new Q({message:"Migration failed",code:Q.Code.ConfigError})}};function E3o(e){let t=new b3o;To(e,"migrate","Migrate legacy configuration files to fern.yml",(r,n)=>t.handle(r,n),r=>r.option("delete",{type:"boolean",description:"Keep original files after migration",default:!0}))}function v3o(e){Cv(e,"config","Configure, edit, and inspect your settings",[E3o])}var I3o=class{async handle(t,r){let n=await t.loadWorkspaceOrThrow();if(n.docs==null)throw new Q({message:`No docs configuration found in fern.yml.
|
|
3590
3590
|
|
|
3591
3591
|
Add a 'docs:' section to your fern.yml to get started.`,code:Q.Code.ConfigError});let o=await new QOe({context:t}).check({workspace:n,strict:r.strict}),s=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let a=this.buildJsonResponse({result:o,hasErrors:s});if(t.stdout.info(JSON.stringify(a,null,2)),s)throw new Q({code:Q.Code.ValidationError});return}if(o.violations.length>0)for(let a of o.violations){let c=a.severity==="warning"?Se.yellow:Se.red;process.stderr.write(`${c(`${a.displayRelativeFilepath}:${a.line}:${a.column}: ${a.message}`)}
|
|
3592
|
-
`)}if(s)throw new Q({code:Q.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${Tn.warning} ${Se.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(Se.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Tn.success} ${Se.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>L$(i))),{success:!r,results:n}}};function C3o(e){let t=new I3o;To(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}))}var Geu=we(require("net"),1),Weu=we(require("os"),1),iXn=class extends Error{constructor(t){super(`${t} is locked`)}},Jyt={old:new Set,young:new Set},Rbm=1e3*15,Heu=new Set;var T8t,Fbm=()=>{let e=Weu.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},Veu=e=>new Promise((t,r)=>{let n=Geu.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),qeu=async(e,t)=>{if(e.host||e.port===0)return Veu(e);for(let r of t)try{await Veu({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},kbm=e=>Jyt.old.has(e)||Jyt.young.has(e)||Heu.has(e),Nbm=function*(e){e&&(yield*e),yield 0};async function MOe(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};T8t===void 0&&(T8t=setTimeout(()=>{T8t=void 0,Jyt.old=Jyt.young,Jyt.young=new Set},Rbm),T8t.unref&&T8t.unref());let o=Fbm();for(let s of Nbm(t))try{if(r.has(s))continue;let a=await qeu({...i,port:s},o);for(;kbm(a);){if(s!==0)throw new iXn(s);a=await qeu({...i,port:s},o)}return n?Heu.add(a):Jyt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof iXn))throw a}throw new Error("No available ports found")}var Yeu=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Keu="docs.buildwithfern.com",Jeu=62;function Xze(e){let t=e.toLowerCase().trim();t.startsWith("https://")?t=t.slice(8):t.startsWith("http://")&&(t=t.slice(7));let r=t.indexOf("/");return r!==-1&&(t=t.slice(0,r)),Yeu.test(t)}function Xeu(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function B8t({orgId:e,previewId:t}){let r=Xeu(t),n=`${e}-preview-${r}.${Keu}`;if(n.length<=Jeu)return n;let i=`${e}-preview-`,o=Jeu-i.length;if(o<8)throw new Q({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:Q.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Keu}`}Ut();eg();rr();Vw();var cUo=require("child_process"),Adu=we(S3o(),1),uUo=we(qXn(),1),lUo=we(require("fs"),1),C4e=require("fs/promises"),ydu=we(require("http"),1),dUo=we(require("path"),1);var Jou=require("events"),JXn=we(require("fs"),1),a4e=we(require("path"),1);var Dou=we(require("os"),1),Rou=300,GOe=20,$8t=1e7,Fou=Dou.default.platform();var Ywm=Fou==="darwin",GLo=Fou==="win32",WOe=Ywm||GLo,kou=3e3,Nou=2e4,WLo=1250;var _ne;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(_ne||(_ne={}));var s4e;(function(e){e.CHANGE="change",e.RENAME="rename"})(s4e||(s4e={}));var e7t;(function(e){e.CHANGE="change",e.ERROR="error"})(e7t||(e7t={}));var _c;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(_c||(_c={}));var gN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(gN||(gN={}));var Xwm=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,c=0,u=0,l=()=>{let C=Date.now(),w=C-c,B=C-u,O=w>=t||B>=o;return[C,O]},p=C=>{if(u=C,!s)return;let w=s;s=void 0,e.apply(void 0,w)},d=()=>{I(0)},f=()=>{a&&(d(),p(Date.now()))},m=C=>{if(u=C,n)return p(C)},h=C=>{if(i&&s)return p(C);s=void 0},A=()=>{a=void 0;let[C,w]=l();return w?h(C):y(C)},y=C=>{let w=C-c,B=C-u,O=t-w,N=o-B,P=Math.min(O,N);return I(P)},I=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},x=(...C)=>{let[w,B]=l(),O=!!a;if(s=C,c=w,(B||!a)&&I(t),B)return O?p(w):m(w)};return x.cancel=d,x.flush=f,x},GXn=Xwm;var YLo=we(require("fs"),1),HXn=we(require("path"),1);var Qd=we(require("fs"),1),KO=require("util");var dde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},Vne=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var HLo=we(require("process"),1),jou=HLo.default.getuid?!HLo.default.getuid():!1,Qou=1e4,cM=()=>{};var t7t={isChangeErrorOk:e=>{if(!t7t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!jou&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!t7t.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(!t7t.isNodeError(e))throw e;if(!t7t.isChangeErrorOk(e))throw e}},bC=t7t;var KLo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=Qou,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()}}}}},Mou=new KLo;var mde=(e,t)=>function(n){return function i(...o){return Mou.schedule().then(s=>{let a=u=>(s(),u),c=u=>{if(s(),Date.now()>=n)throw u;if(t(u)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw u};return e.apply(void 0,o).then(a,c)})}},hde=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var Zwm={attempt:{chmod:dde((0,KO.promisify)(Qd.default.chmod),bC.onChangeError),chown:dde((0,KO.promisify)(Qd.default.chown),bC.onChangeError),close:dde((0,KO.promisify)(Qd.default.close),cM),fsync:dde((0,KO.promisify)(Qd.default.fsync),cM),mkdir:dde((0,KO.promisify)(Qd.default.mkdir),cM),realpath:dde((0,KO.promisify)(Qd.default.realpath),cM),stat:dde((0,KO.promisify)(Qd.default.stat),cM),unlink:dde((0,KO.promisify)(Qd.default.unlink),cM),chmodSync:Vne(Qd.default.chmodSync,bC.onChangeError),chownSync:Vne(Qd.default.chownSync,bC.onChangeError),closeSync:Vne(Qd.default.closeSync,cM),existsSync:Vne(Qd.default.existsSync,cM),fsyncSync:Vne(Qd.default.fsync,cM),mkdirSync:Vne(Qd.default.mkdirSync,cM),realpathSync:Vne(Qd.default.realpathSync,cM),statSync:Vne(Qd.default.statSync,cM),unlinkSync:Vne(Qd.default.unlinkSync,cM)},retry:{close:mde((0,KO.promisify)(Qd.default.close),bC.isRetriableError),fsync:mde((0,KO.promisify)(Qd.default.fsync),bC.isRetriableError),open:mde((0,KO.promisify)(Qd.default.open),bC.isRetriableError),readFile:mde((0,KO.promisify)(Qd.default.readFile),bC.isRetriableError),rename:mde((0,KO.promisify)(Qd.default.rename),bC.isRetriableError),stat:mde((0,KO.promisify)(Qd.default.stat),bC.isRetriableError),write:mde((0,KO.promisify)(Qd.default.write),bC.isRetriableError),writeFile:mde((0,KO.promisify)(Qd.default.writeFile),bC.isRetriableError),closeSync:hde(Qd.default.closeSync,bC.isRetriableError),fsyncSync:hde(Qd.default.fsyncSync,bC.isRetriableError),openSync:hde(Qd.default.openSync,bC.isRetriableError),readFileSync:hde(Qd.default.readFileSync,bC.isRetriableError),renameSync:hde(Qd.default.renameSync,bC.isRetriableError),statSync:hde(Qd.default.statSync,bC.isRetriableError),writeSync:hde(Qd.default.writeSync,bC.isRetriableError),writeFileSync:hde(Qd.default.writeFileSync,bC.isRetriableError)}},Lou=Zwm;var WXn=we(require("fs"),1),r7t=we(require("path"),1);var JLo=()=>{};var $wm=()=>{let e=JLo,t=JLo,r=!1,n=!1;return{promise:new Promise((c,u)=>{e=l=>(r=!0,c(l)),t=l=>(n=!0,u(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},zou=$wm;var eSm=()=>{let{promise:e,resolve:t,isPending:r}=zou(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},Uou=eSm;var _ou={then:e=>{e()}};var Vou=e=>Array.isArray(e)?e:[e],qou=e=>typeof e=="function";var tSm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=Vou(o).map(oe=>qou(oe)?oe:ae=>oe.test(ae)),a=oe=>s.some(ae=>ae(oe)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],y=new Set,I={},x={},C=new Set,w={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},B={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:y,symlinksNamesToPaths:I,map:x},{promise:O,increment:N,decrement:P}=Uou(),U=0,Y=(oe,ae,Ce,ve)=>{C.has(ae)||U>=i||(U+=1,oe.directories.push(ae),oe.directoriesNames.add(Ce),l.push(ae),p.add(Ce),d.propertyIsEnumerable(Ce)||(d[Ce]=[]),d[Ce].push(ae),C.add(ae),!(ve>=n)&&(U>=i||he(ae,ve+1)))},Z=(oe,ae,Ce)=>{C.has(ae)||U>=i||(U+=1,oe.files.push(ae),oe.filesNames.add(Ce),f.push(ae),m.add(Ce),h.propertyIsEnumerable(Ce)||(h[Ce]=[]),h[Ce].push(ae),C.add(ae))},re=(oe,ae,Ce,ve)=>{C.has(ae)||U>=i||(U+=1,oe.symlinks.push(ae),oe.symlinksNames.add(Ce),A.push(ae),y.add(Ce),I.propertyIsEnumerable(Ce)||(I[Ce]=[]),I[Ce].push(ae),C.add(ae),r&&(ve>=n||U>=i||ke(ae,ve+1)))},me=(oe,ae,Ce,ve,Ne)=>{c.aborted||a(ae)||(ve.isDirectory()?Y(oe,ae,Ce,Ne):ve.isFile()?Z(oe,ae,Ce):ve.isSymbolicLink()&&re(oe,ae,Ce,Ne))},ye=(oe,ae,Ce,ve)=>{if(c.aborted)return;let Ne=ae===r7t.default.sep?"":r7t.default.sep,qe=Ce.name,pt=`${ae}${Ne}${qe}`;a(pt)||(Ce.isDirectory()?Y(oe,pt,qe,ve):Ce.isFile()?Z(oe,pt,qe):Ce.isSymbolicLink()&&re(oe,pt,qe,ve))},ce=(oe,ae,Ce,ve)=>{for(let Ne=0,qe=Ce.length;Ne<qe;Ne++)ye(oe,ae,Ce[Ne],ve)},he=(oe,ae)=>{c.aborted||ae>n||U>=i||(N(),WXn.default.readdir(oe,{withFileTypes:!0},(Ce,ve)=>{if(Ce||c.aborted||!ve.length)return P();(u(ve)||_ou).then(()=>{let qe=x[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ce(qe,oe,ve,ae),P()})}))},ke=(oe,ae)=>{N(),WXn.default.realpath(oe,(Ce,ve)=>{if(Ce||c.aborted)return P();WXn.default.stat(ve,(Ne,qe)=>{if(Ne||c.aborted)return P();let pt=r7t.default.basename(ve),it=x[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(it,ve,pt,qe,ae),P()})})};return(async(oe,ae=1)=>(oe=r7t.default.normalize(oe),C.add(oe),he(oe,ae),await O,c.aborted?w:B))(e)},Gou=tSm;var qne={lang:{debounce:GXn,attempt:e=>{try{return e()}catch(t){return qne.lang.castError(t)}},castArray:e=>qne.lang.isArray(e)?e:[e],castError:e=>qne.lang.isError(e)?e:qne.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(qne.lang.isNaN(e))return qne.lang.isNaN(t);if(qne.lang.isPrimitive(e)||qne.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(HXn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?YLo.default.realpathSync.native(e):YLo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===HXn.default.sep&&t.length-e.length>HXn.default.sep.length,poll:(e,t=Nou)=>Lou.retry.stat(t)(e,{bigint:!0}).catch(qne.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 Gou(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},fp=qne;var KXn=we(require("path"),1);var XLo=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||fp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=Rou){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,c)=>{let u=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...c]),p=this.eventsDeduplicate([...u,...l]);this.onTargetEvents(p)},s=fp.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,c="",u=!1)=>{u?await this.eventsPopulate([c],n,!0):i.add(c),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===_c.CHANGE&&a===_c.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===_c.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===_c.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??GOe:Math.min(1,this.options.depth??GOe),s=this.options.limit??$8t,[a,c]=await fp.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),u=[...a,...c];return await Promise.all(u.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())fp.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(_c.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!WOe&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(_c.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(_c.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(KXn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(KXn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===_c.ADD?this.onTargetAdd(n):r===_c.ADD_DIR?this.onTargetAddDir(n):r===_c.CHANGE?this.onTargetChange(n):r===_c.UNLINK?this.onTargetUnlink(n):r===_c.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=s4e.CHANGE,r){if(this.watcher.isClosed())return;let n=KXn.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){GLo&&t.code==="EPERM"?this.onWatcherChange(s4e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(e7t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(e7t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(s4e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&WOe&&this.options.native!==!1?this.options.depth??GOe:Math.min(1,this.options.depth??GOe),n=this.options.limit??$8t,[i,o]=await fp.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(s4e.CHANGE,a,t)}))}}},Wou=XLo;var AN={interval:100,intervalId:void 0,fns:new Map,init:()=>{AN.intervalId||(AN.intervalId=setInterval(AN.resolve,AN.interval))},reset:()=>{AN.intervalId&&(clearInterval(AN.intervalId),delete AN.intervalId)},add:(e,t)=>{AN.fns.set(e,Date.now()+t),AN.init()},remove:e=>{AN.fns.delete(e)},resolve:()=>{if(!AN.fns.size)return AN.reset();let e=Date.now();for(let[t,r]of AN.fns)r>=e||(AN.remove(t),t())}},n7t=AN;var i7t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=WLo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(fp.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let c=()=>{s.add.delete(n),n7t.remove(u)},u=()=>{c(),a()};n7t.add(u,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;c();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=WLo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let c=()=>{s.unlink.delete(n),n7t.remove(u)},u=()=>{c(),a()};n7t.add(u,r);let l=()=>(c(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,_c.ADD,_ne.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,_c.ADD_DIR,_ne.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,_c.UNLINK,_ne.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,_c.UNLINK_DIR,_ne.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}}};i7t.DIR_EVENTS={add:_c.ADD_DIR,rename:_c.RENAME_DIR,unlink:_c.UNLINK_DIR};i7t.FILE_EVENTS={add:_c.ADD,change:_c.CHANGE,rename:_c.RENAME,unlink:_c.UNLINK};var Hou=i7t;var ZLo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(fp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(fp.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(fp.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(fp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return fp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);fp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},$Lo=ZLo;var ezo=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}},Kou=ezo;var tzo=class{constructor(){this.inos={},this.paths=new $Lo,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await fp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new Kou(n)}reset(){this.inos={},this.paths=new $Lo,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,_c.ADD,i),[_c.ADD];if(i.isDirectory())return this.updateIno(t,_c.ADD_DIR,i),[_c.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,_c.UNLINK,n),[_c.UNLINK];if(n.isDirectory())return this.updateIno(t,_c.UNLINK_DIR,n),[_c.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,_c.CHANGE,i),[_c.CHANGE]);if(i.isDirectory())return this.updateIno(t,_c.UNLINK,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK,_c.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD,i),[_c.UNLINK_DIR,_c.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK_DIR,_c.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?_ne.FILE:_ne.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)}}},rzo=tzo;var nzo=class e extends Jou.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(gN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(gN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(gN.READY,i)),this._locker=new Hou(this),this._roots=new Set,this._poller=new rzo,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(fp.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(gN.CLOSE))}error(t){if(this.isClosed())return!1;let r=fp.lang.castError(t);return this.emit(gN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(gN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(gN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)fp.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new Wou(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=fp.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=a4e.default.dirname(t);for(let a=1;a<1/0;a++){if(this._watchers[s]?.find(l=>(a===1||l.options.recursive&&a<=(l.options.depth??GOe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&WOe&&l.options.native!==!1)))return!0;if(!WOe)break;let u=a4e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=fp.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let c=!r.recursive||WOe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:JXn.default.watch(a,c),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=a4e.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(c){this.error(c)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||WOe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??GOe,a=r.limit??$8t,[c]=await fp.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let u=await this.watchDirectories([t],r,n,i,o);if(c.length){let l=fp.fs.getDepth(t);for(let p of c){let d=fp.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||u)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(u,l)=>{l===t&&(c(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(gN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(gN.CLOSE,c),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=a4e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new rzo,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return fp.lang.noop;if(this.pollerExists(t,r))return fp.lang.noop;let i={...r,interval:r.pollingInterval??kou},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(gN.CLOSE,a),JXn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(gN.CLOSE,a),JXn.default.unwatchFile(t,n)};return fp.lang.attempt(s),()=>fp.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=fp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!fp.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=a4e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await fp.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=a4e.default.dirname(t);return(await fp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=fp.lang.noop){if(fp.lang.isFunction(t))return this.watch([],{},t);if(fp.lang.isUndefined(t))return this.watch([],r,n);if(fp.lang.isFunction(r))return this.watch(t,{},r);if(fp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=fp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==fp.lang.noop&&this.on(gN.ALL,n),r.readdirMap=void 0,this.ready())}},YXn=nzo;pZn();rr();var m7=require("fs/promises"),eau=require("os"),Szo=we(require("path"),1),T1m=".fern",B1m="logs",wzo=100*1024*1024;function O1m(){return"cli@5.15.2"}var d4e=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=nt(Yt.of((0,eau.homedir)()),Fe.of(T1m)),n=nt(r,Fe.of(B1m));await ar(n)||await(0,m7.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=nt(n,Fe.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${Szo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
3592
|
+
`)}if(s)throw new Q({code:Q.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${Tn.warning} ${Se.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(Se.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Tn.success} ${Se.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>L$(i))),{success:!r,results:n}}};function C3o(e){let t=new I3o;To(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}))}var Geu=we(require("net"),1),Weu=we(require("os"),1),iXn=class extends Error{constructor(t){super(`${t} is locked`)}},Jyt={old:new Set,young:new Set},Rbm=1e3*15,Heu=new Set;var T8t,Fbm=()=>{let e=Weu.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},Veu=e=>new Promise((t,r)=>{let n=Geu.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),qeu=async(e,t)=>{if(e.host||e.port===0)return Veu(e);for(let r of t)try{await Veu({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},kbm=e=>Jyt.old.has(e)||Jyt.young.has(e)||Heu.has(e),Nbm=function*(e){e&&(yield*e),yield 0};async function MOe(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};T8t===void 0&&(T8t=setTimeout(()=>{T8t=void 0,Jyt.old=Jyt.young,Jyt.young=new Set},Rbm),T8t.unref&&T8t.unref());let o=Fbm();for(let s of Nbm(t))try{if(r.has(s))continue;let a=await qeu({...i,port:s},o);for(;kbm(a);){if(s!==0)throw new iXn(s);a=await qeu({...i,port:s},o)}return n?Heu.add(a):Jyt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof iXn))throw a}throw new Error("No available ports found")}var Yeu=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Keu="docs.buildwithfern.com",Jeu=62;function Xze(e){let t=e.toLowerCase().trim();t.startsWith("https://")?t=t.slice(8):t.startsWith("http://")&&(t=t.slice(7));let r=t.indexOf("/");return r!==-1&&(t=t.slice(0,r)),Yeu.test(t)}function Xeu(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function B8t({orgId:e,previewId:t}){let r=Xeu(t),n=`${e}-preview-${r}.${Keu}`;if(n.length<=Jeu)return n;let i=`${e}-preview-`,o=Jeu-i.length;if(o<8)throw new Q({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:Q.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Keu}`}Ut();eg();rr();Vw();var cUo=require("child_process"),Adu=we(S3o(),1),uUo=we(qXn(),1),lUo=we(require("fs"),1),C4e=require("fs/promises"),ydu=we(require("http"),1),dUo=we(require("path"),1);var Jou=require("events"),JXn=we(require("fs"),1),a4e=we(require("path"),1);var Dou=we(require("os"),1),Rou=300,GOe=20,$8t=1e7,Fou=Dou.default.platform();var Ywm=Fou==="darwin",GLo=Fou==="win32",WOe=Ywm||GLo,kou=3e3,Nou=2e4,WLo=1250;var _ne;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(_ne||(_ne={}));var s4e;(function(e){e.CHANGE="change",e.RENAME="rename"})(s4e||(s4e={}));var e7t;(function(e){e.CHANGE="change",e.ERROR="error"})(e7t||(e7t={}));var _c;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(_c||(_c={}));var gN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(gN||(gN={}));var Xwm=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,c=0,u=0,l=()=>{let C=Date.now(),w=C-c,B=C-u,O=w>=t||B>=o;return[C,O]},p=C=>{if(u=C,!s)return;let w=s;s=void 0,e.apply(void 0,w)},d=()=>{I(0)},f=()=>{a&&(d(),p(Date.now()))},m=C=>{if(u=C,n)return p(C)},h=C=>{if(i&&s)return p(C);s=void 0},A=()=>{a=void 0;let[C,w]=l();return w?h(C):y(C)},y=C=>{let w=C-c,B=C-u,O=t-w,N=o-B,P=Math.min(O,N);return I(P)},I=C=>{a&&clearTimeout(a),!(C<=0)&&(a=setTimeout(A,C))},x=(...C)=>{let[w,B]=l(),O=!!a;if(s=C,c=w,(B||!a)&&I(t),B)return O?p(w):m(w)};return x.cancel=d,x.flush=f,x},GXn=Xwm;var YLo=we(require("fs"),1),HXn=we(require("path"),1);var Qd=we(require("fs"),1),KO=require("util");var dde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},Vne=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var HLo=we(require("process"),1),jou=HLo.default.getuid?!HLo.default.getuid():!1,Qou=1e4,cM=()=>{};var t7t={isChangeErrorOk:e=>{if(!t7t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!jou&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!t7t.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(!t7t.isNodeError(e))throw e;if(!t7t.isChangeErrorOk(e))throw e}},bC=t7t;var KLo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=Qou,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()}}}}},Mou=new KLo;var mde=(e,t)=>function(n){return function i(...o){return Mou.schedule().then(s=>{let a=u=>(s(),u),c=u=>{if(s(),Date.now()>=n)throw u;if(t(u)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw u};return e.apply(void 0,o).then(a,c)})}},hde=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var Zwm={attempt:{chmod:dde((0,KO.promisify)(Qd.default.chmod),bC.onChangeError),chown:dde((0,KO.promisify)(Qd.default.chown),bC.onChangeError),close:dde((0,KO.promisify)(Qd.default.close),cM),fsync:dde((0,KO.promisify)(Qd.default.fsync),cM),mkdir:dde((0,KO.promisify)(Qd.default.mkdir),cM),realpath:dde((0,KO.promisify)(Qd.default.realpath),cM),stat:dde((0,KO.promisify)(Qd.default.stat),cM),unlink:dde((0,KO.promisify)(Qd.default.unlink),cM),chmodSync:Vne(Qd.default.chmodSync,bC.onChangeError),chownSync:Vne(Qd.default.chownSync,bC.onChangeError),closeSync:Vne(Qd.default.closeSync,cM),existsSync:Vne(Qd.default.existsSync,cM),fsyncSync:Vne(Qd.default.fsync,cM),mkdirSync:Vne(Qd.default.mkdirSync,cM),realpathSync:Vne(Qd.default.realpathSync,cM),statSync:Vne(Qd.default.statSync,cM),unlinkSync:Vne(Qd.default.unlinkSync,cM)},retry:{close:mde((0,KO.promisify)(Qd.default.close),bC.isRetriableError),fsync:mde((0,KO.promisify)(Qd.default.fsync),bC.isRetriableError),open:mde((0,KO.promisify)(Qd.default.open),bC.isRetriableError),readFile:mde((0,KO.promisify)(Qd.default.readFile),bC.isRetriableError),rename:mde((0,KO.promisify)(Qd.default.rename),bC.isRetriableError),stat:mde((0,KO.promisify)(Qd.default.stat),bC.isRetriableError),write:mde((0,KO.promisify)(Qd.default.write),bC.isRetriableError),writeFile:mde((0,KO.promisify)(Qd.default.writeFile),bC.isRetriableError),closeSync:hde(Qd.default.closeSync,bC.isRetriableError),fsyncSync:hde(Qd.default.fsyncSync,bC.isRetriableError),openSync:hde(Qd.default.openSync,bC.isRetriableError),readFileSync:hde(Qd.default.readFileSync,bC.isRetriableError),renameSync:hde(Qd.default.renameSync,bC.isRetriableError),statSync:hde(Qd.default.statSync,bC.isRetriableError),writeSync:hde(Qd.default.writeSync,bC.isRetriableError),writeFileSync:hde(Qd.default.writeFileSync,bC.isRetriableError)}},Lou=Zwm;var WXn=we(require("fs"),1),r7t=we(require("path"),1);var JLo=()=>{};var $wm=()=>{let e=JLo,t=JLo,r=!1,n=!1;return{promise:new Promise((c,u)=>{e=l=>(r=!0,c(l)),t=l=>(n=!0,u(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},zou=$wm;var eSm=()=>{let{promise:e,resolve:t,isPending:r}=zou(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},Uou=eSm;var _ou={then:e=>{e()}};var Vou=e=>Array.isArray(e)?e:[e],qou=e=>typeof e=="function";var tSm=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=Vou(o).map(oe=>qou(oe)?oe:ae=>oe.test(ae)),a=oe=>s.some(ae=>ae(oe)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},A=[],y=new Set,I={},x={},C=new Set,w={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},B={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:A,symlinksNames:y,symlinksNamesToPaths:I,map:x},{promise:O,increment:N,decrement:P}=Uou(),U=0,Y=(oe,ae,Ce,ve)=>{C.has(ae)||U>=i||(U+=1,oe.directories.push(ae),oe.directoriesNames.add(Ce),l.push(ae),p.add(Ce),d.propertyIsEnumerable(Ce)||(d[Ce]=[]),d[Ce].push(ae),C.add(ae),!(ve>=n)&&(U>=i||he(ae,ve+1)))},Z=(oe,ae,Ce)=>{C.has(ae)||U>=i||(U+=1,oe.files.push(ae),oe.filesNames.add(Ce),f.push(ae),m.add(Ce),h.propertyIsEnumerable(Ce)||(h[Ce]=[]),h[Ce].push(ae),C.add(ae))},re=(oe,ae,Ce,ve)=>{C.has(ae)||U>=i||(U+=1,oe.symlinks.push(ae),oe.symlinksNames.add(Ce),A.push(ae),y.add(Ce),I.propertyIsEnumerable(Ce)||(I[Ce]=[]),I[Ce].push(ae),C.add(ae),r&&(ve>=n||U>=i||ke(ae,ve+1)))},me=(oe,ae,Ce,ve,Ne)=>{c.aborted||a(ae)||(ve.isDirectory()?Y(oe,ae,Ce,Ne):ve.isFile()?Z(oe,ae,Ce):ve.isSymbolicLink()&&re(oe,ae,Ce,Ne))},ye=(oe,ae,Ce,ve)=>{if(c.aborted)return;let Ne=ae===r7t.default.sep?"":r7t.default.sep,qe=Ce.name,pt=`${ae}${Ne}${qe}`;a(pt)||(Ce.isDirectory()?Y(oe,pt,qe,ve):Ce.isFile()?Z(oe,pt,qe):Ce.isSymbolicLink()&&re(oe,pt,qe,ve))},ce=(oe,ae,Ce,ve)=>{for(let Ne=0,qe=Ce.length;Ne<qe;Ne++)ye(oe,ae,Ce[Ne],ve)},he=(oe,ae)=>{c.aborted||ae>n||U>=i||(N(),WXn.default.readdir(oe,{withFileTypes:!0},(Ce,ve)=>{if(Ce||c.aborted||!ve.length)return P();(u(ve)||_ou).then(()=>{let qe=x[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ce(qe,oe,ve,ae),P()})}))},ke=(oe,ae)=>{N(),WXn.default.realpath(oe,(Ce,ve)=>{if(Ce||c.aborted)return P();WXn.default.stat(ve,(Ne,qe)=>{if(Ne||c.aborted)return P();let pt=r7t.default.basename(ve),it=x[oe]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};me(it,ve,pt,qe,ae),P()})})};return(async(oe,ae=1)=>(oe=r7t.default.normalize(oe),C.add(oe),he(oe,ae),await O,c.aborted?w:B))(e)},Gou=tSm;var qne={lang:{debounce:GXn,attempt:e=>{try{return e()}catch(t){return qne.lang.castError(t)}},castArray:e=>qne.lang.isArray(e)?e:[e],castError:e=>qne.lang.isError(e)?e:qne.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(qne.lang.isNaN(e))return qne.lang.isNaN(t);if(qne.lang.isPrimitive(e)||qne.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(HXn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?YLo.default.realpathSync.native(e):YLo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===HXn.default.sep&&t.length-e.length>HXn.default.sep.length,poll:(e,t=Nou)=>Lou.retry.stat(t)(e,{bigint:!0}).catch(qne.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 Gou(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},fp=qne;var KXn=we(require("path"),1);var XLo=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||fp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=Rou){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,c)=>{let u=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...c]),p=this.eventsDeduplicate([...u,...l]);this.onTargetEvents(p)},s=fp.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,c="",u=!1)=>{u?await this.eventsPopulate([c],n,!0):i.add(c),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===_c.CHANGE&&a===_c.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===_c.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===_c.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??GOe:Math.min(1,this.options.depth??GOe),s=this.options.limit??$8t,[a,c]=await fp.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),u=[...a,...c];return await Promise.all(u.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())fp.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(_c.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!WOe&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(_c.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(_c.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(KXn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(KXn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(_c.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===_c.ADD?this.onTargetAdd(n):r===_c.ADD_DIR?this.onTargetAddDir(n):r===_c.CHANGE?this.onTargetChange(n):r===_c.UNLINK?this.onTargetUnlink(n):r===_c.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=s4e.CHANGE,r){if(this.watcher.isClosed())return;let n=KXn.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){GLo&&t.code==="EPERM"?this.onWatcherChange(s4e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(e7t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(e7t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(s4e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&WOe&&this.options.native!==!1?this.options.depth??GOe:Math.min(1,this.options.depth??GOe),n=this.options.limit??$8t,[i,o]=await fp.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(s4e.CHANGE,a,t)}))}}},Wou=XLo;var AN={interval:100,intervalId:void 0,fns:new Map,init:()=>{AN.intervalId||(AN.intervalId=setInterval(AN.resolve,AN.interval))},reset:()=>{AN.intervalId&&(clearInterval(AN.intervalId),delete AN.intervalId)},add:(e,t)=>{AN.fns.set(e,Date.now()+t),AN.init()},remove:e=>{AN.fns.delete(e)},resolve:()=>{if(!AN.fns.size)return AN.reset();let e=Date.now();for(let[t,r]of AN.fns)r>=e||(AN.remove(t),t())}},n7t=AN;var i7t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=WLo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(fp.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let c=()=>{s.add.delete(n),n7t.remove(u)},u=()=>{c(),a()};n7t.add(u,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;c();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=WLo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let c=()=>{s.unlink.delete(n),n7t.remove(u)},u=()=>{c(),a()};n7t.add(u,r);let l=()=>(c(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,_c.ADD,_ne.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,_c.ADD_DIR,_ne.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,_c.UNLINK,_ne.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,_c.UNLINK_DIR,_ne.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}}};i7t.DIR_EVENTS={add:_c.ADD_DIR,rename:_c.RENAME_DIR,unlink:_c.UNLINK_DIR};i7t.FILE_EVENTS={add:_c.ADD,change:_c.CHANGE,rename:_c.RENAME,unlink:_c.UNLINK};var Hou=i7t;var ZLo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(fp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(fp.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(fp.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(fp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return fp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);fp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},$Lo=ZLo;var ezo=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}},Kou=ezo;var tzo=class{constructor(){this.inos={},this.paths=new $Lo,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await fp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new Kou(n)}reset(){this.inos={},this.paths=new $Lo,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,_c.ADD,i),[_c.ADD];if(i.isDirectory())return this.updateIno(t,_c.ADD_DIR,i),[_c.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,_c.UNLINK,n),[_c.UNLINK];if(n.isDirectory())return this.updateIno(t,_c.UNLINK_DIR,n),[_c.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,_c.CHANGE,i),[_c.CHANGE]);if(i.isDirectory())return this.updateIno(t,_c.UNLINK,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK,_c.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD,i),[_c.UNLINK_DIR,_c.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,_c.UNLINK_DIR,n),this.updateIno(t,_c.ADD_DIR,i),[_c.UNLINK_DIR,_c.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?_ne.FILE:_ne.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)}}},rzo=tzo;var nzo=class e extends Jou.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(gN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(gN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(gN.READY,i)),this._locker=new Hou(this),this._roots=new Set,this._poller=new rzo,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(fp.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(gN.CLOSE))}error(t){if(this.isClosed())return!1;let r=fp.lang.castError(t);return this.emit(gN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(gN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(gN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&fp.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)fp.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new Wou(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=fp.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=a4e.default.dirname(t);for(let a=1;a<1/0;a++){if(this._watchers[s]?.find(l=>(a===1||l.options.recursive&&a<=(l.options.depth??GOe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&WOe&&l.options.native!==!1)))return!0;if(!WOe)break;let u=a4e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=fp.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let c=!r.recursive||WOe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:JXn.default.watch(a,c),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=a4e.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(c){this.error(c)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||WOe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??GOe,a=r.limit??$8t,[c]=await fp.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let u=await this.watchDirectories([t],r,n,i,o);if(c.length){let l=fp.fs.getDepth(t);for(let p of c){let d=fp.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||u)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(u,l)=>{l===t&&(c(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(gN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(gN.CLOSE,c),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=a4e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new rzo,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return fp.lang.noop;if(this.pollerExists(t,r))return fp.lang.noop;let i={...r,interval:r.pollingInterval??kou},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(gN.CLOSE,a),JXn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(gN.CLOSE,a),JXn.default.unwatchFile(t,n)};return fp.lang.attempt(s),()=>fp.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=fp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!fp.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=a4e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await fp.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=a4e.default.dirname(t);return(await fp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=fp.lang.noop){if(fp.lang.isFunction(t))return this.watch([],{},t);if(fp.lang.isUndefined(t))return this.watch([],r,n);if(fp.lang.isFunction(r))return this.watch(t,{},r);if(fp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=fp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==fp.lang.noop&&this.on(gN.ALL,n),r.readdirMap=void 0,this.ready())}},YXn=nzo;pZn();rr();var m7=require("fs/promises"),eau=require("os"),Szo=we(require("path"),1),T1m=".fern",B1m="logs",wzo=100*1024*1024;function O1m(){return"cli@5.15.3"}var d4e=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t){if(this.initialized)return;this.consoleLogger=t;let r=nt(Yt.of((0,eau.homedir)()),Fe.of(T1m)),n=nt(r,Fe.of(B1m));await ar(n)||await(0,m7.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=nt(n,Fe.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${Szo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
3593
3593
|
`);await(0,m7.writeFile)(this.logFilePath,s,"utf-8"),this.initialized=!0,this.enforceLogSizeLimit(n)}getLogFilePath(){return this.logFilePath}async writeEntry(t){if(!this.initialized||!this.logFilePath)return;let r=JSON.stringify(t)+`
|
|
3594
3594
|
`;try{await(0,m7.appendFile)(this.logFilePath,r,"utf-8")}catch{}}async logFrontendMetrics(t){let r={timestamp:t.timestamp,source:t.source,level:t.level,eventType:this.getEventType(t.payload,t.isAggregate),isAggregate:t.isAggregate,data:t.payload};await this.writeEntry(r)}async logCliMetric(t,r="info"){let n={timestamp:t.timestamp,source:O1m(),level:r,eventType:t.type,data:{durationMs:t.durationMs,metadata:t.metadata}};await this.writeEntry(n)}async logCliMemory(){let t=process.memoryUsage(),r={type:"cli_memory",timestamp:new Date().toISOString(),metadata:{heapUsed:t.heapUsed,heapTotal:t.heapTotal,external:t.external,rss:t.rss,heapUsedMB:Math.round(t.heapUsed/1024/1024*100)/100,heapTotalMB:Math.round(t.heapTotal/1024/1024*100)/100,rssMB:Math.round(t.rss/1024/1024*100)/100}};await this.logCliMetric(r)}async logCliReloadStart(){let t={type:"cli_reload_start",timestamp:new Date().toISOString()};await this.logCliMetric(t)}async logCliReloadFinish(t,r){let n={type:"cli_reload_finish",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliDocsGeneration(t,r){let n={type:"cli_docs_generation",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliValidation(t,r){let n={type:"cli_validation",timestamp:new Date().toISOString(),durationMs:t,metadata:{success:r}};await this.logCliMetric(n)}async enforceLogSizeLimit(t){try{let n=(await(0,m7.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=Szo.default.join(t,c);try{let l=await(0,m7.stat)(u);i.push({name:c,fullPath:u,size:l.size,mtimeMs:l.mtimeMs})}catch{}}let o=i.reduce((c,u)=>c+u.size,0),s=Math.round(o/1024/1024*100)/100,a=wzo/1024/1024;if(o<=wzo){this.consoleLogger?.debug(`Log directory size ${s} MB does not exceed ${a} MB cap`);return}this.consoleLogger?.info(`Rotating logs: total size ${s} MB exceeds ${a} MB cap`),i.sort((c,u)=>c.mtimeMs-u.mtimeMs);for(let c of i){if(o<=wzo)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,m7.unlink)(c.fullPath),o-=c.size}catch{}}}catch{}}getEventType(t,r){return r?"aggregate_summary":"type"in t&&typeof t.type=="string"?t.type:"unknown"}static isMetricsMessage(t){if(typeof t!="object"||t===null)return!1;let r=t;return r.type==="metrics"&&typeof r.timestamp=="string"&&typeof r.source=="string"}};var fZn={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function tau(e){let t=P1m();if(t==null)return;let{port:r,debugLogger:n,getDocsLoadResponse:i,extractLocaleFromPath:o}=e,s=new Map;function a(u){let l=JSON.stringify(u),p=[];for(let[d]of s)try{d.send(l)}catch{p.push(d)}for(let d of p){let f=s.get(d);f&&(clearInterval(f.pingInterval),s.delete(d))}}let c=t.serve({port:r,async fetch(u,l){if(u.method==="OPTIONS")return new Response(null,{status:204,headers:fZn});let p=new URL(u.url);if(u.headers.get("upgrade")?.toLowerCase()==="websocket"){l.upgrade(u,{data:{connectionId:`${Date.now()}`}});return}if(u.method==="POST"&&p.pathname==="/v2/registry/docs/load-with-url")try{let f=await u.json(),m=o?.(f?.url);return new Response(JSON.stringify(i(m)),{headers:{"Content-Type":"application/json",...fZn}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...fZn}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:fZn}):new Response("Not Found",{status:404})},websocket:{open(u){let{connectionId:l}=u.data,p=setInterval(()=>{let d=s.get(u);if(!d)return;let f=Date.now();if(f-d.lastPong>9e4){u.close();return}try{u.send(JSON.stringify({type:"ping",timestamp:f}))}catch{u.close()}},3e4);s.set(u,{pingInterval:p,lastPong:Date.now()});try{u.send(JSON.stringify({type:"connected",connectionId:l}))}catch{}},message(u,l){try{let p=JSON.parse(l.toString());if(p.type==="pong"){let d=s.get(u);d&&(d.lastPong=Date.now())}else d4e.isMetricsMessage(p)&&n.logFrontendMetrics(p)}catch{}},close(u){let l=s.get(u);l&&(clearInterval(l.pingInterval),s.delete(u))}}});return{sendData:a,stop:u=>c.stop(u)}}function P1m(){return globalThis.Bun}rr();Vw();var idu=require("child_process"),w$n=we(Bau(),1),odu=we(H4o(),1),cI=require("fs"),lM=require("fs/promises"),sdu=require("os"),uM=we(require("path"),1),adu=we(bw(),1),cdu=we(ndu(),1),I4e=process.platform==="win32",x$n=Se.cyan("[docs]:"),sDm="etag",aDm=23,iUo=e=>e.padEnd(aDm," "),cDm="preview",uDm="app-preview",lDm="bundle",pDm=".next",fDm="standalone",dDm=".fern",mDm="packages/fern-docs/bundle/.next/server/instrumentation.js",hDm='Cannot find matching keyid: {"signatures":';function gDm(e){try{let r=(0,idu.execSync)('reg query "HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem" /v LongPathsEnabled',{encoding:"utf-8",timeout:5e3}).match(/LongPathsEnabled\s+REG_DWORD\s+0x(\d+)/i);if(r!=null&&r[1]==="1")return}catch(t){e.debug(`Registry query for LongPathsEnabled failed: ${t}`)}throw new Q({message:`Windows long path support is not enabled. The docs bundle contains deeply nested .pnpm paths that exceed the 260-character MAX_PATH limit.
|
|
3595
3595
|
|
|
@@ -3782,7 +3782,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
|
|
|
3782
3782
|
|
|
3783
3783
|
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`:r}function oLm(e,t,r){return t!=null&&t.includes("Invalid authorization token")?`Your authentication token is invalid or expired. Please run '${r}' to re-authenticate.`:`You are not authorized to publish docs under organization '${e}'. Please run '${r}' to ensure you are logged in with the correct account.
|
|
3784
3784
|
|
|
3785
|
-
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function sLm(e){if(e==null)return{code:void 0,message:void 0};let t=e.body;if(t!=null&&typeof t=="object"){let n=typeof t.code=="string"?t.code:void 0,i=typeof t.message=="string"?t.message:void 0;return{code:n,message:i}}return{code:void 0,message:typeof t=="string"&&t.length>0?t:typeof e.errorMessage=="string"?e.errorMessage:typeof e.message=="string"?e.message:void 0}}function aLm(e){try{return new URL(cN(e)).pathname}catch{return}}async function cLm({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await uLm({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=Object.fromEntries(Object.entries(o).map(([l,p])=>[l,{packageName:p.packageName,version:p.version}])),c=(await e.api.register.checkSdkDynamicIrExists({orgId:fn.OrgId(r),snippetConfiguration:s})).existingDynamicIrs??{};if(Object.keys(c).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[l,p]of Object.entries(c??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${l}...`);let d=await fetch(p.downloadUrl);if(d.ok){let f=await d.json();u[l]={dynamicIR:f},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${l}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${l}: ${d.status}`)}catch(d){n.logger.warn(`Error downloading SDK dynamic IR for ${l}: ${d}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function a5o(e){return e.replace(/^https:\/\//,"")}async function uLm({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package??void 0,explicitVersion:r.typescriptSdk?.version??void 0},{language:"python",snippetName:r.pythonSdk?.package??void 0,explicitVersion:r.pythonSdk?.version??void 0},{language:"java",snippetName:r.javaSdk?.coordinate??void 0,explicitVersion:r.javaSdk?.version??void 0},{language:"go",snippetName:r.goSdk?.githubRepo&&a5o(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version??void 0},{language:"csharp",snippetName:r.csharpSdk?.package??void 0,explicitVersion:r.csharpSdk?.version??void 0},{language:"ruby",snippetName:r.rubySdk?.gem??void 0,explicitVersion:r.rubySdk?.version??void 0},{language:"php",snippetName:r.phpSdk?.package??void 0,explicitVersion:r.phpSdk?.version??void 0},{language:"swift",snippetName:r.swiftSdk?.package??void 0,explicitVersion:r.swiftSdk?.version??void 0},{language:"rust",snippetName:r.rustSdk?.package??void 0,explicitVersion:r.rustSdk?.version??void 0}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion??void 0;a||(a=(await lLm({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 lLm({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,c;if(t.generatorsConfiguration?.groups){let u=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=Qn.getPackageName({generatorInvocation:p});d&&u.push(d),!a&&d&&(a=d,c=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let u=await e.sdks.computeSemanticVersion({githubRepository:s,language:o,package:a});return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${u.version} for package "${a}"`),{version:u.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function pLm({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&&a5o(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let c of a.generators){let u=T4e({apiName:e.workspaceName??"",organization:t,generatorInvocation:c}),l="";if(u?.outputConfig.type==="publish")switch(u.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=u.outputConfig.value.packageName;break;case"maven":l=u.outputConfig.value.coordinate;break;case"go":l=u.outputConfig.value.repoUrl;break;case"swift":l=u.outputConfig.value.repoUrl;break;case"crates":l=u.outputConfig.value.packageName;break}if(c.language==="php"&&c.config&&typeof c.config=="object"&&"packageName"in c.config&&(l=c.config.packageName??""),c.language==="go"&&l&&(l=a5o(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=Hg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new Mh(r,e),dynamicGeneratorConfig:u}),d=oMe({ir:p,disableExamples:!0,smartCasing:c.smartCasing,generationLanguage:c.language,generatorConfig:u});d?o[c.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${c.language}`)}}}for(let[a,c]of Object.entries(s))a&&c&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${c}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${c} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function fLm({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 dLm({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(Se.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function mLm(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 iEu(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 fqt=[60*1e3,300*1e3,300*1e3];async function dqt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,previewId:c,disableTemplates:u,skipUpload:l,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m}){let h=a&&!n.config.settings?.substituteEnvVars;n.config=Ey(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:Q.Code.EnvironmentError})},{substituteAsEmpty:h});let A=n.config.instances;if(A.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.",void 0,{code:Q.Code.ConfigError});return}if(A.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${A[0]?.url})`,void 0,{code:Q.Code.ConfigError});return}let y=A.find(C=>C.url===s)??A[0];if(y==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:Q.Code.ConfigError});return}let I=[];y.customDomain!=null&&(typeof y.customDomain=="string"?I.push(y.customDomain):Array.isArray(y.customDomain)&&I.push(...y.customDomain)),y.multiSource===!0&&hLm(y.url,I,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let x;return await i.runInteractiveTask({name:y.url},async()=>{let C=performance.now(),w=()=>tEu({docsWorkspace:n,customDomains:I,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let O=0;;O++)try{x=await w();break}catch(N){if(!(N instanceof a0t)||O>=fqt.length){if(N instanceof a0t)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:Q.Code.NetworkError});throw N}let P=fqt[O]??fqt[fqt.length-1]??6e4,U=P/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${U} minute${U===1?"":"s"} (attempt ${O+1}/${fqt.length})...`),await new Promise(Y=>setTimeout(Y,P))}let B=performance.now()-C;i.logger.debug(`Docs publishing completed in ${B.toFixed(0)}ms`)}),x}function oEu(e){try{let t=e.startsWith("https://")||e.startsWith("http://")?e:`https://${e}`;return new URL(t).pathname}catch{return"/"}}function hLm(e,t,r){let n=oEu(e);for(let i of t){let o=oEu(i);o!=="/"&&n!==o&&r.failAndThrow(`When multi-source is enabled, the url and custom-domain must share the same basepath. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:Q.Code.ConfigError})}}var Tti=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,previewId:n,skipUpload:i}){let o=new Qh({context:this.context,task:this.task});try{let s=await dqt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:o,token:this.token,instanceUrl:t,preview:r,previewId:n,disableTemplates:void 0,skipUpload:i,cliVersion:"5.15.2",loginCommand:"fern auth login"});return o.getResult()===Gf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:ni(s)}}}};Ut();var c0t=class e{static MAX_DISPLAYED_LOGS_TTY=10;static URL_PATTERN=/https?:\/\/[^\s]+/;context;stream;tasks={};taskOrder=[];startTime;isRegistered=!1;constructor(t){this.context=t.context,this.stream=t.stream??process.stderr}addTask(t){let r={...t,status:t.status??"pending"};return this.tasks[t.id]=r,this.taskOrder.push(t.id),this}async start(t){return this.startTime=Date.now(),t!=null&&await this.context.ttyAwareLogger.takeOverTerminal(()=>{this.stream.write(`
|
|
3785
|
+
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function sLm(e){if(e==null)return{code:void 0,message:void 0};let t=e.body;if(t!=null&&typeof t=="object"){let n=typeof t.code=="string"?t.code:void 0,i=typeof t.message=="string"?t.message:void 0;return{code:n,message:i}}return{code:void 0,message:typeof t=="string"&&t.length>0?t:typeof e.errorMessage=="string"?e.errorMessage:typeof e.message=="string"?e.message:void 0}}function aLm(e){try{return new URL(cN(e)).pathname}catch{return}}async function cLm({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await uLm({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=Object.fromEntries(Object.entries(o).map(([l,p])=>[l,{packageName:p.packageName,version:p.version}])),c=(await e.api.register.checkSdkDynamicIrExists({orgId:fn.OrgId(r),snippetConfiguration:s})).existingDynamicIrs??{};if(Object.keys(c).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[l,p]of Object.entries(c??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${l}...`);let d=await fetch(p.downloadUrl);if(d.ok){let f=await d.json();u[l]={dynamicIR:f},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${l}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${l}: ${d.status}`)}catch(d){n.logger.warn(`Error downloading SDK dynamic IR for ${l}: ${d}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function a5o(e){return e.replace(/^https:\/\//,"")}async function uLm({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package??void 0,explicitVersion:r.typescriptSdk?.version??void 0},{language:"python",snippetName:r.pythonSdk?.package??void 0,explicitVersion:r.pythonSdk?.version??void 0},{language:"java",snippetName:r.javaSdk?.coordinate??void 0,explicitVersion:r.javaSdk?.version??void 0},{language:"go",snippetName:r.goSdk?.githubRepo&&a5o(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version??void 0},{language:"csharp",snippetName:r.csharpSdk?.package??void 0,explicitVersion:r.csharpSdk?.version??void 0},{language:"ruby",snippetName:r.rubySdk?.gem??void 0,explicitVersion:r.rubySdk?.version??void 0},{language:"php",snippetName:r.phpSdk?.package??void 0,explicitVersion:r.phpSdk?.version??void 0},{language:"swift",snippetName:r.swiftSdk?.package??void 0,explicitVersion:r.swiftSdk?.version??void 0},{language:"rust",snippetName:r.rustSdk?.package??void 0,explicitVersion:r.rustSdk?.version??void 0}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion??void 0;a||(a=(await lLm({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 lLm({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,c;if(t.generatorsConfiguration?.groups){let u=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=Qn.getPackageName({generatorInvocation:p});d&&u.push(d),!a&&d&&(a=d,c=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let u=await e.sdks.computeSemanticVersion({githubRepository:s,language:o,package:a});return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${u.version} for package "${a}"`),{version:u.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function pLm({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&&a5o(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let c of a.generators){let u=T4e({apiName:e.workspaceName??"",organization:t,generatorInvocation:c}),l="";if(u?.outputConfig.type==="publish")switch(u.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=u.outputConfig.value.packageName;break;case"maven":l=u.outputConfig.value.coordinate;break;case"go":l=u.outputConfig.value.repoUrl;break;case"swift":l=u.outputConfig.value.repoUrl;break;case"crates":l=u.outputConfig.value.packageName;break}if(c.language==="php"&&c.config&&typeof c.config=="object"&&"packageName"in c.config&&(l=c.config.packageName??""),c.language==="go"&&l&&(l=a5o(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=Hg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new Mh(r,e),dynamicGeneratorConfig:u}),d=oMe({ir:p,disableExamples:!0,smartCasing:c.smartCasing,generationLanguage:c.language,generatorConfig:u});d?o[c.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${c.language}`)}}}for(let[a,c]of Object.entries(s))a&&c&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${c}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${c} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function fLm({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 dLm({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(Se.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function mLm(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 iEu(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 fqt=[60*1e3,300*1e3,300*1e3];async function dqt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,previewId:c,disableTemplates:u,skipUpload:l,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m}){let h=a&&!n.config.settings?.substituteEnvVars;n.config=Ey(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:Q.Code.EnvironmentError})},{substituteAsEmpty:h});let A=n.config.instances;if(A.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.",void 0,{code:Q.Code.ConfigError});return}if(A.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${A[0]?.url})`,void 0,{code:Q.Code.ConfigError});return}let y=A.find(C=>C.url===s)??A[0];if(y==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:Q.Code.ConfigError});return}let I=[];y.customDomain!=null&&(typeof y.customDomain=="string"?I.push(y.customDomain):Array.isArray(y.customDomain)&&I.push(...y.customDomain)),y.multiSource===!0&&hLm(y.url,I,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let x;return await i.runInteractiveTask({name:y.url},async()=>{let C=performance.now(),w=()=>tEu({docsWorkspace:n,customDomains:I,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let O=0;;O++)try{x=await w();break}catch(N){if(!(N instanceof a0t)||O>=fqt.length){if(N instanceof a0t)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:Q.Code.NetworkError});throw N}let P=fqt[O]??fqt[fqt.length-1]??6e4,U=P/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${U} minute${U===1?"":"s"} (attempt ${O+1}/${fqt.length})...`),await new Promise(Y=>setTimeout(Y,P))}let B=performance.now()-C;i.logger.debug(`Docs publishing completed in ${B.toFixed(0)}ms`)}),x}function oEu(e){try{let t=e.startsWith("https://")||e.startsWith("http://")?e:`https://${e}`;return new URL(t).pathname}catch{return"/"}}function hLm(e,t,r){let n=oEu(e);for(let i of t){let o=oEu(i);o!=="/"&&n!==o&&r.failAndThrow(`When multi-source is enabled, the url and custom-domain must share the same basepath. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:Q.Code.ConfigError})}}var Tti=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,previewId:n,skipUpload:i}){let o=new Qh({context:this.context,task:this.task});try{let s=await dqt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:o,token:this.token,instanceUrl:t,preview:r,previewId:n,disableTemplates:void 0,skipUpload:i,cliVersion:"5.15.3",loginCommand:"fern auth login"});return o.getResult()===Gf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:ni(s)}}}};Ut();var c0t=class e{static MAX_DISPLAYED_LOGS_TTY=10;static URL_PATTERN=/https?:\/\/[^\s]+/;context;stream;tasks={};taskOrder=[];startTime;isRegistered=!1;constructor(t){this.context=t.context,this.stream=t.stream??process.stderr}addTask(t){let r={...t,status:t.status??"pending"};return this.tasks[t.id]=r,this.taskOrder.push(t.id),this}async start(t){return this.startTime=Date.now(),t!=null&&await this.context.ttyAwareLogger.takeOverTerminal(()=>{this.stream.write(`
|
|
3786
3786
|
`),this.stream.write(`${Se.cyan("\u25C6")} ${Se.bold(t.title)}
|
|
3787
3787
|
`),t.subtitle!=null&&this.stream.write(` ${Se.dim(t.subtitle)}
|
|
3788
3788
|
`),this.stream.write(`
|
|
@@ -4460,7 +4460,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
|
|
|
4460
4460
|
Run ${Se.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
|
|
4461
4461
|
Run ${Se.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),cit(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function vhs({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!yWu(e))return;let i=t??"",o=e.filter(a=>a.isUpgradeAvailable);r!=null&&(o=o.slice(0,r+1));let s=o.sort((a,c)=>a.generatorName.localeCompare(c.generatorName)||a.currentVersion.localeCompare(c.currentVersion));for(let a of s)i+=`
|
|
4462
4462
|
${await mHh(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+Se.dim(a.currentVersion)+Se.reset(" \u2192 ")+Se.green(a.latestVersion);return i+=`
|
|
4463
|
-
`,n?cit(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function mHh(e){let r=await new AWu.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Q({message:`Generator ${e} not found`,code:Q.Code.ConfigError});return r.body.displayName}async function hHh({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await EWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=w6e(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await FD({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await EWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=w6e(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await FD({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function EWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await SL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?ey(n):void 0;for(let u of a.groups)if(!(i!=null&&u.groupName!==i))for(let l of u.generators)c!=null&&l.name!==c||await r(o.workspaceName,u.groupName,l,s)})}))}function vWu(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let c;try{c=IQ(a.latestVersion,a.previousVersion)}catch{throw new Q({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:Q.Code.ConfigError})}r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Rmi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await hHh({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...vWu(u,c,t.logger));else s.push(...vWu(a.versions,void 0,t.logger))}return s}async function the({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await oDt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new Q({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:Q.Code.NetworkError})}}var IWu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Fmi=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=_n.Info;isLocal;stdoutRedirector=new Dmi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await BUt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new FMt(t,r),this.isLocal=n??!1,this.posthogManager=i;let o=this.getPackageName(),s=this.getPackageVersion(),a=this.getCliName();(o==null||s==null||a==null)&&this.exitProgram(),this.environment={packageName:o,packageVersion:s,cliName:a},this.sentryClient=new Pmi({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"5.15.
|
|
4463
|
+
`,n?cit(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function mHh(e){let r=await new AWu.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Q({message:`Generator ${e} not found`,code:Q.Code.ConfigError});return r.body.displayName}async function hHh({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await EWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=w6e(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await FD({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await EWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=w6e(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await FD({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function EWu({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await SL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?ey(n):void 0;for(let u of a.groups)if(!(i!=null&&u.groupName!==i))for(let l of u.generators)c!=null&&l.name!==c||await r(o.workspaceName,u.groupName,l,s)})}))}function vWu(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let c;try{c=IQ(a.latestVersion,a.previousVersion)}catch{throw new Q({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:Q.Code.ConfigError})}r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Rmi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await hHh({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...vWu(u,c,t.logger));else s.push(...vWu(a.versions,void 0,t.logger))}return s}async function the({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await oDt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new Q({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:Q.Code.NetworkError})}}var IWu=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Fmi=class e{environment;sentryClient;posthogManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=_n.Info;isLocal;stdoutRedirector=new Dmi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await BUt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new FMt(t,r),this.isLocal=n??!1,this.posthogManager=i;let o=this.getPackageName(),s=this.getPackageVersion(),a=this.getCliName();(o==null||s==null||a==null)&&this.exitProgram(),this.environment={packageName:o,packageVersion:s,cliName:a},this.sentryClient=new Pmi({release:`cli@${this.environment.packageVersion}`})}getPackageName(){return"fern-api"}getPackageVersion(){return"5.15.3"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${Se.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),new bu}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof bu)&&(gMt({message:t,error:r,logger:this.logger}),Omi(this,r,{...n,message:t}))}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}writeJsonToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(JSON.stringify(t,null,2)+`
|
|
4464
4464
|
`),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish();try{await this.posthogManager.flush()}catch{}await this.sentryClient.flush(),this.exitProgram({code:t})}async nudgeUpgradeIfAvailable(){try{let t=await Promise.race([this.isUpgradeAvailable(),new Promise((n,i)=>setTimeout(()=>i("Request timed out"),300))]),r=await bWu({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
|
|
4465
4465
|
`)||(r+=`
|
|
4466
4466
|
`),this.stderr.info(r))}catch{}}async exitIfFailed(){this.didSucceed||await this.exit()}exitProgram({code:t}={}){process.exit(t??(this.didSucceed?0:1))}longestWorkspaceName;registerWorkspaces(t){let r=v1i(t.map(n=>n.type==="docs"?"docs":n.workspaceName??"api"),n=>n.length);r!=null&&(this.longestWorkspaceName=r)}project;registerProject(t){this.project=t}runTask(t){return this.runTaskWithInit(this.constructTaskInit(),t)}addTask(){return this.addTaskWithInit(this.constructTaskInit())}async runTaskForWorkspace(t,r){await this.runTaskWithInit(this.constructTaskInitForWorkspace(t),r)}addTaskWithInit(t){let r=new MKt(t);return this.ttyAwareLogger.registerTask(r),r}USE_NODE_18_OR_ABOVE_MESSAGE="The Fern CLI requires Node 18+ or above.";async runTaskWithInit(t,r){let n=this.addTaskWithInit(t).start(),i;try{i=await r(n)}catch(o){throw n.failWithoutThrowing(void 0,o),new bu}finally{n.finish()}return i}instrumentPostHogEvent(t){this.isLocal||this.posthogManager.sendEvent(t)}captureException(t,r){this.sentryClient.captureException(t,r)}logger=RS((t,...r)=>this.log(t,...r));stderr=RS((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=CWu(r),i=1+(this.longestWorkspaceName!=null?CWu(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=IWu[this.numTasks++%IWu.length],a=Se.hex(s)(o);return{...this.constructTaskInit(),logPrefix:a,title:Se.hex(s).bold(r)}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Gf.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:t=>{this.instrumentPostHogEvent(t)},shouldBufferLogs:!1,captureException:(t,r)=>{this.sentryClient.captureException(t,r)}}}log(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}])}logStderr(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}],{stderr:!0})}logImmediately(t,{stderr:r=!1}={}){let n=t.filter(i=>DS.indexOf(i.level)>=DS.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===_n.Debug,stderr:r||this.jsonMode})}_suppressUpgradeMessage=!1;suppressUpgradeMessage(){this._suppressUpgradeMessage=!0}_isUpgradeAvailable;async isUpgradeAvailable({includePreReleases:t=!1}={}){if(this._isUpgradeAvailable==null){this.logger.debug(`Checking if ${this.environment.packageName} upgrade is available...`);let r=await the({cliEnvironment:this.environment,includePreReleases:t}),n=IQ(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await Rmi({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await bhs({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:Se.yellow("?"),style:{answer:i=>Se.cyan(i),message:i=>Se.bold(i),highlight:i=>Se.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
|
package/package.json
CHANGED