@tslite/checker 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -733,34 +733,80 @@ declare function freeVars(schema: Schema): ReadonlySet<string>;
733
733
  * dado persistível: vive só durante a inferência de uma chamada.
734
734
  */
735
735
  declare const silentNever: Schema;
736
+ /**
737
+ * A prioridade de uma inferência — o `InferencePriority` do tsc (`types.ts:4925`). MENOR
738
+ * vale mais: um candidato de prioridade menor descarta os que a var já tinha, um de
739
+ * prioridade maior é ignorado, e os de prioridade igual se somam. As flags se combinam
740
+ * pelo caminho (`inferWithPriority` faz `priority |= p`).
741
+ */
742
+ declare const InferencePriority: {
743
+ /** A var nua dentro de uma união ou interseção — menos específica que a de dentro de
744
+ * uma estrutura (`Promise<string>` contra `T | Promise<T>` dá `string`). */
745
+ readonly NakedTypeVariable: number;
746
+ /** A inferência reversa de um mapped homomórfico (`{ [K in keyof T]: … }`). */
747
+ readonly HomomorphicMappedType: number;
748
+ /** A mesma, de uma fonte parcialmente inferível (um literal com um membro pulado). */
749
+ readonly PartialHomomorphicMappedType: number;
750
+ /** As chaves da fonte para o `K` de `{ [P in K]: … }`. */
751
+ readonly MappedTypeConstraint: number;
752
+ /** Um conditional em posição contravariante. */
753
+ readonly ContravariantConditional: number;
754
+ /** O tipo esperado do retorno de uma chamada (checker D52). */
755
+ readonly ReturnType: number;
756
+ /** Um literal de string para um `keyof T`. */
757
+ readonly LiteralKeyof: number;
758
+ /** Não troca uma fonte genérica pela constraint dela (o `infer` de um conditional). */
759
+ readonly NoConstraints: number;
760
+ /** Contravariância estrita mesmo sem `strictFunctionTypes` — é o nosso regime sempre. */
761
+ readonly AlwaysStrict: number;
762
+ /** A semente do rastreio da prioridade das inferências feitas num sub-walk. */
763
+ readonly MaxValue: number;
764
+ /** As prioridades em que a decisão COMBINA os candidatos (a união, a interseção), em
765
+ * vez de escolher o supertipo (o subtipo) comum. */
766
+ readonly PriorityImpliesCombination: number;
767
+ /** O sub-walk esbarrou num par já em curso — menor que todas. */
768
+ readonly Circularity: -1;
769
+ };
736
770
  /**
737
771
  * Os candidatos de inferência de uma var, na ORDEM em que a inferência os encontrou —
738
- * o `InferenceInfo.candidates`/`contraCandidates` do tsc. Duas listas, porque a
739
- * POSIÇÃO em que o candidato foi achado decide como ele vale: o que veio de um
740
- * PARÂMETRO de função é contravariante (TC48).
772
+ * o `InferenceInfo` do tsc. Duas listas, porque a POSIÇÃO em que o candidato foi achado
773
+ * decide como ele vale: o que veio de um PARÂMETRO de função é contravariante (TC48). E
774
+ * a prioridade deles (TC66): todos os candidatos de uma var têm a mesma.
741
775
  */
742
776
  interface VarCandidates {
743
777
  readonly co: Schema[];
744
778
  readonly contra: Schema[];
779
+ /** A prioridade dos candidatos das listas; sem candidato, nenhuma. */
780
+ priority?: number;
745
781
  }
782
+ /**
783
+ * O contexto de uma inferência: um slot por type param que ela liga — o
784
+ * `InferenceContext.inferences` do tsc. Uma var que não está aqui não é inferida: é
785
+ * rígida (o `T` da função que envolve a chamada) ou de outro binder.
786
+ */
787
+ type Candidates = Map<string, VarCandidates>;
788
+ /** Um slot vazio por type param declarado — o `createInferenceContext`. */
789
+ declare function createInferences(decls: readonly VarSchema[] | undefined): Candidates;
746
790
  /**
747
791
  * O tipo inferido de uma var a partir dos seus candidatos — o `getCovariantInference`
748
792
  * do tsc (`checker.ts:19156`), em TRÊS etapas: os de origem literal se juntam num só
749
- * (posto no fim), o resto decide o supertipo comum, e o que sai passa pelo
750
- * {@link widenOrigin} — o `getWidenedType` que fecha a função lá (`checker.ts:19174`),
751
- * e que é o que completa uma união de literais com as chaves dos irmãos (TC53).
793
+ * (posto no fim), o resto decide o supertipo comum — ou, numa prioridade que implica
794
+ * COMBINAÇÃO (o retorno esperado, TC66), a união com a redução por subtipo —, e o que
795
+ * sai passa pelo {@link widenOrigin} — o `getWidenedType` que fecha a função lá
796
+ * (`checker.ts:19174`), e que é o que completa uma união de literais com as chaves dos
797
+ * irmãos (TC53).
752
798
  */
753
- declare function covariantInference(candidates: readonly Schema[], schemes?: Schemes): Schema | undefined;
799
+ declare function covariantInference(candidates: readonly Schema[], schemes?: Schemes, combine?: boolean): Schema | undefined;
754
800
  /**
755
801
  * O tipo inferido de uma var a partir dos candidatos CONTRAVARIANTES — o
756
- * `getContravariantInference` do tsc (`checker.ts:19152`), que sem a prioridade de
757
- * combinação é o `getCommonSubtype` (`checker.ts:17700`): o menor deles, pelo
758
- * `reduceLeft` com a relação invertida.
802
+ * `getContravariantInference` do tsc (`checker.ts:19152`): o `getCommonSubtype`
803
+ * (`checker.ts:17700`), o menor deles pelo `reduceLeft` com a relação invertida; ou,
804
+ * numa prioridade que implica combinação, a INTERSEÇÃO deles.
759
805
  */
760
- declare function contravariantInference(candidates: readonly Schema[], schemes?: Schemes): Schema | undefined;
806
+ declare function contravariantInference(candidates: readonly Schema[], schemes?: Schemes, combine?: boolean): Schema | undefined;
761
807
  /**
762
808
  * A decisão de UMA var, com as duas listas — o `getInferredType` do tsc
763
- * (`checker.ts:19177`).
809
+ * (`checker.ts:19177`), no ramo em que a inferência é de uma ASSINATURA.
764
810
  *
765
811
  * Havendo candidatos contravariantes, eles têm a preferência, **salvo** quando o
766
812
  * covariante existe, não é `never` e é subtipo deles. É essa exceção que faz
@@ -782,38 +828,48 @@ declare function erasedSignature(sig: FnSchema$1): FnSchema$1;
782
828
  */
783
829
  declare function inferredTypes(decls: readonly VarSchema[], b: Bindings, schemes?: Schemes): Bindings;
784
830
  /**
785
- * O `instantiateSignatureInContextOf` do tsc, para relacionar uma assinatura-FONTE
786
- * genérica com uma assinatura-ALVO: os type params da fonte são inferidos dos
787
- * parâmetros do alvo (posição a posição) e, para o que eles não ligaram, do retorno —
788
- * a prioridade menor do tsc (`InferencePriority.ReturnType`). O resto passa pelo
831
+ * Infere os type params de `inferences` casando `source` contra `target` — o
832
+ * `inferTypes` do tsc (`checker.ts:18555`). Os candidatos entram nos slots; quem chamou
833
+ * decide no fim.
834
+ *
835
+ * `priority` é a prioridade de partida ({@link InferencePriority}) e `contravariant`, a
836
+ * variância: a chamada infere com `0`, o tipo esperado do retorno com `ReturnType`, e o
837
+ * `infer` de um conditional com `NoConstraints | AlwaysStrict`.
838
+ */
839
+ declare function inferTypes(inferences: Candidates, originalSource: Schema, originalTarget: Schema, schemes?: Schemes, initialPriority?: number, initialContravariant?: boolean): void;
840
+ /**
841
+ * As ligações decididas de um contexto — o `getInferredTypes` no ramo de uma
842
+ * ASSINATURA, sem o default: cada type param com candidato vale o
843
+ * {@link inferFromCandidates}; o sem candidato fica de fora, e quem chamou decide o que
844
+ * ele vale (o default, a constraint ou `unknown`, pelo {@link inferredTypes}).
845
+ */
846
+ declare function inferredBindings(inferences: Candidates, schemes?: Schemes): Bindings;
847
+ /**
848
+ * O `instantiateSignatureInContextOf` do tsc (`checker.ts:24965`), para relacionar uma
849
+ * assinatura-FONTE genérica com uma assinatura-ALVO: os type params da fonte são
850
+ * inferidos dos parâmetros do alvo e, com a prioridade menor do retorno
851
+ * (`InferencePriority.ReturnType`), do retorno dele. O resto passa pelo
789
852
  * `inferredTypes`. Os type params do ALVO ficam como estão: rígidos, o canônico do tsc.
790
853
  * Devolve a fonte instanciada, não-genérica.
791
854
  */
792
855
  declare function instantiateInContextOf(sig: FnSchema$1, context: FnSchema$1, schemes?: Schemes): FnSchema$1;
793
- /**
794
- * Liga as `var`s de `pattern` aos tipos correspondentes em `actual`. Devolve as
795
- * ligações estendidas, ou `null` se forem incompatíveis. `actual` que seja
796
- * `any`/`unknown` não constrange vars (deixa-as livres).
797
- */
798
- declare function unify(pattern: Schema, actual: Schema, bindings?: Bindings): Bindings | null;
799
856
  /** Resultado de instanciar uma assinatura contra argumentos. */
800
857
  interface Instantiation {
801
858
  readonly returns: Schema;
802
859
  readonly bindings: Bindings;
803
860
  }
804
861
  /**
805
- * Instancia uma função genérica: unifica cada argumento contra o parâmetro
806
- * correspondente (ligando as `var`s) e devolve o retorno já substituído.
807
- * Falha (`null`) se algum argumento não unificar. Um parâmetro `variadic`
808
- * absorve os argumentos restantes (cada um unifica contra o tipo do rest).
809
- */
810
- declare function instantiate(sig: FnSchema$1, args: readonly Schema[], schemes?: Schemes): Instantiation | null;
811
- /**
812
- * Versão tolerante de {@link instantiate} para o editor/checker: nunca falha —
813
- * argumentos que não unificam são ignorados, e `var`s não ligadas permanecem
814
- * (útil para aplicação parcial e enquanto o usuário ainda digita).
862
+ * A inferência de uma chamada — o `inferTypeArguments` do tsc (`checker.ts:24992`) —
863
+ * seguida da decisão sem o default. Nunca falha: o argumento que não se relaciona só
864
+ * não contribui (checker D65), e quem acusa é a relação, depois.
865
+ *
866
+ * `expected` é o tipo ESPERADO do retorno (checker D52): ele infere primeiro, contra o
867
+ * retorno, com a prioridade `ReturnType` — a menor, então o que um argumento inferir
868
+ * para a mesma var o descarta. Uma função genérica esperada entra com os type params
869
+ * DELA, e não apagados: é o que liga o `T` de `arrayMap(value => …)` ao `A` de `<A>(a:
870
+ * A[]) => …` (o `getSignatureInstantiationWithoutFillingInTypeArguments`).
815
871
  */
816
- declare function instantiateLoose(sig: FnSchema$1, args: readonly Schema[], schemes?: Schemes): Instantiation;
872
+ declare function instantiateLoose(sig: FnSchema$1, args: readonly Schema[], schemes?: Schemes, expected?: Schema): Instantiation;
817
873
  /**
818
874
  * Aterra as `var`s remanescentes em `unknown` (para exibição do resultado). Resolve
819
875
  * de passagem um `conditional` cujo discriminante já é ground → o tipo do resultado
@@ -971,6 +1027,13 @@ declare function widenInferred(t: Schema): Schema;
971
1027
  */
972
1028
  declare function widenOrigin(t: Schema): Schema;
973
1029
 
1030
+ /**
1031
+ * O nome EXIBIDO de um tipo nomeado. A chave de um alias no catálogo é o nome escrito, salvo
1032
+ * quando o nome não é único — um alias local, o segundo de dois com o mesmo nome —, e aí ela
1033
+ * leva o sufixo `@` da declaração (checker D88): a identidade que no tsc é o símbolo. O sufixo
1034
+ * nunca se exibe; o tsc mostra o nome, mesmo fora do escopo do alias.
1035
+ */
1036
+ declare const typeNameOf: (key: string) => string;
974
1037
  /**
975
1038
  * A forma de topo de um tipo impresso, para decidir parênteses. Um printer de tipo —
976
1039
  * este, do `Schema`, e o de type-node do `@tslite/format` — classifica o nó numa forma
@@ -1067,6 +1130,6 @@ type WriteKey = {
1067
1130
  declare function readonlyMember(schema: Schema, key: WriteKey, schemes?: Schemes): "property" | "index" | null;
1068
1131
 
1069
1132
  /** A versão deste package, a do módulo de fato carregado. */
1070
- declare const version = "1.6.0";
1133
+ declare const version = "1.8.0";
1071
1134
 
