@tslite/checker 1.9.0 → 1.13.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.
- package/LICENSE +55 -0
- package/NOTICE +14 -0
- package/dist/_namespaces/ts.d.ts +9 -0
- package/dist/_namespaces/ts.js +12 -0
- package/dist/_namespaces/ts.moduleSpecifiers.d.ts +1 -0
- package/dist/_namespaces/ts.moduleSpecifiers.js +2 -0
- package/dist/check.d.ts +75 -0
- package/dist/check.js +316 -0
- package/dist/checker.d.ts +5 -0
- package/dist/checker.js +20881 -0
- package/dist/index.d.ts +1 -1132
- package/dist/index.js +4 -1
- package/dist/moduleSpecifiers.d.ts +12 -0
- package/dist/moduleSpecifiers.js +104 -0
- package/dist/symbolWalker.d.ts +3 -0
- package/dist/symbolWalker.js +167 -0
- package/dist/types.d.ts +864 -0
- package/dist/types.js +355 -0
- package/dist/utilities.d.ts +34 -0
- package/dist/utilities.js +157 -0
- package/lib/lib.tslite.d.ts +56 -0
- package/package.json +28 -49
- package/dist/chunk-NXZILQOD.js +0 -1
- package/dist/index.cjs +0 -1
- package/dist/index.d.cts +0 -1132
- package/dist/types/index.cjs +0 -1
- package/dist/types/index.d.cts +0 -1135
- package/dist/types/index.d.ts +0 -1135
- package/dist/types/index.js +0 -1
package/dist/types/index.d.ts
DELETED
|
@@ -1,1135 +0,0 @@
|
|
|
1
|
-
/** Uma propriedade de um tipo objeto. */
|
|
2
|
-
interface Prop {
|
|
3
|
-
readonly type: Schema;
|
|
4
|
-
/** `true` quando a propriedade pode estar ausente (`{ x?: T }`). */
|
|
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;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Assinatura de índice de um objeto — `{ [k: string]: V }` (a forma de `Record<K, V>`).
|
|
16
|
-
* Coexiste com props nomeadas (`{ a: number; [k: string]: unknown }`), como no TS.
|
|
17
|
-
* O domínio da chave é só `string`/`number` (o que o TS permite).
|
|
18
|
-
*/
|
|
19
|
-
interface IndexSig {
|
|
20
|
-
readonly key: "string" | "number";
|
|
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;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Flag de um elemento de tupla, na forma da 3.9 (DECISIONS D49 da raiz):
|
|
28
|
-
* - `req` — elemento posicional normal (`A` em `[A, B]`);
|
|
29
|
-
* - `optional` — `A?` (pode estar ausente; `[A, B?]`); só TRAILING, posicional;
|
|
30
|
-
* - `rest` — `...T[]` (cauda de array); o tipo do elemento é o do array. Só no FIM.
|
|
31
|
-
*/
|
|
32
|
-
type ElementFlag = "req" | "optional" | "rest";
|
|
33
|
-
/** Um parâmetro de um tipo função. */
|
|
34
|
-
interface Param {
|
|
35
|
-
readonly name: string;
|
|
36
|
-
readonly type: Schema;
|
|
37
|
-
/** `true` quando o argumento pode ser omitido. */
|
|
38
|
-
readonly optional?: boolean;
|
|
39
|
-
/** `true` para o parâmetro rest (`...args: T[]`). */
|
|
40
|
-
readonly variadic?: boolean;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Type predicate `(v) => v is S` — quando a fn devolve `true`, o argumento na
|
|
44
|
-
* posição `param` é estreitado para `type` (S). `returns` da fn continua `boolean`
|
|
45
|
-
* (é o que roda); o `guard` é a info de narrowing. `filter`/`find` inferem S dele;
|
|
46
|
-
* `if (g(x))` estreita `x` (D13). Covariante em `type`.
|
|
47
|
-
*/
|
|
48
|
-
interface GuardSig {
|
|
49
|
-
readonly param: number;
|
|
50
|
-
readonly type: Schema;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Um type parameter — a ENTIDADE do tsc (`TypeParameter`), numa forma só para
|
|
54
|
-
* todo lugar que declara (`fn`/assinatura de `overload`, `TypeScheme`, `infer`).
|
|
55
|
-
*
|
|
56
|
-
* Tem dois papéis, como no tsc, onde a ocorrência de `T` no corpo **é** o objeto
|
|
57
|
-
* declarado:
|
|
58
|
-
* - **declaração** (nas listas `typeParams`/`params`/`infer`): a autoridade — nome,
|
|
59
|
-
* `bound` e `default`;
|
|
60
|
-
* - **ocorrência** (no corpo): nome e `bound`, que é o que a álgebra lê sem conhecer
|
|
61
|
-
* o binder (`apparentType` de `T extends C` é `C`, TC26). O `default` só existe na
|
|
62
|
-
* declaração: só a aridade o usa.
|
|
63
|
-
*
|
|
64
|
-
* A identidade é o NOME no escopo do binder, não a referência (o `Schema` é JSON
|
|
65
|
-
* imutável, TC17) — daí o `substitute` evitar captura (TC37).
|
|
66
|
-
*
|
|
67
|
-
* É um alias de tipo, e não uma `interface`, como todo membro da união `Schema`: só o
|
|
68
|
-
* alias ganha a assinatura de índice implícita, e é ela que deixa o `Schema` caber em
|
|
69
|
-
* `Record<string, unknown>` — o que um consumidor que recebe um tipo como objeto
|
|
70
|
-
* genérico espera (TC41).
|
|
71
|
-
*/
|
|
72
|
-
type VarSchema = {
|
|
73
|
-
readonly t: "var";
|
|
74
|
-
readonly name: string;
|
|
75
|
-
/** `extends bound` — a constraint (TC10). */
|
|
76
|
-
readonly bound?: Schema;
|
|
77
|
-
/** `= default` — só na DECLARAÇÃO (TC37). */
|
|
78
|
-
readonly default?: Schema;
|
|
79
|
-
};
|
|
80
|
-
/**
|
|
81
|
-
* O tipo de um valor na linguagem TSLite.
|
|
82
|
-
*
|
|
83
|
-
* O discriminador é `t`. Estruturas (object/array/union/fn) referenciam outros
|
|
84
|
-
* `Schema` recursivamente — inclusive de forma cíclica (ex.: `Node` que contém
|
|
85
|
-
* `Node[]`); as operações que percorrem `Schema` são cycle-safe.
|
|
86
|
-
*/
|
|
87
|
-
type Schema = {
|
|
88
|
-
readonly t: "any";
|
|
89
|
-
} | {
|
|
90
|
-
readonly t: "unknown";
|
|
91
|
-
} | {
|
|
92
|
-
readonly t: "string";
|
|
93
|
-
} | {
|
|
94
|
-
readonly t: "number";
|
|
95
|
-
} | {
|
|
96
|
-
readonly t: "boolean";
|
|
97
|
-
} | {
|
|
98
|
-
readonly t: "null";
|
|
99
|
-
} | {
|
|
100
|
-
readonly t: "undefined";
|
|
101
|
-
} | {
|
|
102
|
-
readonly t: "void";
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* A keyword `object` — o NÃO-PRIMITIVO (o `nonPrimitiveType` do tsc,
|
|
106
|
-
* `checker.ts:735`). Aceita objeto, array, tupla e função; recusa todo primitivo,
|
|
107
|
-
* `null` e `undefined`. A forma inspecionável dele é `{}` (TC54), então ler uma
|
|
108
|
-
* propriedade falha.
|
|
109
|
-
*
|
|
110
|
-
* O kind não se chama `object` porque esse nome é do objeto ESTRUTURAL (TC22); é o
|
|
111
|
-
* `format` que o imprime `object`, como lá.
|
|
112
|
-
*/
|
|
113
|
-
| {
|
|
114
|
-
readonly t: "nonPrimitive";
|
|
115
|
-
} | {
|
|
116
|
-
readonly t: "literal";
|
|
117
|
-
readonly value: string | number | boolean;
|
|
118
|
-
/**
|
|
119
|
-
* `fresh` = literal "fresco" de uma EXPRESSÃO de valor (`1`, `"x"`) — alarga
|
|
120
|
-
* pra base em posição de membro (array/object/tupla) ou inferido num `T[]`,
|
|
121
|
-
* mas preserva no topo (`const x = 1` → `1`; `id(1)` → `1`). Literal de
|
|
122
|
-
* `keyof`/declarado é NÃO-fresh → nunca alarga. Transparente p/ subtype/equals.
|
|
123
|
-
*/
|
|
124
|
-
readonly fresh?: boolean;
|
|
125
|
-
} | {
|
|
126
|
-
readonly t: "object";
|
|
127
|
-
readonly props: Readonly<Record<string, Prop>>;
|
|
128
|
-
/** Assinatura de índice (`Record<K, V>`); coexiste com `props`. Ausente = objeto fechado. */
|
|
129
|
-
readonly index?: IndexSig;
|
|
130
|
-
/** A ORIGEM: este tipo nasceu de um literal escrito no código — ver {@link fromLiteral}. */
|
|
131
|
-
readonly fromLiteral?: boolean;
|
|
132
|
-
/**
|
|
133
|
-
* O literal que o originou tinha um **spread** (`{ ...o, a: 1 }`) — o
|
|
134
|
-
* `ObjectFlags.ContainsSpread` do tsc. Só o widening o lê: um membro assim não
|
|
135
|
-
* CONTRIBUI as suas chaves para os irmãos de uma união (mas recebe as deles).
|
|
136
|
-
* Ver {@link widenObjectLiteral} e TC53.
|
|
137
|
-
*/
|
|
138
|
-
readonly hasSpread?: boolean;
|
|
139
|
-
} | {
|
|
140
|
-
readonly t: "array";
|
|
141
|
-
readonly items: Schema;
|
|
142
|
-
/**
|
|
143
|
-
* `readonly T[]` (o `ReadonlyArray<T>` do TS). Só afeta a RELAÇÃO, e num
|
|
144
|
-
* sentido: `T[] ≤ readonly T[]`, mas **não** o contrário — dar um readonly
|
|
145
|
-
* onde se espera mutável perderia a garantia. TC28.
|
|
146
|
-
*/
|
|
147
|
-
readonly readonly?: boolean;
|
|
148
|
-
/** A ORIGEM: este tipo nasceu de um literal escrito no código — ver {@link fromLiteral}. */
|
|
149
|
-
readonly fromLiteral?: boolean;
|
|
150
|
-
} | {
|
|
151
|
-
readonly t: "tuple";
|
|
152
|
-
readonly elements: readonly Schema[];
|
|
153
|
-
readonly flags?: readonly ElementFlag[];
|
|
154
|
-
/** `readonly [A, B]` — mesma regra do array readonly (TC28). */
|
|
155
|
-
readonly readonly?: boolean;
|
|
156
|
-
/** A ORIGEM: este tipo nasceu de um literal escrito no código — ver {@link fromLiteral}. */
|
|
157
|
-
readonly fromLiteral?: boolean;
|
|
158
|
-
} | {
|
|
159
|
-
readonly t: "union";
|
|
160
|
-
readonly of: readonly Schema[];
|
|
161
|
-
} | {
|
|
162
|
-
readonly t: "fn";
|
|
163
|
-
readonly params: readonly Param[];
|
|
164
|
-
readonly returns: Schema;
|
|
165
|
-
/** Type predicate `(v) => v is S` — narrowing (ver `GuardSig`). */
|
|
166
|
-
readonly guard?: GuardSig;
|
|
167
|
-
/**
|
|
168
|
-
* As DECLARAÇÕES dos type params, em ordem (`<T, K extends keyof T = D>`).
|
|
169
|
-
* Ausente = a assinatura **não é genérica** — que é o que o tsc diz quando
|
|
170
|
-
* `Signature.typeParameters` é `undefined`.
|
|
171
|
-
*
|
|
172
|
-
* A ordem é a declarada, nunca a da aparição das `var`: sem ela não dá para
|
|
173
|
-
* ligar o `f<T>(x)` nem checar aridade, e o tsc trata a chamada como
|
|
174
|
-
* não-genérica (TS2558). Cada entrada é a declaração inteira (TC37).
|
|
175
|
-
*/
|
|
176
|
-
readonly typeParams?: readonly VarSchema[];
|
|
177
|
-
} | {
|
|
178
|
-
readonly t: "overload";
|
|
179
|
-
readonly signatures: readonly {
|
|
180
|
-
readonly t: "fn";
|
|
181
|
-
readonly params: readonly Param[];
|
|
182
|
-
readonly returns: Schema;
|
|
183
|
-
readonly guard?: GuardSig;
|
|
184
|
-
/** As declarações dos type params desta assinatura (ver o `fn` acima). */
|
|
185
|
-
readonly typeParams?: readonly VarSchema[];
|
|
186
|
-
}[];
|
|
187
|
-
} | {
|
|
188
|
-
readonly t: "keyof";
|
|
189
|
-
readonly of: Schema;
|
|
190
|
-
} | {
|
|
191
|
-
readonly t: "index";
|
|
192
|
-
readonly obj: Schema;
|
|
193
|
-
readonly key: Schema;
|
|
194
|
-
} | {
|
|
195
|
-
readonly t: "mapped";
|
|
196
|
-
readonly key: string;
|
|
197
|
-
readonly over: Schema;
|
|
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
|
-
*/
|
|
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;
|
|
224
|
-
} | {
|
|
225
|
-
readonly t: "conditional";
|
|
226
|
-
readonly check: Schema;
|
|
227
|
-
readonly extends: Schema;
|
|
228
|
-
readonly then: Schema;
|
|
229
|
-
readonly else: Schema;
|
|
230
|
-
readonly infer?: readonly VarSchema[];
|
|
231
|
-
readonly distributive?: true;
|
|
232
|
-
} | {
|
|
233
|
-
readonly t: "intersection";
|
|
234
|
-
readonly of: readonly Schema[];
|
|
235
|
-
} | {
|
|
236
|
-
readonly t: "returnType";
|
|
237
|
-
readonly fn: Schema;
|
|
238
|
-
} | {
|
|
239
|
-
readonly t: "parameters";
|
|
240
|
-
readonly fn: Schema;
|
|
241
|
-
} | VarSchema | {
|
|
242
|
-
/**
|
|
243
|
-
* `typeof x` em posição de TIPO — o *type query* do TS.
|
|
244
|
-
*
|
|
245
|
-
* É o único nó do vocabulário que **não** se resolve pela álgebra: ele
|
|
246
|
-
* pergunta o tipo de um **VALOR**, e valor é assunto do escopo, que este
|
|
247
|
-
* package não conhece (zero-dep, por desenho). Quem resolve é o checker,
|
|
248
|
-
* no ponto de USO — espelhando o `getTypeFromTypeQueryNode` do tsc, que é
|
|
249
|
-
* lazy (`links.resolvedType`) pelo mesmo motivo.
|
|
250
|
-
*
|
|
251
|
-
* Um `typeQuery` que chegue à álgebra é sinal de que a resolução não
|
|
252
|
-
* aconteceu (nome inexistente — já reportado); os algoritmos o tratam como
|
|
253
|
-
* folha opaca, sem estourar.
|
|
254
|
-
*/
|
|
255
|
-
readonly t: "typeQuery";
|
|
256
|
-
/** O entity name, em partes: `typeof obj.m` → `["obj", "m"]`. */
|
|
257
|
-
readonly path: readonly string[];
|
|
258
|
-
} | {
|
|
259
|
-
readonly t: "apply";
|
|
260
|
-
readonly name: string;
|
|
261
|
-
readonly args: readonly Schema[];
|
|
262
|
-
};
|
|
263
|
-
type AnySchema = Extract<Schema, {
|
|
264
|
-
t: "any";
|
|
265
|
-
}>;
|
|
266
|
-
type UnknownSchema = Extract<Schema, {
|
|
267
|
-
t: "unknown";
|
|
268
|
-
}>;
|
|
269
|
-
type LiteralSchema = Extract<Schema, {
|
|
270
|
-
t: "literal";
|
|
271
|
-
}>;
|
|
272
|
-
type ObjectSchema = Extract<Schema, {
|
|
273
|
-
t: "object";
|
|
274
|
-
}>;
|
|
275
|
-
type ArraySchema = Extract<Schema, {
|
|
276
|
-
t: "array";
|
|
277
|
-
}>;
|
|
278
|
-
type TupleSchema = Extract<Schema, {
|
|
279
|
-
t: "tuple";
|
|
280
|
-
}>;
|
|
281
|
-
type UnionSchema = Extract<Schema, {
|
|
282
|
-
t: "union";
|
|
283
|
-
}>;
|
|
284
|
-
type FnSchema$1 = Extract<Schema, {
|
|
285
|
-
t: "fn";
|
|
286
|
-
}>;
|
|
287
|
-
type OverloadSchema = Extract<Schema, {
|
|
288
|
-
t: "overload";
|
|
289
|
-
}>;
|
|
290
|
-
type KeyofSchema = Extract<Schema, {
|
|
291
|
-
t: "keyof";
|
|
292
|
-
}>;
|
|
293
|
-
type IndexSchema = Extract<Schema, {
|
|
294
|
-
t: "index";
|
|
295
|
-
}>;
|
|
296
|
-
type MappedSchema = Extract<Schema, {
|
|
297
|
-
t: "mapped";
|
|
298
|
-
}>;
|
|
299
|
-
/** Os modificadores escritos de um mapped (ver o `MappedSchema`). */
|
|
300
|
-
type MappedModifiers = Pick<MappedSchema, "optional" | "readonly" | "excludeOptional" | "excludeReadonly">;
|
|
301
|
-
type ConditionalSchema = Extract<Schema, {
|
|
302
|
-
t: "conditional";
|
|
303
|
-
}>;
|
|
304
|
-
type ApplySchema = Extract<Schema, {
|
|
305
|
-
t: "apply";
|
|
306
|
-
}>;
|
|
307
|
-
type ScalarSchema = Extract<Schema, {
|
|
308
|
-
t: "string" | "number" | "boolean" | "null" | "undefined";
|
|
309
|
-
}>;
|
|
310
|
-
/**
|
|
311
|
-
* Um *type scheme*: um tipo nomeado parametrizado, `type Pair<A, B> = body`.
|
|
312
|
-
* `params` são as DECLARAÇÕES dos type params (na ordem); `body` é o `Schema` que
|
|
313
|
-
* as usa via `var`. Um tipo nomeado não-genérico é só um scheme com `params: []`.
|
|
314
|
-
*
|
|
315
|
-
* Cada declaração carrega o `extends` (`bound`) e o `=` (`default`), como a do
|
|
316
|
-
* `fn` — a mesma entidade (TC37): um param com default pode ser omitido na
|
|
317
|
-
* aplicação (`Box` ≡ `Box<number>` para `type Box<T = number>`), o default pode
|
|
318
|
-
* citar os params anteriores (`<T, U = T[]>`), e um arg tem de caber no bound
|
|
319
|
-
* (TS2344). Quem os cobra é a aplicação (`expand`, o checker).
|
|
320
|
-
*/
|
|
321
|
-
interface TypeScheme {
|
|
322
|
-
readonly params: readonly VarSchema[];
|
|
323
|
-
readonly body: Schema;
|
|
324
|
-
}
|
|
325
|
-
/** Registro de type schemes por nome — consultado pela expansão (ver `expand`). */
|
|
326
|
-
type Schemes = Readonly<Record<string, TypeScheme>>;
|
|
327
|
-
declare const s: {
|
|
328
|
-
readonly any: Schema;
|
|
329
|
-
readonly unknown: Schema;
|
|
330
|
-
readonly string: Schema;
|
|
331
|
-
readonly number: Schema;
|
|
332
|
-
readonly boolean: Schema;
|
|
333
|
-
readonly null: Schema;
|
|
334
|
-
readonly undefined: Schema;
|
|
335
|
-
readonly void: Schema;
|
|
336
|
-
/** A keyword `object`: o não-primitivo (TC54). */
|
|
337
|
-
readonly nonPrimitive: Schema;
|
|
338
|
-
readonly literal: (value: string | number | boolean) => Schema;
|
|
339
|
-
readonly object: (props: Record<string, Prop>, index?: IndexSig) => Schema;
|
|
340
|
-
/** `Record<K, V>` — objeto só com assinatura de índice `{ [k: K]: V }`. */
|
|
341
|
-
readonly record: (value: Schema, key?: "string" | "number") => Schema;
|
|
342
|
-
readonly array: (items: Schema, ro?: boolean) => Schema;
|
|
343
|
-
/**
|
|
344
|
-
* Tupla `[A, B]`, `[A, B?]` ou `[A, ...B[]]` — comprimento e posições conhecidos.
|
|
345
|
-
*
|
|
346
|
-
* O elemento **opcional** nasce com `undefined` no tipo, e é por isso que ninguém
|
|
347
|
-
* precisa lembrar de pedi-lo depois: é o `getTypeFromOptionalTypeNode` do tsc
|
|
348
|
-
* (`checker.ts:12229`), `strictNullChecks ? getOptionalType(type) : type` ao ler o
|
|
349
|
-
* nó `number?` — e é o que faz ele imprimir `[string, (number | undefined)?]`.
|
|
350
|
-
*
|
|
351
|
-
* A flag `optional` continua marcando a ARIDADE (o `minLength`), que é a outra
|
|
352
|
-
* pergunta: `[A, B?]` tem comprimento `1 | 2`, e é isso que o separa de
|
|
353
|
-
* `[A, B | undefined]`, que o tsc recusa um contra o outro. O `rest` NÃO ganha
|
|
354
|
-
* `undefined` — lá ele não passa por esse nó.
|
|
355
|
-
*/
|
|
356
|
-
readonly tuple: (elements: readonly Schema[], flags?: readonly ElementFlag[], ro?: boolean) => Schema;
|
|
357
|
-
/**
|
|
358
|
-
* `typeParams` são as DECLARAÇÕES dos type params, em ordem (`s.typeParam`) —
|
|
359
|
-
* omitir significa "não é genérica" (e um `f<T>(x)` sobre ela vira erro de
|
|
360
|
-
* aridade, como no tsc). A declaração é a autoridade: cada ocorrência no corpo sai
|
|
361
|
-
* CARIMBADA com o bound dela (TC37), então `s.var("K")` e `s.var("K", bound)` dão
|
|
362
|
-
* a mesma assinatura.
|
|
363
|
-
*/
|
|
364
|
-
readonly fn: (params: Param[], returns: Schema, typeParams?: readonly VarSchema[]) => Schema;
|
|
365
|
-
/** Type predicate `(…) => v is S` — fn que devolve `boolean` e estreita o param `i`. */
|
|
366
|
-
readonly guard: (params: Param[], type: Schema, param?: number) => Schema;
|
|
367
|
-
/**
|
|
368
|
-
* Overload: o mesmo valor com várias assinaturas de chamada (a 1ª que casa
|
|
369
|
-
* vence). Ex. Ramda `add`: `[(a,b)=>number, (a)=>(b)=>number]`. Cada assinatura
|
|
370
|
-
* genérica sai com as ocorrências carimbadas, como no `s.fn`.
|
|
371
|
-
*/
|
|
372
|
-
readonly overload: (signatures: FnSchema$1[]) => Schema;
|
|
373
|
-
/** `keyof T` — a união (de literais) das chaves de `T`. Resolve quando `T` é concreto. */
|
|
374
|
-
readonly keyof: (of: Schema) => Schema;
|
|
375
|
-
/** `T[K]` — acesso indexado. Resolve quando `T` é objeto/array e `K` é literal/união. */
|
|
376
|
-
readonly index: (obj: Schema, key: Schema) => Schema;
|
|
377
|
-
/** `{ [key in over]?: body }` — mapped type. Resolve quando `over` dá chaves literais. */
|
|
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;
|
|
381
|
-
/** `check extends ext ? then : els` — conditional. `infer` = as declarações dos
|
|
382
|
-
* `infer U` introduzidos no `ext` (as posições são `var(U)`); resolve via `unify`
|
|
383
|
-
* (ver `resolveConditional`). Sem `infer` → conditional simples (discriminante concreto).
|
|
384
|
-
* As ocorrências das `infer`-vars saem carimbadas com a declaração, como no `s.fn`. */
|
|
385
|
-
readonly conditional: (check: Schema, ext: Schema, then: Schema, els: Schema, infer?: readonly VarSchema[]) => Schema;
|
|
386
|
-
/**
|
|
387
|
-
* Um type scheme — `type Name<P…> = body` (o registro de `Schemes`). As
|
|
388
|
-
* ocorrências dos params no corpo saem carimbadas com a declaração, como no `s.fn`
|
|
389
|
-
* (TC37). É a porta de um scheme montado por API; o `createEnv` passa os `schemes`
|
|
390
|
-
* do ambiente por ela.
|
|
391
|
-
*/
|
|
392
|
-
readonly scheme: (params: readonly VarSchema[], body: Schema) => TypeScheme;
|
|
393
|
-
/** `A & B` — interseção. Funde objetos concretos; lazy com `var`. */
|
|
394
|
-
/**
|
|
395
|
-
* `A & B`, pelas leis do reticulado — o construtor NORMALIZA (TC20), como o
|
|
396
|
-
* `s.union` absorve o topo (TC44): `& never` é `never`, o escalar disjunto zera
|
|
397
|
-
* (`number & string`, `1 & 2`, `"a" & undefined` → `never`) e a subsunção mantém o
|
|
398
|
-
* mais estreito (`string & "x"` → `"x"`). Medido na 3.9.10, é o que o
|
|
399
|
-
* `getIntersectionType` faz — e são os mesmos vereditos.
|
|
400
|
-
*
|
|
401
|
-
* Sem isto a interseção disjunta atravessava intacta e contaminava quem a
|
|
402
|
-
* contivesse: `null[] | ("a" & undefined)` deixava de ser reflexivo, onde no tsc a
|
|
403
|
-
* união é só `null[]`.
|
|
404
|
-
*/
|
|
405
|
-
readonly intersection: (of: readonly Schema[]) => Schema;
|
|
406
|
-
/** Açúcar para `A & B` (dois membros). */
|
|
407
|
-
readonly and: (a: Schema, b: Schema) => Schema;
|
|
408
|
-
/** `ReturnType<F>` — o retorno de uma `fn`. Resolve quando `F` é concreto. */
|
|
409
|
-
readonly returnType: (fn: Schema) => Schema;
|
|
410
|
-
readonly parameters: (fn: Schema) => Schema;
|
|
411
|
-
/** A OCORRÊNCIA de um type param (`T` no corpo), com a constraint da declaração. */
|
|
412
|
-
readonly var: (name: string, bound?: Schema) => VarSchema;
|
|
413
|
-
/**
|
|
414
|
-
* A DECLARAÇÃO de um type param (`<K extends C = D>`) — a entrada das listas
|
|
415
|
-
* `fn.typeParams`, `TypeScheme.params` e `conditional.infer` (TC37). As
|
|
416
|
-
* ocorrências no corpo são `s.var(name, bound)`.
|
|
417
|
-
*/
|
|
418
|
-
readonly typeParam: (name: string, decl?: {
|
|
419
|
-
bound?: Schema;
|
|
420
|
-
default?: Schema;
|
|
421
|
-
}) => VarSchema;
|
|
422
|
-
/**
|
|
423
|
-
* `typeof x` em posição de tipo. Resolvido pelo **checker** (precisa do escopo
|
|
424
|
-
* de valor), não pela álgebra — ver o JSDoc do nó `typeQuery`.
|
|
425
|
-
*/
|
|
426
|
-
readonly typeQuery: (path: readonly string[]) => Schema;
|
|
427
|
-
/** Construtor de tipo aplicado: `apply("Map", [K, V])` ⇒ `Map<K, V>`. */
|
|
428
|
-
readonly apply: (name: string, args?: readonly Schema[]) => Schema;
|
|
429
|
-
/** Açúcar para `Promise<T>` — o que `await` desembrulha. */
|
|
430
|
-
readonly promise: (value: Schema) => Schema;
|
|
431
|
-
/**
|
|
432
|
-
* A união, pela forma CANÔNICA barata — o `getUnionType` do tsc no modo padrão
|
|
433
|
-
* (`UnionReduction.Literal`, `checker.ts:12362`), passo a passo:
|
|
434
|
-
*
|
|
435
|
-
* - achata as aninhadas, e o `never` some (o `addTypesToUnion`);
|
|
436
|
-
* - **absorve o topo**: com `any` é `any`, com `unknown` é `unknown` (TC44);
|
|
437
|
-
* - **deduplica** o que lá tem a mesma identidade: a mesma referência, e as FOLHAS
|
|
438
|
-
* por valor (primitivos e literais são internados lá). Dois objetos iguais de
|
|
439
|
-
* origens diferentes NÃO se unem aqui — lá também não: têm identidades distintas,
|
|
440
|
-
* e uni-los é a redução por SUBTIPO, que é o {@link normalizeUnion}, sob pedido;
|
|
441
|
-
* - tira o literal que a base já cobre (`"a" | string` é `string` — o
|
|
442
|
-
* `removeRedundantLiteralTypes`), e `true | false` é `boolean` (lá `boolean` É
|
|
443
|
-
* essa união, internada; aqui é kind próprio — TC23);
|
|
444
|
-
* - zero membros é `never`, e UM membro é ele mesmo.
|
|
445
|
-
*
|
|
446
|
-
* É a porta única: um tipo que o tsc não saberia construir não deve existir (TC50).
|
|
447
|
-
*/
|
|
448
|
-
readonly union: (of: readonly Schema[]) => Schema;
|
|
449
|
-
};
|
|
450
|
-
/** Resolve um `keyof`/`index` um nível quando possível; senão, devolve `t` como está. */
|
|
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;
|
|
477
|
-
/**
|
|
478
|
-
* O acesso indexado cuja chave **não existe** no objeto — o que o tsc reporta como
|
|
479
|
-
* TS2339 e resolve para o `errorType` (`getIndexedAccessType`:
|
|
480
|
-
* `getIndexedAccessTypeOrUndefined(…) || (accessNode ? errorType : unknownType)`).
|
|
481
|
-
*
|
|
482
|
-
* É um `unknown` de identidade única, como o {@link silentNever} é um `never` (TC39):
|
|
483
|
-
* quem tem o NÓ da anotação o reconhece por referência, reporta e o troca pelo
|
|
484
|
-
* tipo-erro; quem não tem lê um `unknown` — o que o tsc faz sem `accessNode`. A
|
|
485
|
-
* identidade não sobrevive a `JSON.stringify` nem à reconstrução do nó, e não
|
|
486
|
-
* precisa: ela vive entre a resolução e quem a consulta.
|
|
487
|
-
*/
|
|
488
|
-
declare const missingType: Schema;
|
|
489
|
-
/** O acesso indexado resolveu para "a chave não existe"? (identidade, não forma.) */
|
|
490
|
-
declare const isMissingType: (t: Schema) => boolean;
|
|
491
|
-
/**
|
|
492
|
-
* A ORIGEM de um tipo de objeto, array ou tupla: ele nasceu de um **literal escrito no
|
|
493
|
-
* código** (`{ a: 1 }`, `["a"]`) e não de uma anotação ou de um alias. É o
|
|
494
|
-
* `ObjectFlags.ObjectLiteral | ArrayLiteral` do tsc — *"originates in an object/array
|
|
495
|
-
* literal"* (`types.ts:4498` e `4507` na tag).
|
|
496
|
-
*
|
|
497
|
-
* **Não é frescura.** No tsc as duas marcas convivem e são lidas por quem responde a
|
|
498
|
-
* perguntas diferentes: a `FreshLiteral` some quando o tipo é regularizado
|
|
499
|
-
* (`getRegularTypeOfObjectLiteral` faz `objectFlags & ~FreshLiteral`) e é o que a
|
|
500
|
-
* checagem de propriedade excedente lê; a de ORIGEM **nunca** é removida, sobrevive ao
|
|
501
|
-
* widening, e é o que a INFERÊNCIA lê (`isObjectOrArrayLiteralType`, `checker.ts:19138`).
|
|
502
|
-
*
|
|
503
|
-
* Aqui só a origem mora no tipo. A frescura continua vindo do NÓ — o `ObjectExpression`
|
|
504
|
-
* numa borda contextual —, que é a decisão do checker D47 e responde bem onde ela é
|
|
505
|
-
* usada. A origem não pode vir do nó: a inferência roda na álgebra, longe dele.
|
|
506
|
-
*
|
|
507
|
-
* Para que serve: o `getCovariantInference` junta os candidatos de origem literal num só
|
|
508
|
-
* antes de escolher o supertipo comum, e é isso que faz `f({ a: 1 }, 1)` inferir `1`
|
|
509
|
-
* (com o literal acusado) enquanto `f(o, 1)` com `o` declarado infere `{ a: number }`
|
|
510
|
-
* (com o `1` acusado). Sem a marca, o erro sai no argumento errado (TC47).
|
|
511
|
-
*/
|
|
512
|
-
declare const isObjectOrArrayLiteral: (t: Schema) => boolean;
|
|
513
|
-
/** O mesmo tipo marcado como vindo de um literal escrito (ver {@link isObjectOrArrayLiteral}). */
|
|
514
|
-
declare const asLiteralOrigin: (t: Schema) => Schema;
|
|
515
|
-
/**
|
|
516
|
-
* A propriedade DECLARADA com esta chave, ou `undefined`. A forma de um dado são só as
|
|
517
|
-
* props declaradas, e nenhum nome de chave é especial: `props["toString"]` num objeto
|
|
518
|
-
* comum devolveria o que o protótipo do JS tem, e aqui a chave ausente é ausente
|
|
519
|
-
* (→ `no-such-member`). É o `getOwn` do dicionário (`./dict`) especializado em `Prop`.
|
|
520
|
-
*/
|
|
521
|
-
declare const ownProp: (props: Readonly<Record<string, Prop>>, key: string) => Prop | undefined;
|
|
522
|
-
/**
|
|
523
|
-
* Separa `undefined` de um tipo: devolve o tipo **sem** `undefined` e se ele estava
|
|
524
|
-
* presente. Em posição de **propriedade**, `T | undefined` é uma propriedade
|
|
525
|
-
* **opcional** de tipo `T` — espelha o `JSON.stringify` (chave `undefined` some).
|
|
526
|
-
* Só mexe em `undefined`, nunca em `null` (que é valor JSON presente). Usado pelo
|
|
527
|
-
* `serializable` e pelo `toJsonSchema` (mesma regra dos dois lados).
|
|
528
|
-
*/
|
|
529
|
-
declare function withoutUndefined(t: Schema): {
|
|
530
|
-
type: Schema;
|
|
531
|
-
hadUndefined: boolean;
|
|
532
|
-
};
|
|
533
|
-
/**
|
|
534
|
-
* Nome de propriedade NUMÉRICO canônico — o `isNumericLiteralName` do tsc: o texto é
|
|
535
|
-
* exatamente `ToString(ToNumber(texto))`. `"1"`, `"-1"`, `"0.5"`, `"1e+21"`, `"NaN"`,
|
|
536
|
-
* `"Infinity"` são; `"01"`, `"1.0"`, `"-0"`, `"1e3"`, `"x"` não. É o que uma index
|
|
537
|
-
* signature `number` alcança: só essas chaves; as demais ficam livres.
|
|
538
|
-
*/
|
|
539
|
-
declare const isNumericLiteralName: (name: string) => boolean;
|
|
540
|
-
|
|
541
|
-
/** A flag do elemento `i` de uma tupla (ausente = `req`). */
|
|
542
|
-
declare const flagAt: (t: TupleSchema, i: number) => ElementFlag;
|
|
543
|
-
/** A tupla termina num elemento `rest`? (senão tem comprimento limitado; `optional`
|
|
544
|
-
* NÃO conta). */
|
|
545
|
-
declare const isVariadicTuple: (t: TupleSchema) => boolean;
|
|
546
|
-
/** O índice do elemento `rest` (sempre o último), ou -1. */
|
|
547
|
-
declare const restIndex: (t: TupleSchema) => number;
|
|
548
|
-
|
|
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;
|
|
557
|
-
/** Um ponto de incompatibilidade entre `actual` e `expected`. */
|
|
558
|
-
interface Incompatibility {
|
|
559
|
-
/** Caminho até o ponto: `[]` = raiz, `["count"]`, `["user", "name"]`, `["items", 3]`. */
|
|
560
|
-
readonly path: readonly PathSegment[];
|
|
561
|
-
/** O tipo esperado naquele ponto. */
|
|
562
|
-
readonly expected: Schema;
|
|
563
|
-
/** O tipo que veio — ausente quando `kind === "missing"` (a prop não existe). */
|
|
564
|
-
readonly actual?: Schema;
|
|
565
|
-
readonly kind: IncompatibilityKind;
|
|
566
|
-
}
|
|
567
|
-
/** Renderiza um `typeDiff` numa frase legível (o feedback que brilha). Missing
|
|
568
|
-
* são AGREGADOS (como o tsc: "missing the following properties: a, b, c"). */
|
|
569
|
-
declare function formatTypeDiff(incs: readonly Incompatibility[]): string;
|
|
570
|
-
|
|
571
|
-
/**
|
|
572
|
-
* `typeDiff(a, b)` — POR QUE `a ⊄ b`: lista de incompatibilidades com caminho +
|
|
573
|
-
* razão (≅ a elaboração do tsc). É o `subtype` em **modo elaboração** (uma fonte de
|
|
574
|
-
* verdade, sem walk paralelo — a lição do `propertiesRelatedTo`). Caminho FRIO: roda
|
|
575
|
-
* só ao reportar; NÃO usa o relation cache. `[]` = compatível.
|
|
576
|
-
*/
|
|
577
|
-
declare function typeDiff(a: Schema, b: Schema, schemes?: Schemes): Incompatibility[];
|
|
578
|
-
/** `true` se um valor de tipo `a` pode ser usado onde se espera `b`. */
|
|
579
|
-
declare function subtype(a: Schema, b: Schema, schemes?: Schemes): boolean;
|
|
580
|
-
/**
|
|
581
|
-
* `true` se `a` é COMPARÁVEL a `b` — o `isTypeComparableTo` do tsc, a relação que
|
|
582
|
-
* decide se uma asserção de tipo se sobrepõe. É direcional como o `subtype` (a
|
|
583
|
-
* estrutura do alvo continua sendo exigida da origem), mas folgada onde o tsc a
|
|
584
|
-
* folga: folhas nas duas direções, união na origem por algum membro, `unknown`
|
|
585
|
-
* sobreposto a tudo, prop opcional lida como `T | undefined`. A regra completa do
|
|
586
|
-
* `as` (alargar a origem e testar os dois sentidos) é de quem tipa a asserção.
|
|
587
|
-
*/
|
|
588
|
-
declare function comparable(a: Schema, b: Schema, schemes?: Schemes): boolean;
|
|
589
|
-
/** Igualdade estrutural: cada um é atribuível ao outro. */
|
|
590
|
-
declare function equals(a: Schema, b: Schema, schemes?: Schemes): boolean;
|
|
591
|
-
/**
|
|
592
|
-
* Resolve um conditional `check extends ext ? then : else` escolhendo o ramo —
|
|
593
|
-
* **só quando o discriminante é ground** (sem `var` livre em `check`/`extends`),
|
|
594
|
-
* via `subtype(check, ext)`. Com var no discriminante → `null` (fica lazy até o
|
|
595
|
-
* `substitute` ligar as vars). Os ramos `then`/`else` podem ter vars (resolvem
|
|
596
|
-
* depois). É o análogo do `resolveTypeOp`/`resolveMapped` para conditionals.
|
|
597
|
-
*/
|
|
598
|
-
declare function resolveConditional(c: ConditionalSchema, schemes: Schemes): Schema | null;
|
|
599
|
-
type FnSchema = Extract<Schema, {
|
|
600
|
-
t: "fn";
|
|
601
|
-
}>;
|
|
602
|
-
/**
|
|
603
|
-
* O tipo do argumento na posição `i` — o `tryGetTypeAtPosition` do tsc: o parâmetro
|
|
604
|
-
* fixo; depois dele, o elemento do rest (array) ou a posição do rest (tupla).
|
|
605
|
-
* `undefined` sem parâmetro ali, ou com rest genérico (`...args: T`), que só se
|
|
606
|
-
* resolve instanciado.
|
|
607
|
-
*/
|
|
608
|
-
declare function typeAtPosition(sig: FnSchema, i: number): Schema | undefined;
|
|
609
|
-
/**
|
|
610
|
-
* Normaliza uma união: achata, absorve `any`/`unknown`, deduplica e remove
|
|
611
|
-
* membros subsumidos por outro (`string | "x"` → `string`). Colapsa união de um
|
|
612
|
-
* membro no próprio membro. União vazia permanece vazia (renderiza `never`).
|
|
613
|
-
*
|
|
614
|
-
* É a redução por SUBTIPO do tsc — o `getUnionType` com `UnionReduction.Subtype`,
|
|
615
|
-
* pedido explicitamente por quem a quer (o `getCommonSupertype`, o widening de uma
|
|
616
|
-
* união com `{}`, os candidatos de inferência). O construtor `s.union` faz só a
|
|
617
|
-
* barata; esta custa uma relação por par (TC50).
|
|
618
|
-
*/
|
|
619
|
-
declare function normalizeUnion(members: readonly Schema[]): Schema;
|
|
620
|
-
|
|
621
|
-
/**
|
|
622
|
-
* Profundidade máxima de **comparações aninhadas** na relação — o `depth` do
|
|
623
|
-
* `recursiveTypeRelatedTo` do tsc, que corta em 100 (`checker.ts:16217` na tag) e
|
|
624
|
-
* reporta "Excessive stack depth comparing types" (TS2321).
|
|
625
|
-
*
|
|
626
|
-
* É o número do tsc, não um acima dele: todo teto nosso é ≤ ao dele (DECISIONS D50 da
|
|
627
|
-
* raiz), porque o checker roda no navegador do cliente e não num build. Medido, a folga
|
|
628
|
-
* é grande — a suíte inteira alcança 5 comparações aninhadas no `@tslite/types` e 14 no
|
|
629
|
-
* `@tslite/checker`, e a pilha do V8 aguenta ~1561. O profile pode apertar
|
|
630
|
-
* ({@link configureTypeLimits}); afrouxar acima de 100 é defeito.
|
|
631
|
-
*/
|
|
632
|
-
declare const TYPE_EVAL_DEPTH_LIMIT = 100;
|
|
633
|
-
/**
|
|
634
|
-
* Profundidade máxima de **instanciação** — o `instantiationDepth` do tsc, que corta em
|
|
635
|
-
* 50 (`instantiateType`, `checker.ts:14293`) e reporta TS2589. É outro eixo que o da
|
|
636
|
-
* relação: ali se COMPARA, aqui se CONSTRÓI um tipo novo a cada passo, e é o que um
|
|
637
|
-
* genérico que se instancia sem fim faz crescer.
|
|
638
|
-
*/
|
|
639
|
-
declare const INSTANTIATION_DEPTH_LIMIT = 50;
|
|
640
|
-
/**
|
|
641
|
-
* Teto de **contagem** de instanciações, por expressão — o `instantiationCount` do tsc
|
|
642
|
-
* (5.000.000 na mesma linha), zerado a cada `checkExpression`/`checkSourceElement`
|
|
643
|
-
* (`checker.ts:29192`, `34607`). Ele pega o que a profundidade não pega: uma explosão
|
|
644
|
-
* LARGA, em que cada instanciação é rasa mas há milhões delas.
|
|
645
|
-
*/
|
|
646
|
-
declare const INSTANTIATION_COUNT_LIMIT = 5000000;
|
|
647
|
-
/** Os tetos de avaliação de tipo (Proposal 003), todos ≤ aos do tsc (D50 da raiz):
|
|
648
|
-
* `maxTypeDepth` ↔ TS2321 (relação); `maxInstantiationDepth`/`maxInstantiationCount` ↔
|
|
649
|
-
* TS2589 (instanciação); `maxUnionMembers` ↔ TS2590; `maxOverloadSignatures` é nosso (o
|
|
650
|
-
* tsc não tem teto ali). */
|
|
651
|
-
interface TypeEvalLimits {
|
|
652
|
-
readonly maxTypeDepth: number;
|
|
653
|
-
readonly maxInstantiationDepth: number;
|
|
654
|
-
readonly maxInstantiationCount: number;
|
|
655
|
-
readonly maxUnionMembers: number;
|
|
656
|
-
readonly maxOverloadSignatures: number;
|
|
657
|
-
}
|
|
658
|
-
/** Default standalone (quando o `@tslite/types` roda sem profile — infer/json-schema).
|
|
659
|
-
* Cada número é o do tsc ou menor (D50): nenhum deles é escolha nossa "folgada". */
|
|
660
|
-
declare const DEFAULT_TYPE_LIMITS: TypeEvalLimits;
|
|
661
|
-
/** Configura os tetos globais (o checker chama no início de `check()` a partir do
|
|
662
|
-
* profile). Mescla sobre o default. Resetar com {@link resetTypeLimits} no finally. */
|
|
663
|
-
declare function configureTypeLimits(limits: Partial<TypeEvalLimits>): void;
|
|
664
|
-
/** Volta aos defaults (chamado no `finally` do consumidor). */
|
|
665
|
-
declare function resetTypeLimits(): void;
|
|
666
|
-
/** Os tetos ativos no momento (lido pela álgebra: `subtype`/`normalizeUnion`). */
|
|
667
|
-
declare function typeLimits(): TypeEvalLimits;
|
|
668
|
-
/** Lançado quando a avaliação de tipo excede a profundidade (`maxTypeDepth`) — o
|
|
669
|
-
* "Excessive stack depth comparing types" do tsc (TS2321). */
|
|
670
|
-
declare class TypeEvalLimitError extends Error {
|
|
671
|
-
constructor(depth?: number);
|
|
672
|
-
}
|
|
673
|
-
/**
|
|
674
|
-
* Lançado quando a INSTANCIAÇÃO excede a profundidade ou a contagem — o
|
|
675
|
-
* "Type instantiation is excessively deep and possibly infinite" do tsc (TS2589), que
|
|
676
|
-
* usa a mesma mensagem para os dois tetos.
|
|
677
|
-
*
|
|
678
|
-
* É erro próprio, e não o {@link TypeEvalLimitError}, porque o eixo é outro: lá se
|
|
679
|
-
* compara dois tipos, aqui se constrói um novo a cada passo. O consumidor mapeia os dois
|
|
680
|
-
* para `too-deep` (o catálogo do checker tem um código por conceito), e a MENSAGEM diz
|
|
681
|
-
* qual é o caso.
|
|
682
|
-
*/
|
|
683
|
-
declare class InstantiationLimitError extends Error {
|
|
684
|
-
readonly kind: "depth" | "count";
|
|
685
|
-
constructor(kind: "depth" | "count", limit?: number);
|
|
686
|
-
}
|
|
687
|
-
/**
|
|
688
|
-
* Contagem de instanciações da expressão atual — o `instantiationCount` do tsc, que é
|
|
689
|
-
* zerado a cada expressão checada (`checker.ts:29192`), e não somado pelo programa
|
|
690
|
-
* inteiro. O consumidor chama isto onde o tsc zera; sem chamar, o teto vale para a
|
|
691
|
-
* checagem toda, que é mais apertado (nunca mais frouxo).
|
|
692
|
-
*/
|
|
693
|
-
declare function resetInstantiationCount(): void;
|
|
694
|
-
/** Lançado quando uma união excede `maxUnionMembers` (fiel ao TS2590 do tsc:
|
|
695
|
-
* "Expression produces a union type that is too complex to represent"). */
|
|
696
|
-
declare class UnionTooComplexError extends Error {
|
|
697
|
-
constructor(count: number, limit?: number);
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
/** As features de tipo gateadas presentes em `schema` (recursivo, cycle-safe).
|
|
701
|
-
* `recursionName` (o nome do alias sendo autorado) liga a detecção de `recursion`. */
|
|
702
|
-
declare function typeFeatures(schema: Schema, recursionName?: string): Set<string>;
|
|
703
|
-
|
|
704
|
-
/** Ligações `nome da var → tipo` (o resultado de `unify`/aplicação de scheme). */
|
|
705
|
-
type Bindings = Readonly<Record<string, Schema>>;
|
|
706
|
-
/** Uma assinatura: um `fn` ou uma entrada de `overload.signatures`. */
|
|
707
|
-
type Signature = FnSchema$1 | OverloadSchema["signatures"][number];
|
|
708
|
-
/**
|
|
709
|
-
* Aplica `bindings` a `schema`, trocando cada `var` ligada pelo seu tipo.
|
|
710
|
-
*
|
|
711
|
-
* Cada nó substituído conta para o teto de CONTAGEM (o `instantiationCount` do tsc, 5M
|
|
712
|
-
* por expressão) — é a medida do trabalho de instanciação, e pega a explosão LARGA que
|
|
713
|
-
* a profundidade não vê. A **profundidade** não é cobrada aqui, e o motivo está no
|
|
714
|
-
* {@link expand1}: descer a árvore de um tipo grande não é "instanciação aninhada".
|
|
715
|
-
*/
|
|
716
|
-
declare function substitute(schema: Schema, bindings: Bindings, seen?: WeakSet<object>): Schema;
|
|
717
|
-
/**
|
|
718
|
-
* A assinatura com os type params que ela declara renomeados para fora de `avoid`
|
|
719
|
-
* (`U` → `U_1`, a convenção do tsc), nas declarações e nas ocorrências. É a
|
|
720
|
-
* separação que o tsc tem de graça por identidade de objeto: ao relacionar duas
|
|
721
|
-
* assinaturas, o `U` que uma declara não pode ser confundido com um `U` livre da outra.
|
|
722
|
-
*/
|
|
723
|
-
declare function renameTypeParams<S extends Signature>(sig: S, avoid: ReadonlySet<string>): S;
|
|
724
|
-
/** Os nomes de `var` LIVRES em `schema` — os que um binder declara não entram (TC37). */
|
|
725
|
-
declare function freeVars(schema: Schema): ReadonlySet<string>;
|
|
726
|
-
|
|
727
|
-
/**
|
|
728
|
-
* O curinga "sem inferência" — o `silentNeverType` do tsc: um `never` que ocupa, no
|
|
729
|
-
* contextual que uma chamada passa a uma chamada genérica aninhada, o lugar de um type
|
|
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.
|
|
734
|
-
*/
|
|
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
|
-
};
|
|
770
|
-
/**
|
|
771
|
-
* Os candidatos de inferência de uma var, na ORDEM em que a inferência os encontrou —
|
|
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.
|
|
775
|
-
*/
|
|
776
|
-
interface VarCandidates {
|
|
777
|
-
readonly co: Schema[];
|
|
778
|
-
readonly contra: Schema[];
|
|
779
|
-
/** A prioridade dos candidatos das listas; sem candidato, nenhuma. */
|
|
780
|
-
priority?: number;
|
|
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;
|
|
790
|
-
/**
|
|
791
|
-
* O tipo inferido de uma var a partir dos seus candidatos — o `getCovariantInference`
|
|
792
|
-
* do tsc (`checker.ts:19156`), em TRÊS etapas: os de origem literal se juntam num só
|
|
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).
|
|
798
|
-
*/
|
|
799
|
-
declare function covariantInference(candidates: readonly Schema[], schemes?: Schemes, combine?: boolean): Schema | undefined;
|
|
800
|
-
/**
|
|
801
|
-
* O tipo inferido de uma var a partir dos candidatos CONTRAVARIANTES — o
|
|
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.
|
|
805
|
-
*/
|
|
806
|
-
declare function contravariantInference(candidates: readonly Schema[], schemes?: Schemes, combine?: boolean): Schema | undefined;
|
|
807
|
-
/**
|
|
808
|
-
* A decisão de UMA var, com as duas listas — o `getInferredType` do tsc
|
|
809
|
-
* (`checker.ts:19177`), no ramo em que a inferência é de uma ASSINATURA.
|
|
810
|
-
*
|
|
811
|
-
* Havendo candidatos contravariantes, eles têm a preferência, **salvo** quando o
|
|
812
|
-
* covariante existe, não é `never` e é subtipo deles. É essa exceção que faz
|
|
813
|
-
* `k((x) => {}, 1)` com `<T,>(f: (x: T) => void, v: T): T` inferir `1` e não `number`:
|
|
814
|
-
* o `number` do parâmetro do callback é contravariante, o `1` do argumento é
|
|
815
|
-
* covariante, e `1 ≤ number` — então vence o `1`.
|
|
816
|
-
*/
|
|
817
|
-
declare function inferFromCandidates(slot: VarCandidates, schemes?: Schemes): Schema | undefined;
|
|
818
|
-
|
|
819
|
-
/** `getErasedSignature` do tsc: os type params da assinatura viram `any`. É o que a
|
|
820
|
-
* inferência faz com uma assinatura-ALVO genérica — os type params dela não são
|
|
821
|
-
* candidatos da chamada de fora, e não podem vazar para as ligações dela. */
|
|
822
|
-
declare function erasedSignature(sig: FnSchema$1): FnSchema$1;
|
|
823
|
-
/**
|
|
824
|
-
* O tipo inferido de cada type param declarado — o `getInferredType` do tsc: o
|
|
825
|
-
* candidato; sem ele, o default (instanciado com o que já foi inferido), senão
|
|
826
|
-
* `unknown`; e o que não cabe na constraint, candidato ou default, vira a constraint.
|
|
827
|
-
* As ligações que não são dos declarados atravessam como estão.
|
|
828
|
-
*/
|
|
829
|
-
declare function inferredTypes(decls: readonly VarSchema[], b: Bindings, schemes?: Schemes): Bindings;
|
|
830
|
-
/**
|
|
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
|
|
852
|
-
* `inferredTypes`. Os type params do ALVO ficam como estão: rígidos, o canônico do tsc.
|
|
853
|
-
* Devolve a fonte instanciada, não-genérica.
|
|
854
|
-
*/
|
|
855
|
-
declare function instantiateInContextOf(sig: FnSchema$1, context: FnSchema$1, schemes?: Schemes): FnSchema$1;
|
|
856
|
-
/** Resultado de instanciar uma assinatura contra argumentos. */
|
|
857
|
-
interface Instantiation {
|
|
858
|
-
readonly returns: Schema;
|
|
859
|
-
readonly bindings: Bindings;
|
|
860
|
-
}
|
|
861
|
-
/**
|
|
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`).
|
|
871
|
-
*/
|
|
872
|
-
declare function instantiateLoose(sig: FnSchema$1, args: readonly Schema[], schemes?: Schemes, expected?: Schema): Instantiation;
|
|
873
|
-
/**
|
|
874
|
-
* Aterra as `var`s remanescentes em `unknown` (para exibição do resultado). Resolve
|
|
875
|
-
* de passagem um `conditional` cujo discriminante já é ground → o tipo do resultado
|
|
876
|
-
* sai concreto (ex.: `ReturnType<F>` aplicado vira o retorno real). `schemes` é
|
|
877
|
-
* preciso pra resolver conditionals que checam contra type aliases.
|
|
878
|
-
*/
|
|
879
|
-
declare function groundVars(schema: Schema, schemes?: Schemes, seen?: WeakSet<object>, depth0?: number,
|
|
880
|
-
/** Nomes que NÃO são aterrados: as vars RÍGIDAS de quem chama (o `T` da função
|
|
881
|
-
* genérica que envolve a chamada), que no tsc continuam `T` no resultado. */
|
|
882
|
-
keep?: ReadonlySet<string>): Schema;
|
|
883
|
-
|
|
884
|
-
/**
|
|
885
|
-
* O supremo estrutural de `a` e `b`: o menor `Schema` ao qual ambos são
|
|
886
|
-
* atribuíveis. `unknown` é a unidade (sem-evidência); `any` é absorvente.
|
|
887
|
-
*/
|
|
888
|
-
declare function join(a: Schema, b: Schema): Schema;
|
|
889
|
-
/**
|
|
890
|
-
* Dobra uma lista de formas no seu supremo comum. Lista vazia → `never` (⊥, a
|
|
891
|
-
* identidade do supremo). Um membro → ele mesmo. É a operação do schema-reducer:
|
|
892
|
-
* `joinAll(amostras.map(inferValue))` descreve todas as amostras.
|
|
893
|
-
*/
|
|
894
|
-
declare function joinAll(members: readonly Schema[]): Schema;
|
|
895
|
-
|
|
896
|
-
/**
|
|
897
|
-
* A aridade de uma lista de type params — de um alias (`TypeScheme.params`) ou de
|
|
898
|
-
* uma assinatura (`fn.typeParams`), que são a mesma entidade (TC37): `min` são os
|
|
899
|
-
* params até o último sem default, `max` são todos. Uma aplicação com `n`
|
|
900
|
-
* argumentos cabe quando `min ≤ n ≤ max`; os que faltam vêm do default. É o
|
|
901
|
-
* `getMinTypeArgumentCount` do tsc, que também serve aos dois.
|
|
902
|
-
*/
|
|
903
|
-
declare function typeParamArity(params: readonly VarSchema[]): {
|
|
904
|
-
min: number;
|
|
905
|
-
max: number;
|
|
906
|
-
};
|
|
907
|
-
/**
|
|
908
|
-
* As ligações de uma aplicação: `param_i → arg_i`, e os params que faltam recebem
|
|
909
|
-
* o default — substituído com o que já foi ligado, para `<T, U = T[]>` dar
|
|
910
|
-
* `U = number[]` em `Pair<number>`. É o `fillMissingTypeArguments` do tsc.
|
|
911
|
-
*/
|
|
912
|
-
declare function bindTypeParams(params: readonly VarSchema[], args: readonly Schema[]): Record<string, Schema>;
|
|
913
|
-
/** Há um scheme registrado para este `apply` (com aridade compatível)? */
|
|
914
|
-
declare function isScheme(t: Schema, schemes: Schemes): boolean;
|
|
915
|
-
/**
|
|
916
|
-
* Expande **um nível**: `apply(name, args)` com scheme registrado vira
|
|
917
|
-
* `substitute(body, { param_i → args_i })` — os params omitidos vêm do default.
|
|
918
|
-
* Qualquer outro tipo (ou `apply` opaco) é devolvido intacto.
|
|
919
|
-
*
|
|
920
|
-
* **Não há contador de profundidade aqui, e isso é estrutural.** No tsc a instanciação
|
|
921
|
-
* aninha — o `instantiateType` de um objeto cria um tipo com membros LAZY, e ler um
|
|
922
|
-
* membro dispara outra instanciação DENTRO da primeira, que é o que o
|
|
923
|
-
* `instantiationDepth` (50) conta. Aqui a expansão é um passo PURO sobre uma árvore
|
|
924
|
-
* imutável: expande um nível, devolve, e quem chamou segue — nunca uma expansão dentro
|
|
925
|
-
* de outra. Quem limita esta dimensão é o desdobramento em LOOP de quem consome
|
|
926
|
-
* (`apparentType`, `resolveApplied`, `evalKeys`), e o teto deles é o
|
|
927
|
-
* `maxInstantiationDepth` — o mesmo 50 do tsc (DECISIONS D50 da raiz).
|
|
928
|
-
*/
|
|
929
|
-
declare function expand1(t: Schema, schemes: Schemes): Schema;
|
|
930
|
-
|
|
931
|
-
/**
|
|
932
|
-
* Normaliza `t` até a forma que dá para INSPECIONAR (ler props, extrair chaves):
|
|
933
|
-
*
|
|
934
|
-
* - `var T extends C` → `C` (a constraint; o `getBaseConstraintOfType` do tsc);
|
|
935
|
-
* - `apply("X")` COM scheme registrado → expande **um nível** e continua (lazy,
|
|
936
|
-
* para tipo recursivo terminar). Sem scheme, fica opaco — é a ilha nominal
|
|
937
|
-
* legítima (`Promise`, `Map`), TC2;
|
|
938
|
-
* - `mapped` concreto → o objeto resultante;
|
|
939
|
-
* - `intersection` → a forma canônica (membros aparentes);
|
|
940
|
-
* - o resto → ele mesmo.
|
|
941
|
-
*
|
|
942
|
-
* Idempotente e cycle-safe por profundidade. NÃO resolve operadores de tipo —
|
|
943
|
-
* isso é do `resolveTypeOp`; aqui só se prepara o OPERANDO (ver `resolveOp`).
|
|
944
|
-
*/
|
|
945
|
-
declare function apparentType(t: Schema, schemes?: Schemes, depth?: number): Schema;
|
|
946
|
-
/**
|
|
947
|
-
* Resolve um operador de tipo (`keyof`/`T[K]`/`ReturnType`) **ciente de schemes**:
|
|
948
|
-
* normaliza o OPERANDO com {@link apparentType} e então resolve. É o que faz
|
|
949
|
-
* `keyof Property` virar `"id" | "title"` como no tsc.
|
|
950
|
-
*
|
|
951
|
-
* Devolve o próprio `t` quando não há o que resolver (operando genérico) — a
|
|
952
|
-
* mesma semântica do `resolveTypeOp`, então é substituível onde os `schemes`
|
|
953
|
-
* estiverem disponíveis.
|
|
954
|
-
*/
|
|
955
|
-
declare function resolveOp(t: Schema, schemes?: Schemes): Schema;
|
|
956
|
-
|
|
957
|
-
/**
|
|
958
|
-
* Um valor JSON do tipo — o que um campo recém-criado contém.
|
|
959
|
-
*
|
|
960
|
-
* | tipo | valor |
|
|
961
|
-
* | --- | --- |
|
|
962
|
-
* | `string` · `number` · `boolean` · `null` | `""` · `0` · `false` · `null` |
|
|
963
|
-
* | literal | o próprio literal |
|
|
964
|
-
* | array | `[]` |
|
|
965
|
-
* | tupla | cada posição obrigatória com o seu exemplo; opcional e rest ausentes |
|
|
966
|
-
* | objeto | as propriedades **obrigatórias** preenchidas; as opcionais ausentes |
|
|
967
|
-
* | record / só índice | `{}` |
|
|
968
|
-
* | interseção de objetos | a mescla (a forma aparente) |
|
|
969
|
-
* | união que contém `null` | `null` — o inicial de algo anulável é a ausência |
|
|
970
|
-
* | outra união | o exemplo do primeiro membro que não seja `undefined` |
|
|
971
|
-
* | tipo nomeado / scheme | o exemplo do tipo expandido |
|
|
972
|
-
* | `unknown` · `any` · função · `undefined` · `void` · o que não tem valor JSON | `null` |
|
|
973
|
-
*
|
|
974
|
-
* Um valor preenchido por esta regra é atribuível ao próprio schema, para todo
|
|
975
|
-
* tipo que descreve dado — é o que evita um segundo `missing-properties` no
|
|
976
|
-
* lugar do primeiro.
|
|
977
|
-
*/
|
|
978
|
-
declare function sampleValue(schema: Schema, schemes?: Schemes): unknown;
|
|
979
|
-
|
|
980
|
-
/** Alarga um literal FRESH pra sua base; mantém não-fresh e não-literais. Raso —
|
|
981
|
-
* usado por elemento na CONSTRUÇÃO de array/object/tupla literal (no checker). */
|
|
982
|
-
declare function widen(t: Schema): Schema;
|
|
983
|
-
/**
|
|
984
|
-
* O `getWidenedLiteralType` do tsc (`checker.ts:25661`): alarga literal **fresh**
|
|
985
|
-
* e **distribui sobre união** — `1 | 2` (frescos) vira `number`. Mantém não-fresh.
|
|
986
|
-
*
|
|
987
|
-
* É a regra do binding MUTÁVEL: `let n = 1` é `number`, `const c = 1` é `1`
|
|
988
|
-
* (`getWidenedLiteralTypeForInitializer`, `checker.ts:41456` — const/readonly
|
|
989
|
-
* mantém, o resto alarga). Sem isto, `let n = 1; n = 2` erraria, porque o binding
|
|
990
|
-
* teria ficado com o tipo `1`.
|
|
991
|
-
*
|
|
992
|
-
* Difere do `widen` (raso, sem união) e do `widenType` (fundo, entra em
|
|
993
|
-
* membro): aqui é só o TOPO, distribuindo em união — exatamente o do tsc.
|
|
994
|
-
*/
|
|
995
|
-
declare function widenLiteral(t: Schema): Schema;
|
|
996
|
-
/**
|
|
997
|
-
* O `getBaseTypeOfLiteralType` do tsc: TODO literal vira a sua base — fresco ou não —
|
|
998
|
-
* e distribui sobre união (`"a" | "b"` → `string`).
|
|
999
|
-
*
|
|
1000
|
-
* É o que a asserção de tipo faz com a ORIGEM antes de medir sobreposição: em
|
|
1001
|
-
* `(x: 1) => x as 2` a origem vale `number`, que se sobrepõe a `2`. Difere do
|
|
1002
|
-
* `widenLiteral`, que só alarga o literal fresco — um parâmetro anotado `1` não é
|
|
1003
|
-
* fresco, e mesmo assim a asserção o lê pela base.
|
|
1004
|
-
*/
|
|
1005
|
-
declare function baseLiteralType(t: Schema): Schema;
|
|
1006
|
-
/**
|
|
1007
|
-
* Widening TOTAL (`getWidenedType` do TS): alarga todo literal fresh, **inclusive
|
|
1008
|
-
* o do topo**. É a regra do **retorno de função** (`() => 1` → `() => number`;
|
|
1009
|
-
* `async () => 1` → `Promise<number>`). Literal não-fresh (keyof) é mantido.
|
|
1010
|
-
*/
|
|
1011
|
-
declare function widenType(t: Schema): Schema;
|
|
1012
|
-
/**
|
|
1013
|
-
* A regra de widening do TS para o RESULTADO (const / retorno de chamada): alarga
|
|
1014
|
-
* literais fresh em posição de **membro** (aninhados), mas mantém um literal fresh
|
|
1015
|
-
* no **topo**. `id(1)` → `1`; `wrap(1)` (`T[]`) → `number[]`; `keys` (`keyof T`) →
|
|
1016
|
-
* mantém (não-fresh).
|
|
1017
|
-
*/
|
|
1018
|
-
declare function widenInferred(t: Schema): Schema;
|
|
1019
|
-
/**
|
|
1020
|
-
* O `getWidenedType` do tsc (`checker.ts:18112`) — ver o bloco acima. Aplica-se
|
|
1021
|
-
* onde um tipo de expressão vira o tipo de um LUGAR: o candidato de uma inferência
|
|
1022
|
-
* (o fim do `getCovariantInference`), uma declaração sem anotação
|
|
1023
|
-
* (`widenTypeForVariableLikeDeclaration`) e o retorno inferido de uma função.
|
|
1024
|
-
*
|
|
1025
|
-
* Não confundir com o {@link widenType}, que é o widening de LITERAL (`1` → `number`)
|
|
1026
|
-
* e roda em outros pontos: os dois são independentes, e o tsc também os separa.
|
|
1027
|
-
*/
|
|
1028
|
-
declare function widenOrigin(t: Schema): Schema;
|
|
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;
|
|
1037
|
-
/**
|
|
1038
|
-
* A forma de topo de um tipo impresso, para decidir parênteses. Um printer de tipo —
|
|
1039
|
-
* este, do `Schema`, e o de type-node do `@tslite/format` — classifica o nó numa forma
|
|
1040
|
-
* e pergunta à escada (`typeNeedsParens`): uma escada, duas renderizações.
|
|
1041
|
-
*/
|
|
1042
|
-
type TypeForm = "function" | "conditional" | "union" | "intersection" | "operator" | "query" | "primary";
|
|
1043
|
-
/**
|
|
1044
|
-
* As posições da gramática de tipos e o que cada uma NÃO aceita sem parênteses — a
|
|
1045
|
-
* escada do `factory/parenthesizerRules.ts` do tsc (`parenthesizeCheckTypeOfConditionalType`
|
|
1046
|
-
* até `parenthesizeNonArrayTypeOfPostfixType`). Os ramos do conditional, o retorno de
|
|
1047
|
-
* função, o elemento de tupla, a prop e o parâmetro aceitam qualquer tipo.
|
|
1048
|
-
*/
|
|
1049
|
-
declare const NEEDS_PARENS: {
|
|
1050
|
-
readonly check: Set<TypeForm>;
|
|
1051
|
-
readonly extends: Set<TypeForm>;
|
|
1052
|
-
readonly union: Set<TypeForm>;
|
|
1053
|
-
readonly intersection: Set<TypeForm>;
|
|
1054
|
-
readonly operand: Set<TypeForm>;
|
|
1055
|
-
readonly postfix: Set<TypeForm>;
|
|
1056
|
-
};
|
|
1057
|
-
/** Uma posição da gramática de tipos (ver `NEEDS_PARENS`). */
|
|
1058
|
-
type TypePosition = keyof typeof NEEDS_PARENS;
|
|
1059
|
-
/** Um tipo de forma `form` precisa de parênteses na posição `pos`? */
|
|
1060
|
-
declare const typeNeedsParens: (pos: TypePosition, form: TypeForm) => boolean;
|
|
1061
|
-
/** Renderiza `schema` como uma string no estilo TypeScript. */
|
|
1062
|
-
declare function format(schema: Schema, seen?: WeakSet<object>): string;
|
|
1063
|
-
/**
|
|
1064
|
-
* Os argumentos de tipo de uma lista (`A, B`, sem os `<>`), com a regra do 1º argumento
|
|
1065
|
-
* (`(<T>(x: T) => T), B`). Para quem monta a lista fora de um `apply` — o argumento de
|
|
1066
|
-
* tipo de uma chamada (`f<T>(x)`), no emissor de fonte.
|
|
1067
|
-
*/
|
|
1068
|
-
declare function formatTypeArgs(args: readonly Schema[]): string;
|
|
1069
|
-
|
|
1070
|
-
/**
|
|
1071
|
-
* `true` quando `schema` descreve **dado puro** (sobrevive a `JSON.stringify`
|
|
1072
|
-
* sem perda silenciosa). `fn` é o ponto-chave: uma função é dropada em silêncio
|
|
1073
|
-
* pela serialização — por isso `false`.
|
|
1074
|
-
*
|
|
1075
|
-
* `apply` é **conservador** (`false`): sem registro de construtores-de-dado
|
|
1076
|
-
* liberados, não dá pra garantir que `Foo<…>` (ou `Promise<T>`, `Map<K,V>`)
|
|
1077
|
-
* vire JSON. `var` (forma desconhecida), `any`/`unknown` (sem garantia) → `false`.
|
|
1078
|
-
*/
|
|
1079
|
-
declare function isSerializable(schema: Schema, seen?: WeakSet<object>): boolean;
|
|
1080
|
-
|
|
1081
|
-
/** Um membro que pode seguir a partir de um tipo (item de autocomplete). */
|
|
1082
|
-
interface Completion {
|
|
1083
|
-
/** Nome da propriedade, ou `"[]"` para o elemento de um array. */
|
|
1084
|
-
readonly key: string;
|
|
1085
|
-
readonly type: Schema;
|
|
1086
|
-
readonly optional: boolean;
|
|
1087
|
-
}
|
|
1088
|
-
/** Resultado de navegar um path: o tipo final + o que pode seguir dele. */
|
|
1089
|
-
interface Discovery {
|
|
1090
|
-
readonly type: Schema;
|
|
1091
|
-
readonly completions: readonly Completion[];
|
|
1092
|
-
}
|
|
1093
|
-
/**
|
|
1094
|
-
* Navega `path` a partir de `schema`. Retorna o tipo alcançado e suas
|
|
1095
|
-
* completions, ou `null` se algum segmento não existir no tipo. Path vazio
|
|
1096
|
-
* devolve o próprio tipo e suas completions.
|
|
1097
|
-
*/
|
|
1098
|
-
declare function discover(schema: Schema, path: readonly string[], schemes?: Schemes): Discovery | null;
|
|
1099
|
-
/**
|
|
1100
|
-
* A chave de uma ESCRITA num membro. `name` é uma chave conhecida — `element: false` no
|
|
1101
|
-
* ponto (`o.a`), que só alcança o índice de string, e `true` no colchete (`o["a"]`,
|
|
1102
|
-
* `o[0]`), em que um nome numérico consulta o índice `number` antes. `base` é uma chave
|
|
1103
|
-
* não literal (`o[k]` com `k: string`).
|
|
1104
|
-
*/
|
|
1105
|
-
type WriteKey = {
|
|
1106
|
-
readonly name: string;
|
|
1107
|
-
readonly element: boolean;
|
|
1108
|
-
} | {
|
|
1109
|
-
readonly base: "string" | "number";
|
|
1110
|
-
};
|
|
1111
|
-
/**
|
|
1112
|
-
* Por onde uma escrita num membro passa, quando ela é RECUSADA pelo `readonly`:
|
|
1113
|
-
*
|
|
1114
|
-
* - `"property"` — o membro é uma propriedade readonly: o TS2540 do tsc (e o TS2704 no
|
|
1115
|
-
* `delete`), que acusa o nome/argumento e faz do acesso o tipo-erro;
|
|
1116
|
-
* - `"index"` — o membro é alcançado por uma index signature readonly (ou pelo índice de
|
|
1117
|
-
* um `readonly T[]`): o TS2542, que acusa o acesso inteiro e segue com o tipo do índice.
|
|
1118
|
-
*
|
|
1119
|
-
* `null` quando a escrita não é recusada por aqui: o membro é gravável, não existe (o
|
|
1120
|
-
* erro é da leitura), ou o tipo não tem membros navegáveis (`any`, genérico sem bound).
|
|
1121
|
-
*
|
|
1122
|
-
* A régua é a do tsc 3.9.10, lida no fonte da tag. A prop de uma UNIÃO ou INTERSEÇÃO é
|
|
1123
|
-
* readonly se ALGUM constituinte a torna readonly — inclusive, na união, um membro que a
|
|
1124
|
-
* responde por um índice readonly (`createUnionOrIntersectionProperty`,
|
|
1125
|
-
* `checker.ts:10560`, `:10572`). Sem prop, vale o índice: o de uma união é readonly se
|
|
1126
|
-
* algum for (`getUnionIndexInfo`, `:9685`), o de uma interseção só se todos os que o têm
|
|
1127
|
-
* forem (`intersectIndexInfos`, `:9715`). A posição fixa de uma tupla é PROP (`"0"`,
|
|
1128
|
-
* `createTupleTypeOfArity`, `:12162`); a que cai no rest, índice. TC62.
|
|
1129
|
-
*/
|
|
1130
|
-
declare function readonlyMember(schema: Schema, key: WriteKey, schemes?: Schemes): "property" | "index" | null;
|
|
1131
|
-
|
|
1132
|
-
/** A versão deste package, a do módulo de fato carregado. */
|
|
1133
|
-
declare const version = "1.9.0";
|
|
1134
|
-
|
|
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 };
|