@tslite/checker 1.4.0 → 1.5.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.
@@ -3,6 +3,13 @@ interface Prop {
3
3
  readonly type: Schema;
4
4
  /** `true` quando a propriedade pode estar ausente (`{ x?: T }`). */
5
5
  readonly optional?: boolean;
6
+ /**
7
+ * `true` quando a propriedade não aceita escrita (`{ readonly x: T }`). Só a ESCRITA o
8
+ * lê — o checker acusa o TS2540/TS2704 —; a relação o ignora, como a atribuibilidade do
9
+ * tsc (`{ readonly a: T } ≤ { a: T }` e o inverso). Atravessa a instanciação e o
10
+ * widening; some no spread e no rest, que criam props graváveis. TC62.
11
+ */
12
+ readonly readonly?: boolean;
6
13
  }
7
14
  /**
8
15
  * Assinatura de índice de um objeto — `{ [k: string]: V }` (a forma de `Record<K, V>`).
@@ -12,6 +19,9 @@ interface Prop {
12
19
  interface IndexSig {
13
20
  readonly key: "string" | "number";
14
21
  readonly value: Schema;
22
+ /** `readonly [k: string]: V` — o índice não aceita escrita (o TS2542 no checker); a
23
+ * relação o ignora, como a da prop. TC62. */
24
+ readonly readonly?: boolean;
15
25
  }
16
26
  /**
17
27
  * Flag de um elemento de tupla, na forma da 3.9 (DECISIONS D49 da raiz):
@@ -186,7 +196,31 @@ type Schema = {
186
196
  readonly key: string;
187
197
  readonly over: Schema;
188
198
  readonly body: Schema;
199
+ /**
200
+ * Os modificadores — as flags do `MappedTypeModifiers` do tsc (`getMappedTypeModifiers`,
201
+ * `checker.ts:10063`). `optional` e `readonly` ACRESCENTAM (`?`/`+?`,
202
+ * `readonly`/`+readonly`); `excludeOptional` e `excludeReadonly` TIRAM (`-?`,
203
+ * `-readonly`). Sem nenhum, cada prop herda o modificador da prop de origem (o
204
+ * `modifiersType`). TC63.
205
+ */
189
206
  readonly optional?: boolean;
