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
|
@@ -17,7 +17,9 @@ import {
|
|
|
17
17
|
type InterfaceType,
|
|
18
18
|
type IntersectionType,
|
|
19
19
|
type MappedType,
|
|
20
|
+
DeclaredMemberPlan,
|
|
20
21
|
MemberNames,
|
|
22
|
+
NamedMemberOrder,
|
|
21
23
|
ObjectFlags,
|
|
22
24
|
type ObjectType,
|
|
23
25
|
type Signature,
|
|
@@ -44,6 +46,7 @@ import {
|
|
|
44
46
|
prependTypeMapping,
|
|
45
47
|
LiteralType,
|
|
46
48
|
PendingMembers,
|
|
49
|
+
getMappedType,
|
|
47
50
|
} from './checker-types.js';
|
|
48
51
|
import {
|
|
49
52
|
UnionReduction,
|
|
@@ -79,6 +82,7 @@ import {
|
|
|
79
82
|
getLateBoundSymbol,
|
|
80
83
|
getMembersOfSymbol,
|
|
81
84
|
getMergedSymbol,
|
|
85
|
+
getNamedMemberPositions,
|
|
82
86
|
getNamedMembers,
|
|
83
87
|
getSymbolOfDeclaration,
|
|
84
88
|
isReservedMemberName,
|
|
@@ -104,6 +108,8 @@ import {
|
|
|
104
108
|
instantiateSignatures,
|
|
105
109
|
instantiateSymbol,
|
|
106
110
|
instantiateType,
|
|
111
|
+
isThisless,
|
|
112
|
+
keepsSymbolTypeUnderInstantiation,
|
|
107
113
|
keepsSymbolUnderInstantiation,
|
|
108
114
|
newInstantiatedSymbol,
|
|
109
115
|
instantiateTypes,
|
|
@@ -191,7 +197,7 @@ export function membersHolder(c: Checker, t: Type): StructuredType {
|
|
|
191
197
|
return side as StructuredType;
|
|
192
198
|
}
|
|
193
199
|
|
|
194
|
-
/** The `objectFlags` of `t` that resolving its members sets (MembersResolved
|
|
200
|
+
/** The `objectFlags` of `t` that resolving its members sets (MembersResolved). */
|
|
195
201
|
export function memberResolutionFlags(c: Checker, t: Type): ObjectFlags {
|
|
196
202
|
if ((t.flags & TypeFlags.UnionOrIntersection) === 0) return lazyObjectFlags(c, t);
|
|
197
203
|
const side = sideOfIfAny(c, t) as UnionOrIntersectionType | undefined;
|
|
@@ -287,8 +293,7 @@ function resolveObjectTypeMembers(
|
|
|
287
293
|
}
|
|
288
294
|
if (baseTypes.length !== 0) {
|
|
289
295
|
members = !instantiated || members === undefined ? new Map(members ?? []) : members;
|
|
290
|
-
|
|
291
|
-
t.objectFlags |= ObjectFlags.UnresolvedMembers;
|
|
296
|
+
// The members are set once the bases are added: a recursive request for them resolves them again.
|
|
292
297
|
for (const baseType of baseTypes) {
|
|
293
298
|
const instantiatedBaseType =
|
|
294
299
|
lastArgument !== undefined
|
|
@@ -307,7 +312,6 @@ function resolveObjectTypeMembers(
|
|
|
307
312
|
for (const info of inherited) if (findIndexInfo(indexInfos, info.keyType) === undefined) added.push(info);
|
|
308
313
|
if (added.length !== 0) indexInfos = indexInfos.concat(added);
|
|
309
314
|
}
|
|
310
|
-
t.objectFlags &= ~ObjectFlags.UnresolvedMembers;
|
|
311
315
|
}
|
|
312
316
|
setStructuredTypeMembers(c, t, members, callSignatures, constructSignatures, indexInfos);
|
|
313
317
|
}
|
|
@@ -345,6 +349,8 @@ export class PendingInstantiatedMembers extends PendingMembers {
|
|
|
345
349
|
readonly sourceTable: SymbolTable | undefined;
|
|
346
350
|
/** Anonymous type instantiations: the properties of the target, in order. */
|
|
347
351
|
readonly sourceList: Symbol[] | undefined;
|
|
352
|
+
/** The source's members at their positions: `sourceList`, or the declared members in table order. */
|
|
353
|
+
readonly sourceMembers: Symbol[];
|
|
348
354
|
readonly mapper: TypeMapper;
|
|
349
355
|
/** MemberState of each member of the source, in order, 16 to a word. */
|
|
350
356
|
readonly states: number[];
|
|
@@ -377,6 +383,7 @@ export class PendingInstantiatedMembers extends PendingMembers {
|
|
|
377
383
|
c: Checker,
|
|
378
384
|
sourceTable: SymbolTable | undefined,
|
|
379
385
|
sourceList: Symbol[] | undefined,
|
|
386
|
+
sourceMembers: Symbol[],
|
|
380
387
|
mapper: TypeMapper,
|
|
381
388
|
states: number[],
|
|
382
389
|
positions: Map<string, number>,
|
|
@@ -384,6 +391,7 @@ export class PendingInstantiatedMembers extends PendingMembers {
|
|
|
384
391
|
hasRequiredOwnMembers: boolean,
|
|
385
392
|
) {
|
|
386
393
|
super();
|
|
394
|
+
this.sourceMembers = sourceMembers;
|
|
387
395
|
this.hasOwnMembers = hasOwnMembers;
|
|
388
396
|
this.hasRequiredOwnMembers = hasRequiredOwnMembers;
|
|
389
397
|
this.c = c;
|
|
@@ -512,6 +520,21 @@ export class PendingInstantiatedMembers extends PendingMembers {
|
|
|
512
520
|
materialize(t: StructuredType): void {
|
|
513
521
|
const c = this.c;
|
|
514
522
|
t.pendingMembers = undefined;
|
|
523
|
+
if (!this.hasBases) {
|
|
524
|
+
// The properties are the source's named members, in the order cached for the source
|
|
525
|
+
// (`NamedMemberOrder`), and they are all of the table, which is built only when asked for.
|
|
526
|
+
const order = this.namedMemberOrder(t.symbol);
|
|
527
|
+
if (order !== undefined) {
|
|
528
|
+
const sourceMembers = this.sourceMembers;
|
|
529
|
+
const properties: Symbol[] = [];
|
|
530
|
+
for (const position of order.positions) properties.push(this.memberAt(position, sourceMembers[position]!));
|
|
531
|
+
this.instantiated = undefined;
|
|
532
|
+
t.membersValue = undefined;
|
|
533
|
+
t.propertiesValue = properties;
|
|
534
|
+
t.pendingMembers = new PropertyMembers(properties, order.names);
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
515
538
|
const members = this.ownTable();
|
|
516
539
|
this.instantiated = undefined;
|
|
517
540
|
if (!this.hasBases) {
|
|
@@ -557,6 +580,52 @@ export class PendingInstantiatedMembers extends PendingMembers {
|
|
|
557
580
|
const pending = t.pendingMembers;
|
|
558
581
|
if (pending !== undefined) pending.materializeTable(t);
|
|
559
582
|
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* The property order of the source's instantiations for `container` (computed for the first container
|
|
586
|
+
* asked for), or undefined.
|
|
587
|
+
*/
|
|
588
|
+
private namedMemberOrder(container: Symbol | undefined): NamedMemberOrder | undefined {
|
|
589
|
+
const c = this.c;
|
|
590
|
+
const owner = this.owner;
|
|
591
|
+
let order = owner !== undefined ? owner.namedMemberOrder : c.namedMemberOrdersOfLists.get(this.sourceList!);
|
|
592
|
+
if (order === undefined) {
|
|
593
|
+
order = namedMemberOrderOf(c, this.sourceMembers, container, owner !== undefined);
|
|
594
|
+
if (owner !== undefined) owner.namedMemberOrder = order;
|
|
595
|
+
else c.namedMemberOrdersOfLists.set(this.sourceList!, order);
|
|
596
|
+
}
|
|
597
|
+
return order !== null && order.container === container ? order : undefined;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* The `NamedMemberOrder` of instantiations of `members` for `container`; null where `getNamedMemberPositions`
|
|
603
|
+
* has none. With `skipsUnnamed` (declared members), an instantiation's table holds the named members, the
|
|
604
|
+
* others being skipped, in the order of `members`; without it, every member must be named.
|
|
605
|
+
*/
|
|
606
|
+
function namedMemberOrderOf(
|
|
607
|
+
c: Checker,
|
|
608
|
+
members: Symbol[],
|
|
609
|
+
container: Symbol | undefined,
|
|
610
|
+
skipsUnnamed: boolean,
|
|
611
|
+
): NamedMemberOrder | null {
|
|
612
|
+
const positions = getNamedMemberPositions(c, members, container);
|
|
613
|
+
// Members of a list are never skipped (`pendingInstantiatedList`): its table holds them all.
|
|
614
|
+
if (positions === undefined || (!skipsUnnamed && positions.length !== members.length)) return null;
|
|
615
|
+
const names: string[] = [];
|
|
616
|
+
const byName = new Map<string, number>();
|
|
617
|
+
// The index in `positions` of each member's position, or -1 for a member that isn't a property.
|
|
618
|
+
const indexes: number[] = [];
|
|
619
|
+
for (let i = 0; i < members.length; i++) indexes.push(-1);
|
|
620
|
+
for (let i = 0; i < positions.length; i++) {
|
|
621
|
+
const name = members[positions[i]!]!.name;
|
|
622
|
+
names.push(name);
|
|
623
|
+
byName.set(name, i);
|
|
624
|
+
indexes[positions[i]!] = i;
|
|
625
|
+
}
|
|
626
|
+
const tableOrder: number[] = [];
|
|
627
|
+
for (const index of indexes) if (index >= 0) tableOrder.push(index);
|
|
628
|
+
return new NamedMemberOrder(container, positions, new MemberNames(names, byName, tableOrder));
|
|
560
629
|
}
|
|
561
630
|
|
|
562
631
|
/**
|
|
@@ -658,45 +727,84 @@ function pendingInstantiatedTable(
|
|
|
658
727
|
const declared = sideOf(c, source);
|
|
659
728
|
const table = declared.declaredMembers;
|
|
660
729
|
if (table === undefined || table.size === 0) return undefined;
|
|
730
|
+
const plan = declaredMemberPlan(c, declared, table);
|
|
731
|
+
if (plan.eager) return undefined;
|
|
732
|
+
const members = plan.members;
|
|
733
|
+
const named = plan.named;
|
|
734
|
+
const keptByType = plan.keptByType;
|
|
661
735
|
const states: number[] = [];
|
|
662
736
|
let word = 0;
|
|
663
|
-
|
|
664
|
-
let
|
|
665
|
-
let hasRequiredOwnMembers = false;
|
|
666
|
-
for (const [id, symbol] of table) {
|
|
667
|
-
if (id !== symbol.name) return undefined;
|
|
737
|
+
const count = members.length;
|
|
738
|
+
for (let i = 0; i < count; i++) {
|
|
668
739
|
let state = MemberState.Skipped;
|
|
669
|
-
if (
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
if ((
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
740
|
+
if (named[i] !== 0) {
|
|
741
|
+
const bit = 1 << (i & 31);
|
|
742
|
+
if ((keptByType[i >> 5]! & bit) !== 0) state = MemberState.Kept;
|
|
743
|
+
else if (mapper.mapsThisOnly() && isThisless(members[i]!)) {
|
|
744
|
+
getSymbolId(members[i]!);
|
|
745
|
+
state = MemberState.Kept;
|
|
746
|
+
} else if (keepsSymbolTypeUnderInstantiation(c, members[i]!)) {
|
|
747
|
+
keptByType[i >> 5] = keptByType[i >> 5]! | bit;
|
|
748
|
+
state = MemberState.Kept;
|
|
749
|
+
} else state = MemberState.Instantiated;
|
|
677
750
|
}
|
|
678
751
|
word |= state << ((i & 15) * 2);
|
|
679
752
|
if ((i & 15) === 15) {
|
|
680
753
|
states.push(word);
|
|
681
754
|
word = 0;
|
|
682
755
|
}
|
|
683
|
-
i++;
|
|
684
756
|
}
|
|
685
|
-
if ((
|
|
757
|
+
if ((count & 15) !== 0) states.push(word);
|
|
686
758
|
const pending = new PendingInstantiatedMembers(
|
|
687
759
|
c,
|
|
688
760
|
table,
|
|
689
761
|
undefined,
|
|
762
|
+
members,
|
|
690
763
|
mapper,
|
|
691
764
|
sharedStates(declared, states),
|
|
692
765
|
declaredMemberPositions(declared, table),
|
|
693
|
-
hasOwnMembers,
|
|
694
|
-
hasRequiredOwnMembers,
|
|
766
|
+
plan.hasOwnMembers,
|
|
767
|
+
plan.hasRequiredOwnMembers,
|
|
695
768
|
);
|
|
696
769
|
pending.owner = declared;
|
|
697
770
|
return pending;
|
|
698
771
|
}
|
|
699
772
|
|
|
773
|
+
/** What the pending instantiations of `table`, the declared members of `declared`, share. */
|
|
774
|
+
function declaredMemberPlan(c: Checker, declared: InterfaceType, table: SymbolTable): DeclaredMemberPlan {
|
|
775
|
+
const known = declared.declaredMemberPlan;
|
|
776
|
+
if (known !== undefined && known.table === table) return known;
|
|
777
|
+
const members: Symbol[] = [];
|
|
778
|
+
const named: number[] = [];
|
|
779
|
+
let hasOwnMembers = false;
|
|
780
|
+
let hasRequiredOwnMembers = false;
|
|
781
|
+
let eager = false;
|
|
782
|
+
for (const [id, symbol] of table) {
|
|
783
|
+
if (id !== symbol.name) {
|
|
784
|
+
eager = true;
|
|
785
|
+
break;
|
|
786
|
+
}
|
|
787
|
+
members.push(symbol);
|
|
788
|
+
if (!isNamedMember(c, symbol, id)) {
|
|
789
|
+
named.push(0);
|
|
790
|
+
continue;
|
|
791
|
+
}
|
|
792
|
+
// A named member without a value flag (an alias) could be replaced by an inherited one; keep
|
|
793
|
+
// such tables eager, so that an own member always stands.
|
|
794
|
+
if ((symbol.flags & SymbolFlags.Value) === 0) {
|
|
795
|
+
eager = true;
|
|
796
|
+
break;
|
|
797
|
+
}
|
|
798
|
+
named.push(1);
|
|
799
|
+
// Instantiated symbols have the flags of their source.
|
|
800
|
+
hasOwnMembers = true;
|
|
801
|
+
if ((symbol.flags & SymbolFlags.Optional) === 0) hasRequiredOwnMembers = true;
|
|
802
|
+
}
|
|
803
|
+
const plan = new DeclaredMemberPlan(table, eager, members, named, hasOwnMembers, hasRequiredOwnMembers);
|
|
804
|
+
declared.declaredMemberPlan = plan;
|
|
805
|
+
return plan;
|
|
806
|
+
}
|
|
807
|
+
|
|
700
808
|
/**
|
|
701
809
|
* `states`, or the equal list the last instantiation of `source` used: most instantiations of a
|
|
702
810
|
* source keep and instantiate the same members, and the lists are never changed.
|
|
@@ -731,6 +839,7 @@ function pendingInstantiatedList(c: Checker, list: Symbol[], mapper: TypeMapper)
|
|
|
731
839
|
c,
|
|
732
840
|
undefined,
|
|
733
841
|
list,
|
|
842
|
+
list,
|
|
734
843
|
mapper,
|
|
735
844
|
states,
|
|
736
845
|
listPositions(c, list),
|
|
@@ -845,11 +954,13 @@ function resolvePendingObjectTypeMembers(
|
|
|
845
954
|
constructSignatures: Signature[],
|
|
846
955
|
indexInfos: IndexInfo[],
|
|
847
956
|
): void {
|
|
848
|
-
|
|
849
|
-
|
|
957
|
+
if (baseTypes.length === 0) {
|
|
958
|
+
setPendingStructuredTypeMembers(c, t, pending, callSignatures, constructSignatures, indexInfos);
|
|
959
|
+
return;
|
|
960
|
+
}
|
|
961
|
+
// The members are set once the bases are added: a recursive request for them resolves them again.
|
|
850
962
|
pending.hasBases = true;
|
|
851
963
|
pending.resolving = true;
|
|
852
|
-
t.objectFlags |= ObjectFlags.UnresolvedMembers;
|
|
853
964
|
for (const baseType of baseTypes) {
|
|
854
965
|
const instantiatedBaseType =
|
|
855
966
|
thisArgument !== undefined
|
|
@@ -874,8 +985,7 @@ function resolvePendingObjectTypeMembers(
|
|
|
874
985
|
lazyBase = resolved;
|
|
875
986
|
}
|
|
876
987
|
const baseProperties = lazyBase === undefined ? getPropertiesOfType(c, instantiatedBaseType) : undefined;
|
|
877
|
-
|
|
878
|
-
else addInheritedMembers(t.membersValue!, baseProperties ?? lazyBase!.properties);
|
|
988
|
+
pending.addBase(lazyBase, baseProperties);
|
|
879
989
|
const baseCallSignatures = getSignaturesOfType(c, instantiatedBaseType, SignatureKind.Call);
|
|
880
990
|
if (baseCallSignatures.length !== 0) callSignatures = callSignatures.concat(baseCallSignatures);
|
|
881
991
|
const baseConstructSignatures = getSignaturesOfType(c, instantiatedBaseType, SignatureKind.Construct);
|
|
@@ -886,11 +996,8 @@ function resolvePendingObjectTypeMembers(
|
|
|
886
996
|
for (const info of inherited) if (findIndexInfo(indexInfos, info.keyType) === undefined) added.push(info);
|
|
887
997
|
if (added.length !== 0) indexInfos = indexInfos.concat(added);
|
|
888
998
|
}
|
|
889
|
-
t.objectFlags &= ~ObjectFlags.UnresolvedMembers;
|
|
890
999
|
pending.resolving = false;
|
|
891
|
-
|
|
892
|
-
setPendingStructuredTypeMembers(c, t, pending, callSignatures, constructSignatures, indexInfos);
|
|
893
|
-
else setStructuredTypeMembers(c, t, t.membersValue, callSignatures, constructSignatures, indexInfos);
|
|
1000
|
+
setPendingStructuredTypeMembers(c, t, pending, callSignatures, constructSignatures, indexInfos);
|
|
894
1001
|
}
|
|
895
1002
|
|
|
896
1003
|
function setPendingStructuredTypeMembers(
|
|
@@ -1117,7 +1224,7 @@ function getArrayMemberCallSignatures(c: Checker, t: UnionType): Signature[] {
|
|
|
1117
1224
|
}
|
|
1118
1225
|
const arrayArg = mapType(c, t, (u) => {
|
|
1119
1226
|
const generic = isReadonlyArraySymbol(c, u.symbol!.parent!) ? c.globalReadonlyArrayType : c.globalArrayType;
|
|
1120
|
-
return (
|
|
1227
|
+
return getMappedType((generic as InterfaceType).typeParameters()[0]!, (u as ObjectType).mapper!);
|
|
1121
1228
|
});
|
|
1122
1229
|
const arrayType = createArrayTypeEx(
|
|
1123
1230
|
c,
|
|
@@ -1574,7 +1681,9 @@ export function getPropertyOfTypeEx(
|
|
|
1574
1681
|
): Symbol | undefined {
|
|
1575
1682
|
if (!isOwnReducedApparentType(t)) t = getReducedApparentTypeWorker(c, t);
|
|
1576
1683
|
if ((t.flags & TypeFlags.Object) !== 0) {
|
|
1577
|
-
|
|
1684
|
+
// The first test of resolveStructuredTypeMembers, here where most lookups find the members resolved.
|
|
1685
|
+
const resolved =
|
|
1686
|
+
(t.objectFlags & ObjectFlags.MembersResolved) !== 0 ? (t as StructuredType) : resolveStructuredTypeMembers(c, t);
|
|
1578
1687
|
const symbol = getResolvedMember(resolved, name);
|
|
1579
1688
|
if (symbol !== undefined && includeTypeOnlyMembers) return symbol;
|
|
1580
1689
|
if (symbol !== undefined) {
|
|
@@ -1846,6 +1955,18 @@ export function getUnionOrIntersectionProperty(
|
|
|
1846
1955
|
}
|
|
1847
1956
|
|
|
1848
1957
|
export function getDeclarationModifierFlagsFromSymbol(c: Checker, s: Symbol, isWrite: boolean): ModifierFlags {
|
|
1958
|
+
const checkFlags = s.checkFlags;
|
|
1959
|
+
if ((checkFlags & CheckFlags.Synthetic) !== 0) {
|
|
1960
|
+
// The least restricted access of the constituents, for reading or for writing.
|
|
1961
|
+
let access = ModifierFlags.None;
|
|
1962
|
+
if ((checkFlags & (isWrite ? CheckFlags.ContainsWritePublic : CheckFlags.ContainsPublic)) !== 0)
|
|
1963
|
+
access = ModifierFlags.Public;
|
|
1964
|
+
else if ((checkFlags & (isWrite ? CheckFlags.ContainsWriteProtected : CheckFlags.ContainsProtected)) !== 0)
|
|
1965
|
+
access = ModifierFlags.Protected;
|
|
1966
|
+
else if ((checkFlags & (isWrite ? CheckFlags.ContainsWritePrivate : CheckFlags.ContainsPrivate)) !== 0)
|
|
1967
|
+
access = ModifierFlags.Private;
|
|
1968
|
+
return (checkFlags & CheckFlags.ContainsStatic) !== 0 ? access | ModifierFlags.Static : access;
|
|
1969
|
+
}
|
|
1849
1970
|
if (s.valueDeclaration !== undefined) {
|
|
1850
1971
|
let declaration: Node | undefined;
|
|
1851
1972
|
if (isWrite) declaration = getDeclarationOfKind(s, SyntaxKind.SetAccessor);
|
|
@@ -1857,16 +1978,6 @@ export function getDeclarationModifierFlagsFromSymbol(c: Checker, s: Symbol, isW
|
|
|
1857
1978
|
? flags
|
|
1858
1979
|
: flags & ~ModifierFlags.AccessibilityModifier;
|
|
1859
1980
|
}
|
|
1860
|
-
if ((s.checkFlags & CheckFlags.Synthetic) !== 0) {
|
|
1861
|
-
const access =
|
|
1862
|
-
(s.checkFlags & CheckFlags.ContainsPrivate) !== 0
|
|
1863
|
-
? ModifierFlags.Private
|
|
1864
|
-
: (s.checkFlags & CheckFlags.ContainsPublic) !== 0
|
|
1865
|
-
? ModifierFlags.Public
|
|
1866
|
-
: ModifierFlags.Protected;
|
|
1867
|
-
const staticModifier = (s.checkFlags & CheckFlags.ContainsStatic) !== 0 ? ModifierFlags.Static : 0;
|
|
1868
|
-
return access | staticModifier;
|
|
1869
|
-
}
|
|
1870
1981
|
if ((s.flags & SymbolFlags.Prototype) !== 0) return ModifierFlags.Public | ModifierFlags.Static;
|
|
1871
1982
|
return 0;
|
|
1872
1983
|
}
|
|
@@ -1893,6 +2004,7 @@ export function createUnionOrIntersectionProperty(
|
|
|
1893
2004
|
const prop = getPropertyOfTypeEx(c, t, name, skipObjectFunctionPropertyAugment, false);
|
|
1894
2005
|
if (prop !== undefined) {
|
|
1895
2006
|
const modifiers = getDeclarationModifierFlagsFromSymbol(c, prop, false);
|
|
2007
|
+
const writeModifiers = getDeclarationModifierFlagsFromSymbol(c, prop, true);
|
|
1896
2008
|
if ((prop.flags & SymbolFlags.ClassMember) !== 0) {
|
|
1897
2009
|
if (isUnion) optionalFlag |= prop.flags & SymbolFlags.Optional;
|
|
1898
2010
|
else optionalFlag &= prop.flags;
|
|
@@ -1920,9 +2032,16 @@ export function createUnionOrIntersectionProperty(
|
|
|
1920
2032
|
}
|
|
1921
2033
|
if (isUnion && isReadonlySymbol(c, prop)) checkFlags |= CheckFlags.Readonly;
|
|
1922
2034
|
else if (!isUnion && !isReadonlySymbol(c, prop)) checkFlags &= ~CheckFlags.Readonly;
|
|
1923
|
-
if ((modifiers & ModifierFlags.
|
|
1924
|
-
|
|
1925
|
-
if ((modifiers & ModifierFlags.Private
|
|
2035
|
+
if ((modifiers & (ModifierFlags.Protected | ModifierFlags.Public)) === ModifierFlags.Protected)
|
|
2036
|
+
checkFlags |= CheckFlags.ContainsProtected;
|
|
2037
|
+
else if ((modifiers & (ModifierFlags.Private | ModifierFlags.Public)) === ModifierFlags.Private)
|
|
2038
|
+
checkFlags |= CheckFlags.ContainsPrivate;
|
|
2039
|
+
else checkFlags |= CheckFlags.ContainsPublic;
|
|
2040
|
+
if ((writeModifiers & (ModifierFlags.Protected | ModifierFlags.Public)) === ModifierFlags.Protected)
|
|
2041
|
+
checkFlags |= CheckFlags.ContainsWriteProtected;
|
|
2042
|
+
else if ((writeModifiers & (ModifierFlags.Private | ModifierFlags.Public)) === ModifierFlags.Private)
|
|
2043
|
+
checkFlags |= CheckFlags.ContainsWritePrivate;
|
|
2044
|
+
else checkFlags |= CheckFlags.ContainsWritePublic;
|
|
1926
2045
|
if ((modifiers & ModifierFlags.Static) !== 0) checkFlags |= CheckFlags.ContainsStatic;
|
|
1927
2046
|
if (!isPrototypeProperty(prop)) syntheticFlag = CheckFlags.SyntheticProperty;
|
|
1928
2047
|
} else if (isUnion) {
|
|
@@ -1937,15 +2056,26 @@ export function createUnionOrIntersectionProperty(
|
|
|
1937
2056
|
} else checkFlags |= CheckFlags.ReadPartial;
|
|
1938
2057
|
}
|
|
1939
2058
|
}
|
|
2059
|
+
if (singleProp === undefined) return undefined;
|
|
1940
2060
|
if (
|
|
1941
|
-
|
|
1942
|
-
(
|
|
1943
|
-
|
|
1944
|
-
(
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
2061
|
+
isUnion &&
|
|
2062
|
+
(propSet !== undefined || (checkFlags & CheckFlags.Partial) !== 0) &&
|
|
2063
|
+
(checkFlags &
|
|
2064
|
+
(CheckFlags.ContainsPrivate |
|
|
2065
|
+
CheckFlags.ContainsProtected |
|
|
2066
|
+
CheckFlags.ContainsWritePrivate |
|
|
2067
|
+
CheckFlags.ContainsWriteProtected)) !==
|
|
2068
|
+
0 &&
|
|
2069
|
+
!(propSet !== undefined && hasCommonDeclaration(propSet))
|
|
2070
|
+
) {
|
|
2071
|
+
// The property is private or protected in one constituent but missing or different in another.
|
|
2072
|
+
// Private or protected reading leaves no property; private or protected writing restricts write
|
|
2073
|
+
// access to that of the most restricted constituent.
|
|
2074
|
+
if ((checkFlags & (CheckFlags.ContainsPrivate | CheckFlags.ContainsProtected)) !== 0) return undefined;
|
|
2075
|
+
if ((checkFlags & CheckFlags.ContainsWritePrivate) !== 0)
|
|
2076
|
+
checkFlags &= ~(CheckFlags.ContainsWritePublic | CheckFlags.ContainsWriteProtected);
|
|
2077
|
+
else if ((checkFlags & CheckFlags.ContainsWriteProtected) !== 0) checkFlags &= ~CheckFlags.ContainsWritePublic;
|
|
2078
|
+
}
|
|
1949
2079
|
if (propSet === undefined && (checkFlags & CheckFlags.ReadPartial) === 0 && indexTypes.length === 0) {
|
|
1950
2080
|
if (!mergedInstantiations) return singleProp;
|
|
1951
2081
|
// Merged instantiations get a clone without a union parent, so `Array<T>.length` prints as such.
|
|
@@ -1976,7 +2106,7 @@ export function createUnionOrIntersectionProperty(
|
|
|
1976
2106
|
if (firstValueDeclaration === undefined) firstValueDeclaration = prop.valueDeclaration;
|
|
1977
2107
|
else if (prop.valueDeclaration !== undefined && prop.valueDeclaration !== firstValueDeclaration)
|
|
1978
2108
|
hasNonUniformValueDeclaration = true;
|
|
1979
|
-
for (const d of getDeclarations(prop)) declarations.push(d);
|
|
2109
|
+
for (const d of getDeclarations(prop)) if (!declarations.includes(d)) declarations.push(d);
|
|
1980
2110
|
const t = getTypeOfSymbol(c, prop);
|
|
1981
2111
|
if (firstType === undefined) {
|
|
1982
2112
|
firstType = t;
|
|
@@ -2305,13 +2435,27 @@ export function getReducedType(c: Checker, t: Type): Type {
|
|
|
2305
2435
|
const side = sideOf(c, t);
|
|
2306
2436
|
if ((side.objectFlags & ObjectFlags.IsNeverIntersectionComputed) === 0) {
|
|
2307
2437
|
side.objectFlags |= ObjectFlags.IsNeverIntersectionComputed;
|
|
2308
|
-
if (hasNeverReducedProperty(c, t as IntersectionType))
|
|
2438
|
+
if (!isMappingOfSameObjectType(c, typesOf(t)) && hasNeverReducedProperty(c, t as IntersectionType))
|
|
2439
|
+
side.objectFlags |= ObjectFlags.IsNeverIntersection;
|
|
2309
2440
|
}
|
|
2310
2441
|
if ((side.objectFlags & ObjectFlags.IsNeverIntersection) !== 0) return c.neverType;
|
|
2311
2442
|
}
|
|
2312
2443
|
return t;
|
|
2313
2444
|
}
|
|
2314
2445
|
|
|
2446
|
+
/** Whether `types` are mapped types that all map the same object type. */
|
|
2447
|
+
function isMappingOfSameObjectType(c: Checker, types: readonly Type[]): boolean {
|
|
2448
|
+
if (types.length === 0 || (types[0]!.objectFlags & ObjectFlags.Mapped) === 0) return false;
|
|
2449
|
+
const first = getModifiersTypeFromMappedType(c, types[0] as MappedType);
|
|
2450
|
+
if ((first.flags & TypeFlags.Object) === 0) return false;
|
|
2451
|
+
for (let i = 1; i < types.length; i++) {
|
|
2452
|
+
const t = types[i]!;
|
|
2453
|
+
if ((t.objectFlags & ObjectFlags.Mapped) === 0 || getModifiersTypeFromMappedType(c, t as MappedType) !== first)
|
|
2454
|
+
return false;
|
|
2455
|
+
}
|
|
2456
|
+
return true;
|
|
2457
|
+
}
|
|
2458
|
+
|
|
2315
2459
|
/**
|
|
2316
2460
|
* Whether a property of the intersection `t` reduces it to never, without resolving all of its
|
|
2317
2461
|
* properties. Such a property is one that createUnionOrIntersectionProperty combines from different
|
|
@@ -2492,7 +2636,7 @@ export function getResolvedBaseConstraint(c: Checker, t: Type, stack?: Recursion
|
|
|
2492
2636
|
if (!pushTypeResolution(c, t, TypeSystemPropertyName.ResolvedBaseConstraint)) return c.circularConstraintType;
|
|
2493
2637
|
let constraint: Type | undefined;
|
|
2494
2638
|
// At least 10 levels; up to 50 without deeply nested types on the stack.
|
|
2495
|
-
const identity = getRecursionIdentity(t);
|
|
2639
|
+
const identity = getRecursionIdentity(c, t);
|
|
2496
2640
|
const current = stack ?? [];
|
|
2497
2641
|
if (current.length < 10 || (current.length < 50 && !current.includes(identity)))
|
|
2498
2642
|
constraint = computeBaseConstraint(c, getSimplifiedType(c, t, false), current.concat([identity]));
|