1072
- export { type AnySchema, type ApplySchema, type ArraySchema, type Bindings, type Completion, DEFAULT_TYPE_LIMITS, type Discovery, type ElementFlag, type FnSchema$1 as FnSchema, type GuardSig, INSTANTIATION_COUNT_LIMIT, INSTANTIATION_DEPTH_LIMIT, type Incompatibility, type IncompatibilityKind, type IndexSchema, type Instantiation, InstantiationLimitError, type KeyofSchema, type LiteralSchema, type MappedSchema, type ObjectSchema, type OverloadSchema, type Param, type PathSegment, type Prop, type ScalarSchema, type Schema, type Schemes, TYPE_EVAL_DEPTH_LIMIT, type TupleSchema, TypeEvalLimitError, type TypeEvalLimits, type TypeForm, type TypePosition, type TypeScheme, type UnionSchema, UnionTooComplexError, type UnknownSchema, type VarCandidates, type VarSchema, type WriteKey, apparentType, asLiteralOrigin, baseLiteralType, bindTypeParams, comparable, configureTypeLimits, contravariantInference, covariantInference, discover, equals, erasedSignature, expand1, flagAt, format, formatTypeArgs, formatTypeDiff, freeVars, groundVars, inferFromCandidates, inferredTypes, instantiate, instantiateInContextOf, instantiateLoose, isMissingType, isNumericLiteralName, isObjectOrArrayLiteral, isScheme, isSerializable, isVariadicTuple, join, joinAll, missingType, normalizeUnion, ownProp, readonlyMember, renameTypeParams, resetInstantiationCount, resetTypeLimits, resolveConditional, resolveOp, resolveTypeOp, restIndex, restTypeAtPosition, s, sampleValue, silentNever, substitute, subtype, typeAtPosition, typeDiff, typeFeatures, typeLimits, typeNeedsParens, typeParamArity, unify, version, widen, widenInferred, widenLiteral, widenOrigin, widenType, withUndefined, withoutUndefined };
1135
+ export { type AnySchema, type ApplySchema, type ArraySchema, type Bindings, type Candidates, type Completion, DEFAULT_TYPE_LIMITS, type Discovery, type ElementFlag, type FnSchema$1 as FnSchema, type GuardSig, INSTANTIATION_COUNT_LIMIT, INSTANTIATION_DEPTH_LIMIT, type Incompatibility, type IncompatibilityKind, type IndexSchema, InferencePriority, type Instantiation, InstantiationLimitError, type KeyofSchema, type LiteralSchema, type MappedSchema, type ObjectSchema, type OverloadSchema, type Param, type PathSegment, type Prop, type ScalarSchema, type Schema, type Schemes, TYPE_EVAL_DEPTH_LIMIT, type TupleSchema, TypeEvalLimitError, type TypeEvalLimits, type TypeForm, type TypePosition, type TypeScheme, type UnionSchema, UnionTooComplexError, type UnknownSchema, type VarCandidates, type VarSchema, type WriteKey, apparentType, asLiteralOrigin, baseLiteralType, bindTypeParams, comparable, configureTypeLimits, contravariantInference, covariantInference, createInferences, discover, equals, erasedSignature, expand1, flagAt, format, formatTypeArgs, formatTypeDiff, freeVars, groundVars, inferFromCandidates, inferTypes, inferredBindings, inferredTypes, instantiateInContextOf, instantiateLoose, isMissingType, isNumericLiteralName, isObjectOrArrayLiteral, isScheme, isSerializable, isVariadicTuple, join, joinAll, missingType, normalizeUnion, ownProp, readonlyMember, renameTypeParams, resetInstantiationCount, resetTypeLimits, resolveConditional, resolveOp, resolveTypeOp, restIndex, restTypeAtPosition, s, sampleValue, silentNever, substitute, subtype, typeAtPosition, typeDiff, typeFeatures, typeLimits, typeNameOf, typeNeedsParens, typeParamArity, version, widen, widenInferred, widenLiteral, widenOrigin, widenType, withUndefined, withoutUndefined };
@@ -1 +1 @@
1
- export{d as DEFAULT_TYPE_LIMITS,c as INSTANTIATION_COUNT_LIMIT,b as INSTANTIATION_DEPTH_LIMIT,i as InstantiationLimitError,a as TYPE_EVAL_DEPTH_LIMIT,h as TypeEvalLimitError,k as UnionTooComplexError,J as apparentType,v as asLiteralOrigin,N as baseLiteralType,G as bindTypeParams,ca as comparable,e as configureTypeLimits,T as contravariantInference,S as covariantInference,qa as discover,da as equals,V as erasedSignature,I as expand1,z as flagAt,ma as format,na as formatTypeArgs,oa as formatTypeDiff,E as freeVars,$ as groundVars,U as inferFromCandidates,W as inferredTypes,Z as instantiate,X as instantiateInContextOf,_ as instantiateLoose,t as isMissingType,y as isNumericLiteralName,u as isObjectOrArrayLiteral,H as isScheme,pa as isSerializable,A as isVariadicTuple,ia as join,ja as joinAll,s as missingType,ga as normalizeUnion,w as ownProp,ra as readonlyMember,D as renameTypeParams,j as resetInstantiationCount,f as resetTypeLimits,ea as resolveConditional,K as resolveOp,p as resolveTypeOp,B as restIndex,r as restTypeAtPosition,o as s,ka as sampleValue,R as silentNever,C as substitute,ba as subtype,fa as typeAtPosition,aa as typeDiff,ha as typeFeatures,g as typeLimits,la as typeNeedsParens,F as typeParamArity,Y as unify,sa as version,L as widen,P as widenInferred,M as widenLiteral,Q as widenOrigin,O as widenType,q as withUndefined,x as withoutUndefined}from'../chunk-RDCPWO2E.js';
1
+ export{d as DEFAULT_TYPE_LIMITS,c as INSTANTIATION_COUNT_LIMIT,b as INSTANTIATION_DEPTH_LIMIT,S as InferencePriority,i as InstantiationLimitError,a as TYPE_EVAL_DEPTH_LIMIT,h as TypeEvalLimitError,k as UnionTooComplexError,J as apparentType,v as asLiteralOrigin,N as baseLiteralType,G as bindTypeParams,ea as comparable,e as configureTypeLimits,V as contravariantInference,U as covariantInference,T as createInferences,ta as discover,fa as equals,X as erasedSignature,I as expand1,z as flagAt,pa as format,qa as formatTypeArgs,ra as formatTypeDiff,E as freeVars,ba as groundVars,W as inferFromCandidates,Z as inferTypes,_ as inferredBindings,Y as inferredTypes,$ as instantiateInContextOf,aa as instantiateLoose,t as isMissingType,y as isNumericLiteralName,u as isObjectOrArrayLiteral,H as isScheme,sa as isSerializable,A as isVariadicTuple,ka as join,la as joinAll,s as missingType,ia as normalizeUnion,w as ownProp,ua as readonlyMember,D as renameTypeParams,j as resetInstantiationCount,f as resetTypeLimits,ga as resolveConditional,K as resolveOp,p as resolveTypeOp,B as restIndex,r as restTypeAtPosition,o as s,ma as sampleValue,R as silentNever,C as substitute,da as subtype,ha as typeAtPosition,ca as typeDiff,ja as typeFeatures,g as typeLimits,na as typeNameOf,oa as typeNeedsParens,F as typeParamArity,va as version,L as widen,P as widenInferred,M as widenLiteral,Q as widenOrigin,O as widenType,q as withUndefined,x as withoutUndefined}from'../chunk-O7NTTIOJ.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/checker",
3
- "version": "1.6.0",
3
+ "version": "1.8.0",
4
4
  "description": "TSLite type system — a structural type checker over the AST (the 'TypeScript of TSLite')",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -44,15 +44,15 @@
44
44
  "access": "public"
45
45
  },
