tsc-ts 0.0.10 → 0.1.1
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 +29 -18
- package/dist/api/compiler/ast.js +1040 -1007
- 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 +136 -91
- package/dist/api/compiler/checker-contextual.d.ts +20 -0
- package/dist/api/compiler/checker-contextual.js +175 -62
- 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 +258 -212
- 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 +107 -89
- 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 +190 -46
- 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 +97 -31
- package/dist/api/compiler/checker.js +149 -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 +24 -4
- package/dist/api/compiler/compile-program.js +53 -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/expr-record.d.ts +11 -0
- package/dist/api/compiler/expr-record.js +53 -0
- 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/identifier-name.d.ts +9 -0
- package/dist/api/compiler/identifier-name.js +10 -0
- package/dist/api/compiler/instantiation.d.ts +7 -0
- package/dist/api/compiler/instantiation.js +101 -49
- package/dist/api/compiler/jsdoc.js +27 -25
- 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 +42 -20
- package/dist/api/compiler/parser.js +318 -224
- 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 +6 -3
- 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 +306 -283
- 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 +64 -59
- package/dist/api/compiler/scanner.d.ts +27 -2
- package/dist/api/compiler/scanner.js +181 -150
- package/dist/api/compiler/shared-results.d.ts +696 -0
- package/dist/api/compiler/shared-results.js +2905 -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 +307 -239
- 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 +74 -38
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/cgroup.ts +157 -0
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +76 -8
- package/src/compiler/checker-classes.ts +80 -25
- package/src/compiler/checker-contextual.ts +110 -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 +95 -47
- 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 +28 -5
- 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 +173 -35
- 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 +175 -41
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +59 -25
- package/src/compiler/decoder.ts +15 -5
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/doctor-report.ts +133 -0
- package/src/compiler/emitter.ts +57 -8
- package/src/compiler/encoder.ts +23 -8
- package/src/compiler/expr-record.ts +59 -0
- 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/identifier-name.ts +13 -0
- 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 +7 -3
- 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 +543 -147
- package/src/compiler/parallel-emit.ts +4 -4
- package/src/compiler/parser.ts +166 -47
- 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 +7 -3
- package/src/compiler/printer/helpers.ts +10 -1
- package/src/compiler/printer/name-generator.ts +24 -2
- package/src/compiler/printer/printer.ts +39 -16
- 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 +14 -5
- package/src/compiler/run-config.ts +1383 -0
- package/src/compiler/run-record-read.ts +87 -0
- package/src/compiler/run-records.ts +575 -0
- package/src/compiler/scanner.ts +166 -120
- package/src/compiler/shared-results.ts +3144 -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 +22 -3
- 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 +136 -49
- 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 +67 -6
- package/src/compiler/tsc-cli.ts +35 -4
- package/src/compiler/tsc-compile.ts +220 -10
- package/src/compiler/tsc-watch.ts +97 -47
- 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)
|
|
@@ -1119,37 +1187,78 @@ export function getUnionTypeEx(c, types, unionReduction, alias, origin) {
|
|
|
1119
1187
|
return c.neverType;
|
|
1120
1188
|
if (types.length === 1)
|
|
1121
1189
|
return types[0];
|
|
1122
|
-
//
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1190
|
+
// Unioning two types is the common case, both a union with some other type, like `undefined`, and
|
|
1191
|
+
// two constituents of a list, and the same pairs recur. The union is a function of the two types,
|
|
1192
|
+
// the reduction and the alias, so the result is cached by the pair. A union that exceeded the
|
|
1193
|
+
// complexity limit was reported at the expression that needed it and comes back as the error
|
|
1194
|
+
// type: caching that would silence the report at the next expression with the same input list, so
|
|
1195
|
+
// an error result is not cached.
|
|
1196
|
+
if (types.length === 2 && origin === undefined) {
|
|
1197
|
+
const t0 = types[0];
|
|
1198
|
+
const t1 = types[1];
|
|
1199
|
+
let id1 = t0.id;
|
|
1200
|
+
let id2 = t1.id;
|
|
1128
1201
|
if (id1 > id2) {
|
|
1129
1202
|
const t = id1;
|
|
1130
1203
|
id1 = id2;
|
|
1131
1204
|
id2 = t;
|
|
1132
1205
|
}
|
|
1133
|
-
// Without an alias, both ids and the reduction pack into one
|
|
1134
|
-
|
|
1206
|
+
// Without an alias or a constrained intersection, both ids and the reduction pack into one
|
|
1207
|
+
// exact number. A constrained intersection's reduction resolves a type variable's constraint
|
|
1208
|
+
// (`addTypeToUnion`), so those pairs take the general path.
|
|
1209
|
+
if (alias === undefined &&
|
|
1210
|
+
id2 < UnionPairIdLimit &&
|
|
1211
|
+
!isConstrainedIntersection(t0) &&
|
|
1212
|
+
!isConstrainedIntersection(t1)) {
|
|
1135
1213
|
const id = (id1 * UnionPairIdLimit + id2) * 4 + unionReduction;
|
|
1136
1214
|
let result = c.unionOfUnionTypesById.get(id);
|
|
1137
1215
|
if (result === undefined) {
|
|
1138
1216
|
result = getUnionTypeWorker(c, types, unionReduction, alias, undefined);
|
|
1139
|
-
c.
|
|
1217
|
+
if (result !== c.errorType)
|
|
1218
|
+
c.unionOfUnionTypesById.set(id, result);
|
|
1219
|
+
}
|
|
1220
|
+
return result;
|
|
1221
|
+
}
|
|
1222
|
+
if ((t0.flags & 134217728 /* TypeFlags.Union */) !== 0 || (t1.flags & 134217728 /* TypeFlags.Union */) !== 0) {
|
|
1223
|
+
const key = id1 + ',' + id2 + ',' + unionReduction + aliasKey(alias);
|
|
1224
|
+
let result = c.unionOfUnionTypes.get(key);
|
|
1225
|
+
if (result === undefined) {
|
|
1226
|
+
result = getUnionTypeWorker(c, types, unionReduction, alias, undefined);
|
|
1227
|
+
if (result !== c.errorType)
|
|
1228
|
+
c.unionOfUnionTypes.set(key, result);
|
|
1140
1229
|
}
|
|
1141
1230
|
return result;
|
|
1142
1231
|
}
|
|
1143
|
-
|
|
1144
|
-
|
|
1232
|
+
}
|
|
1233
|
+
// Longer lists recur too, from nested unions and from constituents mapped in the same order.
|
|
1234
|
+
// Normalizing a list costs a sort of its constituents and the reductions, and the union is a
|
|
1235
|
+
// function of the list as given, the reduction and the alias, so the result is cached by the list.
|
|
1236
|
+
if (origin === undefined) {
|
|
1237
|
+
const hash = typeListHash(types, alias, unionReduction);
|
|
1238
|
+
let result = c.unionTypesByInputList.get(hash, types, alias, unionReduction);
|
|
1145
1239
|
if (result === undefined) {
|
|
1146
1240
|
result = getUnionTypeWorker(c, types, unionReduction, alias, undefined);
|
|
1147
|
-
c.
|
|
1241
|
+
if (result !== c.errorType && !hasConstrainedIntersection(types))
|
|
1242
|
+
c.unionTypesByInputList.set(hash, types.slice(), alias, unionReduction, result);
|
|
1148
1243
|
}
|
|
1149
1244
|
return result;
|
|
1150
1245
|
}
|
|
1151
1246
|
return getUnionTypeWorker(c, types, unionReduction, alias, origin);
|
|
1152
1247
|
}
|
|
1248
|
+
/** An intersection that `addTypeToUnion` reduces by resolving a type variable's constraint. */
|
|
1249
|
+
function isConstrainedIntersection(t) {
|
|
1250
|
+
return (t.flags & 268435456 /* TypeFlags.Intersection */) !== 0 && (t.objectFlags & 134217728 /* ObjectFlags.IsConstrainedTypeVariable */) !== 0;
|
|
1251
|
+
}
|
|
1252
|
+
/** Whether `addTypesToUnion` would set `IncludesConstrainedTypeVariable` for `types`. */
|
|
1253
|
+
function hasConstrainedIntersection(types) {
|
|
1254
|
+
for (const t of types) {
|
|
1255
|
+
if (isConstrainedIntersection(t))
|
|
1256
|
+
return true;
|
|
1257
|
+
if ((t.flags & 134217728 /* TypeFlags.Union */) !== 0 && hasConstrainedIntersection(t.types))
|
|
1258
|
+
return true;
|
|
1259
|
+
}
|
|
1260
|
+
return false;
|
|
1261
|
+
}
|
|
1153
1262
|
class TypeSet {
|
|
1154
1263
|
types = [];
|
|
1155
1264
|
includes = 0;
|
|
@@ -1534,7 +1643,7 @@ function removeSubtypes(c, types, hasObjectTypes) {
|
|
|
1534
1643
|
if (count === 100000) {
|
|
1535
1644
|
const estimatedCount = Math.trunc(count / (length - i)) * length;
|
|
1536
1645
|
if (estimatedCount > 1000000) {
|
|
1537
|
-
c.error(c.currentNode,
|
|
1646
|
+
c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
|
|
1538
1647
|
return undefined;
|
|
1539
1648
|
}
|
|
1540
1649
|
}
|
|
@@ -1937,28 +2046,33 @@ function intersectUnionsOfPrimitiveTypes(c, types) {
|
|
|
1937
2046
|
return true;
|
|
1938
2047
|
}
|
|
1939
2048
|
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))
|
|
2049
|
+
for (const type of unionTypes)
|
|
2050
|
+
if (!unionContainsTypeOrPrimitive(c, type, t, true))
|
|
1958
2051
|
return false;
|
|
1959
|
-
}
|
|
1960
2052
|
return true;
|
|
1961
2053
|
}
|
|
2054
|
+
/**
|
|
2055
|
+
* Whether `union` contains `t`, `undefined` where `t` is the missing type and the other way around, or
|
|
2056
|
+
* the primitive type of literal `t` (of a unique symbol only with `matchSymbol`).
|
|
2057
|
+
*/
|
|
2058
|
+
export function unionContainsTypeOrPrimitive(c, union, t, matchSymbol) {
|
|
2059
|
+
if (unionContainsType(c, union, t))
|
|
2060
|
+
return true;
|
|
2061
|
+
if (t === c.missingType)
|
|
2062
|
+
return unionContainsType(c, union, c.undefinedType);
|
|
2063
|
+
if (t === c.undefinedType)
|
|
2064
|
+
return unionContainsType(c, union, c.missingType);
|
|
2065
|
+
let primitive;
|
|
2066
|
+
if ((t.flags & 1024 /* TypeFlags.StringLiteral */) !== 0)
|
|
2067
|
+
primitive = c.stringType;
|
|
2068
|
+
else if ((t.flags & (65536 /* TypeFlags.Enum */ | 2048 /* TypeFlags.NumberLiteral */)) !== 0)
|
|
2069
|
+
primitive = c.numberType;
|
|
2070
|
+
else if ((t.flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0)
|
|
2071
|
+
primitive = c.bigintType;
|
|
2072
|
+
else if ((t.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0 && matchSymbol)
|
|
2073
|
+
primitive = c.esSymbolType;
|
|
2074
|
+
return primitive !== undefined && unionContainsType(c, union, primitive);
|
|
2075
|
+
}
|
|
1962
2076
|
export function getCrossProductUnionSize(types) {
|
|
1963
2077
|
let size = 1;
|
|
1964
2078
|
for (const t of types) {
|
|
@@ -1972,7 +2086,7 @@ export function getCrossProductUnionSize(types) {
|
|
|
1972
2086
|
export function checkCrossProductUnion(c, types) {
|
|
1973
2087
|
const size = getCrossProductUnionSize(types);
|
|
1974
2088
|
if (size >= 100000) {
|
|
1975
|
-
c.error(c.currentNode,
|
|
2089
|
+
c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
|
|
1976
2090
|
return false;
|
|
1977
2091
|
}
|
|
1978
2092
|
return true;
|
|
@@ -2353,8 +2467,8 @@ class TupleNormalizer {
|
|
|
2353
2467
|
const spreadTypes = getElementTypes(c, t);
|
|
2354
2468
|
if (spreadTypes.length + this.types.length >= 10000) {
|
|
2355
2469
|
c.error(c.currentNode, c.currentNode !== undefined && isPartOfTypeNode(c.currentNode)
|
|
2356
|
-
?
|
|
2357
|
-
:
|
|
2470
|
+
? 938 /* Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent */
|
|
2471
|
+
: 939 /* Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent */);
|
|
2358
2472
|
return false;
|
|
2359
2473
|
}
|
|
2360
2474
|
const spreadInfos = tupleTargetOf(t).elementInfos;
|
|
@@ -2438,9 +2552,9 @@ export function getTypeArguments(c, t) {
|
|
|
2438
2552
|
}
|
|
2439
2553
|
const errorNode = node ?? c.currentNode;
|
|
2440
2554
|
if (target.symbol !== undefined)
|
|
2441
|
-
c.error(errorNode,
|
|
2555
|
+
c.error(errorNode, 1102 /* Diagnostics.Type_arguments_for_0_circularly_reference_themselves */, symbolToString(c, target.symbol));
|
|
2442
2556
|
else
|
|
2443
|
-
c.error(errorNode,
|
|
2557
|
+
c.error(errorNode, 1103 /* Diagnostics.Tuple_type_arguments_circularly_reference_themselves */);
|
|
2444
2558
|
}
|
|
2445
2559
|
return resolved;
|
|
2446
2560
|
}
|
|
@@ -2475,8 +2589,13 @@ export function getTemplateLiteralType(c, texts, types) {
|
|
|
2475
2589
|
if (types.includes(c.wildcardType))
|
|
2476
2590
|
return c.wildcardType;
|
|
2477
2591
|
const builder = new TemplateBuilder(c, texts[0]);
|
|
2478
|
-
if (!builder.addSpans(texts, types))
|
|
2592
|
+
if (!builder.addSpans(texts, types)) {
|
|
2593
|
+
if (builder.tooLarge) {
|
|
2594
|
+
c.error(c.currentNode, 744 /* Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite */);
|
|
2595
|
+
return c.errorType;
|
|
2596
|
+
}
|
|
2479
2597
|
return c.stringType;
|
|
2598
|
+
}
|
|
2480
2599
|
if (builder.newTypes.length === 0)
|
|
2481
2600
|
return getStringLiteralType(c, builder.text);
|
|
2482
2601
|
builder.newTexts.push(builder.text);
|
|
@@ -2497,36 +2616,61 @@ export function getTemplateLiteralType(c, texts, types) {
|
|
|
2497
2616
|
}
|
|
2498
2617
|
return type;
|
|
2499
2618
|
}
|
|
2619
|
+
/**
|
|
2620
|
+
* Limits on the size of a template literal type that getTemplateLiteralType builds, in UTF-8 bytes of text
|
|
2621
|
+
* and in placeholders. Recursive instantiations such as `Recur<any, `${S}_${S}`>` double the text or the
|
|
2622
|
+
* placeholders on every step and exhaust memory long before the tail recursion limit of conditional types.
|
|
2623
|
+
*/
|
|
2624
|
+
const maxTemplateLiteralTypeLength = 50_000_000;
|
|
2625
|
+
const maxTemplateLiteralTypeSpans = 100_000;
|
|
2500
2626
|
class TemplateBuilder {
|
|
2501
2627
|
c;
|
|
2502
2628
|
text;
|
|
2503
2629
|
newTypes = [];
|
|
2504
2630
|
newTexts = [];
|
|
2631
|
+
/** UTF-8 bytes of `text`. */
|
|
2632
|
+
textBytes;
|
|
2633
|
+
/** UTF-8 bytes of the texts already moved into `newTexts`. */
|
|
2634
|
+
movedBytes = 0;
|
|
2635
|
+
/** Whether `addSpans` stopped because the result passed a size limit. */
|
|
2636
|
+
tooLarge = false;
|
|
2505
2637
|
constructor(c, text) {
|
|
2506
2638
|
this.c = c;
|
|
2507
2639
|
this.text = text;
|
|
2640
|
+
this.textBytes = utf8Length(text);
|
|
2508
2641
|
}
|
|
2509
2642
|
addSpans(texts, types) {
|
|
2510
2643
|
const c = this.c;
|
|
2511
2644
|
for (let i = 0; i < types.length; i++) {
|
|
2512
2645
|
const t = types[i];
|
|
2513
2646
|
if ((t.flags & (15360 /* TypeFlags.Literal */ | 8 /* TypeFlags.Null */ | 4 /* TypeFlags.Undefined */)) !== 0) {
|
|
2514
|
-
|
|
2647
|
+
const added = getTemplateStringForType(c, t) + texts[i + 1];
|
|
2648
|
+
this.text += added;
|
|
2649
|
+
this.textBytes += utf8Length(added);
|
|
2515
2650
|
}
|
|
2516
2651
|
else if ((t.flags & 4194304 /* TypeFlags.TemplateLiteral */) !== 0) {
|
|
2517
2652
|
const template = t;
|
|
2518
2653
|
this.text += template.texts[0];
|
|
2654
|
+
this.textBytes += utf8Length(template.texts[0]);
|
|
2519
2655
|
if (!this.addSpans(template.texts, template.types))
|
|
2520
2656
|
return false;
|
|
2521
2657
|
this.text += texts[i + 1];
|
|
2658
|
+
this.textBytes += utf8Length(texts[i + 1]);
|
|
2522
2659
|
}
|
|
2523
2660
|
else if (isGenericIndexType(c, t) || isPatternLiteralPlaceholderType(c, t)) {
|
|
2524
2661
|
this.newTypes.push(t);
|
|
2525
2662
|
this.newTexts.push(this.text);
|
|
2663
|
+
this.movedBytes += this.textBytes;
|
|
2526
2664
|
this.text = texts[i + 1];
|
|
2665
|
+
this.textBytes = utf8Length(this.text);
|
|
2527
2666
|
}
|
|
2528
2667
|
else
|
|
2529
2668
|
return false;
|
|
2669
|
+
if (this.movedBytes + this.textBytes > maxTemplateLiteralTypeLength ||
|
|
2670
|
+
this.newTypes.length > maxTemplateLiteralTypeSpans) {
|
|
2671
|
+
this.tooLarge = true;
|
|
2672
|
+
return false;
|
|
2673
|
+
}
|
|
2530
2674
|
}
|
|
2531
2675
|
return true;
|
|
2532
2676
|
}
|
|
@@ -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;
|