tsc-ts 0.0.9 → 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 +2 -2
- 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 +22 -15
- package/dist/api/compiler/ast.js +1026 -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 +178 -124
- 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 +472 -440
- 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 -107
- 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 +212 -75
- 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 +145 -36
- 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 +104 -31
- package/dist/api/compiler/checker.js +181 -33
- 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 +42 -3
- package/dist/api/compiler/compile-program.js +139 -27
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.d.ts +22 -0
- package/dist/api/compiler/diagnostics.js +93 -11
- 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 +21 -1
- package/dist/api/compiler/file-loader.js +201 -48
- 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/parallel-parse.d.ts +3 -2
- package/dist/api/compiler/parallel-parse.js +17 -5
- 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 +5 -1
- package/dist/api/compiler/printer/emit-context.js +20 -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 +49 -2
- package/dist/api/compiler/printer/printer.js +539 -293
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +12 -2
- package/dist/api/compiler/program-checker.js +88 -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 +4 -6
- package/dist/api/compiler/program.js +74 -87
- 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 +347 -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 +23 -14
- package/dist/api/compiler/symbol.js +23 -11
- 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 +58 -26
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +79 -9
- 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 +136 -62
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -82
- 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 +200 -56
- 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 +124 -23
- 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 +203 -39
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +167 -27
- package/src/compiler/decoder.ts +13 -4
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/diagnostics.ts +84 -3
- 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 +197 -38
- package/src/compiler/help.ts +10 -14
- package/src/compiler/incremental.ts +165 -30
- 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 +326 -52
- package/src/compiler/parallel-emit.ts +320 -0
- package/src/compiler/parallel-parse.ts +16 -5
- package/src/compiler/parse-thread.ts +3 -0
- package/src/compiler/parser.ts +156 -39
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +21 -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 +266 -30
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +57 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +18 -26
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +240 -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 +46 -24
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +64 -4
- 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 +66 -9
- package/src/compiler/tsc-cli.ts +7 -0
- package/src/compiler/tsc-compile.ts +284 -4
- 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';
|
|
@@ -989,7 +1038,10 @@ export function insertType(c, types, t) {
|
|
|
989
1038
|
const index = binarySearchTypes(c, types, t);
|
|
990
1039
|
if (index >= 0)
|
|
991
1040
|
return false;
|
|
992
|
-
|
|
1041
|
+
if (~index === types.length)
|
|
1042
|
+
types.push(t);
|
|
1043
|
+
else
|
|
1044
|
+
types.splice(~index, 0, t);
|
|
993
1045
|
return true;
|
|
994
1046
|
}
|
|
995
1047
|
// ---- Iterating unions
|
|
@@ -1096,7 +1148,26 @@ export function filterType(c, type, f) {
|
|
|
1096
1148
|
return (type.flags & 262144 /* TypeFlags.Never */) !== 0 || f(type) ? type : c.neverType;
|
|
1097
1149
|
}
|
|
1098
1150
|
export function removeType(c, type, target) {
|
|
1099
|
-
|
|
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);
|
|
1100
1171
|
}
|
|
1101
1172
|
export function countTypes(type) {
|
|
1102
1173
|
if ((type.flags & 134217728 /* TypeFlags.Union */) !== 0)
|
|
@@ -1198,7 +1269,10 @@ function insertTypeNearLast(c, set, t) {
|
|
|
1198
1269
|
else
|
|
1199
1270
|
high = middle - 1;
|
|
1200
1271
|
}
|
|
1201
|
-
|
|
1272
|
+
if (low === types.length)
|
|
1273
|
+
types.push(t);
|
|
1274
|
+
else
|
|
1275
|
+
types.splice(low, 0, t);
|
|
1202
1276
|
set.last = low;
|
|
1203
1277
|
}
|
|
1204
1278
|
function getUnionTypeWorker(c, types, unionReduction, alias, origin) {
|
|
@@ -1528,7 +1602,7 @@ function removeSubtypes(c, types, hasObjectTypes) {
|
|
|
1528
1602
|
if (count === 100000) {
|
|
1529
1603
|
const estimatedCount = Math.trunc(count / (length - i)) * length;
|
|
1530
1604
|
if (estimatedCount > 1000000) {
|
|
1531
|
-
c.error(c.currentNode,
|
|
1605
|
+
c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
|
|
1532
1606
|
return undefined;
|
|
1533
1607
|
}
|
|
1534
1608
|
}
|
|
@@ -1931,28 +2005,33 @@ function intersectUnionsOfPrimitiveTypes(c, types) {
|
|
|
1931
2005
|
return true;
|
|
1932
2006
|
}
|
|
1933
2007
|
function eachUnionContains(c, unionTypes, t) {
|
|
1934
|
-
for (const type of unionTypes)
|
|
1935
|
-
|
|
1936
|
-
if (unionContainsType(c, u, t))
|
|
1937
|
-
continue;
|
|
1938
|
-
if (t === c.missingType)
|
|
1939
|
-
return unionContainsType(c, u, c.undefinedType);
|
|
1940
|
-
if (t === c.undefinedType)
|
|
1941
|
-
return unionContainsType(c, u, c.missingType);
|
|
1942
|
-
let primitive;
|
|
1943
|
-
if ((t.flags & 1024 /* TypeFlags.StringLiteral */) !== 0)
|
|
1944
|
-
primitive = c.stringType;
|
|
1945
|
-
else if ((t.flags & (65536 /* TypeFlags.Enum */ | 2048 /* TypeFlags.NumberLiteral */)) !== 0)
|
|
1946
|
-
primitive = c.numberType;
|
|
1947
|
-
else if ((t.flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0)
|
|
1948
|
-
primitive = c.bigintType;
|
|
1949
|
-
else if ((t.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0)
|
|
1950
|
-
primitive = c.esSymbolType;
|
|
1951
|
-
if (primitive === undefined || !unionContainsType(c, u, primitive))
|
|
2008
|
+
for (const type of unionTypes)
|
|
2009
|
+
if (!unionContainsTypeOrPrimitive(c, type, t, true))
|
|
1952
2010
|
return false;
|
|
1953
|
-
}
|
|
1954
2011
|
return true;
|
|
1955
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
|
+
}
|
|
1956
2035
|
export function getCrossProductUnionSize(types) {
|
|
1957
2036
|
let size = 1;
|
|
1958
2037
|
for (const t of types) {
|
|
@@ -1966,7 +2045,7 @@ export function getCrossProductUnionSize(types) {
|
|
|
1966
2045
|
export function checkCrossProductUnion(c, types) {
|
|
1967
2046
|
const size = getCrossProductUnionSize(types);
|
|
1968
2047
|
if (size >= 100000) {
|
|
1969
|
-
c.error(c.currentNode,
|
|
2048
|
+
c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
|
|
1970
2049
|
return false;
|
|
1971
2050
|
}
|
|
1972
2051
|
return true;
|
|
@@ -2347,8 +2426,8 @@ class TupleNormalizer {
|
|
|
2347
2426
|
const spreadTypes = getElementTypes(c, t);
|
|
2348
2427
|
if (spreadTypes.length + this.types.length >= 10000) {
|
|
2349
2428
|
c.error(c.currentNode, c.currentNode !== undefined && isPartOfTypeNode(c.currentNode)
|
|
2350
|
-
?
|
|
2351
|
-
:
|
|
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 */);
|
|
2352
2431
|
return false;
|
|
2353
2432
|
}
|
|
2354
2433
|
const spreadInfos = tupleTargetOf(t).elementInfos;
|
|
@@ -2432,9 +2511,9 @@ export function getTypeArguments(c, t) {
|
|
|
2432
2511
|
}
|
|
2433
2512
|
const errorNode = node ?? c.currentNode;
|
|
2434
2513
|
if (target.symbol !== undefined)
|
|
2435
|
-
c.error(errorNode,
|
|
2514
|
+
c.error(errorNode, 1102 /* Diagnostics.Type_arguments_for_0_circularly_reference_themselves */, symbolToString(c, target.symbol));
|
|
2436
2515
|
else
|
|
2437
|
-
c.error(errorNode,
|
|
2516
|
+
c.error(errorNode, 1103 /* Diagnostics.Tuple_type_arguments_circularly_reference_themselves */);
|
|
2438
2517
|
}
|
|
2439
2518
|
return resolved;
|
|
2440
2519
|
}
|
|
@@ -2469,8 +2548,13 @@ export function getTemplateLiteralType(c, texts, types) {
|
|
|
2469
2548
|
if (types.includes(c.wildcardType))
|
|
2470
2549
|
return c.wildcardType;
|
|
2471
2550
|
const builder = new TemplateBuilder(c, texts[0]);
|
|
2472
|
-
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
|
+
}
|
|
2473
2556
|
return c.stringType;
|
|
2557
|
+
}
|
|
2474
2558
|
if (builder.newTypes.length === 0)
|
|
2475
2559
|
return getStringLiteralType(c, builder.text);
|
|
2476
2560
|
builder.newTexts.push(builder.text);
|
|
@@ -2491,36 +2575,61 @@ export function getTemplateLiteralType(c, texts, types) {
|
|
|
2491
2575
|
}
|
|
2492
2576
|
return type;
|
|
2493
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;
|
|
2494
2585
|
class TemplateBuilder {
|
|
2495
2586
|
c;
|
|
2496
2587
|
text;
|
|
2497
2588
|
newTypes = [];
|
|
2498
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;
|
|
2499
2596
|
constructor(c, text) {
|
|
2500
2597
|
this.c = c;
|
|
2501
2598
|
this.text = text;
|
|
2599
|
+
this.textBytes = utf8Length(text);
|
|
2502
2600
|
}
|
|
2503
2601
|
addSpans(texts, types) {
|
|
2504
2602
|
const c = this.c;
|
|
2505
2603
|
for (let i = 0; i < types.length; i++) {
|
|
2506
2604
|
const t = types[i];
|
|
2507
2605
|
if ((t.flags & (15360 /* TypeFlags.Literal */ | 8 /* TypeFlags.Null */ | 4 /* TypeFlags.Undefined */)) !== 0) {
|
|
2508
|
-
|
|
2606
|
+
const added = getTemplateStringForType(c, t) + texts[i + 1];
|
|
2607
|
+
this.text += added;
|
|
2608
|
+
this.textBytes += utf8Length(added);
|
|
2509
2609
|
}
|
|
2510
2610
|
else if ((t.flags & 4194304 /* TypeFlags.TemplateLiteral */) !== 0) {
|
|
2511
2611
|
const template = t;
|
|
2512
2612
|
this.text += template.texts[0];
|
|
2613
|
+
this.textBytes += utf8Length(template.texts[0]);
|
|
2513
2614
|
if (!this.addSpans(template.texts, template.types))
|
|
2514
2615
|
return false;
|
|
2515
2616
|
this.text += texts[i + 1];
|
|
2617
|
+
this.textBytes += utf8Length(texts[i + 1]);
|
|
2516
2618
|
}
|
|
2517
2619
|
else if (isGenericIndexType(c, t) || isPatternLiteralPlaceholderType(c, t)) {
|
|
2518
2620
|
this.newTypes.push(t);
|
|
2519
2621
|
this.newTexts.push(this.text);
|
|
2622
|
+
this.movedBytes += this.textBytes;
|
|
2520
2623
|
this.text = texts[i + 1];
|
|
2624
|
+
this.textBytes = utf8Length(this.text);
|
|
2521
2625
|
}
|
|
2522
2626
|
else
|
|
2523
2627
|
return false;
|
|
2628
|
+
if (this.movedBytes + this.textBytes > maxTemplateLiteralTypeLength ||
|
|
2629
|
+
this.newTypes.length > maxTemplateLiteralTypeSpans) {
|
|
2630
|
+
this.tooLarge = true;
|
|
2631
|
+
return false;
|
|
2632
|
+
}
|
|
2524
2633
|
}
|
|
2525
2634
|
return true;
|
|
2526
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;
|