46
46
  "dependencies": {
47
- "@tslite/ast": "1.3.0",
48
- "@tslite/capability": "1.3.0",
49
- "@tslite/json": "1.1.0",
50
- "@tslite/language-service": "1.2.0"
47
+ "@tslite/ast": "^1.4.0",
48
+ "@tslite/capability": "^1.4.0",
49
+ "@tslite/json": "^1.2.0",
50
+ "@tslite/language-service": "^1.2.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "typescript": "^5.9.3",
54
54
  "typescript-3.9": "npm:typescript@3.9.10",
55
- "@tslite/parser": "1.7.0"
55
+ "@tslite/parser": "1.9.0"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "tsup",
@@ -1 +0,0 @@
1
- var gt=100,xt=50,vt=5e6,ke={maxTypeDepth:100,maxInstantiationDepth:50,maxInstantiationCount:5e6,maxUnionMembers:1e3,maxOverloadSignatures:200},q=ke;function bt(e){q={...ke,...e};}function kt(){q=ke;}function F(){return q}var H=class extends Error{constructor(n=q.maxTypeDepth){super(`excessive stack depth comparing types (limit ${n}) \u2014 the comparison is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},be=class extends Error{constructor(t,r=t==="depth"?q.maxInstantiationDepth:q.maxInstantiationCount){super(`type instantiation is excessively deep and possibly infinite (${t} limit ${r})`);this.kind=t;this.name="InstantiationLimitError";}};function wt(){De=0;}var De=0;function gn(){if(De>=q.maxInstantiationCount)throw new be("count");De++;}var Y=class extends Error{constructor(n,t=q.maxUnionMembers){super(`union type is too complex to represent (${n} members exceeds limit ${t})`),this.name="UnionTooComplexError";}};var xn=Object.prototype.hasOwnProperty,se=(e,n)=>xn.call(e,n),b=(e,n)=>xn.call(e,n)?e[n]:void 0;function g(e,n,t){n==="__proto__"?Object.defineProperty(e,n,{value:t,enumerable:true,writable:true,configurable:true}):e[n]=t;}var He=()=>({active:new Set,byScope:new Map});function Oe(e,n,t){let r=new Map(e);for(let o of n)r.set(o.name,t(o));return r}function Ye(e,n,t){let r=Oe(n,e,()=>{}),o=false,a=e.map(i=>{let u=i.bound&&A(i.bound,r,t),l=i.default&&A(i.default,r,t);return u===i.bound&&l===i.default?i:(o=true,{...i,...u?{bound:u}:{},...l?{default:l}:{}})});return o?a:e}function ze(e,n,t){let r=e.typeParams?.length?Ye(e.typeParams,n,t):void 0,o=r?Oe(n,r,l=>l.bound):n,a=pe(e.params,l=>{let c=A(l.type,o,t);return c===l.type?l:{...l,type:c}}),i=A(e.returns,o,t),u=e.guard&&A(e.guard.type,o,t);return a===e.params&&i===e.returns&&u===e.guard?.type&&r===e.typeParams?e:{...e,params:a,returns:i,...e.guard&&u?{guard:{...e.guard,type:u}}:{},...r?{typeParams:r}:{}}}function pe(e,n){let t=false,r=e.map(o=>{let a=n(o);return a!==o&&(t=true),a});return t?r:e}function A(e,n,t){if(n.size===0)return e;let r=t.byScope.get(n);r||t.byScope.set(n,r=new Map);let o=r.get(e);if(o)return o;if(t.active.has(e))return e;t.active.add(e);let a=jn(e,n,t);return t.active.delete(e),r.set(e,a),a}function jn(e,n,t){let r=o=>A(o,n,t);switch(e.t){case "var":{if(!n.has(e.name))return e;let o=n.get(e.name);return o===e.bound&&e.default===void 0?e:o?{t:"var",name:e.name,bound:o}:{t:"var",name:e.name}}case "array":{let o=r(e.items);return o===e.items?e:{...e,items:o}}case "tuple":{let o=pe(e.elements,r);return o===e.elements?e:{...e,elements:o}}case "union":case "intersection":{let o=pe(e.of,r);return o===e.of?e:{...e,of:o}}case "object":{let o=false,a={};for(let l of Object.keys(e.props)){let c=e.props[l],f=r(c.type);f!==c.type&&(o=true),g(a,l,f===c.type?c:{...c,type:f});}let i=e.index&&r(e.index.value),u=!!e.index&&i!==e.index.value;return !o&&!u?e:{...e,props:o?a:e.props,...e.index&&i&&u?{index:{...e.index,value:i}}:{}}}case "fn":return ze(e,n,t);case "overload":{let o=pe(e.signatures,a=>ze(a,n,t));return o===e.signatures?e:{...e,signatures:o}}case "keyof":{let o=r(e.of);return o===e.of?e:{...e,of:o}}case "index":{let o=r(e.obj),a=r(e.key);return o===e.obj&&a===e.key?e:{...e,obj:o,key:a}}case "mapped":{let o=r(e.over),a=new Map(n);a.set(e.key,void 0);let i=A(e.body,a,t);return o===e.over&&i===e.body?e:{...e,over:o,body:i}}case "conditional":{let o=e.infer?.length?Ye(e.infer,n,t):void 0,a=o?Oe(n,o,f=>f.bound):n,i=r(e.check),u=A(e.extends,a,t),l=A(e.then,a,t),c=A(e.else,a,t);return i===e.check&&u===e.extends&&l===e.then&&c===e.else&&o===e.infer?e:{...e,check:i,extends:u,then:l,else:c,...o?{infer:o}:{}}}case "returnType":case "parameters":{let o=r(e.fn);return o===e.fn?e:{...e,fn:o}}case "apply":{let o=pe(e.args,r);return o===e.args?e:{...e,args:o}}default:return e}}function vn(e){return e.typeParams?.length?ze(e,new Map,He()):e}function Tt(e){return e.infer?.length?jn(e,new Map,He()):e}function jt(e){if(!e.params.length)return e;let n=He(),t=Ye(e.params,new Map,n),r=A(e.body,Oe(new Map,t,o=>o.bound),n);return t===e.params&&r===e.body?e:{params:t,body:r}}var D=e=>Object.freeze(e),s={any:D({t:"any"}),unknown:D({t:"unknown"}),string:D({t:"string"}),number:D({t:"number"}),boolean:D({t:"boolean"}),null:D({t:"null"}),undefined:D({t:"undefined"}),void:D({t:"void"}),nonPrimitive:D({t:"nonPrimitive"}),literal:e=>({t:"literal",value:e}),object:(e,n)=>({t:"object",props:e,...n?{index:n}:{}}),record:(e,n="string")=>({t:"object",props:{},index:{key:n,value:e}}),array:(e,n)=>({t:"array",items:e,...n?{readonly:true}:{}}),tuple:(e,n,t)=>({t:"tuple",elements:n?e.map((r,o)=>n[o]==="optional"?W(r):r):e,...n&&n.some(r=>r!=="req")?{flags:n}:{},...t?{readonly:true}:{}}),fn:(e,n,t)=>vn({t:"fn",params:e,returns:n,...t?.length?{typeParams:t}:{}}),guard:(e,n,t=0)=>({t:"fn",params:e,returns:{t:"boolean"},guard:{param:t,type:n}}),overload:e=>({t:"overload",signatures:e.map(vn)}),keyof:e=>({t:"keyof",of:e}),index:(e,n)=>({t:"index",obj:e,key:n}),mapped:(e,n,t,r={})=>({t:"mapped",key:e,over:n,body:t,...r.optional?{optional:true}:{},...r.readonly?{readonly:true}:{},...r.excludeOptional?{excludeOptional:true}:{},...r.excludeReadonly?{excludeReadonly:true}:{}}),conditional:(e,n,t,r,o)=>Tt({t:"conditional",check:e,extends:n,then:t,else:r,...o&&o.length?{infer:o}:{}}),scheme:(e,n)=>jt({params:e,body:n}),intersection:e=>L({of:e}),and:(e,n)=>L({of:[e,n]}),returnType:e=>({t:"returnType",fn:e}),parameters:e=>({t:"parameters",fn:e}),var:(e,n)=>({t:"var",name:e,...n?{bound:n}:{}}),typeParam:(e,n={})=>({t:"var",name:e,...n.bound?{bound:n.bound}:{},...n.default?{default:n.default}:{}}),typeQuery:e=>({t:"typeQuery",path:e}),apply:(e,n=[])=>({t:"apply",name:e,args:n}),promise:e=>({t:"apply",name:"Promise",args:[e]}),union:e=>{let n=[],t=o=>{o.t==="union"?o.of.forEach(t):n.push(o);};if(e.forEach(t),n.some(o=>o.t==="any"))return {t:"any"};if(n.some(o=>o.t==="unknown"))return {t:"unknown"};let r=Pt(n);return r.length===1?r[0]:{t:"union",of:r}}};function Ot(e){switch(e.t){case "string":case "number":case "boolean":case "null":case "undefined":case "void":return e.t;case "literal":return `#${typeof e.value}:${String(e.value)}`;default:return null}}function Pt(e){let n=[],t=new Map;for(let u of e){let l=Ot(u);if(l===null){n.includes(u)||n.push(u);continue}let c=t.get(l);c===void 0?(t.set(l,n.length),n.push(u)):u.t==="literal"&&!u.fresh&&(n[c]=u);}let r=u=>u.t==="literal"&&t.has(typeof u.value),o=!t.has("boolean")&&t.has("#boolean:true")&&t.has("#boolean:false"),a=false,i=[];for(let u of n)if(!r(u)){if(o&&u.t==="literal"&&typeof u.value=="boolean"){a||i.push({t:"boolean"}),a=true;continue}i.push(u);}return i}function x(e){return e.t==="keyof"?Qe(e.of)??e:e.t==="index"?je(e.obj,e.key)??e:e.t==="returnType"?Mt(e.fn)??e:e.t==="parameters"?It(e.fn)??e:e}var we={t:"union",of:[]},qe=e=>e.t==="union"&&e.of.length===0;function Mt(e){return e.t==="fn"?e.returns:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1].returns:null}function W(e){if(e.t==="undefined"||e.t==="any"||e.t==="unknown")return e;let n=e.t==="union"?e.of:[e];return n.some(t=>t.t==="undefined")?e:s.union([...n,{t:"undefined"}])}function It(e){let n=e.t==="fn"?e:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1]:null;return n?fe(n,0):null}function oe(e){let n=[],t=[],r;for(let o of e.params){if(!o.variadic){n.push(o.optional?W(o.type):o.type),t.push(o.optional?"optional":"req");continue}let a=o.type;a.t==="tuple"?a.elements.forEach((i,u)=>{let l=a.flags?.[u]??"req";l==="rest"&&(r=s.array(i)),n.push(l==="optional"?W(i):i),t.push(l);}):(r=a,n.push(a.t==="array"?a.items:a.t==="any"?a:s.index(a,s.number)),t.push("rest"));}return {types:n,flags:t,rest:r}}function fe(e,n){let{types:t,flags:r,rest:o}=oe(e),a=t.length-(o?1:0);if(o&&n===a)return o;let i=r.findIndex(y=>y!=="req"),u=i<0?t.length:i,l=u<n?0:u-n,c=[],f=[];for(let y=n;y<t.length;y++)c.push(t[y]),f.push(o&&y===a?"rest":y-n<l?"req":"optional");return s.tuple(c,f)}var Ke=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function bn(e,n){return e.t==="literal"&&n.t==="literal"?e.value===n.value:e.t==="literal"&&(n.t==="string"||n.t==="number"||n.t==="boolean")?typeof e.value===n.t:e.t===n.t&&(e.t==="string"||e.t==="number"||e.t==="boolean")}function kn(e){return e.t==="null"||e.t==="undefined"?e.t:e.t==="nonPrimitive"?"nonPrimitive":Ke(e)?"scalar":e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="fn"||e.t==="overload"?"object":null}var wn=e=>e.t==="object"&&!e.index&&Object.keys(e.props).length===0;function L(e){let n=[],t=i=>{let u=x(i);u.t==="intersection"?u.of.forEach(t):n.push(u);};if(e.of.forEach(t),n.some(i=>i.t==="any"))return s.any;if(n.some(qe))return we;let r=i=>n.some(u=>kn(u)===i);if(r("null")&&(r("undefined")||r("scalar")||r("object")||r("nonPrimitive"))||r("undefined")&&(r("scalar")||r("object")||r("nonPrimitive"))||r("nonPrimitive")&&r("scalar"))return we;if(n.some(i=>kn(i)==="object"&&!wn(i)))for(let i=n.length-1;i>=0;i--)wn(n[i])&&n.splice(i,1);let o=n.findIndex(i=>i.t==="union");if(o>=0){let i=n.reduce((u,l)=>u*(l.t==="union"?l.of.length:1),1);if(i>F().maxUnionMembers)throw new Y(i);return s.union(n[o].of.map(u=>L({of:n.map((l,c)=>c===o?u:l)})))}let a=[];for(let i of n){if(i.t==="any")return s.any;if(qe(i))return we;if(i.t!=="unknown"){if(Ke(i)){let u=false;for(let l=a.length-1;l>=0;l--){let c=a[l];if(Ke(c)){if(bn(c,i)){u=true;break}if(bn(i,c))a.splice(l,1);else return we}}if(u)continue}else if(a.some(u=>u===i))continue;a.push(i);}}return a.length===0?s.unknown:a.length===1?a[0]:{t:"intersection",of:a}}function Qe(e){if(e.t==="union"&&e.of.length>0){let t=e.of.map(Qe);return t.some(r=>r===null)?null:Et(t)}if(e.t==="intersection"){let t=e.of.map(Qe);return t.some(r=>r===null)?null:s.union(t)}if(e.t==="unknown")return {t:"union",of:[]};if(e.t==="any"||e.t==="union"&&e.of.length===0)return {t:"union",of:[s.string,s.number]};if(e.t==="nonPrimitive")return {t:"union",of:[]};if(e.t==="array"||e.t==="tuple")return s.number;if(e.t==="fn"||e.t==="overload")return {t:"union",of:[]};if(e.t!=="object")return null;if(e.index?.key==="string")return s.union([s.string,s.number]);let n=Object.keys(e.props).map(t=>s.literal(t));return e.index?.key==="number"?s.union([s.number,...n]):n.length===0?{t:"union",of:[]}:s.union(n)}function Et(e){let n=a=>a.t==="literal"&&typeof a.value=="string"?[a.value]:a.t==="union"?a.of.flatMap(n):[],t=e.filter(a=>a.t!=="string"&&a.t!=="number").map(n);if(t.length===0)return e[0];let r=t[0].filter(a=>t.every(i=>i.includes(a))),o=[...new Set(r)].map(a=>s.literal(a));return o.length===0?{t:"union",of:[]}:s.union(o)}var G=Object.freeze({t:"unknown"}),Te=e=>e===G,Tn=e=>e.t==="var"||e.t==="apply"||e.t==="mapped"||e.t==="conditional"||e.t==="keyof"||e.t==="index"||e.t==="returnType"||e.t==="parameters"||e.t==="typeQuery";function je(e,n){if(e=x(e),n=x(n),n.t==="union"){let t=[],r=false;for(let o of n.of){let a=je(e,o);if(a===null)return null;Te(a)?r=true:t.push(a);}return r?G:s.union(t)}if(Tn(n))return null;if(e.t==="any"||qe(e))return e;if(e.t==="intersection"){let t=[];for(let r of e.of){let o=je(x(r),n);if(o===null)return null;Te(o)||t.push(o);}return t.length===0?G:t.length===1?t[0]:L({of:t})}if(e.t==="union"){let t=[];for(let r of e.of){let o=x(r);if(o.t==="any")return o;let a=je(o,n);if(a===null)return null;if(Te(a))return G;t.push(a);}return s.union(t)}if(e.t==="object"){if(n.t==="literal"&&(typeof n.value=="string"||typeof n.value=="number")){let t=N(e.props,String(n.value));return t?t.optional?W(t.type):t.type:typeof n.value=="number"&&e.index?.key==="number"||e.index?.key==="string"?e.index.value:G}if(n.t==="string"||n.t==="number"){let r=n.t==="number"&&e.index?.key==="number"||false||e.index?.key==="string"?e.index:void 0;if(r)return r.value}}if(e.t==="tuple"){let t=e.flags?.findIndex(o=>o==="rest")??-1,r=t>=0?t:e.elements.length;if(n.t==="literal"&&typeof n.value=="string"&&Me(n.value)&&+n.value>=0){let o=+n.value;return Number.isInteger(o)&&o<r?e.elements[o]:t>=0?e.elements[t]:s.undefined}if(n.t==="literal"&&typeof n.value=="number")return n.value<r?e.elements[n.value]:t>=0?e.elements[t]:s.undefined;if(n.t==="number")return e.elements.length?s.union([...e.elements]):s.undefined}return e.t==="array"&&(n.t==="number"||n.t==="literal"&&typeof n.value=="number")?e.items:Tn(e)?null:G}var Pe=e=>(e.t==="object"||e.t==="array"||e.t==="tuple")&&!!e.fromLiteral,$t=e=>e.t==="object"||e.t==="array"||e.t==="tuple"?e.fromLiteral?e:{...e,fromLiteral:true}:e,N=(e,n)=>b(e,n);function B(e){if(e.t==="undefined")return {type:{t:"union",of:[]},hadUndefined:true};if(e.t==="union"&&e.of.some(n=>n.t==="undefined")){let n=e.of.filter(t=>t.t!=="undefined");return {type:s.union(n),hadUndefined:true}}return {type:e,hadUndefined:false}}var Me=e=>(+e).toString()===e;var On=(e,n)=>e.flags?.[n]??"req",J=(e,n)=>On(e,n)==="optional"?W(e.elements[n]):e.elements[n],Ge=e=>e.elements.map((n,t)=>J(e,t)),Pn=e=>e.flags?.[e.elements.length-1]==="rest",ae=e=>Pn(e)?e.elements.length-1:-1,de=e=>{if(!e.flags)return e.elements.length;let n=e.flags.findIndex(t=>t!=="req");return n<0?e.elements.length:n};function Mn(e,n,t,r=false){let o=ae(e),a=ae(n);if(!r&&de(e)<de(n))return false;if(a<0){if(o>=0)return false;let c=de(n);return e.elements.length<c||e.elements.length>n.elements.length?false:e.elements.every((f,y)=>t(J(e,y),J(n,y)))}let i=n.elements[a],u=c=>c<a?J(n,c):i;if(o<0)return e.elements.length<de(n)?false:e.elements.every((c,f)=>t(J(e,f),u(f)));if(o===0&&a!==0||o<de(n))return false;let l=e.elements[o];for(let c=0;c<o;c++)if(!t(J(e,c),u(c)))return false;for(let c=o;c<a;c++)if(!t(l,J(n,c)))return false;return t(l,i)}function S(e,n,t=new WeakSet){return gn(),Ct(e,n,t)}function Ct(e,n,t){if(e.t!=="keyof"&&e.t!=="index"&&e.t!=="mapped"&&e.t!=="intersection"&&e.t!=="returnType"&&e.t!=="parameters"&&!Lt(E(e),n))return e;switch(e.t){case "var":{let r=b(n,e.name);return r||Ze(e,n,t)}case "array":return {...e,items:S(e.items,n,t)};case "tuple":{let r=e.elements.map(o=>S(o,n,t));return {...e,elements:r}}case "union":return s.union(e.of.map(r=>S(r,n,t)));case "object":{if(t.has(e))return e;t.add(e);let r={};for(let a in e.props){let i=e.props[a];g(r,a,{type:S(i.type,n,t),optional:i.optional,...i.readonly?{readonly:true}:{}});}let o=e.index?{key:e.index.key,value:S(e.index.value,n,t),...e.index.readonly?{readonly:true}:{}}:void 0;return t.delete(e),o?{t:"object",props:r,index:o}:{t:"object",props:r}}case "fn":{if(t.has(e))return e;t.add(e);let r=Xe(e,n,t);return t.delete(e),r}case "overload":return {t:"overload",signatures:e.signatures.map(r=>Xe(r,n,t))};case "apply":return {t:"apply",name:e.name,args:e.args.map(r=>S(r,n,t))};case "keyof":return x({t:"keyof",of:S(e.of,n,t)});case "index":return x({t:"index",obj:S(e.obj,n,t),key:S(e.key,n,t)});case "mapped":{let r=en([s.typeParam(e.key)],n,E(e),t),o=e.over.t==="keyof"?{t:"keyof",of:S(e.over.of,n,t)}:S(e.over,n,t),a=e.modifiers??(e.over.t==="var"&&e.over.bound?.t==="keyof"?e.over.bound.of:void 0),i=e.typeVariable||e.over.t==="keyof"&&e.over.of.t==="var",u={t:"mapped",key:r.decls[0].name,over:o,body:S(e.body,r.inner,t),...Vt(e),...a?{modifiers:S(a,n,t)}:{},...i?{typeVariable:true}:{}};return me(u)??u}case "conditional":{if(e.check.t==="var"){let a=e.check.name,i=b(n,a),u=i?x(i):void 0,l=u?.t==="union"?u.of:u?.t==="boolean"?[s.literal(true),s.literal(false)]:null;if(l)return {t:"union",of:l.map(c=>S(e,{...n,[a]:c},t))}}let r=e.distributive||e.check.t==="var"&&se(n,e.check.name)&&b(n,e.check.name)?.t!=="var",o=e.infer?.length?en(e.infer,n,E(e),t):{inner:n,decls:void 0};return {t:"conditional",check:S(e.check,n,t),extends:S(e.extends,o.inner,t),then:S(e.then,o.inner,t),else:S(e.else,o.inner,t),...o.decls?{infer:o.decls}:{},...r?{distributive:true}:{}}}case "intersection":return L({of:e.of.map(r=>S(r,n,t))});case "returnType":return x({t:"returnType",fn:S(e.fn,n,t)});case "parameters":return x({t:"parameters",fn:S(e.fn,n,t)});default:return e}}function Ze(e,n,t,r=e.name){return !e.bound&&!e.default&&r===e.name?e:{...e,name:r,...e.bound?{bound:S(e.bound,n,t)}:{},...e.default?{default:S(e.default,n,t)}:{}}}function Xe(e,n,t,r){let o=e.typeParams?.length?en(e.typeParams,n,E(e),t,r):{inner:n,decls:void 0},a=o.inner;return {...e,params:e.params.map(i=>({...i,type:S(i.type,a,t)})),returns:S(e.returns,a,t),...e.guard?{guard:{...e.guard,type:S(e.guard.type,a,t)}}:{},...o.decls?{typeParams:o.decls}:{}}}function tn(e,n){return e.typeParams?.some(t=>n.has(t.name))?Xe(e,{},new WeakSet,n):e}function en(e,n,t,r,o=new Set){let a=new Set(e.map(m=>m.name)),i={},u=new Set;for(let m in n)if(!a.has(m)&&(g(i,m,n[m]),t.has(m)))for(let h of E(n[m]))u.add(h);let l=e.filter(m=>u.has(m.name)||o.has(m.name));if(l.length===0)return {inner:i,decls:e.map(m=>Ze(m,i,r))};let c=new Set([...a,...t,...u,...o]),f=new Map;for(let m of l){let h=1;for(;c.has(`${m.name}_${h}`);)h++;let P=`${m.name}_${h}`;c.add(P),f.set(m.name,P);}let y={};for(let[m,h]of f)g(y,m,{t:"var",name:h});let p={...i};for(let m of l){let h=f.get(m.name);g(p,m.name,{t:"var",name:h,...m.bound?{bound:S(m.bound,{...i,...y},r)}:{}});}return {inner:p,decls:e.map(m=>Ze(m,p,r,f.get(m.name)??m.name))}}var Rt=new Set,In=new WeakMap;function E(e){let n=In.get(e);if(n)return n;let t=new Set;v(e,t,new WeakSet);let r=t.size===0?Rt:t;return In.set(e,r),r}function nn(e,n,t){let r=new Set;t(r);for(let o of r)e.includes(o)||n.add(o);}function En(e,n,t){let r=e.typeParams??[];nn(r.map(o=>o.name),n,o=>{for(let a of r)v(a,o,t);for(let a of e.params)v(a.type,o,t);v(e.returns,o,t),e.guard&&v(e.guard.type,o,t);});}function v(e,n,t){switch(e.t){case "var":n.add(e.name),e.bound&&v(e.bound,n,t),e.default&&v(e.default,n,t);return;case "array":v(e.items,n,t);return;case "tuple":for(let r of e.elements)v(r,n,t);return;case "union":for(let r of e.of)v(r,n,t);return;case "object":if(t.has(e))return;t.add(e);for(let r in e.props)v(e.props[r].type,n,t);e.index&&v(e.index.value,n,t);return;case "fn":if(t.has(e))return;t.add(e),En(e,n,t);return;case "overload":for(let r of e.signatures)En(r,n,t);return;case "apply":for(let r of e.args)v(r,n,t);return;case "keyof":v(e.of,n,t);return;case "index":v(e.obj,n,t),v(e.key,n,t);return;case "mapped":v(e.over,n,t),e.modifiers&&v(e.modifiers,n,t),nn([e.key],n,r=>v(e.body,r,t));return;case "conditional":{v(e.check,n,t);let r=e.infer??[];nn(r.map(o=>o.name),n,o=>{for(let a of r)v(a,o,t);v(e.extends,o,t),v(e.then,o,t),v(e.else,o,t);});return}case "intersection":for(let r of e.of)v(r,n,t);return;case "returnType":case "parameters":v(e.fn,n,t);return;default:return}}function Lt(e,n){if(e.size===0)return false;for(let t of e)if(se(n,t))return true;return false}function Ie(e){let n=[];for(let a of e){let i=x(a);if(i.t!=="object")return null;n.push(i);}let t=new Set;for(let a of n)for(let i in a.props)t.add(i);let r={};for(let a of t){let i=[],u=true,l=false;for(let c of n){let f=b(c.props,a);f&&(i.push(f.type),f.optional||(u=false),f.readonly&&(l=true));}g(r,a,{type:L({of:i}),optional:u,...l?{readonly:true}:{}});}let o;for(let a of n)a.index&&(o=o?{key:o.key,value:L({of:[o.value,a.index.value]}),...o.readonly&&a.index.readonly?{readonly:true}:{}}:a.index);return o?{t:"object",props:r,index:o}:{t:"object",props:r}}function me(e,n=x,t=x){if(e.typeVariable&&e.over.t==="keyof"&&e.over.of.t!=="var"){let i=Ft(e,n(e.over.of),n,t);if(i!==void 0)return i}if(e.over.t==="keyof"){let i=n(e.over.of),u=i.t==="intersection"?Ie(i.of)??i:i;if(u.t==="object")return Je(e,u,Object.keys(u.props),u.index?.key,t);if(u.t==="any")return Je(e,void 0,[],"string",t)}let r=Wt(x(e.over));if(r===null)return null;let o=e.modifiers?n(e.modifiers):void 0,a=o?.t==="intersection"?Ie(o.of)??o:o;return Je(e,a?.t==="object"?a:void 0,r.names,r.index,t)}function Wt(e){let n=[],t;for(let r of e.t==="union"?e.of:[e])switch(r.t){case "literal":(typeof r.value=="string"||typeof r.value=="number")&&n.push(r.value);continue;case "string":case "any":t="string";continue;case "number":t!=="string"&&(t="number");continue;case "var":case "apply":case "keyof":case "index":case "mapped":case "conditional":case "returnType":case "parameters":case "typeQuery":return null;case "intersection":if(E(r).size>0)return null;continue;default:continue}return {names:n,index:t}}function Je(e,n,t,r,o){let a={};for(let u of t){let l=String(u),c=n?b(n.props,l):void 0,f=!!e.optional||!e.excludeOptional&&!!c?.optional,y=!!e.readonly||!e.excludeReadonly&&!!c?.readonly,p=S(e.body,{[e.key]:s.literal(u)});if(!f&&c?.optional){let m=o(p);if(Cn(m))return null;p=B(m).type;}g(a,l,{type:p,...f?{optional:true}:{},...y?{readonly:true}:{}});}if(r===void 0)return {t:"object",props:a};let i=S(e.body,{[e.key]:r==="number"?s.number:s.string});return {t:"object",props:a,index:{key:r,value:e.optional?W(i):i,...e.readonly?{readonly:true}:{}}}}var Cn=e=>e.t==="index"||e.t==="keyof"||e.t==="mapped"||e.t==="conditional"||e.t==="returnType"||e.t==="parameters"||e.t==="apply"||e.t==="typeQuery",Vt=e=>({...e.optional?{optional:true}:{},...e.readonly?{readonly:true}:{},...e.excludeOptional?{excludeOptional:true}:{},...e.excludeReadonly?{excludeReadonly:true}:{}});function Ft(e,n,t,r){let o=a=>e.readonly?true:e.excludeReadonly?false:!!a;switch(n.t){case "union":{let a=e.over.of;return s.union(n.of.map(i=>{let u={...e,over:{t:"keyof",of:i},body:ye(e.body,a,i)};return me(u,t,r)??u}))}case "array":{let a=$n(e,s.number,true,r);return a===null?null:s.array(a,o(n.readonly))}case "tuple":{let a=n.flags??n.elements.map(()=>"req"),i=[];for(let l=0;l<n.elements.length;l++){let c=$n(e,s.literal(String(l)),a[l]==="optional",r);if(c===null)return null;i.push(c);}let u=a.map(l=>l==="rest"?"rest":e.optional?"optional":e.excludeOptional?"req":l);return s.tuple(i,u,o(n.readonly))}case "string":case "number":case "boolean":case "literal":case "null":case "undefined":case "void":case "nonPrimitive":return n;default:return}}function ye(e,n,t){let r=new Map,o=a=>{if(a===n)return t;if(a===null||typeof a!="object")return a;let i=r.get(a);if(i!==void 0)return i;r.set(a,a);let u=false,l;if(Array.isArray(a)){let c=a.map(f=>{let y=o(f);return y!==f&&(u=true),y});l=u?c:a;}else {let c={};for(let f of Object.keys(a)){let y=b(a,f),p=o(y);p!==y&&(u=true),g(c,f,p);}l=u?c:a;}return r.set(a,l),l};return o(e)}function $n(e,n,t,r){let o=S(e.body,{[e.key]:n});if(e.optional)return W(o);if(e.excludeOptional&&t){let a=r(o);return Cn(a)?null:B(a).type}return o}function Rn(e){let n=e.length;for(;n>0&&e[n-1].default;)n--;return {min:n,max:e.length}}var Ln=(e,n)=>{let{min:t,max:r}=Rn(e);return n>=t&&n<=r};function Ee(e,n){let t={};return e.forEach((r,o)=>{o<n.length?g(t,r.name,n[o]):r.default&&g(t,r.name,S(r.default,t));}),t}function $(e,n){if(e.t!=="apply")return false;let t=b(n,e.name);return t!==void 0&&Ln(t.params,e.args.length)}function C(e,n){if(e.t!=="apply")return e;let t=b(n,e.name);return !t||!Ln(t.params,e.args.length)?e:S(t.body,Ee(t.params,e.args))}function M(e){switch(e.t){case "literal":return `#${typeof e.value}:${String(e.value)}`;case "object":{let n=Object.keys(e.props).sort().map(r=>`${r}${e.props[r].optional?"?":""}:${M(e.props[r].type)}`).join(","),t=e.index?`,[${e.index.key}]:${M(e.index.value)}`:"";return `{${n}${t}}`}case "array":return `[${M(e.items)}]`;case "tuple":return `#tuple(${e.elements.map(M).join(",")})`;case "union":return `(${e.of.map(M).sort().join("|")})`;case "fn":return `${e.typeParams?.length?`<${e.typeParams.map(t=>t.name).join(",")}>`:""}(${e.params.map(t=>M(t.type)).join(",")})=>${e.guard?`is${e.guard.param}:${M(e.guard.type)}`:M(e.returns)}`;case "var":return `v:${e.name}`;case "apply":return `${e.name}<${e.args.map(M).join(",")}>`;case "intersection":return `&(${e.of.map(M).sort().join("&")})`;case "returnType":return `RT<${M(e.fn)}>`;default:return e.t}}var rn=()=>F().maxInstantiationDepth;function j(e,n={},t=0){if(t>rn())return e;if(e.t==="var")return e.bound?j(e.bound,n,t+1):e;if($(e,n))return j(C(e,n),n,t+1);if(e.t==="mapped"){let r=on(e,n,t+1);if(r)return j(r,n,t+1)}if(e.t==="intersection")return L(e);if(e.t==="union"){let r=e.of.flatMap(a=>{let i=j(a,n,t+1);return i.t==="union"?i.of:[i]});return r.length===e.of.length&&r.every((a,i)=>a===e.of[i])?e:{t:"union",of:r}}return e}function on(e,n,t=0){let r=a=>j(a,n,t),o=a=>Z(a,n,t);return me(e,r,o)??me({...e,over:Se(e.over,n,t)},r,o)}function Se(e,n,t=0){if(t>rn())return e;let r=K(e,n);if(r!==e)return Se(r,n,t+1);if(e.t==="conditional"){let o=_(e,n);if(o)return Se(o,n,t+1)}return $(e,n)?Se(C(e,n),n,t+1):e.t==="union"?k(e.of.map(o=>Se(o,n,t+1))):e}function Z(e,n,t=0){if(t>rn())return e;let r=K(e,n);if(r!==e)return Z(r,n,t+1);let o=j(e,n,t);return o===e?e:Z(o,n,t+1)}function K(e,n={}){let t=x(e);if(t!==e)return t;switch(e.t){case "keyof":{let r=Z(e.of,n);return r===e.of?e:x({...e,of:r})}case "index":{let r=Z(e.obj,n),o=Z(e.key,n);return r===e.obj&&o===e.key?e:x({...e,obj:r,key:o})}case "returnType":{let r=Z(e.fn,n);return r===e.fn?e:x({...e,fn:r})}default:return e}}var $e=e=>typeof e=="string"?s.string:typeof e=="number"?s.number:s.boolean;function an(e){return e.t==="literal"&&e.fresh?$e(e.value):e}function Fn(e){if(e.t==="literal")return e.fresh?$e(e.value):e;if(e.t==="union"){let n=e.of.map(Fn);return n.some((t,r)=>t!==e.of[r])?k(n):e}return e}function Nn(e){if(e.t==="literal")return $e(e.value);if(e.t==="union"){let n=e.of.map(Nn);return n.some((t,r)=>t!==e.of[r])?k(n):e}return e}function Nt(e){return V(e,new WeakSet)}function At(e){switch(e.t){case "array":return {t:"array",items:V(e.items,new WeakSet),...e.readonly?{readonly:true}:{},...e.fromLiteral?{fromLiteral:true}:{}};case "tuple":return {t:"tuple",elements:e.elements.map(n=>V(n,new WeakSet)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{},...e.fromLiteral?{fromLiteral:true}:{}};case "object":return An(e,new WeakSet);case "fn":case "overload":return V(e,new WeakSet);default:return e}}function V(e,n){if(e.t==="literal")return e.fresh?$e(e.value):e;if(n.has(e))return e;switch(e.t){case "array":return n.add(e),{t:"array",items:V(e.items,n),...e.readonly?{readonly:true}:{},...e.fromLiteral?{fromLiteral:true}:{}};case "tuple":return n.add(e),{t:"tuple",elements:e.elements.map(t=>V(t,n)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{},...e.fromLiteral?{fromLiteral:true}:{}};case "object":return n.add(e),An(e,n);case "apply":return n.add(e),{t:"apply",name:e.name,args:e.args.map(t=>V(t,n))};case "fn":return n.add(e),{...e,params:e.params.map(t=>({...t,type:V(t.type,n)})),returns:V(e.returns,n),...e.guard?{guard:{param:e.guard.param,type:V(e.guard.type,n)}}:{}};case "overload":return n.add(e),{t:"overload",signatures:e.signatures.map(t=>V(t,n))};default:return e}}function An(e,n){let t={};for(let i in e.props)g(t,i,{type:V(e.props[i].type,n),optional:e.props[i].optional,...e.props[i].readonly?{readonly:true}:{}});let r=e.index?{key:e.index.key,value:V(e.index.value,n),...e.index.readonly?{readonly:true}:{}}:void 0,o=e.fromLiteral?{fromLiteral:true}:{},a=e.hasSpread?{hasSpread:true}:{};return r?{t:"object",props:t,index:r,...o,...a}:{t:"object",props:t,...o,...a}}function Bn(e){if(!e.siblings){let n=[];for(let t of Bn(e.parent)){if(t.t!=="object"||!t.fromLiteral)continue;let r=N(t.props,e.propertyName);r&&(r.type.t==="union"?n.push(...r.type.of):n.push(r.type));}e.siblings=n;}return e.siblings}function Bt(e){if(!e.propNames){let n=new Set;for(let t of Bn(e))if(t.t==="object"&&t.fromLiteral&&!t.hasSpread)for(let r in t.props)n.add(r);e.propNames=[...n];}return e.propNames}var _t=e=>e.t==="object"&&!e.index&&Object.keys(e.props).length===0;function Ut(e,n,t){let r={};for(let a in e.props){let i=e.props[a],u=X(i.type,n&&{parent:n,propertyName:a},t);g(r,a,u===i.type?i:{...i,type:u});}if(n)for(let a of Bt(n))N(r,a)||g(r,a,{type:s.undefined,optional:true});let o=e.index?{key:e.index.key,value:X(e.index.value,void 0,t),...e.index.readonly?{readonly:true}:{}}:void 0;return o?{t:"object",props:r,index:o}:{t:"object",props:r}}var Wn=new WeakMap;function ie(e,n){let t=Wn.get(e);if(t!==void 0)return t;if(n.has(e))return false;n.add(e);let r=false;switch(e.t){case "object":r=!!e.fromLiteral||Object.values(e.props).some(o=>ie(o.type,n))||!!e.index&&ie(e.index.value,n);break;case "array":r=!!e.fromLiteral||ie(e.items,n);break;case "tuple":r=!!e.fromLiteral||e.elements.some(o=>ie(o,n));break;case "union":case "intersection":r=e.of.some(o=>ie(o,n));break}return n.delete(e),Wn.set(e,r),r}var Vn=new WeakMap;function X(e,n,t){if(!ie(e,new WeakSet))return e;if(!n){let o=Vn.get(e);if(o)return o}if(t.has(e))return e;t.add(e);let r=Dt(e,n,t);return t.delete(e),n||Vn.set(e,r),r}function Dt(e,n,t){switch(e.t){case "object":return e.fromLiteral?Ut(e,n,t):e;case "union":{let r=n??{siblings:e.of},o=e.of.map(a=>a.t==="null"||a.t==="undefined"?a:X(a,r,t));return o.some(_t)?k(o):o.every((a,i)=>a===e.of[i])?e:s.union(o)}case "intersection":{let r=false,o=e.of.map(a=>{let i=X(a,void 0,t);return i!==a&&(r=true),i});return r?s.intersection(o):e}case "array":{let r=X(e.items,void 0,t);return r===e.items&&!e.fromLiteral?e:{t:"array",items:r,...e.readonly?{readonly:true}:{}}}case "tuple":{let r=false,o=e.elements.map(a=>{let i=X(a,void 0,t);return i!==a&&(r=true),i});return !r&&!e.fromLiteral?e:{t:"tuple",elements:o,...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{}}}default:return e}}function Ce(e){return X(e,void 0,new WeakSet)}var un=Object.freeze({t:"union",of:Object.freeze([])});function ee(e){if(e===un)return true;switch(e.t){case "array":return ee(e.items);case "tuple":return e.elements.some(ee);case "union":case "intersection":return e.of.some(ee);case "apply":return e.args.some(ee);case "object":return !!e.fromLiteral&&(Object.values(e.props).some(n=>ee(n.type))||!!e.index&&ee(e.index.value));default:return false}}var _n=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function zt(e,n){if(I(n,e))return e;if(I(e,n))return n;let t=_n(e),r=_n(n);return !t||!r||t===r?k([e,n]):null}var ue,Q=false;function Un(e){Q=!Q;try{return e()}finally{Q=!Q;}}function zn(e){let n=ue,t=Q,r=new Map;ue=r,Q=false;try{return {result:e(),candidates:r}}finally{ue=n,Q=t;}}var Dn=(e,n)=>{if(!ue)return;let t=ue.get(e);t||(t={co:[],contra:[]},ue.set(e,t)),(Q?t.contra:t.co).push(n);};function qt(e){if(e.length<=1)return [...e];let n=e.filter(Pe);return n.length?[...e.filter(t=>!Pe(t)),k(n)]:[...e]}function Kt(e){let n;for(let t of e){if(t.t!=="literal")return false;let r=typeof t.value;if(n===void 0)n=r;else if(r!==n)return false}return true}function Qt(e,n){if(e.length)return Kt(e)?k([...e]):e.reduce((t,r)=>I(t,r,n)?r:t)}function qn(e,n={}){let t=qt(e),r=t.filter(i=>i.t==="null"||i.t==="undefined"),o=t.filter(i=>i.t!=="null"&&i.t!=="undefined");if(!o.length)return Ce(k(t));let a=Qt(o,n);if(a!==void 0)return Ce(r.length?k([a,...r]):a)}function Kn(e,n={}){if(e.length)return e.reduce((t,r)=>I(r,t,n)?r:t)}function Qn(e,n={}){let t=e.co.length?qn(e.co,n):void 0;if(!e.contra.length)return t;let r=Kn(e.contra,n);if(r===void 0)return t;let o=t!==void 0&&t.t==="union"&&t.of.length===0;return t!==void 0&&!o&&I(t,r,n)?t:r}function ln(e,n){let{typeParams:t,...r}=e;return {...r,params:e.params.map(o=>({...o,type:S(o.type,n)})),returns:S(e.returns,n),...e.guard?{guard:{...e.guard,type:S(e.guard.type,n)}}:{}}}function ce(e){return e.typeParams?.length?ln(e,Object.fromEntries(e.typeParams.map(n=>[n.name,s.any]))):e}function Hn(e){let n=e.typeParams;if(!n?.length)return e;let t=Object.fromEntries(n.map(a=>[a.name,a.bound??s.unknown])),r=n.map(a=>a.bound??s.unknown);for(let a=0;a<n.length-1;a++)r=r.map(i=>S(i,t));let o=Object.fromEntries(n.map(a=>[a.name,s.any]));return r=r.map(a=>S(a,o)),ln(e,Object.fromEntries(n.map((a,i)=>[a.name,r[i]])))}function Yn(e,n,t={}){if(!e.some(o=>!b(n,o.name)||o.bound))return n;let r={...n};for(let o of e){let a=b(r,o.name)??(o.default?S(o.default,r):s.unknown);if(o.bound){let i=S(o.bound,r);I(a,i,t)||(a=i);}g(r,o.name,a);}return r}function cn(e,n,t={}){let r=e.typeParams??[],o=new Set(r.map(f=>f.name)),a=f=>Object.fromEntries(Object.entries(f??{}).filter(([y])=>o.has(y))),i={},u=Math.max(e.params.length,n.params.length);for(let f=0;f<u;f++){let y=le(e,f),p=le(n,f);y&&p&&(i=w(y,p,i)??i);}let c={...a(e.guard&&n.guard&&e.guard.param===n.guard.param?w(e.guard.type,n.guard.type,{}):w(e.returns,n.returns,{}))};for(let[f,y]of Object.entries(a(i)))g(c,f,y);return ln(e,Yn(r,c,t))}function w(e,n,t={}){if(n===un)return t;if(e.t==="var"){if(ee(n))return t;let r=b(t,e.name);if(!r)return Dn(e.name,n),{...t,[e.name]:n};if(n.t==="any"||n.t==="unknown")return t;Dn(e.name,n);let o=zt(r,n);return o?{...t,[e.name]:o}:t}if(n.t==="any"||n.t==="unknown")return t;switch(e.t){case "array":return n.t==="array"?w(e.items,n.items,t):null;case "tuple":{let r=e,o=ae(r);if(o<0){if(n.t!=="tuple"||n.elements.length!==r.elements.length)return null;let u=t;for(let l=0;l<r.elements.length;l++)u=w(r.elements[l],n.elements[l],u)??u;return u}let a=t,i=(u,l)=>{a=w(u,l,a)??a;};if(n.t==="tuple"){if(n.elements.length<o)return null;for(let l=0;l<o;l++)i(r.elements[l],n.elements[l]);let u=n.elements.slice(o);return a=w(r.elements[o],u.length?k(u):s.unknown,a)??a,a}if(n.t==="array"){for(let u=0;u<o;u++)i(r.elements[u],n.items);return a=w(r.elements[o],n.items,a)??a,a}return null}case "object":{if(n.t!=="object")return null;let r=t;for(let o in e.props){let a=e.props[o],i=b(n.props,o);if(!i){if(a.optional)continue;return null}r=w(a.type,i.type,r)??r;}return r}case "fn":{let r=n.t==="fn"?n:n.t==="overload"&&n.signatures.length?n.signatures[n.signatures.length-1]:null;if(!r)return null;let o=ce(e),a=Hn(r),i=w(o.returns,a.returns,t)??t,u=oe(a),l=oe(o),c=l.types.length-(l.rest?1:0),f=u.rest?c:Math.min(u.types.length,c);for(let p=0;p<f;p++){let m=Xn(u,p),h=et(o,p);m&&h&&(i=Un(()=>w(h,m,i))??i);}let y=l.rest;return y&&(i=Un(()=>w(y,fe(a,f),i))??i),o.guard&&a.guard&&(i=w(o.guard.type,a.guard.type,i)??i),i}case "union":{if(!e.of.some(l=>E(l).size>0))return I(n,e)?t:null;let r=e.of.filter(l=>l.t==="var"),o=n.t==="union"?n.of:[n],a=o.map(()=>false),i=t;for(let l of e.of)if(l.t!=="var")for(let c=0;c<o.length;c++){let f=w(l,o[c],i);f!==null&&(i=f,a[c]=true);}if(r.length!==1)return i;let u=o.filter((l,c)=>!a[c]);return u.length?w(r[0],k(u),i)??i:i}case "overload":{let r=n.t==="fn"?[n]:n.t==="overload"?n.signatures:[];if(!r.length)return I(n,e)?t:null;let o=e.signatures,a=Math.min(r.length,o.length),i=t;for(let u=0;u<a;u++)i=w(o[o.length-a+u],r[r.length-a+u],i)??i;return i}case "apply":{if(n.t!=="apply"||n.name!==e.name||n.args.length!==e.args.length)return null;let r=t;for(let o=0;o<e.args.length;o++)r=w(e.args[o],n.args[o],r)??r;return r}default:return I(n,e)?t:null}}var Gn="@rev",sn=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function U(e,n,t){if(e.t==="index"&&e.obj.t==="var"&&e.obj.name===n&&e.key.t==="var"&&e.key.name===t)return s.var(Gn);switch(e.t){case "array":return {t:"array",items:U(e.items,n,t)};case "tuple":return {t:"tuple",elements:e.elements.map(r=>U(r,n,t)),...e.flags?{flags:e.flags}:{}};case "union":return s.union(e.of.map(r=>U(r,n,t)));case "fn":return {...e,params:e.params.map(r=>({...r,type:U(r.type,n,t)})),returns:U(e.returns,n,t)};case "apply":return {t:"apply",name:e.name,args:e.args.map(r=>U(r,n,t))};case "returnType":return {t:"returnType",fn:U(e.fn,n,t)};case "object":{let r={};for(let o in e.props)g(r,o,{type:U(e.props[o].type,n,t),optional:e.props[o].optional,...e.props[o].readonly?{readonly:true}:{}});return e.index?{t:"object",props:r,index:{key:e.index.key,value:U(e.index.value,n,t),...e.index.readonly?{readonly:true}:{}}}:{t:"object",props:r}}default:return e}}function Ht(e,n,t){if(e.over.t!=="keyof"||e.over.of.t!=="var")return null;let r=e.over.of.name;if(b(t,r))return null;let o={};for(let a in n.props){let i=U(e.body,r,e.key),u=w(i,n.props[a].type,{}),l=u?b(u,Gn):void 0,c=n.props[a];g(o,a,{type:l?an(l):s.unknown,...c.optional&&!e.optional?{optional:true}:{},...c.readonly&&!e.readonly?{readonly:true}:{}});}return {...t,[r]:{t:"object",props:o}}}function Jn(e,n,t){let r=t;for(let o=0;o<e.length&&o<n.length;o++){let a=e[o].type,i=n[o];if(sn(a)&&i.t==="object"){let u=Ht(a,i,r);u&&(r=u);}}return r}function Yt(e,n,t={}){let{result:r,candidates:o}=zn(()=>{let i={};for(let u=0;u<e.params.length;u++){let l=e.params[u];if(l.variadic){for(let c=u;c<n.length;c++)if(i=w(l.type,n[c],i),i===null)return null;break}if(u>=n.length){if(l.optional)continue;return null}if(!sn(l.type)&&(i=w(l.type,n[u],i),i===null))return null}return Jn(e.params,n,i)});if(r===null)return null;let a=Zn(r,o,t);return {returns:S(e.returns,a),bindings:a}}function Zn(e,n,t){let r;for(let[o,a]of n){if(a.co.length<2&&!a.contra.length)continue;let i=Qn(a,t);i===void 0||i===b(e,o)||(r??(r={...e}),g(r,o,i));}return r??e}function Gt(e,n,t={}){let{result:r,candidates:o}=zn(()=>{let i={};for(let u=0;u<e.params.length&&u<n.length;u++){let l=e.params[u];if(sn(l.type))continue;let c=w(l.type,n[u],i);c!==null&&(i=c);}return Jn(e.params,n,i)}),a=Zn(r,o,t);return {returns:S(e.returns,a),bindings:a}}var Jt=(e,n)=>({vars:new Set((e??[]).map(t=>t.name)),slots:new Map,schemes:n,visited:new WeakMap,expansions:0}),Zt=e=>e.t==="array"?e.items:e.t==="tuple"?s.union([...e.elements]):void 0;function R(e,n,t,r){if(e.t==="var"&&r.vars.has(e.name)){let a=r.slots.get(e.name);a||r.slots.set(e.name,a={co:[],contra:[]}),(t?a.contra:a.co).push(n);return}if(n.t==="any"||n.t==="unknown")return;if(!(e.t==="apply"&&n.t==="apply"&&e.name===n.name&&n.args.length>0)){let a=$(n,r.schemes)?"actual":$(e,r.schemes)?"pattern":void 0;if(a){let i=r.visited.get(e);if(i?.has(n)||(i||r.visited.set(e,i=new WeakSet),i.add(n),r.expansions>=F().maxInstantiationDepth))return;r.expansions++;try{a==="actual"?R(e,C(n,r.schemes),t,r):R(C(e,r.schemes),n,t,r);}finally{r.expansions--;}return}}if(n.t==="union"&&e.t!=="union"){for(let a of n.of)R(e,a,t,r);return}switch(e.t){case "array":{let a=Zt(n);a&&R(e.items,a,t,r);return}case "tuple":{let a=e,i=ae(a);if(i<0){n.t==="tuple"&&n.elements.length===a.elements.length&&a.elements.forEach((l,c)=>R(l,n.elements[c],t,r));return}let u=a.elements[i];if(n.t==="tuple"){let l=n;if(l.elements.length<i)return;for(let c=0;c<l.elements.length;c++)R(c<i?a.elements[c]:u,l.elements[c],t,r);}else if(n.t==="array"){for(let l=0;l<i;l++)R(a.elements[l],n.items,t,r);R(u,n.items,t,r);}return}case "fn":case "overload":{let a=e.t==="fn"?[e]:e.signatures,i=n.t==="fn"?[n]:n.t==="overload"?n.signatures:[],u=Math.min(i.length,a.length);for(let l=0;l<u;l++)Xt(Hn(i[i.length-u+l]),ce(a[a.length-u+l]),t,r);return}case "object":if(n.t==="object")for(let a in e.props){let i=b(n.props,a);i&&R(e.props[a].type,i.type,t,r);}return;case "apply":n.t==="apply"&&n.name===e.name&&n.args.length===e.args.length&&e.args.forEach((a,i)=>R(a,n.args[i],t,r));return;default:return}}function Xt(e,n,t,r){let o=oe(e),a=oe(n),i=a.types.length-(a.rest?1:0),u=o.rest?i:Math.min(o.types.length,i);for(let l=0;l<u;l++){let c=Xn(o,l),f=et(n,l);c&&f&&R(f,c,!t,r);}a.rest&&R(a.rest,fe(e,u),!t,r),e.guard&&n.guard?R(n.guard.type,e.guard.type,t,r):R(n.returns,e.returns,t,r);}var Xn=(e,n)=>n<e.types.length?e.types[n]:e.rest?e.types[e.types.length-1]:void 0,et=(e,n)=>{let t=e.params[n];return t&&!t.variadic?t.type:le(e,n)};function er(e,n,t){let r=new Map,o=(l,c)=>r.set(l,[...r.get(l)??[],c]),a=l=>l?.t==="var"&&n.has(l.name),i=l=>{if(Array.isArray(l))return l.forEach(i);if(!l||typeof l!="object")return;let c=l;if(c.t==="fn")for(let f of c.params)f.variadic&&a(f.type)&&o(f.type.name,s.array(s.unknown));if(c.t==="apply"){let f=b(t,c.name);f&&c.args.forEach((y,p)=>{let m=f.params[p]?.bound;if(!a(y)||!m)return;let h=S(m,Ee(f.params,c.args));h.t==="var"&&h.name===y.name||o(y.name,h);});}for(let f of Object.keys(c))i(b(c,f));};i(e);let u=new Map;for(let[l,c]of r)u.set(l,c.length===1?c[0]:s.intersection(c));return u}function pn(e,n={}){let t=Jt(e.infer,n);R(e.extends,e.check,false,t);let r=er(e.extends,t.vars,n),o={};for(let a of e.infer??[]){let i=t.slots.get(a.name),u=i?.co.length?k(i.co):i?.contra.length?s.intersection(i.contra):void 0,l=a.bound??r.get(a.name);l&&(!u||!I(u,l,n))&&(u=l),g(o,a.name,u??s.unknown);}return o}function nt(e,n={},t=0){if(!e.infer?.length)return null;let r=fn(e,n,u=>nt(u,n,t));if(r!==void 0)return r;if(E(e.check).size>0)return null;let o=pn(e,n),a=new WeakSet,i=Re(S(e.extends,o),n,a,t);return We(Le(e.check,i,n),()=>Re(S(e.then,o),n,a,t),()=>Re(S(e.else,o),n,a,t))}function Re(e,n={},t=new WeakSet,r=0,o=new Set){let a=r,i=F().maxTypeDepth,u=new Set,l=(p,m)=>m?.length?new Set([...p,...m.map(h=>h.name)]):p,c=(p,m)=>({...p,...p.bound?{bound:y(p.bound,m)}:{},...p.default?{default:y(p.default,m)}:{}}),f=(p,m)=>{let h=l(m,p.typeParams);return {...p,params:p.params.map(P=>({...P,type:y(P.type,h)})),returns:y(p.returns,h),...p.guard?{guard:{...p.guard,type:y(p.guard.type,h)}}:{},...p.typeParams?{typeParams:p.typeParams.map(P=>c(P,h))}:{}}},y=(p,m=u)=>{switch(p.t){case "var":return m.has(p.name)?c(p,m):s.unknown;case "array":return {...p,items:y(p.items,m)};case "tuple":return {...p,elements:p.elements.map(h=>y(h,m))};case "union":return s.union(p.of.map(h=>y(h,m)));case "object":{if(t.has(p))return p;t.add(p);let h={};for(let ve in p.props){let Ue=p.props[ve];g(h,ve,{type:y(Ue.type,m),optional:Ue.optional,...Ue.readonly?{readonly:true}:{}});}let P=p.index?{key:p.index.key,value:y(p.index.value,m),...p.index.readonly?{readonly:true}:{}}:void 0;return t.delete(p),P?{t:"object",props:h,index:P}:{t:"object",props:h}}case "fn":{if(t.has(p))return p;t.add(p);let h=f(p,m);return t.delete(p),h}case "overload":return {t:"overload",signatures:p.signatures.map(h=>f(h,m))};case "apply":{if($(p,n)){let h=C(p,n);if(h.t==="conditional"){if(a>=i)throw new H;a++;try{let P=y(h,m);if(P.t!=="conditional")return P}finally{a--;}}}return {t:"apply",name:p.name,args:p.args.map(h=>y(h,m))}}case "conditional":{let h=p.infer?.length?nt(p,n,a):_(p,n);if(h)return y(h,m);let P=l(m,p.infer);return {t:"conditional",check:y(p.check,m),extends:y(p.extends,P),then:y(p.then,P),else:y(p.else,P),...p.infer?{infer:p.infer.map(ve=>c(ve,P))}:{},...p.distributive?{distributive:true}:{}}}case "intersection":return L({of:p.of.map(h=>y(h,m))});case "returnType":return x({t:"returnType",fn:y(p.fn,m)});default:return p}};return y(e,o)}var nr=s.object({}),mn=(e,n,t="assignable")=>({seen:new WeakMap,exp:new Set,schemes:e,relation:t,assumed:0,explain:n,sourceStack:[],targetStack:[]}),dn=0;function T(e,n,t){return e.explain?.out.push({path:[...e.explain.path],actual:n,expected:t,kind:"type"}),false}function yn(e,n,t=0){if(t>F().maxInstantiationDepth)return e;if($(e,n)){let r=C(e,n);if(r.t!=="conditional")return e;let o=_(r,n);return o?yn(o,n,t+1):e}if(e.t==="conditional"){let r=_(e,n);return r?yn(r,n,t+1):e}return e}function tr(e,n,t={}){let r=[];return !d(e,n,mn(t,{path:[],out:r}))&&r.length===0&&r.push({path:[],actual:e,expected:n,kind:"type"}),r}var rr=new WeakMap,or=new WeakMap;function st(e,n,t,r,o){if(e===n)return true;if(Object.keys(t).length>0)return d(e,n,mn(t,void 0,r));let a=o.get(e)?.get(n);if(a!==void 0)return a;let i=d(e,n,mn(t,void 0,r)),u=o.get(e);return u||o.set(e,u=new WeakMap),u.set(n,i),i}function I(e,n,t={}){return st(e,n,t,"assignable",rr)}function ar(e,n,t={}){return st(e,n,t,"comparable",or)}function pt(e,n,t={}){return I(e,n,t)&&I(n,e,t)}function _(e,n){let t=fn(e,n,r=>_(r,n));if(t!==void 0)return t;if(e.infer?.length){if(E(e.check).size>0)return null;let r=yn(e.check,n),o=pn({...e,check:r},n);return We(Le(r,S(e.extends,o),n),()=>S(e.then,o),()=>S(e.else,o))}return E(e.check).size>0||E(e.extends).size>0?null:We(Le(e.check,e.extends,n),()=>e.then,()=>e.else)}function Le(e,n,t){let r=j(n,t);return r.t==="any"||r.t==="unknown"?"then":j(e,t).t==="any"?"both":I(e,n,t)?"then":"else"}var We=(e,n,t)=>e==="then"?n():e==="else"?t():s.union([n(),t()]);function fn(e,n,t){if(!e.distributive)return;let r=j(e.check,n),o=r.t==="union"?r.of:r.t==="boolean"?[s.literal(true),s.literal(false)]:void 0;if(!o)return;let a=[];for(let i of o){let u=t({t:"conditional",check:i,extends:ye(e.extends,e.check,i),then:ye(e.then,e.check,i),else:ye(e.else,e.check,i),...e.infer?{infer:e.infer}:{}});if(u===null)return null;a.push(u);}return s.union(a)}var tt=(e,n)=>on(e,n.schemes);function Fe(e,n,t,r){if(!t.explain)return d(e,n,t);t.explain.path.push(r);try{return d(e,n,t)}finally{t.explain.path.pop();}}function d(e,n,t){if(dn>=F().maxTypeDepth)throw new H;dn++;try{if(e.t==="any"||n.t==="any"||n.t==="unknown")return !0;if(e.t==="unknown")return t.relation==="comparable"?!0:T(t,e,n);let r=K(e,t.schemes);if(r!==e)return d(r,n,t);let o=K(n,t.schemes);if(o!==n)return d(e,o,t);if(n.t==="mapped"&&he(n))return sr(e,n,t);if(e.t==="mapped"&&he(e)&&n.t==="var")return pr(e,n,t);if(e.t==="mapped"){let i=tt(e,t);if(i)return d(i,n,t)}if(n.t==="mapped"){let i=tt(n,t);if(i)return d(e,i,t)}if(e.t==="conditional"){let i=_(e,t.schemes);if(i)return d(i,n,t)}if(n.t==="conditional"){let i=_(n,t.schemes);if(i)return d(e,i,t)}if(t.relation==="comparable"&&Sr(n,e))return !0;if(n.t==="intersection")return n.of.every(i=>d(e,i,t));if(e.t==="intersection"&&n.t!=="union"){if(ur(e.of,n,t))return !0;if(n.t==="object"){let i=Ie(e.of);if(i)return d(i,n,t)}return !1}if(!(e.t==="apply"&&n.t==="apply"&&e.name===n.name&&e.args.length===n.args.length)&&($(e,t.schemes)||$(n,t.schemes))){let i=`${M(e)}\u2264${M(n)}`;if(t.exp.has(i))return !0;if(ot(e,t.sourceStack)&&ot(n,t.targetStack))return t.assumed++,!0;t.exp.add(i),t.sourceStack.push(e),t.targetStack.push(n);let u=d(C(e,t.schemes),C(n,t.schemes),t);return t.sourceStack.pop(),t.targetStack.pop(),t.exp.delete(i),u}return ir(e,n,t)}finally{dn--;}}var rt=5;function ot(e,n){if(n.length<rt||e.t!=="apply")return false;let t=0;for(let r of n)if(r.t==="apply"&&r.name===e.name&&++t>=rt)return true;return false}function ir(e,n,t){let r=t.seen.get(e);if(r?.has(n))return t.assumed++,true;r||(r=new WeakSet,t.seen.set(e,r)),r.add(n);let o=t.assumed,a=lr(e,n,t);return (!a||t.assumed!==o)&&r.delete(n),a}function ur(e,n,t){let r=t.intersectionSource,o=t.explain;t.intersectionSource=true,t.explain=void 0;try{return e.some(a=>d(a,n,t))}finally{t.intersectionSource=r,t.explain=o;}}function lr(e,n,t){if(e.t==="union")return t.relation==="comparable"?e.of.length===0||e.of.some(r=>d(r,n,t)):e.of.every(r=>d(r,n,t));if(e.t==="boolean"&&n.t==="union")return t.relation==="comparable"?d(s.literal(true),n,t)||d(s.literal(false),n,t):d(s.literal(true),n,t)&&d(s.literal(false),n,t);if(e.t==="conditional")return cr(e,n,t);if(n.t==="union")return hr(e,n,t);if(e.t==="var"&&!(n.t==="var"&&n.name===e.name))return e.bound?d(e.bound,n,t):T(t,e,n);if(e.t==="nonPrimitive"&&n.t!=="nonPrimitive")return n.t==="object"&&n.index?T(t,e,n):d(nr,n,t);if(lt(e)&&lt(n))return kr(e,n,t);if(n.t==="overload")return n.signatures.every(r=>d(e,r,t));switch(n.t){case "literal":return e.t==="literal"&&e.value===n.value?true:T(t,e,n);case "string":case "number":case "boolean":case "null":case "undefined":return e.t===n.t||e.t==="literal"&&ft(e.value)===n.t?true:T(t,e,n);case "void":return e.t==="void"||e.t==="undefined"?true:T(t,e,n);case "nonPrimitive":return e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="fn"||e.t==="overload"||e.t==="apply"||e.t==="nonPrimitive"?true:T(t,e,n);case "array":return e.t==="array"?e.readonly&&!n.readonly?T(t,e,n):d(e.items,n.items,t):e.t==="tuple"?e.readonly&&!n.readonly?T(t,e,n):Ge(e).every((r,o)=>Fe(r,n.items,t,o)):T(t,e,n);case "tuple":{if(e.t!=="tuple"||e.readonly&&!n.readonly)return T(t,e,n);if(!e.flags&&!n.flags){if(e.elements.length!==n.elements.length)return T(t,e,n);for(let r=0;r<e.elements.length;r++)if(!Fe(e.elements[r],n.elements[r],t,r))return false;return true}return Mn(e,n,(r,o)=>d(r,o,t),t.relation==="comparable")}case "object":if(e.t==="object")return xr(e,n,t);if(Object.keys(n.props).length===0&&!n.index)return e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:T(t,e,n);if((e.t==="array"||e.t==="tuple")&&n.index){let r=e.t==="array"?[e.items]:Ge(e);return n.index.key==="number"&&Object.values(n.props).every(o=>o.optional)&&r.every(o=>d(o,n.index.value,t))?true:T(t,e,n)}return T(t,e,n);case "fn":return e.t==="fn"?Ve(e,n,t):T(t,e,n);case "var":return e.t==="var"&&e.name===n.name;case "typeQuery":return e.t==="typeQuery"&&e.path.length===n.path.length&&e.path.every((r,o)=>r===n.path[o]);case "keyof":return e.t==="keyof"&&d(e.of,n.of,t)&&d(n.of,e.of,t);case "index":return e.t==="index"&&d(e.obj,n.obj,t)&&d(n.obj,e.obj,t)&&d(e.key,n.key,t)&&d(n.key,e.key,t);case "mapped":return e.t==="mapped"&&e.key===n.key&&!!e.optional==!!n.optional&&d(e.over,n.over,t)&&d(n.over,e.over,t)&&d(e.body,n.body,t)&&d(n.body,e.body,t);case "conditional":return T(t,e,n);case "apply":return e.t==="apply"&&e.name===n.name&&e.args.length===n.args.length&&e.args.every((r,o)=>d(r,n.args[o],t));case "returnType":return e.t==="returnType"&&d(e.fn,n.fn,t)&&d(n.fn,e.fn,t);case "parameters":return e.t==="parameters"&&d(e.fn,n.fn,t)&&d(n.fn,e.fn,t)}}var ft=e=>typeof e;function cr(e,n,t){return n.t==="conditional"&&d(e.check,n.check,t)&&d(n.check,e.check,t)&&d(e.extends,n.extends,t)&&d(n.extends,e.extends,t)&&d(e.then,n.then,t)&&d(e.else,n.else,t)?true:d(yr(e),n,t)}var he=e=>E(e.over).size>0;function sr(e,n,t){if(e.t==="mapped"&&he(e)&&fr(e,n,t)||n.optional&&dr(e))return true;if(!n.excludeOptional){let r=n.body;if(r.t==="index"&&r.key.t==="var"&&r.key.name===n.key&&pt(r.obj,e,t.schemes))return true;if(!(e.t==="mapped"&&he(e))){let o=s.keyof(e),a=n.optional?s.intersection([n.over,o]):d(n.over,o,t)?n.over:null;if(a!==null&&!mr(a)&&d(s.index(e,a),S(r,{[n.key]:a}),t))return true}}return T(t,e,n)}function pr(e,n,t){return !e.optional&&d(s.keyof(n),e.over,t)&&d(e.body,s.index(n,s.var(e.key)),t)?true:T(t,e,n)}function fr(e,n,t){return t.relation!=="comparable"&&it(e)>it(n)?false:d(n.over,e.over,t)&&d(S(e.body,{[e.key]:s.var(n.key)}),n.body,t)}var at=e=>e.excludeOptional?-1:e.optional?1:0;function it(e){let n=at(e);if(n!==0)return n;let t=e.over.t==="keyof"?e.over.of:e.modifiers;return t?.t==="mapped"&&he(t)?at(t):0}var dr=e=>e.t==="object"&&Object.keys(e.props).length===0&&!e.index,mr=e=>e.t==="union"&&e.of.length===0,yr=e=>e.then.t==="any"?e.else:e.else.t==="any"?e.then:s.union([e.then,e.else]);function Sr(e,n){switch(n.t){case "string":case "number":case "boolean":case "null":case "undefined":return e.t===n.t||e.t==="literal"&&ft(e.value)===n.t;case "literal":return e.t==="literal"&&e.value===n.value;case "void":return e.t==="void"||e.t==="undefined";default:return false}}function hr(e,n,t){let r=t.explain;if(!r)return n.of.some(i=>d(e,i,t));t.explain=void 0;let o;try{o=n.of.some(i=>d(e,i,t));}finally{t.explain=r;}if(o)return true;let a=gr(e,n,t);return a?d(e,a,t):T(t,e,n)}function gr(e,n,t){if(e.t!=="object")return null;let r=n.of.map(o=>j(o,t.schemes));for(let o in e.props){let a=e.props[o].type;if(a.t!=="literal")continue;let i=t.explain;t.explain=void 0;let u;try{u=n.of.filter((l,c)=>{let f=r[c];if(f.t!=="object")return !1;let y=N(f.props,o);return !!y&&d(a,y.type,t)});}finally{t.explain=i;}if(u.length===1)return u[0]}return null}function xr(e,n,t){let r=false;for(let o in n.props)if(!(n.props[o].optional||N(e.props,o))){if(!t.explain)return false;t.explain.out.push({path:[...t.explain.path,o],expected:n.props[o].type,kind:"missing"}),r=true;}if(r)return false;for(let o in n.props){let a=n.props[o],i=N(e.props,o);if(!i)continue;if(i.optional&&!a.optional&&t.relation==="assignable")return false;let u=a.optional?B(i.type).type:i.optional?k([i.type,s.undefined]):i.type;if(!Fe(u,a.type,t,o))return false}return !(n.index&&!vr(e,n.index,t))}function vr(e,n,t){if(t.intersectionSource){if(!e.index)return false}else {let r=n.key==="number";for(let o in e.props){if(r&&!Me(o))continue;let a=e.props[o],i=a.optional?W(a.type):a.type;if(!Fe(i,n.value,t,o))return false}}return !e.index||d(e.index.value,n.value,t)}var dt=e=>{let n=e.params[e.params.length-1];return n?.variadic?n:void 0},br=e=>{let n=e.params.findIndex(t=>t.optional||t.variadic);return n<0?e.params.length:n};function le(e,n){let t=dt(e),r=t?e.params.length-1:e.params.length;if(n<r)return e.params[n].type;if(!t)return;let o=t.type;if(o.t==="array")return o.items;if(o.t==="tuple"&&!o.flags)return o.elements[n-r]}var ut=(e,n)=>{let t=le(e,n);return t===void 0?t:e.params[n]?.optional?W(t):t},lt=e=>e.t==="fn"||e.t==="overload";function kr(e,n,t){let r=e.t==="overload"?e.signatures:[e],o=n.t==="overload"?n.signatures:[n];return r.length===1&&o.length===1?ct(r[0],o[0],t,t.relation==="comparable"):o.every(a=>r.some(i=>ct(i,a,t,true)))}function ct(e,n,t,r){if(r)return Ve(ce(e),ce(n),t);let o=tn(n,E(e));return e.typeParams?.length?Ve(cn(e,o,t.schemes),o,t):Ve(e,o,t)}function Ve(e,n,t){if(n.returns.t!=="void"&&n.returns.t!=="any"&&!d(e.returns,n.returns,t)||!dt(n)&&br(e)>n.params.length)return false;let r=Math.max(e.params.length,n.params.length);for(let o=0;o<r;o++){let a=ut(e,o),i=ut(n,o);if(a&&i&&!d(i,a,t))return false}return !(n.guard&&(!e.guard||e.guard.param!==n.guard.param||!d(e.guard.type,n.guard.type,t)))}var wr=e=>e.t==="object"&&!e.index&&Object.values(e.props).every(n=>n.optional);function k(e){let n=[];for(let o of e)o.t==="union"?n.push(...o.of):n.push(o);let t=F().maxUnionMembers;if(n.length>t)throw new Y(n.length,t);if(n.some(o=>o.t==="any"))return s.any;let r=[...n];for(let o=r.length-1;o>=0;o--){let a=r[o];r.some((u,l)=>l!==o&&!wr(u)&&I(a,u)&&(l<o||!I(u,a)))&&r.splice(o,1);}if(r.some(o=>o.t==="literal"&&o.value===true)&&r.some(o=>o.t==="literal"&&o.value===false)){let o=r.filter(a=>!(a.t==="boolean"||a.t==="literal"&&typeof a.value=="boolean"));o.push(s.boolean),r.length=0,r.push(...o);}return r.length===1?r[0]:{t:"union",of:r}}function Tr(e,n){let t=new Set,r=new WeakSet,o=a=>{if(!r.has(a))switch(r.add(a),a.t){case "keyof":t.add("keyof"),o(a.of);break;case "index":t.add("indexed"),o(a.obj),o(a.key);break;case "mapped":t.add("mapped"),o(a.over),o(a.body);break;case "conditional":t.add("conditional"),a.infer?.length&&t.add("infer"),a.infer?.forEach(o),o(a.check),o(a.extends),o(a.then),o(a.else);break;case "returnType":case "parameters":o(a.fn);break;case "tuple":t.add("tuple"),a.elements.forEach(o);break;case "intersection":t.add("intersection"),a.of.forEach(o);break;case "overload":t.add("overload");for(let i of a.signatures){i.typeParams?.forEach(o);for(let u of i.params)o(u.type);o(i.returns),i.guard&&o(i.guard.type);}break;case "object":for(let i in a.props)o(a.props[i].type);a.index&&o(a.index.value);break;case "array":o(a.items);break;case "union":a.of.forEach(o);break;case "fn":a.typeParams?.forEach(o);for(let i of a.params)o(i.type);o(a.returns),a.guard&&o(a.guard.type);break;case "var":a.bound&&o(a.bound),a.default&&o(a.default);break;case "apply":n&&a.name===n&&t.add("recursion"),a.args.forEach(o);break}};return o(e),t}var jr=s.union([]);function mt(e,n){return Ne(e,n,new WeakMap)}function Or(e){return e.reduce(mt,jr)}function Ne(e,n,t){if(e.t==="any"||n.t==="any")return s.any;if(e===n)return e;let r=t.get(e)?.get(n);if(r)return r;if(e.t==="object"&&n.t==="object")return Pr(e,n,t);if(e.t==="array"&&n.t==="array"){let o={t:"array",items:s.unknown};return yt(t,e,n,o),o.items=Ne(e.items,n.items,t),o}return k([e,n])}function Pr(e,n,t){let r={t:"object",props:{}};yt(t,e,n,r);for(let o in e.props){let a=e.props[o],i=b(n.props,o);if(i){let u=Ne(a.type,i.type,t);g(r.props,o,{type:u,...a.optional||i.optional?{optional:true}:{},...a.readonly||i.readonly?{readonly:true}:{}});}else g(r.props,o,{type:a.type,optional:true,...a.readonly?{readonly:true}:{}});}for(let o in n.props){if(se(e.props,o))continue;let a=n.props[o];g(r.props,o,{type:a.type,optional:true,...a.readonly?{readonly:true}:{}});}return e.index&&n.index&&e.index.key===n.index.key&&(r.index={key:e.index.key,value:Ne(e.index.value,n.index.value,t),...e.index.readonly||n.index.readonly?{readonly:true}:{}}),r}function yt(e,n,t,r){let o=e.get(n);o||(o=new WeakMap,e.set(n,o)),o.set(t,r);}var Mr=4;function Ir(e,n={}){return ge(e,n,0)}function ge(e,n,t){let r=j(K(e,n),n);switch(r.t){case "string":return "";case "number":return 0;case "boolean":return false;case "null":return null;case "literal":return r.value;case "array":return [];case "tuple":{let o=[];for(let a=0;a<r.elements.length&&(r.flags?.[a]??"req")==="req";a++)o.push(ge(r.elements[a],n,t));return o}case "object":{if(t>=Mr)return {};let o={};for(let a of Object.keys(r.props)){let i=r.props[a];i.optional||g(o,a,ge(i.type,n,t+1));}return o}case "nonPrimitive":return {};case "union":{if(r.of.some(a=>a.t==="null"))return null;let o=r.of.find(a=>a.t!=="undefined");return o===void 0?null:ge(o,n,t)}case "intersection":{let o=r.of.map(i=>ge(i,n,t));if(!o.every(Er))return null;let a={};for(let i of o)for(let u of Object.keys(i))g(a,u,i[u]);return a}default:return null}}var Er=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);var $r=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e),Cr={check:new Set(["function","conditional"]),extends:new Set(["conditional"]),union:new Set(["function","conditional","union","intersection"]),intersection:new Set(["function","conditional","union","intersection"]),operand:new Set(["function","conditional","union","intersection"]),postfix:new Set(["function","conditional","union","intersection","operator","query"])},St=(e,n)=>Cr[e].has(n);function _e(e,n=new WeakSet){return O(e,{seen:n,infer:new Map})}function Rr(e){return Ae(e,{seen:new WeakSet,infer:new Map})}function hn(e,n){switch(e.t){case "fn":return "function";case "overload":return e.signatures.length===1?"function":"primary";case "conditional":return "conditional";case "union":return e.of.length===0?"primary":e.of.length===1?hn(e.of[0],n):"union";case "intersection":return e.of.length===1?hn(e.of[0],n):"intersection";case "keyof":return "operator";case "array":case "tuple":return e.readonly?"operator":"primary";case "typeQuery":return "query";case "var":{let t=n.infer.get(e.name);return t?t.bound?"conditional":"operator":"primary"}default:return "primary"}}function z(e,n,t){let r=O(n,t);return St(e,hn(n,t))?`(${r})`:r}function Ae(e,n){return e.map((t,r)=>{let o=O(t,n);return r===0&&Lr(t)?`(${o})`:o}).join(", ")}var Lr=e=>e.t==="fn"&&!!e.typeParams?.length||e.t==="overload"&&e.signatures.length===1&&!!e.signatures[0].typeParams?.length;function Wr(e,n){return e?.length?`<${e.map(t=>Vr(t,n)).join(", ")}>`:""}function Vr(e,n){let t=e.bound?` extends ${O(e.bound,n)}`:"",r=e.default?` = ${O(e.default,n)}`:"";return `${e.name}${t}${r}`}function Be(e,n){if(!n.some(r=>e.infer.has(r)))return e;let t=new Map(e.infer);for(let r of n)t.delete(r);return {...e,infer:t}}function Sn(e,n,t){let r=Be(t,(e.typeParams??[]).map(u=>u.name)),o=e.params.map(u=>{let l=u.variadic?"...":"",c=u.optional&&!u.variadic?"?":"";return `${l}${u.name}${c}: ${O(u.type,r)}`}).join(", "),a=e.guard?`${e.params[e.guard.param]?.name??`arg${e.guard.param}`} is ${O(e.guard.type,r)}`:O(e.returns,r),i=Wr(e.typeParams,r);return n==="=>"?`${i}(${o}) => ${a}`:`${i}(${o}): ${a}`}function O(e,n){let{seen:t}=n;switch(e.t){case "any":case "unknown":case "string":case "number":case "boolean":case "null":case "undefined":case "void":return e.t;case "nonPrimitive":return "object";case "var":{let r=n.infer.get(e.name);return r?r.bound?`infer ${e.name} extends ${O(r.bound,Be(n,[e.name]))}`:`infer ${e.name}`:e.name}case "typeQuery":return `typeof ${e.path.join(".")}`;case "literal":return typeof e.value=="string"?JSON.stringify(e.value):String(e.value);case "array":{let r=`${z("postfix",e.items,n)}[]`;return e.readonly?`readonly ${r}`:r}case "tuple":{let o=`[${e.elements.map((a,i)=>{let u=e.flags?.[i]??"req";return u==="rest"?`...${z("postfix",a,n)}[]`:u==="optional"?`${z("postfix",a,n)}?`:O(a,n)}).join(", ")}]`;return e.readonly?`readonly ${o}`:o}case "union":{if(e.of.length===0)return "never";if(e.of.length===1)return O(e.of[0],n);if(t.has(e))return "\u2026";t.add(e);let r=e.of.map(o=>z("union",o,n)).join(" | ");return t.delete(e),r}case "intersection":{if(e.of.length===1)return O(e.of[0],n);if(t.has(e))return "\u2026";t.add(e);let r=e.of.map(o=>z("intersection",o,n)).join(" & ");return t.delete(e),r}case "object":{if(t.has(e))return "\u2026";t.add(e);let r=Object.entries(e.props).map(([o,a])=>{let i=$r(o)?o:JSON.stringify(o);return `${a.readonly?"readonly ":""}${i}${a.optional?"?":""}: ${O(a.type,n)}`});return e.index&&r.push(`${e.index.readonly?"readonly ":""}[k: ${e.index.key}]: ${O(e.index.value,n)}`),t.delete(e),r.length===0?"{}":`{ ${r.join("; ")} }`}case "fn":{if(t.has(e))return "\u2026";t.add(e);let r=Sn(e,"=>",n);return t.delete(e),r}case "overload":{if(e.signatures.length===1)return Sn(e.signatures[0],"=>",n);if(t.has(e))return "\u2026";t.add(e);let r=e.signatures.map(o=>Sn(o,":",n));return t.delete(e),`{ ${r.join("; ")} }`}case "apply":{if(e.args.length===0)return e.name;if(t.has(e))return "\u2026";t.add(e);let r=`${e.name}<${Ae(e.args,n)}>`;return t.delete(e),r}case "keyof":return `keyof ${z("operand",e.of,n)}`;case "index":return `${z("postfix",e.obj,n)}[${O(e.key,n)}]`;case "mapped":{if(t.has(e))return "\u2026";t.add(e);let r=e.readonly?"readonly ":e.excludeReadonly?"-readonly ":"",o=e.optional?"?":e.excludeOptional?"-?":"",a=Be(n,[e.key]),i=`{ ${r}[${e.key} in ${O(e.over,n)}]${o}: ${O(e.body,a)} }`;return t.delete(e),i}case "conditional":{if(t.has(e))return "\u2026";t.add(e);let r=e.infer??[],o=r.length?{...n,infer:new Map([...n.infer,...r.map(u=>[u.name,u])])}:n,a=Be(n,r.map(u=>u.name)),i=`${z("check",e.check,n)} extends ${z("extends",e.extends,o)} ? ${O(e.then,a)} : ${O(e.else,a)}`;return t.delete(e),i}case "returnType":return `ReturnType<${Ae([e.fn],n)}>`;case "parameters":return `Parameters<${Ae([e.fn],n)}>`}}function ht(e){if(e.length===0)return "value";let n=e[e.length-1];if(typeof n=="number"){let t=e.slice(0,-1);return t.length?`property '${t.join(".")}' at position ${n}`:`position ${n}`}return `property '${e.join(".")}'`}function Fr(e){let n=e.filter(t=>t.kind==="missing");if(n.length&&n.length===e.length){let t=n.map(r=>`'${r.path.join(".")}'`).join(", ");return n.length===1?`property ${t} is missing`:`properties ${t} are missing`}return e.map(t=>t.actual===void 0?`${ht(t.path)} is missing`:`${ht(t.path)}: expected '${_e(t.expected)}', got '${_e(t.actual)}'`).join("; ")}function ne(e,n=new WeakSet){switch(e.t){case "string":case "number":case "boolean":case "null":case "literal":return true;case "array":return n.has(e)?true:(n.add(e),ne(B(e.items).type,n));case "tuple":return n.has(e)?true:(n.add(e),e.elements.every(t=>ne(B(t).type,n)));case "object":{if(n.has(e))return true;n.add(e);let t=Object.values(e.props).every(o=>ne(B(o.type).type,n)),r=!e.index||ne(B(e.index.value).type,n);return t&&r}case "union":return n.has(e)?true:(n.add(e),e.of.every(t=>ne(t,n)));case "intersection":return n.has(e)?true:(n.add(e),e.of.every(t=>ne(t,n)));case "undefined":case "void":case "fn":case "overload":case "keyof":case "index":case "mapped":case "conditional":case "returnType":case "parameters":case "var":case "typeQuery":case "apply":case "any":case "unknown":case "nonPrimitive":return false}}function Nr(e,n,t={}){let r=e;for(let o of n){let a=te(r,o,t);if(a===null)return null;r=a;}return {type:r,completions:xe(r,t)}}var Ar=e=>e==="[]"||/^\d+$/.test(e);function te(e,n,t,r=new Set){if(e.t==="var")return e.bound?te(j(e,t),n,t,r):null;if(e.t==="mapped"){let a=j(e,t);return a===e?null:te(a,n,t,r)}if($(e,t)){let a=M(e);if(r.has(a))return null;r.add(a);let i=te(C(e,t),n,t,r);return r.delete(a),i}let o=x(e);if(o!==e)return te(o,n,t,r);switch(e.t){case "any":return e;case "object":{let a=N(e.props,n);return a?a.optional?k([a.type,{t:"undefined"}]):a.type:e.index?.key==="string"?e.index.value:null}case "array":return Ar(n)?e.items:null;case "tuple":{let a=e.flags?.findIndex(l=>l!=="req")??-1,i=Number(n);if(!(Number.isInteger(i)&&i>=0))return null;if(a<0)return i<e.elements.length?e.elements[i]:null;if(i<a)return e.elements[i];let u=e.elements.slice(a);return u.length?k(u):null}case "union":{let a=[];for(let i of e.of){let u=te(i,n,t,r);if(u===null)return null;a.push(u);}return a.length?k(a):null}case "intersection":{let a=e.of.map(i=>te(i,n,t,r)).filter(i=>i!==null);return a.length?L({of:a}):null}default:return null}}function Br(e,n,t={}){let r=re(e,n,t,new Set);return r?.readonly?r.via:null}var _r=e=>e!==""&&String(Number(e))===e;function re(e,n,t,r){if(e.t==="var")return e.bound?re(j(e,t),n,t,r):null;if(e.t==="mapped"){let u=j(e,t);return u===e?null:re(u,n,t,r)}if($(e,t)){let u=M(e);if(r.has(u))return null;r.add(u);let l=re(C(e,t),n,t,r);return r.delete(u),l}let o=x(e);if(o!==e)return re(o,n,t,r);let a="name"in n?n.name:null,i="base"in n?n.base==="number":n.element&&_r(n.name);switch(e.t){case "object":{let u=a===null?void 0:N(e.props,a);if(u)return {via:"property",readonly:!!u.readonly};let l=e.index;return l&&(l.key==="string"||i)?{via:"index",readonly:!!l.readonly}:null}case "array":return i?{via:"index",readonly:!!e.readonly}:null;case "tuple":{if(!i)return null;let l=(e.flags??[]).indexOf("rest"),c=l<0?e.elements.length:l,f=a===null?-1:Number(a);return Number.isInteger(f)&&f>=0&&f<c?{via:"property",readonly:!!e.readonly}:l>=0||a===null?{via:"index",readonly:!!e.readonly}:null}case "union":{let u=[];for(let c of e.of){let f=re(c,n,t,r);if(f===null)return null;u.push(f);}let l=u.some(c=>c.readonly);return u.some(c=>c.via==="property")?{via:"property",readonly:l}:{via:"index",readonly:l}}case "intersection":{let u=e.of.map(c=>re(c,n,t,r)).filter(c=>c!==null),l=u.filter(c=>c.via==="property");return l.length?{via:"property",readonly:l.some(c=>c.readonly)}:u.length?{via:"index",readonly:u.every(c=>c.readonly)}:null}default:return null}}function xe(e,n,t=new WeakSet,r=new Set){if(e.t==="var")return e.bound?xe(j(e,n),n,t,r):[];if($(e,n)){let a=M(e);if(r.has(a))return [];r.add(a);let i=xe(C(e,n),n,t,r);return r.delete(a),i}let o=x(e);if(o!==e)return xe(o,n,t,r);switch(e.t){case "object":return Object.entries(e.props).map(([a,i])=>({key:a,type:i.type,optional:!!i.optional}));case "array":return [{key:"[]",type:e.items,optional:false}];case "tuple":return e.elements.map((a,i)=>({key:String(i),type:a,optional:false}));case "union":case "intersection":{if(t.has(e))return [];t.add(e);let a=[],i=new Set;for(let u of e.of)for(let l of xe(u,n,t,r))i.has(l.key)||(i.add(l.key),a.push(l));return t.delete(e),a}default:return []}}var Ur="1.6.0";export{Re as $,Pn as A,ae as B,S as C,tn as D,E,Rn as F,Ee as G,$ as H,C as I,j as J,K,an as L,Fn as M,Nn as N,Nt as O,At as P,Ce as Q,un as R,qn as S,Kn as T,Qn as U,ce as V,Yn as W,cn as X,w as Y,Yt as Z,Gt as _,gt as a,tr as aa,xt as b,I as ba,vt as c,ar as ca,ke as d,pt as da,bt as e,_ as ea,kt as f,le as fa,F as g,k as ga,H as h,Tr as ha,be as i,mt as ia,wt as j,Or as ja,Y as k,Ir as ka,se as l,St as la,b as m,_e as ma,g as n,Rr as na,s as o,Fr as oa,x as p,ne as pa,W as q,Nr as qa,fe as r,Br as ra,G as s,Ur as sa,Te as t,Pe as u,$t as v,N as w,B as x,Me as y,On as z};