tsc-ts 0.0.10 → 0.1.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/README.md +1 -1
- package/bin/tsc-ts.js +70 -1
- package/dist/api/compiler/ast-utilities.d.ts +19 -1
- package/dist/api/compiler/ast-utilities.js +180 -95
- package/dist/api/compiler/ast.d.ts +20 -15
- package/dist/api/compiler/ast.js +1023 -995
- package/dist/api/compiler/astnav.js +15 -15
- package/dist/api/compiler/binder-utilities.js +186 -186
- package/dist/api/compiler/binder.js +290 -263
- package/dist/api/compiler/character-codes.js +2 -2
- package/dist/api/compiler/checker-calls.js +173 -123
- package/dist/api/compiler/checker-classes.d.ts +14 -3
- package/dist/api/compiler/checker-classes.js +134 -90
- package/dist/api/compiler/checker-contextual.js +64 -61
- package/dist/api/compiler/checker-declaration-order.js +79 -79
- package/dist/api/compiler/checker-declarations.d.ts +1 -0
- package/dist/api/compiler/checker-declarations.js +160 -136
- package/dist/api/compiler/checker-declared-types.js +67 -65
- package/dist/api/compiler/checker-decorators.js +77 -77
- package/dist/api/compiler/checker-deprecation.d.ts +8 -3
- package/dist/api/compiler/checker-deprecation.js +76 -55
- package/dist/api/compiler/checker-destructuring.js +47 -45
- package/dist/api/compiler/checker-elaboration.js +24 -24
- package/dist/api/compiler/checker-emit-helpers.js +4 -4
- package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
- package/dist/api/compiler/checker-emit-resolver.js +25 -13
- package/dist/api/compiler/checker-evaluator.js +9 -9
- package/dist/api/compiler/checker-expressions.js +244 -211
- package/dist/api/compiler/checker-functions.js +113 -107
- package/dist/api/compiler/checker-generated-code.d.ts +0 -11
- package/dist/api/compiler/checker-generated-code.js +28 -52
- package/dist/api/compiler/checker-grammar.d.ts +1 -0
- package/dist/api/compiler/checker-grammar.js +469 -438
- package/dist/api/compiler/checker-heritage.js +91 -93
- package/dist/api/compiler/checker-inference.d.ts +77 -5
- package/dist/api/compiler/checker-inference.js +487 -113
- package/dist/api/compiler/checker-iteration.d.ts +0 -10
- package/dist/api/compiler/checker-iteration.js +35 -52
- package/dist/api/compiler/checker-javascript.js +14 -14
- package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
- package/dist/api/compiler/checker-jsdoc.js +67 -58
- package/dist/api/compiler/checker-jsx.js +105 -88
- package/dist/api/compiler/checker-members.d.ts +9 -2
- package/dist/api/compiler/checker-members.js +210 -74
- package/dist/api/compiler/checker-modules.d.ts +15 -6
- package/dist/api/compiler/checker-modules.js +469 -309
- package/dist/api/compiler/checker-narrowing.js +273 -189
- package/dist/api/compiler/checker-object-literals.js +25 -22
- package/dist/api/compiler/checker-operators.js +126 -118
- package/dist/api/compiler/checker-overloads.js +27 -27
- package/dist/api/compiler/checker-property-access.js +59 -55
- package/dist/api/compiler/checker-services.d.ts +1 -0
- package/dist/api/compiler/checker-services.js +222 -210
- package/dist/api/compiler/checker-signatures.js +65 -49
- package/dist/api/compiler/checker-source-file.d.ts +5 -0
- package/dist/api/compiler/checker-source-file.js +154 -130
- package/dist/api/compiler/checker-statements.js +33 -32
- package/dist/api/compiler/checker-super.js +50 -50
- package/dist/api/compiler/checker-symbol-types.js +109 -93
- package/dist/api/compiler/checker-symbols.d.ts +13 -1
- package/dist/api/compiler/checker-symbols.js +264 -149
- package/dist/api/compiler/checker-type-factory.d.ts +5 -0
- package/dist/api/compiler/checker-type-factory.js +137 -34
- package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
- package/dist/api/compiler/checker-type-nodes.js +179 -141
- package/dist/api/compiler/checker-type-operators.d.ts +2 -0
- package/dist/api/compiler/checker-type-operators.js +110 -63
- package/dist/api/compiler/checker-types.d.ts +80 -3
- package/dist/api/compiler/checker-types.js +121 -2
- package/dist/api/compiler/checker-unused.js +114 -118
- package/dist/api/compiler/checker-utilities.js +11 -11
- package/dist/api/compiler/checker.d.ts +93 -31
- package/dist/api/compiler/checker.js +143 -35
- package/dist/api/compiler/command-line.d.ts +1 -3
- package/dist/api/compiler/command-line.js +47 -44
- package/dist/api/compiler/compile-program.d.ts +19 -4
- package/dist/api/compiler/compile-program.js +45 -26
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.js +7 -7
- package/dist/api/compiler/emitter.d.ts +7 -1
- package/dist/api/compiler/emitter.js +53 -11
- package/dist/api/compiler/file-include.d.ts +2 -1
- package/dist/api/compiler/file-include.js +11 -7
- package/dist/api/compiler/file-loader.d.ts +10 -0
- package/dist/api/compiler/file-loader.js +138 -41
- package/dist/api/compiler/instantiation.d.ts +7 -0
- package/dist/api/compiler/instantiation.js +101 -49
- package/dist/api/compiler/jsdoc.js +23 -23
- package/dist/api/compiler/link-tables.d.ts +48 -18
- package/dist/api/compiler/link-tables.js +80 -37
- package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
- package/dist/api/compiler/locales/cs-CZ.js +1 -1
- package/dist/api/compiler/locales/de-DE.d.ts +1 -1
- package/dist/api/compiler/locales/de-DE.js +1 -1
- package/dist/api/compiler/locales/es-ES.d.ts +1 -1
- package/dist/api/compiler/locales/es-ES.js +1 -1
- package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
- package/dist/api/compiler/locales/fr-FR.js +1 -1
- package/dist/api/compiler/locales/it-IT.d.ts +1 -1
- package/dist/api/compiler/locales/it-IT.js +1 -1
- package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
- package/dist/api/compiler/locales/ja-JP.js +1 -1
- package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
- package/dist/api/compiler/locales/ko-KR.js +1 -1
- package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
- package/dist/api/compiler/locales/pl-PL.js +1 -1
- package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
- package/dist/api/compiler/locales/pt-BR.js +1 -1
- package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
- package/dist/api/compiler/locales/ru-RU.js +1 -1
- package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
- package/dist/api/compiler/locales/tr-TR.js +1 -1
- package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
- package/dist/api/compiler/locales/zh-CN.js +1 -1
- package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
- package/dist/api/compiler/locales/zh-TW.js +1 -1
- package/dist/api/compiler/module-resolution-types.js +6 -6
- package/dist/api/compiler/module-resolution.d.ts +10 -1
- package/dist/api/compiler/module-resolution.js +115 -84
- package/dist/api/compiler/module-specifiers.d.ts +15 -0
- package/dist/api/compiler/module-specifiers.js +24 -18
- package/dist/api/compiler/name-resolver.js +74 -65
- package/dist/api/compiler/node-builder-names.d.ts +11 -3
- package/dist/api/compiler/node-builder-names.js +210 -90
- package/dist/api/compiler/node-builder-pseudo.js +29 -31
- package/dist/api/compiler/node-builder-reuse.js +23 -22
- package/dist/api/compiler/node-builder.d.ts +18 -1
- package/dist/api/compiler/node-builder.js +191 -102
- package/dist/api/compiler/option-declarations.d.ts +2 -6
- package/dist/api/compiler/option-declarations.js +315 -375
- package/dist/api/compiler/options.d.ts +15 -33
- package/dist/api/compiler/options.js +21 -54
- package/dist/api/compiler/output-paths.d.ts +4 -1
- package/dist/api/compiler/output-paths.js +6 -11
- package/dist/api/compiler/package-json.d.ts +3 -3
- package/dist/api/compiler/package-json.js +11 -10
- package/dist/api/compiler/parser.d.ts +40 -19
- package/dist/api/compiler/parser.js +308 -216
- package/dist/api/compiler/path.d.ts +9 -0
- package/dist/api/compiler/path.js +20 -3
- package/dist/api/compiler/printer/emit-context.d.ts +3 -1
- package/dist/api/compiler/printer/emit-context.js +16 -1
- package/dist/api/compiler/printer/factory-base.d.ts +2 -2
- package/dist/api/compiler/printer/factory-base.js +7 -3
- package/dist/api/compiler/printer/factory.js +3 -1
- package/dist/api/compiler/printer/helpers.js +10 -1
- package/dist/api/compiler/printer/name-generator.d.ts +1 -1
- package/dist/api/compiler/printer/name-generator.js +35 -16
- package/dist/api/compiler/printer/printer.d.ts +1 -0
- package/dist/api/compiler/printer/printer.js +303 -281
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +8 -2
- package/dist/api/compiler/program-checker.js +84 -34
- package/dist/api/compiler/program-utilities.d.ts +3 -1
- package/dist/api/compiler/program-utilities.js +28 -15
- package/dist/api/compiler/program.d.ts +2 -0
- package/dist/api/compiler/program.js +69 -57
- package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
- package/dist/api/compiler/pseudo-bigint.js +18 -0
- package/dist/api/compiler/regexp-checker.d.ts +1 -1
- package/dist/api/compiler/regexp-checker.js +93 -76
- package/dist/api/compiler/relations.d.ts +27 -4
- package/dist/api/compiler/relations.js +337 -180
- package/dist/api/compiler/reparser.js +60 -56
- package/dist/api/compiler/scanner.d.ts +19 -2
- package/dist/api/compiler/scanner.js +123 -108
- package/dist/api/compiler/shared-results.d.ts +463 -0
- package/dist/api/compiler/shared-results.js +2128 -0
- package/dist/api/compiler/sourcemap.js +2 -2
- package/dist/api/compiler/symbol-accessibility.js +87 -74
- package/dist/api/compiler/symbol.d.ts +22 -13
- package/dist/api/compiler/symbol.js +15 -1
- package/dist/api/compiler/syntax-kind.d.ts +198 -197
- package/dist/api/compiler/transformers/alias-references.js +247 -139
- package/dist/api/compiler/transformers/async-utilities.js +25 -25
- package/dist/api/compiler/transformers/async.d.ts +0 -1
- package/dist/api/compiler/transformers/async.js +64 -77
- package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
- package/dist/api/compiler/transformers/class-fields.js +81 -78
- package/dist/api/compiler/transformers/commonjs-module.js +18 -15
- package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
- package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
- package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
- package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
- package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
- package/dist/api/compiler/transformers/declarations.d.ts +4 -1
- package/dist/api/compiler/transformers/declarations.js +305 -238
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
- package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
- package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
- package/dist/api/compiler/transformers/destructuring.js +19 -18
- package/dist/api/compiler/transformers/emit-resolver.js +1 -1
- package/dist/api/compiler/transformers/es-decorators.js +55 -55
- package/dist/api/compiler/transformers/external-module-info.js +3 -3
- package/dist/api/compiler/transformers/for-await.js +25 -25
- package/dist/api/compiler/transformers/import-elision.js +14 -14
- package/dist/api/compiler/transformers/jsx.js +12 -12
- package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
- package/dist/api/compiler/transformers/module.js +8 -8
- package/dist/api/compiler/transformers/named-evaluation.js +4 -4
- package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
- package/dist/api/compiler/transformers/optional-chain.js +10 -10
- package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
- package/dist/api/compiler/transformers/reference-resolver.js +131 -69
- package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
- package/dist/api/compiler/transformers/subtree-facts.js +47 -47
- package/dist/api/compiler/transformers/syntax-facts.js +56 -58
- package/dist/api/compiler/transformers/type-eraser.js +73 -66
- package/dist/api/compiler/transformers/type-serialization.js +24 -24
- package/dist/api/compiler/transformers/using.js +12 -12
- package/dist/api/compiler/transformers/utilities.js +77 -77
- package/dist/api/compiler/transformers/visitor-base.js +172 -172
- package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
- package/dist/api/compiler/tsconfig.d.ts +10 -2
- package/dist/api/compiler/tsconfig.js +136 -48
- package/dist/api/compiler/type-printer.js +40 -3
- package/dist/api/compiler/types.d.ts +2 -1
- package/dist/api/library/ast.generated.d.ts +42 -39
- package/dist/api/library/ast.generated.js +1 -1
- package/dist/api/library/compiler-options.generated.d.ts +111 -100
- package/dist/api/library/compiler-options.generated.js +1 -1
- package/dist/api/library/disk.js +12 -1
- package/dist/api/library/enums.generated.d.ts +206 -206
- package/dist/api/library/enums.generated.js +206 -206
- package/dist/api/library/nodes.js +26 -26
- package/package.json +9 -9
- package/src/compiler/ast-utilities.ts +99 -7
- package/src/compiler/ast.ts +55 -26
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +76 -8
- package/src/compiler/checker-classes.ts +78 -24
- package/src/compiler/checker-contextual.ts +6 -1
- package/src/compiler/checker-declarations.ts +31 -4
- package/src/compiler/checker-declared-types.ts +8 -5
- package/src/compiler/checker-decorators.ts +1 -1
- package/src/compiler/checker-deprecation.ts +29 -8
- package/src/compiler/checker-destructuring.ts +10 -3
- package/src/compiler/checker-emit-helpers.ts +1 -0
- package/src/compiler/checker-emit-resolver.ts +16 -6
- package/src/compiler/checker-expressions.ts +79 -46
- package/src/compiler/checker-functions.ts +21 -6
- package/src/compiler/checker-generated-code.ts +2 -22
- package/src/compiler/checker-grammar.ts +133 -60
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -87
- package/src/compiler/checker-iteration.ts +18 -31
- package/src/compiler/checker-javascript.ts +1 -1
- package/src/compiler/checker-jsdoc.ts +50 -27
- package/src/compiler/checker-jsx.ts +26 -4
- package/src/compiler/checker-members.ts +197 -55
- package/src/compiler/checker-modules.ts +332 -65
- package/src/compiler/checker-narrowing.ts +98 -19
- package/src/compiler/checker-object-literals.ts +3 -0
- package/src/compiler/checker-operators.ts +11 -4
- package/src/compiler/checker-property-access.ts +7 -2
- package/src/compiler/checker-services.ts +39 -12
- package/src/compiler/checker-signatures.ts +15 -1
- package/src/compiler/checker-source-file.ts +39 -13
- package/src/compiler/checker-statements.ts +3 -2
- package/src/compiler/checker-symbol-types.ts +29 -6
- package/src/compiler/checker-symbols.ts +158 -15
- package/src/compiler/checker-type-factory.ts +120 -21
- package/src/compiler/checker-type-nodes.ts +46 -3
- package/src/compiler/checker-type-operators.ts +83 -26
- package/src/compiler/checker-types.ts +147 -4
- package/src/compiler/checker-unused.ts +9 -14
- package/src/compiler/checker.ts +168 -41
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +51 -25
- package/src/compiler/decoder.ts +13 -4
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/emitter.ts +57 -8
- package/src/compiler/encoder.ts +23 -8
- package/src/compiler/file-include.ts +9 -3
- package/src/compiler/file-loader.ts +139 -32
- package/src/compiler/help.ts +10 -14
- package/src/compiler/incremental.ts +86 -18
- package/src/compiler/init.ts +2 -7
- package/src/compiler/instantiation.ts +77 -22
- package/src/compiler/jsdoc.ts +3 -1
- package/src/compiler/link-tables.ts +82 -37
- package/src/compiler/locales/cs-CZ.ts +1 -1
- package/src/compiler/locales/de-DE.ts +1 -1
- package/src/compiler/locales/es-ES.ts +1 -1
- package/src/compiler/locales/fr-FR.ts +1 -1
- package/src/compiler/locales/it-IT.ts +1 -1
- package/src/compiler/locales/ja-JP.ts +1 -1
- package/src/compiler/locales/ko-KR.ts +1 -1
- package/src/compiler/locales/pl-PL.ts +1 -1
- package/src/compiler/locales/pt-BR.ts +1 -1
- package/src/compiler/locales/ru-RU.ts +1 -1
- package/src/compiler/locales/tr-TR.ts +1 -1
- package/src/compiler/locales/zh-CN.ts +1 -1
- package/src/compiler/locales/zh-TW.ts +1 -1
- package/src/compiler/module-resolution.ts +44 -8
- package/src/compiler/module-specifiers.ts +62 -20
- package/src/compiler/name-resolver.ts +9 -1
- package/src/compiler/node-builder-names.ts +236 -54
- package/src/compiler/node-builder-pseudo.ts +4 -7
- package/src/compiler/node-builder-reuse.ts +5 -4
- package/src/compiler/node-builder.ts +130 -31
- package/src/compiler/option-declarations.ts +33 -103
- package/src/compiler/options.ts +23 -62
- package/src/compiler/output-paths.ts +5 -18
- package/src/compiler/package-entrypoints.ts +345 -0
- package/src/compiler/package-json.ts +4 -4
- package/src/compiler/parallel-check.ts +197 -8
- package/src/compiler/parallel-emit.ts +1 -1
- package/src/compiler/parser.ts +156 -39
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +16 -0
- package/src/compiler/printer/factory-base.ts +10 -3
- package/src/compiler/printer/factory.ts +4 -1
- package/src/compiler/printer/helpers.ts +10 -1
- package/src/compiler/printer/name-generator.ts +24 -2
- package/src/compiler/printer/printer.ts +35 -14
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +53 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +13 -1
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +233 -77
- package/src/compiler/reparser.ts +7 -2
- package/src/compiler/scanner.ts +109 -79
- package/src/compiler/shared-results.ts +2414 -0
- package/src/compiler/show-config.ts +18 -1
- package/src/compiler/sourcemap.ts +2 -2
- package/src/compiler/symbol-accessibility.ts +26 -3
- package/src/compiler/symbol.ts +31 -14
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +19 -2
- package/src/compiler/transformers/alias-references.ts +123 -4
- package/src/compiler/transformers/async.ts +2 -17
- package/src/compiler/transformers/class-fields.ts +13 -12
- package/src/compiler/transformers/commonjs-module.ts +11 -7
- package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
- package/src/compiler/transformers/declarations-pseudo.ts +2 -4
- package/src/compiler/transformers/declarations-resolver.ts +0 -3
- package/src/compiler/transformers/declarations-syntactic.ts +1 -21
- package/src/compiler/transformers/declarations.ts +134 -48
- package/src/compiler/transformers/decorator-metadata.ts +9 -1
- package/src/compiler/transformers/destructuring.ts +4 -3
- package/src/compiler/transformers/external-module-info.ts +1 -1
- package/src/compiler/transformers/jsx.ts +2 -1
- package/src/compiler/transformers/reference-resolver.ts +83 -19
- package/src/compiler/transformers/runtime-syntax.ts +6 -1
- package/src/compiler/transformers/syntax-facts.ts +2 -7
- package/src/compiler/transformers/type-eraser.ts +10 -1
- package/src/compiler/transformers/type-serialization.ts +3 -2
- package/src/compiler/transformers/visitor-base.ts +2 -1
- package/src/compiler/transformers/visitor-hooks.ts +9 -4
- package/src/compiler/tsc-build.ts +3 -0
- package/src/compiler/tsc-cli.ts +2 -0
- package/src/compiler/tsc-compile.ts +7 -2
- package/src/compiler/tsc-watch.ts +74 -45
- package/src/compiler/tsconfig.ts +176 -19
- package/src/compiler/type-printer.ts +36 -2
- package/src/compiler/types.ts +2 -1
- package/src/library/ast.generated.ts +57 -41
- package/src/library/compiler-options.generated.ts +117 -103
- package/src/library/disk.ts +10 -1
- package/src/library/enums.generated.ts +196 -196
|
@@ -106,6 +106,11 @@ export declare function getIntersectionType(c: Checker, types: Type[]): Type;
|
|
|
106
106
|
export declare function getIntersectionTypeEx(c: Checker, types: Type[], flags: IntersectionFlags, alias: TypeAlias | undefined): Type;
|
|
107
107
|
export declare function isPrimitiveOrObjectOrEmptyType(c: Checker, t: Type): boolean;
|
|
108
108
|
export declare function containsMissingType(c: Checker, t: Type): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Whether `union` contains `t`, `undefined` where `t` is the missing type and the other way around, or
|
|
111
|
+
* the primitive type of literal `t` (of a unique symbol only with `matchSymbol`).
|
|
112
|
+
*/
|
|
113
|
+
export declare function unionContainsTypeOrPrimitive(c: Checker, union: UnionType, t: Type, matchSymbol: boolean): boolean;
|
|
109
114
|
export declare function getCrossProductUnionSize(types: readonly Type[]): number;
|
|
110
115
|
export declare function checkCrossProductUnion(c: Checker, types: readonly Type[]): boolean;
|
|
111
116
|
export declare function getUnionOrIntersectionType(c: Checker, types: Type[], isUnion: boolean, reduction: UnionReduction): Type;
|
|
@@ -8,6 +8,7 @@ import { getAliasForTypeNode, getTypeArgumentsOfDeferredReference } from './chec
|
|
|
8
8
|
import { popTypeResolution, pushTypeResolution } from './checker-symbols.js';
|
|
9
9
|
import { isGenericIndexType } from './checker-type-operators.js';
|
|
10
10
|
import { compareCodePoints } from './diagnostics.js';
|
|
11
|
+
import { utf8Length } from './character-codes.js';
|
|
11
12
|
import { cachedTypeKey, EvolvingArrayType, IndexInfo, IndexType, IndexedAccessType, InstantiationExpressionType, InterfaceType, IntersectionType, MappedType, ObjectType, ReverseMappedType, SubstitutionType, TemplateLiteralType, TupleElementInfo, TupleType, TypeAlias, TypeReference, UnionType, ArrayTypeMapper, ArrayToSingleTypeMapper, MergedTypeMapper, SimpleTypeMapper, emptyIndexInfos, emptySignatures, emptySymbols, emptyTypes, ReferenceCache, } from './checker-types.js';
|
|
12
13
|
import { getNamedMembers, getMembersOfSymbol } from './checker-symbols.js';
|
|
13
14
|
import { getBaseConstraintOfType, getBaseConstraintOrType, getIndexTypeOfType, getPropertiesOfType, getTypeOfPropertyOfType, isArrayLikeType, resolveStructuredTypeMembers, hasResolvedProperties, memberResolutionFlags, membersHolder, } from './checker-members.js';
|
|
@@ -19,6 +20,7 @@ import { addOptionality } from './checker-symbol-types.js';
|
|
|
19
20
|
import { getSourceFileOfNode } from './binder-utilities.js';
|
|
20
21
|
import { isPartOfTypeNode } from './transformers/alias-references.js';
|
|
21
22
|
import { declarationCount, getSymbolId } from './symbol.js';
|
|
23
|
+
import { comparePseudoBigInts } from './pseudo-bigint.js';
|
|
22
24
|
// ---- Keys
|
|
23
25
|
export function typeListKey(types) {
|
|
24
26
|
let key = '';
|
|
@@ -402,6 +404,10 @@ export function compareNodes(c, n1, n2) {
|
|
|
402
404
|
return 1;
|
|
403
405
|
if (n2 === undefined)
|
|
404
406
|
return -1;
|
|
407
|
+
// Siblings are in one file: most compared declarations are members of one declaration.
|
|
408
|
+
const parent = n1.parent;
|
|
409
|
+
if (parent !== undefined && parent === n2.parent)
|
|
410
|
+
return n1.pos - n2.pos;
|
|
405
411
|
const s1 = sourceFileOf(n1);
|
|
406
412
|
const s2 = sourceFileOf(n2);
|
|
407
413
|
if (s1 !== s2)
|
|
@@ -470,12 +476,14 @@ function compareTypeNames(c, t1, t2) {
|
|
|
470
476
|
const s1 = getTypeNameSymbol(t1);
|
|
471
477
|
const s2 = getTypeNameSymbol(t2);
|
|
472
478
|
if (s1 === s2)
|
|
473
|
-
return
|
|
479
|
+
return compareTypeLists(c, t1.alias?.typeArguments, t2.alias?.typeArguments);
|
|
474
480
|
if (s1 === undefined)
|
|
475
481
|
return 1;
|
|
476
482
|
if (s2 === undefined)
|
|
477
483
|
return -1;
|
|
478
|
-
|
|
484
|
+
const r = compareCodePoints(s1.name, s2.name);
|
|
485
|
+
// Distinct declarations with the same name stay together before alias arguments or structure decide.
|
|
486
|
+
return r !== 0 ? r : compareSymbols(c, s1, s2);
|
|
479
487
|
}
|
|
480
488
|
function compareTypeLists(c, s1, s2) {
|
|
481
489
|
// Index the parameters directly: an alias such as `s1 ?? emptyTypes` would hold its own reference.
|
|
@@ -734,9 +742,21 @@ export function compareTypes(c, t1, t2) {
|
|
|
734
742
|
// Only distinguished by ids.
|
|
735
743
|
}
|
|
736
744
|
else if ((flags & 1048576 /* TypeFlags.Object */) !== 0) {
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
745
|
+
if ((t1.objectFlags & t2.objectFlags & 16777216 /* ObjectFlags.InstantiationExpressionType */) !== 0) {
|
|
746
|
+
// Instantiation expression types are ordered by their source declaration, since one expression
|
|
747
|
+
// can produce a type for each union constituent, then by the expression, without symbol ids.
|
|
748
|
+
r = compareNodes(c, t1.symbol?.declaration, t2.symbol?.declaration);
|
|
749
|
+
if (r !== 0)
|
|
750
|
+
return r;
|
|
751
|
+
r = compareNodes(c, t1.node, t2.node);
|
|
752
|
+
if (r !== 0)
|
|
753
|
+
return r;
|
|
754
|
+
}
|
|
755
|
+
else {
|
|
756
|
+
r = compareSymbols(c, t1.symbol, t2.symbol);
|
|
757
|
+
if (r !== 0)
|
|
758
|
+
return r;
|
|
759
|
+
}
|
|
740
760
|
if ((t1.objectFlags & 4 /* ObjectFlags.Reference */) !== 0 && (t2.objectFlags & 4 /* ObjectFlags.Reference */) !== 0) {
|
|
741
761
|
const r1 = t1;
|
|
742
762
|
const r2 = t2;
|
|
@@ -766,10 +786,34 @@ export function compareTypes(c, t1, t2) {
|
|
|
766
786
|
else if ((t2.objectFlags & 4 /* ObjectFlags.Reference */) !== 0)
|
|
767
787
|
return 1;
|
|
768
788
|
else {
|
|
789
|
+
// Unnamed non-reference object types are ordered by kind and instantiation data.
|
|
769
790
|
r = (t1.objectFlags & 50332991 /* ObjectFlags.ObjectTypeKindMask */) - (t2.objectFlags & 50332991 /* ObjectFlags.ObjectTypeKindMask */);
|
|
770
791
|
if (r !== 0)
|
|
771
792
|
return r;
|
|
772
|
-
|
|
793
|
+
if ((t1.objectFlags & 1024 /* ObjectFlags.ReverseMapped */) !== 0) {
|
|
794
|
+
const r1 = t1;
|
|
795
|
+
const r2 = t2;
|
|
796
|
+
r = compareTypes(c, r1.source, r2.source);
|
|
797
|
+
if (r !== 0)
|
|
798
|
+
return r;
|
|
799
|
+
r = compareTypes(c, r1.mappedType, r2.mappedType);
|
|
800
|
+
if (r !== 0)
|
|
801
|
+
return r;
|
|
802
|
+
r = compareTypes(c, r1.constraintType, r2.constraintType);
|
|
803
|
+
if (r !== 0)
|
|
804
|
+
return r;
|
|
805
|
+
}
|
|
806
|
+
let m1 = t1.mapper;
|
|
807
|
+
let m2 = t2.mapper;
|
|
808
|
+
if ((t1.objectFlags & 32 /* ObjectFlags.Mapped */) !== 0) {
|
|
809
|
+
// instantiateAnonymousType prepends a mapping to a fresh type parameter; compare the
|
|
810
|
+
// instantiation itself rather than the identity of that parameter.
|
|
811
|
+
if (m1 instanceof CompositeTypeMapper)
|
|
812
|
+
m1 = m1.m2;
|
|
813
|
+
if (m2 instanceof CompositeTypeMapper)
|
|
814
|
+
m2 = m2.m2;
|
|
815
|
+
}
|
|
816
|
+
r = compareTypeMappers(c, m1, m2);
|
|
773
817
|
if (r !== 0)
|
|
774
818
|
return r;
|
|
775
819
|
}
|
|
@@ -812,6 +856,11 @@ export function compareTypes(c, t1, t2) {
|
|
|
812
856
|
if (r !== 0)
|
|
813
857
|
return r;
|
|
814
858
|
}
|
|
859
|
+
else if ((flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0) {
|
|
860
|
+
r = comparePseudoBigInts(t1.stringValue, t2.stringValue);
|
|
861
|
+
if (r !== 0)
|
|
862
|
+
return r;
|
|
863
|
+
}
|
|
815
864
|
else if ((flags & 8192 /* TypeFlags.BooleanLiteral */) !== 0) {
|
|
816
865
|
const b1 = t1.stringValue === 'true';
|
|
817
866
|
const b2 = t2.stringValue === 'true';
|
|
@@ -1099,7 +1148,26 @@ export function filterType(c, type, f) {
|
|
|
1099
1148
|
return (type.flags & 262144 /* TypeFlags.Never */) !== 0 || f(type) ? type : c.neverType;
|
|
1100
1149
|
}
|
|
1101
1150
|
export function removeType(c, type, target) {
|
|
1102
|
-
|
|
1151
|
+
if ((type.flags & 134217728 /* TypeFlags.Union */) === 0)
|
|
1152
|
+
return type === target ? c.neverType : type;
|
|
1153
|
+
const union = type;
|
|
1154
|
+
const origin = union.origin;
|
|
1155
|
+
// An origin that lists the target keeps the rest of its constituents.
|
|
1156
|
+
if (origin !== undefined &&
|
|
1157
|
+
(origin.flags & 134217728 /* TypeFlags.Union */) !== 0 &&
|
|
1158
|
+
containsType(c, origin.types, target))
|
|
1159
|
+
return filterType(c, type, (t) => t !== target);
|
|
1160
|
+
const types = union.types;
|
|
1161
|
+
const index = types.length < linearTypeSearchLimit ? indexOfType(types, target, 0) : binarySearchTypes(c, types, target);
|
|
1162
|
+
if (index < 0)
|
|
1163
|
+
return type;
|
|
1164
|
+
if (types.length === 2)
|
|
1165
|
+
return types[1 - index];
|
|
1166
|
+
const filtered = [];
|
|
1167
|
+
for (let i = 0; i < types.length; i++)
|
|
1168
|
+
if (i !== index)
|
|
1169
|
+
filtered.push(types[i]);
|
|
1170
|
+
return getUnionTypeFromSortedList(c, filtered, union.objectFlags & (32768 /* ObjectFlags.PrimitiveUnion */ | 33554432 /* ObjectFlags.ContainsIntersections */), undefined, undefined);
|
|
1103
1171
|
}
|
|
1104
1172
|
export function countTypes(type) {
|
|
1105
1173
|
if ((type.flags & 134217728 /* TypeFlags.Union */) !== 0)
|
|
@@ -1534,7 +1602,7 @@ function removeSubtypes(c, types, hasObjectTypes) {
|
|
|
1534
1602
|
if (count === 100000) {
|
|
1535
1603
|
const estimatedCount = Math.trunc(count / (length - i)) * length;
|
|
1536
1604
|
if (estimatedCount > 1000000) {
|
|
1537
|
-
c.error(c.currentNode,
|
|
1605
|
+
c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
|
|
1538
1606
|
return undefined;
|
|
1539
1607
|
}
|
|
1540
1608
|
}
|
|
@@ -1937,28 +2005,33 @@ function intersectUnionsOfPrimitiveTypes(c, types) {
|
|
|
1937
2005
|
return true;
|
|
1938
2006
|
}
|
|
1939
2007
|
function eachUnionContains(c, unionTypes, t) {
|
|
1940
|
-
for (const type of unionTypes)
|
|
1941
|
-
|
|
1942
|
-
if (unionContainsType(c, u, t))
|
|
1943
|
-
continue;
|
|
1944
|
-
if (t === c.missingType)
|
|
1945
|
-
return unionContainsType(c, u, c.undefinedType);
|
|
1946
|
-
if (t === c.undefinedType)
|
|
1947
|
-
return unionContainsType(c, u, c.missingType);
|
|
1948
|
-
let primitive;
|
|
1949
|
-
if ((t.flags & 1024 /* TypeFlags.StringLiteral */) !== 0)
|
|
1950
|
-
primitive = c.stringType;
|
|
1951
|
-
else if ((t.flags & (65536 /* TypeFlags.Enum */ | 2048 /* TypeFlags.NumberLiteral */)) !== 0)
|
|
1952
|
-
primitive = c.numberType;
|
|
1953
|
-
else if ((t.flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0)
|
|
1954
|
-
primitive = c.bigintType;
|
|
1955
|
-
else if ((t.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0)
|
|
1956
|
-
primitive = c.esSymbolType;
|
|
1957
|
-
if (primitive === undefined || !unionContainsType(c, u, primitive))
|
|
2008
|
+
for (const type of unionTypes)
|
|
2009
|
+
if (!unionContainsTypeOrPrimitive(c, type, t, true))
|
|
1958
2010
|
return false;
|
|
1959
|
-
}
|
|
1960
2011
|
return true;
|
|
1961
2012
|
}
|
|
2013
|
+
/**
|
|
2014
|
+
* Whether `union` contains `t`, `undefined` where `t` is the missing type and the other way around, or
|
|
2015
|
+
* the primitive type of literal `t` (of a unique symbol only with `matchSymbol`).
|
|
2016
|
+
*/
|
|
2017
|
+
export function unionContainsTypeOrPrimitive(c, union, t, matchSymbol) {
|
|
2018
|
+
if (unionContainsType(c, union, t))
|
|
2019
|
+
return true;
|
|
2020
|
+
if (t === c.missingType)
|
|
2021
|
+
return unionContainsType(c, union, c.undefinedType);
|
|
2022
|
+
if (t === c.undefinedType)
|
|
2023
|
+
return unionContainsType(c, union, c.missingType);
|
|
2024
|
+
let primitive;
|
|
2025
|
+
if ((t.flags & 1024 /* TypeFlags.StringLiteral */) !== 0)
|
|
2026
|
+
primitive = c.stringType;
|
|
2027
|
+
else if ((t.flags & (65536 /* TypeFlags.Enum */ | 2048 /* TypeFlags.NumberLiteral */)) !== 0)
|
|
2028
|
+
primitive = c.numberType;
|
|
2029
|
+
else if ((t.flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0)
|
|
2030
|
+
primitive = c.bigintType;
|
|
2031
|
+
else if ((t.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0 && matchSymbol)
|
|
2032
|
+
primitive = c.esSymbolType;
|
|
2033
|
+
return primitive !== undefined && unionContainsType(c, union, primitive);
|
|
2034
|
+
}
|
|
1962
2035
|
export function getCrossProductUnionSize(types) {
|
|
1963
2036
|
let size = 1;
|
|
1964
2037
|
for (const t of types) {
|
|
@@ -1972,7 +2045,7 @@ export function getCrossProductUnionSize(types) {
|
|
|
1972
2045
|
export function checkCrossProductUnion(c, types) {
|
|
1973
2046
|
const size = getCrossProductUnionSize(types);
|
|
1974
2047
|
if (size >= 100000) {
|
|
1975
|
-
c.error(c.currentNode,
|
|
2048
|
+
c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
|
|
1976
2049
|
return false;
|
|
1977
2050
|
}
|
|
1978
2051
|
return true;
|
|
@@ -2353,8 +2426,8 @@ class TupleNormalizer {
|
|
|
2353
2426
|
const spreadTypes = getElementTypes(c, t);
|
|
2354
2427
|
if (spreadTypes.length + this.types.length >= 10000) {
|
|
2355
2428
|
c.error(c.currentNode, c.currentNode !== undefined && isPartOfTypeNode(c.currentNode)
|
|
2356
|
-
?
|
|
2357
|
-
:
|
|
2429
|
+
? 938 /* Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent */
|
|
2430
|
+
: 939 /* Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent */);
|
|
2358
2431
|
return false;
|
|
2359
2432
|
}
|
|
2360
2433
|
const spreadInfos = tupleTargetOf(t).elementInfos;
|
|
@@ -2438,9 +2511,9 @@ export function getTypeArguments(c, t) {
|
|
|
2438
2511
|
}
|
|
2439
2512
|
const errorNode = node ?? c.currentNode;
|
|
2440
2513
|
if (target.symbol !== undefined)
|
|
2441
|
-
c.error(errorNode,
|
|
2514
|
+
c.error(errorNode, 1102 /* Diagnostics.Type_arguments_for_0_circularly_reference_themselves */, symbolToString(c, target.symbol));
|
|
2442
2515
|
else
|
|
2443
|
-
c.error(errorNode,
|
|
2516
|
+
c.error(errorNode, 1103 /* Diagnostics.Tuple_type_arguments_circularly_reference_themselves */);
|
|
2444
2517
|
}
|
|
2445
2518
|
return resolved;
|
|
2446
2519
|
}
|
|
@@ -2475,8 +2548,13 @@ export function getTemplateLiteralType(c, texts, types) {
|
|
|
2475
2548
|
if (types.includes(c.wildcardType))
|
|
2476
2549
|
return c.wildcardType;
|
|
2477
2550
|
const builder = new TemplateBuilder(c, texts[0]);
|
|
2478
|
-
if (!builder.addSpans(texts, types))
|
|
2551
|
+
if (!builder.addSpans(texts, types)) {
|
|
2552
|
+
if (builder.tooLarge) {
|
|
2553
|
+
c.error(c.currentNode, 744 /* Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite */);
|
|
2554
|
+
return c.errorType;
|
|
2555
|
+
}
|
|
2479
2556
|
return c.stringType;
|
|
2557
|
+
}
|
|
2480
2558
|
if (builder.newTypes.length === 0)
|
|
2481
2559
|
return getStringLiteralType(c, builder.text);
|
|
2482
2560
|
builder.newTexts.push(builder.text);
|
|
@@ -2497,36 +2575,61 @@ export function getTemplateLiteralType(c, texts, types) {
|
|
|
2497
2575
|
}
|
|
2498
2576
|
return type;
|
|
2499
2577
|
}
|
|
2578
|
+
/**
|
|
2579
|
+
* Limits on the size of a template literal type that getTemplateLiteralType builds, in UTF-8 bytes of text
|
|
2580
|
+
* and in placeholders. Recursive instantiations such as `Recur<any, `${S}_${S}`>` double the text or the
|
|
2581
|
+
* placeholders on every step and exhaust memory long before the tail recursion limit of conditional types.
|
|
2582
|
+
*/
|
|
2583
|
+
const maxTemplateLiteralTypeLength = 50_000_000;
|
|
2584
|
+
const maxTemplateLiteralTypeSpans = 100_000;
|
|
2500
2585
|
class TemplateBuilder {
|
|
2501
2586
|
c;
|
|
2502
2587
|
text;
|
|
2503
2588
|
newTypes = [];
|
|
2504
2589
|
newTexts = [];
|
|
2590
|
+
/** UTF-8 bytes of `text`. */
|
|
2591
|
+
textBytes;
|
|
2592
|
+
/** UTF-8 bytes of the texts already moved into `newTexts`. */
|
|
2593
|
+
movedBytes = 0;
|
|
2594
|
+
/** Whether `addSpans` stopped because the result passed a size limit. */
|
|
2595
|
+
tooLarge = false;
|
|
2505
2596
|
constructor(c, text) {
|
|
2506
2597
|
this.c = c;
|
|
2507
2598
|
this.text = text;
|
|
2599
|
+
this.textBytes = utf8Length(text);
|
|
2508
2600
|
}
|
|
2509
2601
|
addSpans(texts, types) {
|
|
2510
2602
|
const c = this.c;
|
|
2511
2603
|
for (let i = 0; i < types.length; i++) {
|
|
2512
2604
|
const t = types[i];
|
|
2513
2605
|
if ((t.flags & (15360 /* TypeFlags.Literal */ | 8 /* TypeFlags.Null */ | 4 /* TypeFlags.Undefined */)) !== 0) {
|
|
2514
|
-
|
|
2606
|
+
const added = getTemplateStringForType(c, t) + texts[i + 1];
|
|
2607
|
+
this.text += added;
|
|
2608
|
+
this.textBytes += utf8Length(added);
|
|
2515
2609
|
}
|
|
2516
2610
|
else if ((t.flags & 4194304 /* TypeFlags.TemplateLiteral */) !== 0) {
|
|
2517
2611
|
const template = t;
|
|
2518
2612
|
this.text += template.texts[0];
|
|
2613
|
+
this.textBytes += utf8Length(template.texts[0]);
|
|
2519
2614
|
if (!this.addSpans(template.texts, template.types))
|
|
2520
2615
|
return false;
|
|
2521
2616
|
this.text += texts[i + 1];
|
|
2617
|
+
this.textBytes += utf8Length(texts[i + 1]);
|
|
2522
2618
|
}
|
|
2523
2619
|
else if (isGenericIndexType(c, t) || isPatternLiteralPlaceholderType(c, t)) {
|
|
2524
2620
|
this.newTypes.push(t);
|
|
2525
2621
|
this.newTexts.push(this.text);
|
|
2622
|
+
this.movedBytes += this.textBytes;
|
|
2526
2623
|
this.text = texts[i + 1];
|
|
2624
|
+
this.textBytes = utf8Length(this.text);
|
|
2527
2625
|
}
|
|
2528
2626
|
else
|
|
2529
2627
|
return false;
|
|
2628
|
+
if (this.movedBytes + this.textBytes > maxTemplateLiteralTypeLength ||
|
|
2629
|
+
this.newTypes.length > maxTemplateLiteralTypeSpans) {
|
|
2630
|
+
this.tooLarge = true;
|
|
2631
|
+
return false;
|
|
2632
|
+
}
|
|
2530
2633
|
}
|
|
2531
2634
|
return true;
|
|
2532
2635
|
}
|
|
@@ -6,6 +6,7 @@ export declare function getTypeFromTypeNode(c: Checker, node: Node): Type;
|
|
|
6
6
|
export declare function getTypeFromThisTypeNode(c: Checker, node: Node): Type;
|
|
7
7
|
export declare function getTypeFromIndexedAccessTypeNode(c: Checker, node: IndexedAccessTypeNode): Type;
|
|
8
8
|
export declare function getESSymbolLikeTypeForNode(c: Checker, node: Node): Type;
|
|
9
|
+
export declare function isAssertionExpression(node: Node | undefined): boolean;
|
|
9
10
|
export declare function getTypeFromTypeReference(c: Checker, node: Node): Type;
|
|
10
11
|
export declare function getSymbolFromTypeReference(c: Checker, node: Node): Symbol;
|
|
11
12
|
export declare function resolveTypeReferenceName(c: Checker, typeReference: Node, meaning: SymbolFlags, ignoreErrors: boolean): Symbol;
|