207
+ readonly readonly?: boolean;
208
+ readonly excludeOptional?: boolean;
209
+ readonly excludeReadonly?: boolean;
210
+ /**
211
+ * O `modifiersType` de um mapped NÃO homomórfico: o `T` de onde as props herdam `?` e
212
+ * `readonly`. Num `[P in K]` com `K extends keyof T` (o `Pick`), é o `T` — o
213
+ * `getModifiersTypeFromMappedType` (`checker.ts:10042`). O `substitute` o grava ao
214
+ * instanciar o `K`, enquanto a constraint dele ainda diz qual era o `T`. TC63.
215
+ */
216
+ readonly modifiers?: Schema;
217
+ /**
218
+ * O `over` foi declarado `keyof T` com `T` um TYPE PARAM — o
219
+ * `getHomomorphicTypeVariable` do tsc. Instanciado o `T`, o mapped segue a regra do
220
+ * `instantiateMappedType` (`checker.ts:14175`): distribui sobre união, array vira
221
+ * array, tupla vira tupla, primitivo fica ele mesmo. TC63.
222
+ */
223
+ readonly typeVariable?: boolean;
190
224
  } | {
191
225
  readonly t: "conditional";
192
226
  readonly check: Schema;
@@ -194,6 +228,7 @@ type Schema = {
194
228
  readonly then: Schema;
195
229
  readonly else: Schema;
196
230
  readonly infer?: readonly VarSchema[];
231
+ readonly distributive?: true;
197
232
  } | {
198
233
  readonly t: "intersection";
199
234
  readonly of: readonly Schema[];
@@ -261,6 +296,8 @@ type IndexSchema = Extract<Schema, {
261
296
  type MappedSchema = Extract<Schema, {
262
297
  t: "mapped";
263
298
  }>;
299
+ /** Os modificadores escritos de um mapped (ver o `MappedSchema`). */
300
+ type MappedModifiers = Pick<MappedSchema, "optional" | "readonly" | "excludeOptional" | "excludeReadonly">;
264
301
  type ConditionalSchema = Extract<Schema, {
265
302
  t: "conditional";
266
303
  }>;
@@ -338,7 +375,9 @@ declare const s: {
338
375
  /** `T[K]` — acesso indexado. Resolve quando `T` é objeto/array e `K` é literal/união. */
339
376
  readonly index: (obj: Schema, key: Schema) => Schema;
340
377
  /** `{ [key in over]?: body }` — mapped type. Resolve quando `over` dá chaves literais. */
341
- readonly mapped: (key: string, over: Schema, body: Schema, optional?: boolean) => Schema;
378
+ /** `{ [key in over]: body }`, com os modificadores escritos (`{ optional: true }` é o
379
+ * `?`, `{ excludeOptional: true }` o `-?`…). Só a flag ligada entra no nó. */
380
+ readonly mapped: (key: string, over: Schema, body: Schema, modifiers?: MappedModifiers) => Schema;
342
381
  /** `check extends ext ? then : els` — conditional. `infer` = as declarações dos
343
382
  * `infer U` introduzidos no `ext` (as posições são `var(U)`); resolve via `unify`
344
383
  * (ver `resolveConditional`). Sem `infer` → conditional simples (discriminante concreto).
@@ -410,6 +449,31 @@ declare const s: {
410
449
  };
411
450
  /** Resolve um `keyof`/`index` um nível quando possível; senão, devolve `t` como está. */
412
451
  declare function resolveTypeOp(t: Schema): Schema;
452
+ /**
453
+ * O tipo **lido** de algo opcional: `T | undefined`, achatando um nível (sem
454
+ * `normalizeUnion`, que mora no subtype).
455
+ *
456
+ * É o `addOptionality` do tsc (`checker.ts:7514` na tag): sob `strictNullChecks`, o
457
+ * tipo declarado de uma propriedade, de um elemento de tupla ou de um parâmetro
458
+ * **opcional** já inclui `undefined`, e é esse tipo que a relação compara. Aqui o
459
+ * `Schema` guarda a opcionalidade como flag (`optional`, e o `ElementFlag` da tupla),
460
+ * então quem compara precisa pedir o tipo lido — num lugar só, por isto.
461
+ */
462
+ declare function withUndefined(t: Schema): Schema;
463
+ /** Uma assinatura, na forma que a leitura por POSIÇÃO precisa (a de `fn` ou a de uma
464
+ * entrada de `overload`). */
465
+ type PositionalSignature = {
466
+ readonly params: readonly Param[];
467
+ };
468
+ /**
469
+ * Os argumentos de uma assinatura a partir da posição `pos`, como TUPLA — o
470
+ * `getRestTypeAtPosition` do tsc (`checker.ts:26961`). É o que `Parameters<F>` devolve
471
+ * (`pos` 0) e o que o rest de um padrão de `infer` recebe no `applyToParameterTypes`
472
+ * (`(...args: infer P) => any`). Um rest que começa exatamente em `pos` responde por si
473
+ * (`(...args: T) => any` dá o `T`); as posições até o `getMinArgumentCount` são
474
+ * obrigatórias, e as seguintes, opcionais.
475
+ */
476
+ declare function restTypeAtPosition(sig: PositionalSignature, pos: number): Schema;
413
477
  /**
414
478
  * O acesso indexado cuja chave **não existe** no objeto — o que o tsc reporta como
415
479
  * TS2339 e resolve para o `errorType` (`getIndexedAccessType`:
@@ -483,10 +547,17 @@ declare const isVariadicTuple: (t: TupleSchema) => boolean;
483
547
  declare const restIndex: (t: TupleSchema) => number;
484
548
 
485
549
  type IncompatibilityKind = "missing" | "type";
550
+ /**
551
+ * Um passo do caminho até um ponto: `number` é a POSIÇÃO numa tupla ou num array, `string`
552
+ * é uma CHAVE — de propriedade ou de index signature. Segmentos, e não texto, para que uma
553
+ * chave com `.` (`"hp.max"`), a chave `"2"` e a chave vazia não se confundam com dois
554
+ * níveis, com a posição 2 e com a raiz. É a forma do `path` do zod e do Standard Schema.
555
+ */
556
+ type PathSegment = string | number;
486
557
  /** Um ponto de incompatibilidade entre `actual` e `expected`. */
487
558
  interface Incompatibility {
488
- /** Caminho até o ponto: `[]` = raiz, `["count"]`, `["user","name"]`. */
489
- readonly path: readonly string[];
559
+ /** Caminho até o ponto: `[]` = raiz, `["count"]`, `["user", "name"]`, `["items", 3]`. */
560
+ readonly path: readonly PathSegment[];
490
561
  /** O tipo esperado naquele ponto. */
491
562
  readonly expected: Schema;
492
563
  /** O tipo que veio — ausente quando `kind === "missing"` (a prop não existe). */
@@ -656,9 +727,10 @@ declare function freeVars(schema: Schema): ReadonlySet<string>;
656
727
  /**
657
728
  * O curinga "sem inferência" — o `silentNeverType` do tsc: um `never` que ocupa, no
658
729
  * contextual que uma chamada passa a uma chamada genérica aninhada, o lugar de um type
659
- * param dela que ainda não tem candidato (o `getInferredType` com `NoDefault`). Nada se
660
- * infere dele. É comparado por IDENTIDADE, como lá, e não é dado persistível: vive só
661
- * durante a inferência de uma chamada.
730
+ * param dela que ainda não tem candidato (o `getInferredType` com `NoDefault`); e o tipo de
731
+ * uma arrow sensível ao contexto na primeira rodada de uma chamada, o `anyFunctionType`
732
+ * de lá (checker D81). Nada se infere dele. É comparado por IDENTIDADE, como lá, e não é
733
+ * dado persistível: vive só durante a inferência de uma chamada.
662
734
  */
663
735
  declare const silentNever: Schema;
664
736
  /**
@@ -961,5 +1033,37 @@ interface Discovery {
961
1033
  * devolve o próprio tipo e suas completions.
962
1034
  */
963
1035
  declare function discover(schema: Schema, path: readonly string[], schemes?: Schemes): Discovery | null;
1036
+ /**
1037
+ * A chave de uma ESCRITA num membro. `name` é uma chave conhecida — `element: false` no
1038
+ * ponto (`o.a`), que só alcança o índice de string, e `true` no colchete (`o["a"]`,
1039
+ * `o[0]`), em que um nome numérico consulta o índice `number` antes. `base` é uma chave
1040
+ * não literal (`o[k]` com `k: string`).
1041
+ */
1042
+ type WriteKey = {
1043
+ readonly name: string;
1044
+ readonly element: boolean;
1045
+ } | {
1046
+ readonly base: "string" | "number";
1047
+ };
1048
+ /**
1049
+ * Por onde uma escrita num membro passa, quando ela é RECUSADA pelo `readonly`:
1050
+ *
1051
+ * - `"property"` — o membro é uma propriedade readonly: o TS2540 do tsc (e o TS2704 no
1052
+ * `delete`), que acusa o nome/argumento e faz do acesso o tipo-erro;
1053
+ * - `"index"` — o membro é alcançado por uma index signature readonly (ou pelo índice de
1054
+ * um `readonly T[]`): o TS2542, que acusa o acesso inteiro e segue com o tipo do índice.
1055
+ *
1056
+ * `null` quando a escrita não é recusada por aqui: o membro é gravável, não existe (o
1057
+ * erro é da leitura), ou o tipo não tem membros navegáveis (`any`, genérico sem bound).
1058
+ *
1059
+ * A régua é a do tsc 3.9.10, lida no fonte da tag. A prop de uma UNIÃO ou INTERSEÇÃO é
1060
+ * readonly se ALGUM constituinte a torna readonly — inclusive, na união, um membro que a
1061
+ * responde por um índice readonly (`createUnionOrIntersectionProperty`,
1062
+ * `checker.ts:10560`, `:10572`). Sem prop, vale o índice: o de uma união é readonly se
1063
+ * algum for (`getUnionIndexInfo`, `:9685`), o de uma interseção só se todos os que o têm
1064
+ * forem (`intersectIndexInfos`, `:9715`). A posição fixa de uma tupla é PROP (`"0"`,
1065
+ * `createTupleTypeOfArity`, `:12162`); a que cai no rest, índice. TC62.
1066
+ */
1067
+ declare function readonlyMember(schema: Schema, key: WriteKey, schemes?: Schemes): "property" | "index" | null;
964
1068
 
965
- 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 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, 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, renameTypeParams, resetInstantiationCount, resetTypeLimits, resolveConditional, resolveOp, resolveTypeOp, restIndex, s, sampleValue, silentNever, substitute, subtype, typeAtPosition, typeDiff, typeFeatures, typeLimits, typeNeedsParens, typeParamArity, unify, widen, widenInferred, widenLiteral, widenOrigin, widenType, withoutUndefined };
1069
+ 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, 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,H as apparentType,t as asLiteralOrigin,L as baseLiteralType,E as bindTypeParams,aa as comparable,e as configureTypeLimits,R as contravariantInference,Q as covariantInference,oa as discover,ba as equals,T as erasedSignature,G as expand1,x as flagAt,ka as format,la as formatTypeArgs,ma as formatTypeDiff,C as freeVars,Z as groundVars,S as inferFromCandidates,U as inferredTypes,X as instantiate,V as instantiateInContextOf,Y as instantiateLoose,r as isMissingType,w as isNumericLiteralName,s as isObjectOrArrayLiteral,F as isScheme,na as isSerializable,y as isVariadicTuple,ga as join,ha as joinAll,q as missingType,ea as normalizeUnion,u as ownProp,B as renameTypeParams,j as resetInstantiationCount,f as resetTypeLimits,ca as resolveConditional,I as resolveOp,p as resolveTypeOp,z as restIndex,o as s,ia as sampleValue,P as silentNever,A as substitute,$ as subtype,da as typeAtPosition,_ as typeDiff,fa as typeFeatures,g as typeLimits,ja as typeNeedsParens,D as typeParamArity,W as unify,J as widen,N as widenInferred,K as widenLiteral,O as widenOrigin,M as widenType,v as withoutUndefined}from'../chunk-DFZOAHNG.js';
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,L as widen,P as widenInferred,M as widenLiteral,Q as widenOrigin,O as widenType,q as withUndefined,x as withoutUndefined}from'../chunk-FY7J7P5X.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/checker",
3
- "version": "1.4.0",
3
+ "version": "1.5.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/capability": "1.1.0",
48
- "@tslite/json": "1.0.2",
47
+ "@tslite/ast": "1.2.0",
48
+ "@tslite/json": "1.0.3",
49
49
  "@tslite/language-service": "1.1.0",
50
- "@tslite/ast": "1.1.0"
50
+ "@tslite/capability": "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.5.1"
55
+ "@tslite/parser": "1.6.0"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "tsup",
@@ -1 +0,0 @@
1
- var et=100,nt=50,tt=5e6,he={maxTypeDepth:100,maxInstantiationDepth:50,maxInstantiationCount:5e6,maxUnionMembers:1e3,maxOverloadSignatures:200},U=he;function rt(e){U={...he,...e};}function ot(){U=he;}function W(){return U}var H=class extends Error{constructor(n=U.maxTypeDepth){super(`excessive stack depth comparing types (limit ${n}) \u2014 the comparison is excessively deep or possibly infinite`),this.name="TypeEvalLimitError";}},Se=class extends Error{constructor(t,r=t==="depth"?U.maxInstantiationDepth:U.maxInstantiationCount){super(`type instantiation is excessively deep and possibly infinite (${t} limit ${r})`);this.kind=t;this.name="InstantiationLimitError";}};function at(){Ce=0;}var Ce=0;function on(){if(Ce>=U.maxInstantiationCount)throw new Se("count");Ce++;}var Y=class extends Error{constructor(n,t=U.maxUnionMembers){super(`union type is too complex to represent (${n} members exceeds limit ${t})`),this.name="UnionTooComplexError";}};var an=Object.prototype.hasOwnProperty,ne=(e,n)=>an.call(e,n),k=(e,n)=>an.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 Ne=()=>({active:new Set,byScope:new Map});function be(e,n,t){let r=new Map(e);for(let o of n)r.set(o.name,t(o));return r}function Ve(e,n,t){let r=be(n,e,()=>{}),o=false,a=e.map(i=>{let u=i.bound&&F(i.bound,r,t),l=i.default&&F(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 Le(e,n,t){let r=e.typeParams?.length?Ve(e.typeParams,n,t):void 0,o=r?be(n,r,l=>l.bound):n,a=le(e.params,l=>{let c=F(l.type,o,t);return c===l.type?l:{...l,type:c}}),i=F(e.returns,o,t),u=e.guard&&F(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 le(e,n){let t=false,r=e.map(o=>{let a=n(o);return a!==o&&(t=true),a});return t?r:e}function F(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=fn(e,n,t);return t.active.delete(e),r.set(e,a),a}function fn(e,n,t){let r=o=>F(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=le(e.elements,r);return o===e.elements?e:{...e,elements:o}}case "union":case "intersection":{let o=le(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],S=r(c.type);S!==c.type&&(o=true),g(a,l,S===c.type?c:{...c,type:S});}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 Le(e,n,t);case "overload":{let o=le(e.signatures,a=>Le(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=F(e.body,a,t);return o===e.over&&i===e.body?e:{...e,over:o,body:i}}case "conditional":{let o=e.infer?.length?Ve(e.infer,n,t):void 0,a=o?be(n,o,S=>S.bound):n,i=r(e.check),u=F(e.extends,a,t),l=F(e.then,a,t),c=F(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=le(e.args,r);return o===e.args?e:{...e,args:o}}default:return e}}function un(e){return e.typeParams?.length?Le(e,new Map,Ne()):e}function it(e){return e.infer?.length?fn(e,new Map,Ne()):e}function ut(e){if(!e.params.length)return e;let n=Ne(),t=Ve(e.params,new Map,n),r=F(e.body,be(new Map,t,o=>o.bound),n);return t===e.params&&r===e.body?e:{params:t,body:r}}var A=e=>Object.freeze(e),s={any:A({t:"any"}),unknown:A({t:"unknown"}),string:A({t:"string"}),number:A({t:"number"}),boolean:A({t:"boolean"}),null:A({t:"null"}),undefined:A({t:"undefined"}),void:A({t:"void"}),nonPrimitive:A({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"?D(r):r):e,...n&&n.some(r=>r!=="req")?{flags:n}:{},...t?{readonly:true}:{}}),fn:(e,n,t)=>un({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(un)}),keyof:e=>({t:"keyof",of:e}),index:(e,n)=>({t:"index",obj:e,key:n}),mapped:(e,n,t,r=false)=>({t:"mapped",key:e,over:n,body:t,optional:r}),conditional:(e,n,t,r,o)=>it({t:"conditional",check:e,extends:n,then:t,else:r,...o&&o.length?{infer:o}:{}}),scheme:(e,n)=>ut({params:e,body:n}),intersection:e=>$({of:e}),and:(e,n)=>$({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=ct(n);return r.length===1?r[0]:{t:"union",of:r}}};function lt(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 ct(e){let n=[],t=new Map;for(let u of e){let l=lt(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"?Fe(e.of)??e:e.t==="index"?ve(e.obj,e.key)??e:e.t==="returnType"?st(e.fn)??e:e.t==="parameters"?pt(e.fn)??e:e}var ge={t:"union",of:[]},Re=e=>e.t==="union"&&e.of.length===0;function st(e){return e.t==="fn"?e.returns:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1].returns:null}function D(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 pt(e){let n=e.t==="fn"?e:e.t==="overload"&&e.signatures.length>0?e.signatures[e.signatures.length-1]:null;if(!n)return null;let t=[],r=[];for(let o of n.params)o.variadic?(t.push(o.type.t==="array"?o.type.items:o.type),r.push("rest")):o.optional?(t.push(D(o.type)),r.push("optional")):(t.push(o.type),r.push("req"));return s.tuple(t,r)}var We=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function ln(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 cn(e){return e.t==="null"||e.t==="undefined"?e.t:e.t==="nonPrimitive"?"nonPrimitive":We(e)?"scalar":e.t==="object"||e.t==="array"||e.t==="tuple"||e.t==="fn"||e.t==="overload"?"object":null}var sn=e=>e.t==="object"&&!e.index&&Object.keys(e.props).length===0;function $(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(Re))return ge;let r=i=>n.some(u=>cn(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 ge;if(n.some(i=>cn(i)==="object"&&!sn(i)))for(let i=n.length-1;i>=0;i--)sn(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>W().maxUnionMembers)throw new Y(i);return s.union(n[o].of.map(u=>$({of:n.map((l,c)=>c===o?u:l)})))}let a=[];for(let i of n){if(i.t==="any")return s.any;if(Re(i))return ge;if(i.t!=="unknown"){if(We(i)){let u=false;for(let l=a.length-1;l>=0;l--){let c=a[l];if(We(c)){if(ln(c,i)){u=true;break}if(ln(i,c))a.splice(l,1);else return ge}}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 Fe(e){if(e.t==="union"&&e.of.length>0){let t=e.of.map(Fe);return t.some(r=>r===null)?null:ft(t)}if(e.t==="intersection"){let t=e.of.map(Fe);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 ft(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"}),xe=e=>e===G,pn=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 ve(e,n){if(e=x(e),n=x(n),n.t==="union"){let t=[],r=false;for(let o of n.of){let a=ve(e,o);if(a===null)return null;xe(a)?r=true:t.push(a);}return r?G:s.union(t)}if(pn(n))return null;if(e.t==="any"||Re(e))return e;if(e.t==="intersection"){let t=[];for(let r of e.of){let o=ve(x(r),n);if(o===null)return null;xe(o)||t.push(o);}return t.length===0?G:t.length===1?t[0]:$({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=ve(o,n);if(a===null)return null;if(xe(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?D(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=="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:pn(e)?null:G}var ke=e=>(e.t==="object"||e.t==="array"||e.t==="tuple")&&!!e.fromLiteral,dt=e=>e.t==="object"||e.t==="array"||e.t==="tuple"?e.fromLiteral?e:{...e,fromLiteral:true}:e,N=(e,n)=>k(e,n);function z(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 Be=e=>(+e).toString()===e;var dn=(e,n)=>e.flags?.[n]??"req",J=(e,n)=>dn(e,n)==="optional"?D(e.elements[n]):e.elements[n],Ae=e=>e.elements.map((n,t)=>J(e,t)),mn=e=>e.flags?.[e.elements.length-1]==="rest",te=e=>mn(e)?e.elements.length-1:-1,ce=e=>{if(!e.flags)return e.elements.length;let n=e.flags.findIndex(t=>t!=="req");return n<0?e.elements.length:n};function yn(e,n,t,r=false){let o=te(e),a=te(n);if(!r&&ce(e)<ce(n))return false;if(a<0){if(o>=0)return false;let c=ce(n);return e.elements.length<c||e.elements.length>n.elements.length?false:e.elements.every((S,h)=>t(J(e,h),J(n,h)))}let i=n.elements[a],u=c=>c<a?J(n,c):i;if(o<0)return e.elements.length<ce(n)?false:e.elements.every((c,S)=>t(J(e,S),u(S)));if(o===0&&a!==0||o<ce(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 m(e,n,t=new WeakSet){return on(),mt(e,n,t)}function mt(e,n,t){if(e.t!=="keyof"&&e.t!=="index"&&e.t!=="mapped"&&e.t!=="intersection"&&e.t!=="returnType"&&e.t!=="parameters"&&!St(M(e),n))return e;switch(e.t){case "var":{let r=k(n,e.name);return r||_e(e,n,t)}case "array":return {...e,items:m(e.items,n,t)};case "tuple":{let r=e.elements.map(o=>m(o,n,t));return {...e,elements:r}}case "union":return s.union(e.of.map(r=>m(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:m(i.type,n,t),optional:i.optional});}let o=e.index?{key:e.index.key,value:m(e.index.value,n,t)}: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=Ue(e,n,t);return t.delete(e),r}case "overload":return {t:"overload",signatures:e.signatures.map(r=>Ue(r,n,t))};case "apply":return {t:"apply",name:e.name,args:e.args.map(r=>m(r,n,t))};case "keyof":return x({t:"keyof",of:m(e.of,n,t)});case "index":return x({t:"index",obj:m(e.obj,n,t),key:m(e.key,n,t)});case "mapped":{let r=De([s.typeParam(e.key)],n,M(e),t),o={t:"mapped",key:r.decls[0].name,over:m(e.over,n,t),body:m(e.body,r.inner,t),optional:e.optional};return re(o)??o}case "conditional":{if(e.check.t==="var"){let o=e.check.name,a=k(n,o),i=a?x(a):void 0,u=i?.t==="union"?i.of:i?.t==="boolean"?[s.literal(true),s.literal(false)]:null;if(u)return {t:"union",of:u.map(l=>m(e,{...n,[o]:l},t))}}let r=e.infer?.length?De(e.infer,n,M(e),t):{inner:n,decls:void 0};return {t:"conditional",check:m(e.check,n,t),extends:m(e.extends,r.inner,t),then:m(e.then,r.inner,t),else:m(e.else,r.inner,t),...r.decls?{infer:r.decls}:{}}}case "intersection":return $({of:e.of.map(r=>m(r,n,t))});case "returnType":return x({t:"returnType",fn:m(e.fn,n,t)});case "parameters":return x({t:"parameters",fn:m(e.fn,n,t)});default:return e}}function _e(e,n,t,r=e.name){return !e.bound&&!e.default&&r===e.name?e:{...e,name:r,...e.bound?{bound:m(e.bound,n,t)}:{},...e.default?{default:m(e.default,n,t)}:{}}}function Ue(e,n,t,r){let o=e.typeParams?.length?De(e.typeParams,n,M(e),t,r):{inner:n,decls:void 0},a=o.inner;return {...e,params:e.params.map(i=>({...i,type:m(i.type,a,t)})),returns:m(e.returns,a,t),...e.guard?{guard:{...e.guard,type:m(e.guard.type,a,t)}}:{},...o.decls?{typeParams:o.decls}:{}}}function qe(e,n){return e.typeParams?.some(t=>n.has(t.name))?Ue(e,{},new WeakSet,n):e}function De(e,n,t,r,o=new Set){let a=new Set(e.map(d=>d.name)),i={},u=new Set;for(let d in n)if(!a.has(d)&&(g(i,d,n[d]),t.has(d)))for(let y of M(n[d]))u.add(y);let l=e.filter(d=>u.has(d.name)||o.has(d.name));if(l.length===0)return {inner:i,decls:e.map(d=>_e(d,i,r))};let c=new Set([...a,...t,...u,...o]),S=new Map;for(let d of l){let y=1;for(;c.has(`${d.name}_${y}`);)y++;let O=`${d.name}_${y}`;c.add(O),S.set(d.name,O);}let h={};for(let[d,y]of S)g(h,d,{t:"var",name:y});let p={...i};for(let d of l){let y=S.get(d.name);g(p,d.name,{t:"var",name:y,...d.bound?{bound:m(d.bound,{...i,...h},r)}:{}});}return {inner:p,decls:e.map(d=>_e(d,p,r,S.get(d.name)??d.name))}}var yt=new Set,Sn=new WeakMap;function M(e){let n=Sn.get(e);if(n)return n;let t=new Set;v(e,t,new WeakSet);let r=t.size===0?yt:t;return Sn.set(e,r),r}function ze(e,n,t){let r=new Set;t(r);for(let o of r)e.includes(o)||n.add(o);}function hn(e,n,t){let r=e.typeParams??[];ze(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),hn(e,n,t);return;case "overload":for(let r of e.signatures)hn(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),ze([e.key],n,r=>v(e.body,r,t));return;case "conditional":{v(e.check,n,t);let r=e.infer??[];ze(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 St(e,n){if(e.size===0)return false;for(let t of e)if(ne(n,t))return true;return false}function Ke(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;for(let l of n){let c=k(l.props,a);c&&(i.push(c.type),c.optional||(u=false));}g(r,a,{type:$({of:i}),optional:u});}let o;for(let a of n)a.index&&(o=o?{key:o.key,value:$({of:[o.value,a.index.value]})}:a.index);return o?{t:"object",props:r,index:o}:{t:"object",props:r}}function re(e,n=x){if(e.over.t==="keyof"){let a=n(e.over.of),i=a.t==="intersection"?Ke(a.of)??a:a;if(i.t==="object"){let u={};for(let c of Object.keys(i.props)){let S=e.optional||i.props[c].optional;g(u,c,{type:m(e.body,{[e.key]:s.literal(c)}),...S?{optional:true}:{}});}let l=i.index?.key;return l===void 0?{t:"object",props:u}:{t:"object",props:u,index:{key:l,value:m(e.body,{[e.key]:l==="number"?s.number:s.string})}}}}let t=x(e.over);if(t.t==="string"||t.t==="number")return {t:"object",props:{},index:{key:t.t,value:m(e.body,{[e.key]:t})}};let r=ht(t);if(r===null)return null;let o={};for(let a of r)g(o,a,{type:m(e.body,{[e.key]:s.literal(a)}),optional:e.optional});return {t:"object",props:o}}function ht(e){if(e.t==="literal"&&typeof e.value=="string")return [e.value];if(e.t==="union"){let n=[];for(let t of e.of)if(t.t==="literal"&&typeof t.value=="string")n.push(t.value);else return null;return n}return null}function gn(e){let n=e.length;for(;n>0&&e[n-1].default;)n--;return {min:n,max:e.length}}var xn=(e,n)=>{let{min:t,max:r}=gn(e);return n>=t&&n<=r};function vn(e,n){let t={};return e.forEach((r,o)=>{o<n.length?g(t,r.name,n[o]):r.default&&g(t,r.name,m(r.default,t));}),t}function C(e,n){if(e.t!=="apply")return false;let t=k(n,e.name);return t!==void 0&&xn(t.params,e.args.length)}function L(e,n){if(e.t!=="apply")return e;let t=k(n,e.name);return !t||!xn(t.params,e.args.length)?e:m(t.body,vn(t.params,e.args))}function P(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?"?":""}:${P(e.props[r].type)}`).join(","),t=e.index?`,[${e.index.key}]:${P(e.index.value)}`:"";return `{${n}${t}}`}case "array":return `[${P(e.items)}]`;case "tuple":return `#tuple(${e.elements.map(P).join(",")})`;case "union":return `(${e.of.map(P).sort().join("|")})`;case "fn":return `${e.typeParams?.length?`<${e.typeParams.map(t=>t.name).join(",")}>`:""}(${e.params.map(t=>P(t.type)).join(",")})=>${e.guard?`is${e.guard.param}:${P(e.guard.type)}`:P(e.returns)}`;case "var":return `v:${e.name}`;case "apply":return `${e.name}<${e.args.map(P).join(",")}>`;case "intersection":return `&(${e.of.map(P).sort().join("&")})`;case "returnType":return `RT<${P(e.fn)}>`;default:return e.t}}var bn=()=>W().maxInstantiationDepth;function E(e,n={},t=0){if(t>bn())return e;if(e.t==="var")return e.bound?E(e.bound,n,t+1):e;if(C(e,n))return E(L(e,n),n,t+1);if(e.t==="mapped"){let r=re(e,o=>E(o,n,t+1));if(r)return E(r,n,t+1)}if(e.t==="intersection")return $(e);if(e.t==="union"){let r=e.of.flatMap(a=>{let i=E(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 oe(e,n,t=0){if(t>bn())return e;let r=q(e,n);if(r!==e)return oe(r,n,t+1);let o=E(e,n,t);return o===e?e:oe(o,n,t+1)}function q(e,n={}){let t=x(e);if(t!==e)return t;switch(e.t){case "keyof":{let r=oe(e.of,n);return r===e.of?e:x({...e,of:r})}case "index":{let r=oe(e.obj,n),o=oe(e.key,n);return r===e.obj&&o===e.key?e:x({...e,obj:r,key:o})}case "returnType":{let r=oe(e.fn,n);return r===e.fn?e:x({...e,fn:r})}default:return e}}var we=e=>typeof e=="string"?s.string:typeof e=="number"?s.number:s.boolean;function Qe(e){return e.t==="literal"&&e.fresh?we(e.value):e}function Tn(e){if(e.t==="literal")return e.fresh?we(e.value):e;if(e.t==="union"){let n=e.of.map(Tn);return n.some((t,r)=>t!==e.of[r])?b(n):e}return e}function jn(e){if(e.t==="literal")return we(e.value);if(e.t==="union"){let n=e.of.map(jn);return n.some((t,r)=>t!==e.of[r])?b(n):e}return e}function gt(e){return R(e,new WeakSet)}function xt(e){switch(e.t){case "array":return {t:"array",items:R(e.items,new WeakSet),...e.readonly?{readonly:true}:{},...e.fromLiteral?{fromLiteral:true}:{}};case "tuple":return {t:"tuple",elements:e.elements.map(n=>R(n,new WeakSet)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{},...e.fromLiteral?{fromLiteral:true}:{}};case "object":return On(e,new WeakSet);case "fn":case "overload":return R(e,new WeakSet);default:return e}}function R(e,n){if(e.t==="literal")return e.fresh?we(e.value):e;if(n.has(e))return e;switch(e.t){case "array":return n.add(e),{t:"array",items:R(e.items,n),...e.readonly?{readonly:true}:{},...e.fromLiteral?{fromLiteral:true}:{}};case "tuple":return n.add(e),{t:"tuple",elements:e.elements.map(t=>R(t,n)),...e.flags?{flags:e.flags}:{},...e.readonly?{readonly:true}:{},...e.fromLiteral?{fromLiteral:true}:{}};case "object":return n.add(e),On(e,n);case "apply":return n.add(e),{t:"apply",name:e.name,args:e.args.map(t=>R(t,n))};case "fn":return n.add(e),{...e,params:e.params.map(t=>({...t,type:R(t.type,n)})),returns:R(e.returns,n),...e.guard?{guard:{param:e.guard.param,type:R(e.guard.type,n)}}:{}};case "overload":return n.add(e),{t:"overload",signatures:e.signatures.map(t=>R(t,n))};default:return e}}function On(e,n){let t={};for(let i in e.props)g(t,i,{type:R(e.props[i].type,n),optional:e.props[i].optional});let r=e.index?{key:e.index.key,value:R(e.index.value,n)}: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 In(e){if(!e.siblings){let n=[];for(let t of In(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 vt(e){if(!e.propNames){let n=new Set;for(let t of In(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 bt=e=>e.t==="object"&&!e.index&&Object.keys(e.props).length===0;function kt(e,n,t){let r={};for(let a in e.props){let i=e.props[a],u=Z(i.type,n&&{parent:n,propertyName:a},t);g(r,a,u===i.type?i:{...i,type:u});}if(n)for(let a of vt(n))N(r,a)||g(r,a,{type:s.undefined,optional:true});let o=e.index?{key:e.index.key,value:Z(e.index.value,void 0,t)}:void 0;return o?{t:"object",props:r,index:o}:{t:"object",props:r}}var kn=new WeakMap;function ae(e,n){let t=kn.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=>ae(o.type,n))||!!e.index&&ae(e.index.value,n);break;case "array":r=!!e.fromLiteral||ae(e.items,n);break;case "tuple":r=!!e.fromLiteral||e.elements.some(o=>ae(o,n));break;case "union":case "intersection":r=e.of.some(o=>ae(o,n));break}return n.delete(e),kn.set(e,r),r}var wn=new WeakMap;function Z(e,n,t){if(!ae(e,new WeakSet))return e;if(!n){let o=wn.get(e);if(o)return o}if(t.has(e))return e;t.add(e);let r=wt(e,n,t);return t.delete(e),n||wn.set(e,r),r}function wt(e,n,t){switch(e.t){case "object":return e.fromLiteral?kt(e,n,t):e;case "union":{let r=n??{siblings:e.of},o=e.of.map(a=>a.t==="null"||a.t==="undefined"?a:Z(a,r,t));return o.some(bt)?b(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=Z(a,void 0,t);return i!==a&&(r=true),i});return r?s.intersection(o):e}case "array":{let r=Z(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=Z(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 Te(e){return Z(e,void 0,new WeakSet)}var He=Object.freeze({t:"union",of:Object.freeze([])});function se(e){if(e===He)return true;switch(e.t){case "array":return se(e.items);case "tuple":return e.elements.some(se);case "union":case "intersection":return e.of.some(se);case "apply":return e.args.some(se);default:return false}}var Pn=e=>e.t==="literal"?typeof e.value:e.t==="string"||e.t==="number"||e.t==="boolean"?e.t:null;function Tt(e,n){if(T(n,e))return e;if(T(e,n))return n;let t=Pn(e),r=Pn(n);return !t||!r||t===r?b([e,n]):null}var ie,K=false;function jt(e){K=!K;try{return e()}finally{K=!K;}}function $n(e){let n=ie,t=K,r=new Map;ie=r,K=false;try{return {result:e(),candidates:r}}finally{ie=n,K=t;}}var En=(e,n)=>{if(!ie)return;let t=ie.get(e);t||(t={co:[],contra:[]},ie.set(e,t)),(K?t.contra:t.co).push(n);};function Ot(e){if(e.length<=1)return [...e];let n=e.filter(ke);return n.length?[...e.filter(t=>!ke(t)),b(n)]:[...e]}function It(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 Pt(e,n){if(e.length)return It(e)?b([...e]):e.reduce((t,r)=>T(t,r,n)?r:t)}function Mn(e,n={}){let t=Ot(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 Te(b(t));let a=Pt(o,n);if(a!==void 0)return Te(r.length?b([a,...r]):a)}function Cn(e,n={}){if(e.length)return e.reduce((t,r)=>T(r,t,n)?r:t)}function Ln(e,n={}){let t=e.co.length?Mn(e.co,n):void 0;if(!e.contra.length)return t;let r=Cn(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&&T(t,r,n)?t:r}function Ye(e,n){let{typeParams:t,...r}=e;return {...r,params:e.params.map(o=>({...o,type:m(o.type,n)})),returns:m(e.returns,n),...e.guard?{guard:{...e.guard,type:m(e.guard.type,n)}}:{}}}function ue(e){return e.typeParams?.length?Ye(e,Object.fromEntries(e.typeParams.map(n=>[n.name,s.any]))):e}function Rn(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=>m(i,t));let o=Object.fromEntries(n.map(a=>[a.name,s.any]));return r=r.map(a=>m(a,o)),Ye(e,Object.fromEntries(n.map((a,i)=>[a.name,r[i]])))}function Wn(e,n,t={}){if(!e.some(o=>!k(n,o.name)||o.bound))return n;let r={...n};for(let o of e){let a=k(r,o.name)??(o.default?m(o.default,r):s.unknown);if(o.bound){let i=m(o.bound,r);T(a,i,t)||(a=i);}g(r,o.name,a);}return r}function Ge(e,n,t={}){let r=e.typeParams??[],o=new Set(r.map(S=>S.name)),a=S=>Object.fromEntries(Object.entries(S??{}).filter(([h])=>o.has(h))),i={},u=Math.max(e.params.length,n.params.length);for(let S=0;S<u;S++){let h=pe(e,S),p=pe(n,S);h&&p&&(i=w(h,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[S,h]of Object.entries(a(i)))g(c,S,h);return Ye(e,Wn(r,c,t))}function w(e,n,t={}){if(n===He)return t;if(e.t==="var"){if(se(n))return t;let r=k(t,e.name);if(!r)return En(e.name,n),{...t,[e.name]:n};if(n.t==="any"||n.t==="unknown")return t;En(e.name,n);let o=Tt(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=te(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?b(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=k(n.props,o);if(!i){if(a.optional)continue;return null}r=w(a.type,i.type,r)??r;}return r}case "fn":{if(n.t!=="fn")return null;let r=ue(e),o=Rn(n),a=w(r.returns,o.returns,t)??t,i=Math.min(r.params.length,o.params.length);for(let u=0;u<i;u++)a=jt(()=>w(r.params[u].type,o.params[u].type,a))??a;return r.guard&&o.guard&&(a=w(r.guard.type,o.guard.type,a)??a),a}case "union":{if(!e.of.some(l=>M(l).size>0))return T(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 S=w(l,o[c],i);S!==null&&(i=S,a[c]=true);}if(r.length!==1)return i;let u=o.filter((l,c)=>!a[c]);return u.length?w(r[0],b(u),i)??i: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 T(n,e)?t:null}}var Fn="@rev",Je=e=>e.t==="mapped"&&e.over.t==="keyof"&&e.over.of.t==="var";function B(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(Fn);switch(e.t){case "array":return {t:"array",items:B(e.items,n,t)};case "tuple":return {t:"tuple",elements:e.elements.map(r=>B(r,n,t)),...e.flags?{flags:e.flags}:{}};case "union":return s.union(e.of.map(r=>B(r,n,t)));case "fn":return {...e,params:e.params.map(r=>({...r,type:B(r.type,n,t)})),returns:B(e.returns,n,t)};case "apply":return {t:"apply",name:e.name,args:e.args.map(r=>B(r,n,t))};case "returnType":return {t:"returnType",fn:B(e.fn,n,t)};case "object":{let r={};for(let o in e.props)g(r,o,{type:B(e.props[o].type,n,t),optional:e.props[o].optional});return e.index?{t:"object",props:r,index:{key:e.index.key,value:B(e.index.value,n,t)}}:{t:"object",props:r}}default:return e}}function Et(e,n,t){if(e.over.t!=="keyof"||e.over.of.t!=="var")return null;let r=e.over.of.name;if(k(t,r))return null;let o={};for(let a in n.props){let i=B(e.body,r,e.key),u=w(i,n.props[a].type,{}),l=u?k(u,Fn):void 0;g(o,a,{type:l?Qe(l):s.unknown,optional:n.props[a].optional});}return {...t,[r]:{t:"object",props:o}}}function Nn(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(Je(a)&&i.t==="object"){let u=Et(a,i,r);u&&(r=u);}}return r}function $t(e,n,t={}){let{result:r,candidates:o}=$n(()=>{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(!Je(l.type)&&(i=w(l.type,n[u],i),i===null))return null}return Nn(e.params,n,i)});if(r===null)return null;let a=Vn(r,o,t);return {returns:m(e.returns,a),bindings:a}}function Vn(e,n,t){let r;for(let[o,a]of n){if(a.co.length<2&&!a.contra.length)continue;let i=Ln(a,t);i===void 0||i===k(e,o)||(r??(r={...e}),g(r,o,i));}return r??e}function Mt(e,n,t={}){let{result:r,candidates:o}=$n(()=>{let i={};for(let u=0;u<e.params.length&&u<n.length;u++){let l=e.params[u];if(Je(l.type))continue;let c=w(l.type,n[u],i);c!==null&&(i=c);}return Nn(e.params,n,i)}),a=Vn(r,o,t);return {returns:m(e.returns,a),bindings:a}}var Ct=e=>e.t==="array"?e.items:e.t==="tuple"?s.union([...e.elements]):void 0;function V(e,n,t,r,o){if(e.t==="var"&&t.has(e.name)){let a=o.get(e.name);a||o.set(e.name,a={co:[],contra:[]}),(r?a.contra:a.co).push(n);return}if(!(n.t==="any"||n.t==="unknown"))switch(e.t){case "array":{let a=Ct(n);a&&V(e.items,a,t,r,o);return}case "tuple":{let a=e,i=te(a);if(i<0){n.t==="tuple"&&n.elements.length===a.elements.length&&a.elements.forEach((l,c)=>V(l,n.elements[c],t,r,o));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++)V(c<i?a.elements[c]:u,l.elements[c],t,r,o);}else if(n.t==="array"){for(let l=0;l<i;l++)V(a.elements[l],n.items,t,r,o);V(u,n.items,t,r,o);}return}case "fn":if(n.t==="fn"){let a=ue(e),i=Rn(n);a.params.forEach((u,l)=>{let c=i.params[l];c&&V(u.type,c.type,t,!r,o);}),V(a.returns,i.returns,t,r,o);}return;case "object":if(n.t==="object")for(let a in e.props){let i=k(n.props,a);i&&V(e.props[a].type,i.type,t,r,o);}return;case "apply":n.t==="apply"&&n.name===e.name&&n.args.length===e.args.length&&e.args.forEach((a,i)=>V(a,n.args[i],t,r,o));return;default:return}}function Lt(e,n){if(e.length===1)return e[0];let r=e.flatMap(o=>o.t==="union"?[...o.of]:[o]).filter(o=>e.every(a=>T(o,a,n)));return b(r)}var Rt=e=>e.t==="union"&&e.of.length===0;function Bn(e,n){let t={};for(let[r,{co:o,contra:a}]of e){let i=o.length?b(o):void 0,u=a.length?Lt(a,n):void 0,l=i??u;i&&u&&(l=!Rt(i)&&i.t!=="any"&&T(i,u,n)?i:u),l&&g(t,r,l);}return t}function An(e,n={}){let t=new Map,r=(e.infer??[]).map(a=>a.name);V(e.extends,e.check,new Set(r),false,t);let o={...Bn(t,n)};for(let a of r)ne(o,a)||g(o,a,s.unknown);return o}function Wt(e,n={},t=0){if(!e.infer?.length||M(e.check).size>0)return null;let r=new Map;V(e.extends,e.check,new Set(e.infer.map(u=>u.name)),false,r);let o=Bn(r,n),a=new WeakSet,i=je(m(e.extends,o),n,a,t);return T(e.check,i,n)?je(m(e.then,o),n,a,t):je(m(e.else,o),n,a,t)}function je(e,n={},t=new WeakSet,r=0,o=new Set){let a=r,i=W().maxTypeDepth,u=new Set,l=(p,d)=>d?.length?new Set([...p,...d.map(y=>y.name)]):p,c=(p,d)=>({...p,...p.bound?{bound:h(p.bound,d)}:{},...p.default?{default:h(p.default,d)}:{}}),S=(p,d)=>{let y=l(d,p.typeParams);return {...p,params:p.params.map(O=>({...O,type:h(O.type,y)})),returns:h(p.returns,y),...p.guard?{guard:{...p.guard,type:h(p.guard.type,y)}}:{},...p.typeParams?{typeParams:p.typeParams.map(O=>c(O,y))}:{}}},h=(p,d=u)=>{switch(p.t){case "var":return d.has(p.name)?c(p,d):s.unknown;case "array":return {...p,items:h(p.items,d)};case "tuple":return {...p,elements:p.elements.map(y=>h(y,d))};case "union":return s.union(p.of.map(y=>h(y,d)));case "object":{if(t.has(p))return p;t.add(p);let y={};for(let ye in p.props){let rn=p.props[ye];g(y,ye,{type:h(rn.type,d),optional:rn.optional});}let O=p.index?{key:p.index.key,value:h(p.index.value,d)}:void 0;return t.delete(p),O?{t:"object",props:y,index:O}:{t:"object",props:y}}case "fn":{if(t.has(p))return p;t.add(p);let y=S(p,d);return t.delete(p),y}case "overload":return {t:"overload",signatures:p.signatures.map(y=>S(y,d))};case "apply":{if(C(p,n)){let y=L(p,n);if(y.t==="conditional"){if(a>=i)throw new H;a++;try{let O=h(y,d);if(O.t!=="conditional")return O}finally{a--;}}}return {t:"apply",name:p.name,args:p.args.map(y=>h(y,d))}}case "conditional":{let y=p.infer?.length?Wt(p,n,a):Q(p,n);if(y)return h(y,d);let O=l(d,p.infer);return {t:"conditional",check:h(p.check,d),extends:h(p.extends,O),then:h(p.then,O),else:h(p.else,O),...p.infer?{infer:p.infer.map(ye=>c(ye,O))}:{}}}case "intersection":return $({of:p.of.map(y=>h(y,d))});case "returnType":return x({t:"returnType",fn:h(p.fn,d)});default:return p}};return h(e,o)}var Ft=s.object({}),Xe=(e,n,t="assignable")=>({seen:new WeakMap,exp:new Set,schemes:e,relation:t,assumed:0,explain:n,sourceStack:[],targetStack:[]}),Ze=0;function I(e,n,t){return e.explain?.out.push({path:[...e.explain.path],actual:n,expected:t,kind:"type"}),false}function en(e,n,t=0){if(t>W().maxInstantiationDepth)return e;if(C(e,n)){let r=L(e,n);if(r.t!=="conditional")return e;let o=Q(r,n);return o?en(o,n,t+1):e}if(e.t==="conditional"){let r=Q(e,n);return r?en(r,n,t+1):e}return e}function Nt(e,n,t={}){let r=[];return !f(e,n,Xe(t,{path:[],out:r}))&&r.length===0&&r.push({path:[],actual:e,expected:n,kind:"type"}),r}var Vt=new WeakMap,Bt=new WeakMap;function Qn(e,n,t,r,o){if(e===n)return true;if(Object.keys(t).length>0)return f(e,n,Xe(t,void 0,r));let a=o.get(e)?.get(n);if(a!==void 0)return a;let i=f(e,n,Xe(t,void 0,r)),u=o.get(e);return u||o.set(e,u=new WeakMap),u.set(n,i),i}function T(e,n,t={}){return Qn(e,n,t,"assignable",Vt)}function At(e,n,t={}){return Qn(e,n,t,"comparable",Bt)}function _t(e,n,t={}){return T(e,n,t)&&T(n,e,t)}function Q(e,n){if(e.infer?.length){if(M(e.check).size>0)return null;let t=en(e.check,n),r=An({...e,check:t},n),o=m(e.extends,r);return T(t,o,n)?m(e.then,r):m(e.else,r)}return M(e.check).size>0||M(e.extends).size>0?null:T(e.check,e.extends,n)?e.then:e.else}function fe(e,n,t=0){if(t>W().maxInstantiationDepth)return e;let r=q(e,n.schemes);if(r!==e)return fe(r,n,t+1);if(e.t==="conditional"){let o=Q(e,n.schemes);if(o)return fe(o,n,t+1)}return C(e,n.schemes)?fe(L(e,n.schemes),n,t+1):e.t==="union"?b(e.of.map(o=>fe(o,n,t+1))):e}var _n=(e,n)=>re(e,t=>E(t,n.schemes))??re({...e,over:fe(e.over,n)});function Ie(e,n,t,r){if(!t.explain)return f(e,n,t);t.explain.path.push(r);try{return f(e,n,t)}finally{t.explain.path.pop();}}function f(e,n,t){if(Ze>=W().maxTypeDepth)throw new H;Ze++;try{if(e.t==="any"||n.t==="any"||n.t==="unknown")return !0;if(e.t==="unknown")return t.relation==="comparable"?!0:I(t,e,n);let r=q(e,t.schemes);if(r!==e)return f(r,n,t);let o=q(n,t.schemes);if(o!==n)return f(e,o,t);if(e.t==="mapped"){let i=_n(e,t);if(i)return f(i,n,t)}if(n.t==="mapped"){let i=_n(n,t);if(i)return f(e,i,t)}if(e.t==="conditional"){let i=Q(e,t.schemes);if(i)return f(i,n,t)}if(n.t==="conditional"){let i=Q(n,t.schemes);if(i)return f(e,i,t)}if(t.relation==="comparable"&&qt(n,e))return !0;if(n.t==="intersection")return n.of.every(i=>f(e,i,t));if(e.t==="intersection"&&n.t!=="union"){if(Dt(e.of,n,t))return !0;if(n.t==="object"){let i=Ke(e.of);if(i)return f(i,n,t)}return !1}if(!(e.t==="apply"&&n.t==="apply"&&e.name===n.name&&e.args.length===n.args.length)&&(C(e,t.schemes)||C(n,t.schemes))){let i=`${P(e)}\u2264${P(n)}`;if(t.exp.has(i))return !0;if(Dn(e,t.sourceStack)&&Dn(n,t.targetStack))return t.assumed++,!0;t.exp.add(i),t.sourceStack.push(e),t.targetStack.push(n);let u=f(L(e,t.schemes),L(n,t.schemes),t);return t.sourceStack.pop(),t.targetStack.pop(),t.exp.delete(i),u}return Ut(e,n,t)}finally{Ze--;}}var Un=5;function Dn(e,n){if(n.length<Un||e.t!=="apply")return false;let t=0;for(let r of n)if(r.t==="apply"&&r.name===e.name&&++t>=Un)return true;return false}function Ut(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=zt(e,n,t);return (!a||t.assumed!==o)&&r.delete(n),a}function Dt(e,n,t){let r=t.intersectionSource,o=t.explain;t.intersectionSource=true,t.explain=void 0;try{return e.some(a=>f(a,n,t))}finally{t.intersectionSource=r,t.explain=o;}}function zt(e,n,t){if(e.t==="union")return t.relation==="comparable"?e.of.length===0||e.of.some(r=>f(r,n,t)):e.of.every(r=>f(r,n,t));if(e.t==="boolean"&&n.t==="union")return t.relation==="comparable"?f(s.literal(true),n,t)||f(s.literal(false),n,t):f(s.literal(true),n,t)&&f(s.literal(false),n,t);if(n.t==="union")return Kt(e,n,t);if(e.t==="var"&&!(n.t==="var"&&n.name===e.name))return e.bound?f(e.bound,n,t):I(t,e,n);if(e.t==="nonPrimitive"&&n.t!=="nonPrimitive")return n.t==="object"&&n.index?I(t,e,n):f(Ft,n,t);if(qn(e)&&qn(n))return Jt(e,n,t);if(n.t==="overload")return n.signatures.every(r=>f(e,r,t));switch(n.t){case "literal":return e.t==="literal"&&e.value===n.value?true:I(t,e,n);case "string":case "number":case "boolean":case "null":case "undefined":return e.t===n.t||e.t==="literal"&&Hn(e.value)===n.t?true:I(t,e,n);case "void":return e.t==="void"||e.t==="undefined"?true:I(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:I(t,e,n);case "array":return e.t==="array"?e.readonly&&!n.readonly?I(t,e,n):f(e.items,n.items,t):e.t==="tuple"?e.readonly&&!n.readonly?I(t,e,n):Ae(e).every((r,o)=>Ie(r,n.items,t,String(o))):I(t,e,n);case "tuple":{if(e.t!=="tuple"||e.readonly&&!n.readonly)return I(t,e,n);if(!e.flags&&!n.flags){if(e.elements.length!==n.elements.length)return I(t,e,n);for(let r=0;r<e.elements.length;r++)if(!Ie(e.elements[r],n.elements[r],t,String(r)))return false;return true}return yn(e,n,(r,o)=>f(r,o,t),t.relation==="comparable")}case "object":if(e.t==="object")return Ht(e,n,t);if(Object.keys(n.props).length===0&&!n.index)return e.t!=="null"&&e.t!=="undefined"&&e.t!=="void"?true:I(t,e,n);if((e.t==="array"||e.t==="tuple")&&n.index){let r=e.t==="array"?[e.items]:Ae(e);return n.index.key==="number"&&Object.values(n.props).every(o=>o.optional)&&r.every(o=>f(o,n.index.value,t))?true:I(t,e,n)}return I(t,e,n);case "fn":return e.t==="fn"?Oe(e,n,t):I(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"&&f(e.of,n.of,t)&&f(n.of,e.of,t);case "index":return e.t==="index"&&f(e.obj,n.obj,t)&&f(n.obj,e.obj,t)&&f(e.key,n.key,t)&&f(n.key,e.key,t);case "mapped":return e.t==="mapped"&&e.key===n.key&&!!e.optional==!!n.optional&&f(e.over,n.over,t)&&f(n.over,e.over,t)&&f(e.body,n.body,t)&&f(n.body,e.body,t);case "conditional":return e.t==="conditional"&&f(e.check,n.check,t)&&f(n.check,e.check,t)&&f(e.extends,n.extends,t)&&f(n.extends,e.extends,t)&&f(e.then,n.then,t)&&f(e.else,n.else,t);case "apply":return e.t==="apply"&&e.name===n.name&&e.args.length===n.args.length&&e.args.every((r,o)=>f(r,n.args[o],t));case "returnType":return e.t==="returnType"&&f(e.fn,n.fn,t)&&f(n.fn,e.fn,t);case "parameters":return e.t==="parameters"&&f(e.fn,n.fn,t)&&f(n.fn,e.fn,t)}}var Hn=e=>typeof e;function qt(e,n){switch(n.t){case "string":case "number":case "boolean":case "null":case "undefined":return e.t===n.t||e.t==="literal"&&Hn(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 Kt(e,n,t){let r=t.explain;if(!r)return n.of.some(i=>f(e,i,t));t.explain=void 0;let o;try{o=n.of.some(i=>f(e,i,t));}finally{t.explain=r;}if(o)return true;let a=Qt(e,n,t);return a?f(e,a,t):I(t,e,n)}function Qt(e,n,t){if(e.t!=="object")return null;let r=n.of.map(o=>E(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 S=r[c];if(S.t!=="object")return !1;let h=N(S.props,o);return !!h&&f(a,h.type,t)});}finally{t.explain=i;}if(u.length===1)return u[0]}return null}function Ht(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?z(i.type).type:i.optional?b([i.type,s.undefined]):i.type;if(!Ie(u,a.type,t,o))return false}return !(n.index&&!Yt(e,n.index,t))}function Yt(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&&!Be(o))continue;let a=e.props[o],i=a.optional?D(a.type):a.type;if(!Ie(i,n.value,t,o))return false}}return !e.index||f(e.index.value,n.value,t)}var Yn=e=>{let n=e.params[e.params.length-1];return n?.variadic?n:void 0},Gt=e=>{let n=e.params.findIndex(t=>t.optional||t.variadic);return n<0?e.params.length:n};function pe(e,n){let t=Yn(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 zn=(e,n)=>{let t=pe(e,n);return t===void 0?t:e.params[n]?.optional?D(t):t},qn=e=>e.t==="fn"||e.t==="overload";function Jt(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?Kn(r[0],o[0],t,t.relation==="comparable"):o.every(a=>r.some(i=>Kn(i,a,t,true)))}function Kn(e,n,t,r){if(r)return Oe(ue(e),ue(n),t);let o=qe(n,M(e));return e.typeParams?.length?Oe(Ge(e,o,t.schemes),o,t):Oe(e,o,t)}function Oe(e,n,t){if(n.returns.t!=="void"&&n.returns.t!=="any"&&!f(e.returns,n.returns,t)||!Yn(n)&&Gt(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=zn(e,o),i=zn(n,o);if(a&&i&&!f(i,a,t))return false}return !(n.guard&&(!e.guard||e.guard.param!==n.guard.param||!f(e.guard.type,n.guard.type,t)))}var Zt=e=>e.t==="object"&&!e.index&&Object.values(e.props).every(n=>n.optional);function b(e){let n=[];for(let o of e)o.t==="union"?n.push(...o.of):n.push(o);let t=W().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&&!Zt(u)&&T(a,u)&&(l<o||!T(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 Xt(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":t.add("returnType"),o(a.fn);break;case "parameters":t.add("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 er=s.union([]);function Gn(e,n){return Pe(e,n,new WeakMap)}function nr(e){return e.reduce(Gn,er)}function Pe(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 tr(e,n,t);if(e.t==="array"&&n.t==="array"){let o={t:"array",items:s.unknown};return Jn(t,e,n,o),o.items=Pe(e.items,n.items,t),o}return b([e,n])}function tr(e,n,t){let r={t:"object",props:{}};Jn(t,e,n,r);for(let o in e.props){let a=e.props[o],i=k(n.props,o);if(i){let u=Pe(a.type,i.type,t);g(r.props,o,a.optional||i.optional?{type:u,optional:true}:{type:u});}else g(r.props,o,{type:a.type,optional:true});}for(let o in n.props)ne(e.props,o)||g(r.props,o,{type:n.props[o].type,optional:true});return e.index&&n.index&&e.index.key===n.index.key&&(r.index={key:e.index.key,value:Pe(e.index.value,n.index.value,t)}),r}function Jn(e,n,t,r){let o=e.get(n);o||(o=new WeakMap,e.set(n,o)),o.set(t,r);}var rr=4;function or(e,n={}){return de(e,n,0)}function de(e,n,t){let r=E(q(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(de(r.elements[a],n,t));return o}case "object":{if(t>=rr)return {};let o={};for(let a of Object.keys(r.props)){let i=r.props[a];i.optional||g(o,a,de(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:de(o,n,t)}case "intersection":{let o=r.of.map(i=>de(i,n,t));if(!o.every(ar))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 ar=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);var ir=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e),ur={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"])},Zn=(e,n)=>ur[e].has(n);function Me(e,n=new WeakSet){return j(e,{seen:n,infer:new Map})}function lr(e){return Ee(e,{seen:new WeakSet,infer:new Map})}function tn(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?tn(e.of[0],n):"union";case "intersection":return e.of.length===1?tn(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 _(e,n,t){let r=j(n,t);return Zn(e,tn(n,t))?`(${r})`:r}function Ee(e,n){return e.map((t,r)=>{let o=j(t,n);return r===0&&cr(t)?`(${o})`:o}).join(", ")}var cr=e=>e.t==="fn"&&!!e.typeParams?.length||e.t==="overload"&&e.signatures.length===1&&!!e.signatures[0].typeParams?.length;function sr(e,n){return e?.length?`<${e.map(t=>pr(t,n)).join(", ")}>`:""}function pr(e,n){let t=e.bound?` extends ${j(e.bound,n)}`:"",r=e.default?` = ${j(e.default,n)}`:"";return `${e.name}${t}${r}`}function $e(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 nn(e,n,t){let r=$e(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}: ${j(u.type,r)}`}).join(", "),a=e.guard?`${e.params[e.guard.param]?.name??`arg${e.guard.param}`} is ${j(e.guard.type,r)}`:j(e.returns,r),i=sr(e.typeParams,r);return n==="=>"?`${i}(${o}) => ${a}`:`${i}(${o}): ${a}`}function j(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 ${j(r.bound,$e(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=`${_("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"?`...${_("postfix",a,n)}[]`:u==="optional"?`${_("postfix",a,n)}?`:j(a,n)}).join(", ")}]`;return e.readonly?`readonly ${o}`:o}case "union":{if(e.of.length===0)return "never";if(e.of.length===1)return j(e.of[0],n);if(t.has(e))return "\u2026";t.add(e);let r=e.of.map(o=>_("union",o,n)).join(" | ");return t.delete(e),r}case "intersection":{if(e.of.length===1)return j(e.of[0],n);if(t.has(e))return "\u2026";t.add(e);let r=e.of.map(o=>_("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])=>`${ir(o)?o:JSON.stringify(o)}${a.optional?"?":""}: ${j(a.type,n)}`);return e.index&&r.push(`[k: ${e.index.key}]: ${j(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=nn(e,"=>",n);return t.delete(e),r}case "overload":{if(e.signatures.length===1)return nn(e.signatures[0],"=>",n);if(t.has(e))return "\u2026";t.add(e);let r=e.signatures.map(o=>nn(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}<${Ee(e.args,n)}>`;return t.delete(e),r}case "keyof":return `keyof ${_("operand",e.of,n)}`;case "index":return `${_("postfix",e.obj,n)}[${j(e.key,n)}]`;case "mapped":{if(t.has(e))return "\u2026";t.add(e);let r=e.optional?"?":"",o=$e(n,[e.key]),a=`{ [${e.key} in ${j(e.over,n)}]${r}: ${j(e.body,o)} }`;return t.delete(e),a}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=$e(n,r.map(u=>u.name)),i=`${_("check",e.check,n)} extends ${_("extends",e.extends,o)} ? ${j(e.then,a)} : ${j(e.else,a)}`;return t.delete(e),i}case "returnType":return `ReturnType<${Ee([e.fn],n)}>`;case "parameters":return `Parameters<${Ee([e.fn],n)}>`}}function Xn(e){if(e.length===0)return "value";let n=e[e.length-1];if(/^\d+$/.test(n)){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?`${Xn(t.path)} is missing`:`${Xn(t.path)}: expected '${Me(t.expected)}', got '${Me(t.actual)}'`).join("; ")}function X(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),X(z(e.items).type,n));case "tuple":return n.has(e)?true:(n.add(e),e.elements.every(t=>X(z(t).type,n)));case "object":{if(n.has(e))return true;n.add(e);let t=Object.values(e.props).every(o=>X(z(o.type).type,n)),r=!e.index||X(z(e.index.value).type,n);return t&&r}case "union":return n.has(e)?true:(n.add(e),e.of.every(t=>X(t,n)));case "intersection":return n.has(e)?true:(n.add(e),e.of.every(t=>X(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 dr(e,n,t={}){let r=e;for(let o of n){let a=ee(r,o,t);if(a===null)return null;r=a;}return {type:r,completions:me(r,t)}}var mr=e=>e==="[]"||/^\d+$/.test(e);function ee(e,n,t,r=new Set){if(e.t==="var")return e.bound?ee(E(e,t),n,t,r):null;if(e.t==="mapped"){let a=E(e,t);return a===e?null:ee(a,n,t,r)}if(C(e,t)){let a=P(e);if(r.has(a))return null;r.add(a);let i=ee(L(e,t),n,t,r);return r.delete(a),i}let o=x(e);if(o!==e)return ee(o,n,t,r);switch(e.t){case "any":return e;case "object":{let a=N(e.props,n);return a?a.optional?b([a.type,{t:"undefined"}]):a.type:e.index?.key==="string"?e.index.value:null}case "array":return mr(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?b(u):null}case "union":{let a=[];for(let i of e.of){let u=ee(i,n,t,r);if(u===null)return null;a.push(u);}return a.length?b(a):null}case "intersection":{let a=e.of.map(i=>ee(i,n,t,r)).filter(i=>i!==null);return a.length?$({of:a}):null}default:return null}}function me(e,n,t=new WeakSet,r=new Set){if(e.t==="var")return e.bound?me(E(e,n),n,t,r):[];if(C(e,n)){let a=P(e);if(r.has(a))return [];r.add(a);let i=me(L(e,n),n,t,r);return r.delete(a),i}let o=x(e);if(o!==e)return me(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 me(u,n,t,r))i.has(l.key)||(i.add(l.key),a.push(l));return t.delete(e),a}default:return []}}export{T as $,m as A,qe as B,M as C,gn as D,vn as E,C as F,L as G,E as H,q as I,Qe as J,Tn as K,jn as L,gt as M,xt as N,Te as O,He as P,Mn as Q,Cn as R,Ln as S,ue as T,Wn as U,Ge as V,w as W,$t as X,Mt as Y,je as Z,Nt as _,et as a,At as aa,nt as b,_t as ba,tt as c,Q as ca,he as d,pe as da,rt as e,b as ea,ot as f,Xt as fa,W as g,Gn as ga,H as h,nr as ha,Se as i,or as ia,at as j,Zn as ja,Y as k,Me as ka,ne as l,lr as la,k as m,fr as ma,g as n,X as na,s as o,dr as oa,x as p,G as q,xe as r,ke as s,dt as t,N as u,z as v,Be as w,dn as x,mn as y,te as z};