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
package/src/compiler/binder.ts
CHANGED
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
MetaProperty,
|
|
31
31
|
ModifierFlags,
|
|
32
32
|
ModuleDeclaration,
|
|
33
|
+
getNodeId,
|
|
33
34
|
type Node,
|
|
34
35
|
NonNullExpression,
|
|
35
36
|
NodeFlags,
|
|
@@ -590,7 +591,16 @@ class Binder extends NodeVisitor {
|
|
|
590
591
|
if (name !== undefined) {
|
|
591
592
|
if (isAmbientModule(node)) {
|
|
592
593
|
if (isGlobalScopeAugmentation(node)) return InternalSymbolName.Global;
|
|
593
|
-
|
|
594
|
+
const moduleName = nodeText(name);
|
|
595
|
+
// A pattern module with import attributes has its own symbol, named after the attributes node's id: it merges
|
|
596
|
+
// only with pattern modules of the same pattern and identical attributes, which the checker decides. The id
|
|
597
|
+
// is written at a fixed width so that names sort in declaration order.
|
|
598
|
+
const attributes = (node as ModuleDeclaration).attributes;
|
|
599
|
+
if (attributes !== undefined && hasSingleStar(moduleName))
|
|
600
|
+
return (
|
|
601
|
+
internalSymbolNamePrefix + '"' + moduleName + '"pattern@' + String(getNodeId(attributes)).padStart(10, '0')
|
|
602
|
+
);
|
|
603
|
+
return '"' + moduleName + '"';
|
|
594
604
|
}
|
|
595
605
|
if (name.kind === SyntaxKind.PrivateIdentifier) {
|
|
596
606
|
// Private names are only allowed in classes; elsewhere there is already a parse error.
|
|
@@ -1116,7 +1126,6 @@ class Binder extends NodeVisitor {
|
|
|
1116
1126
|
if (this.seenThisKeyword) node.flags |= NodeFlags.ContainsThis;
|
|
1117
1127
|
if (node.kind === SyntaxKind.SourceFile) {
|
|
1118
1128
|
node.flags |= this.emitFlags;
|
|
1119
|
-
(node as SourceFile).endFlowNode = this.currentFlow;
|
|
1120
1129
|
}
|
|
1121
1130
|
const returnTarget = this.currentReturnTarget;
|
|
1122
1131
|
if (returnTarget !== undefined) {
|
|
@@ -1516,11 +1525,19 @@ class Binder extends NodeVisitor {
|
|
|
1516
1525
|
}
|
|
1517
1526
|
|
|
1518
1527
|
bindForStatement(node: ForStatement): void {
|
|
1528
|
+
this.bindOptional(node.initializer);
|
|
1529
|
+
if (this.currentFlow === this.unreachableFlow) {
|
|
1530
|
+
// An initializer that ends the flow (a throwing IIFE) would leave the loop label only the
|
|
1531
|
+
// incrementor's back edge: a cycle with no entry. Bind the rest as unreachable.
|
|
1532
|
+
this.bindOptional(node.condition);
|
|
1533
|
+
this.bind(node.statement);
|
|
1534
|
+
this.bindOptional(node.incrementor);
|
|
1535
|
+
return;
|
|
1536
|
+
}
|
|
1519
1537
|
const preLoopLabel = this.setContinueTarget(node, this.createLoopLabel());
|
|
1520
1538
|
const preBodyLabel = this.createBranchLabel();
|
|
1521
1539
|
const preIncrementorLabel = this.createBranchLabel();
|
|
1522
1540
|
const postLoopLabel = this.createBranchLabel();
|
|
1523
|
-
this.bindOptional(node.initializer);
|
|
1524
1541
|
this.addAntecedent(preLoopLabel, this.currentFlow);
|
|
1525
1542
|
this.currentFlow = preLoopLabel;
|
|
1526
1543
|
this.bindCondition(node.condition, preBodyLabel, postLoopLabel);
|
|
@@ -1534,9 +1551,15 @@ class Binder extends NodeVisitor {
|
|
|
1534
1551
|
}
|
|
1535
1552
|
|
|
1536
1553
|
bindForInOrForOfStatement(node: ForInOrOfStatement): void {
|
|
1554
|
+
this.bind(node.expression);
|
|
1555
|
+
if (this.currentFlow === this.unreachableFlow) {
|
|
1556
|
+
// As for a `for` initializer: an expression that ends the flow leaves the loop unreachable.
|
|
1557
|
+
this.bind(node.initializer);
|
|
1558
|
+
this.bind(node.statement);
|
|
1559
|
+
return;
|
|
1560
|
+
}
|
|
1537
1561
|
const preLoopLabel = this.setContinueTarget(node, this.createLoopLabel());
|
|
1538
1562
|
const postLoopLabel = this.createBranchLabel();
|
|
1539
|
-
this.bind(node.expression);
|
|
1540
1563
|
this.addAntecedent(preLoopLabel, this.currentFlow);
|
|
1541
1564
|
this.currentFlow = preLoopLabel;
|
|
1542
1565
|
if (node.kind === SyntaxKind.ForOfStatement) this.bindOptional(node.awaitModifier);
|
|
@@ -1980,6 +2003,12 @@ class Binder extends NodeVisitor {
|
|
|
1980
2003
|
this.file.patternAmbientModules,
|
|
1981
2004
|
new PatternAmbientModule(text, starIndex, symbol),
|
|
1982
2005
|
);
|
|
2006
|
+
else if (node.attributes !== undefined)
|
|
2007
|
+
this.errorOnNode(
|
|
2008
|
+
name,
|
|
2009
|
+
Diagnostics.An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_character,
|
|
2010
|
+
noArgs,
|
|
2011
|
+
);
|
|
1983
2012
|
}
|
|
1984
2013
|
return;
|
|
1985
2014
|
}
|
|
@@ -2711,3 +2740,9 @@ export function findUseStrictPrologue(file: SourceFile, statements: readonly Nod
|
|
|
2711
2740
|
}
|
|
2712
2741
|
return undefined;
|
|
2713
2742
|
}
|
|
2743
|
+
|
|
2744
|
+
/** Whether a module name is a pattern with exactly one `*`. */
|
|
2745
|
+
function hasSingleStar(text: string): boolean {
|
|
2746
|
+
const star = text.indexOf('*');
|
|
2747
|
+
return star >= 0 && text.indexOf('*', star + 1) < 0;
|
|
2748
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// The limits the process's cgroup puts on the machine a run sees: the whole CPUs its CPU quota allows
|
|
2
|
+
// and the smallest memory limit of its cgroup and that cgroup's ancestors. `os.availableParallelism()`
|
|
3
|
+
// already lowers its count to a quota of one CPU or more; the native runtime's count ignores a quota
|
|
4
|
+
// below one, which truncates to no CPUs there and falls back to the affinity mask, so the quota is read
|
|
5
|
+
// here too. The memory limit only sometimes reaches `process.constrainedMemory()` (libuv reads the
|
|
6
|
+
// process's own cgroup, and scriptc's runtime only the root of the cgroup mount, which is the process's
|
|
7
|
+
// own cgroup only inside a cgroup namespace).
|
|
8
|
+
import { readFileSync } from 'node:fs';
|
|
9
|
+
import { availableParallelism } from 'node:os';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The CPUs this process may run on: `os.availableParallelism()`, lowered to the whole CPUs its cgroup
|
|
13
|
+
* quota allows (`cgroupCpuQuota`). Where the runtime already applies the quota this returns the same
|
|
14
|
+
* count; a quota below one CPU, which the native runtime's count ignores, lowers it to one. The text and
|
|
15
|
+
* root parameters are for the tests.
|
|
16
|
+
*/
|
|
17
|
+
export function availableCpus(membershipText: string = readMembership(), root: string = '/sys/fs/cgroup'): number {
|
|
18
|
+
const cpus = Math.max(1, availableParallelism());
|
|
19
|
+
const quota = cgroupCpuQuota(membershipText, root);
|
|
20
|
+
return quota > 0 && quota < cpus ? quota : cpus;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The whole CPUs this process's cgroup and its ancestors allow, or 0 where there is none or it is
|
|
25
|
+
* unknown: `cpu.max` under cgroup v2, `cpu.cfs_quota_us` and `cpu.cfs_period_us` under v1. A quota
|
|
26
|
+
* below one CPU counts as one, the least a run can use. The text and root parameters are for the tests.
|
|
27
|
+
*/
|
|
28
|
+
export function cgroupCpuQuota(membershipText: string = readMembership(), root: string = '/sys/fs/cgroup'): number {
|
|
29
|
+
let quota = 0;
|
|
30
|
+
const lower = (value: number): void => {
|
|
31
|
+
if (value > 0 && (quota === 0 || value < quota)) quota = value;
|
|
32
|
+
};
|
|
33
|
+
forEachCgroupDirectory(membershipText, root, '', (directory) => {
|
|
34
|
+
lower(cpuMaxValue(directory + '/cpu.max'));
|
|
35
|
+
});
|
|
36
|
+
forEachCgroupDirectory(membershipText, root, 'cpu', (directory) => {
|
|
37
|
+
// The kernel's default period, for a mount that lost the file but kept its quota.
|
|
38
|
+
const period = numberIn(directory + '/cpu.cfs_period_us') || 100_000;
|
|
39
|
+
lower(wholeCpus(numberIn(directory + '/cpu.cfs_quota_us'), period));
|
|
40
|
+
});
|
|
41
|
+
return quota;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The smallest memory limit of this process's cgroup and its ancestors (Linux), or 0 where there is
|
|
46
|
+
* none or it is unknown: `memory.max` and `memory.high` under cgroup v2, `memory.limit_in_bytes` under
|
|
47
|
+
* v1. The text and root parameters are for the tests.
|
|
48
|
+
*/
|
|
49
|
+
export function cgroupMemoryLimit(membershipText: string = readMembership(), root: string = '/sys/fs/cgroup'): number {
|
|
50
|
+
let limit = 0;
|
|
51
|
+
const lower = (value: number): void => {
|
|
52
|
+
if (value > 0 && (limit === 0 || value < limit)) limit = value;
|
|
53
|
+
};
|
|
54
|
+
forEachCgroupDirectory(membershipText, root, '', (directory) => {
|
|
55
|
+
lower(memoryLimitValue(directory + '/memory.max'));
|
|
56
|
+
lower(memoryLimitValue(directory + '/memory.high'));
|
|
57
|
+
});
|
|
58
|
+
forEachCgroupDirectory(membershipText, root, 'memory', (directory) => {
|
|
59
|
+
lower(memoryLimitValue(directory + '/memory.limit_in_bytes'));
|
|
60
|
+
});
|
|
61
|
+
return limit;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Calls `visit` with the directory of this process's cgroup for `controller` and of each of its
|
|
66
|
+
* ancestors, deepest first: the unified hierarchy for `''` (cgroup v2, whose line lists no
|
|
67
|
+
* controllers), or the controller's own mount for a v1 line that lists it.
|
|
68
|
+
*/
|
|
69
|
+
function forEachCgroupDirectory(
|
|
70
|
+
membershipText: string,
|
|
71
|
+
root: string,
|
|
72
|
+
controller: string,
|
|
73
|
+
visit: (directory: string) => void,
|
|
74
|
+
): void {
|
|
75
|
+
for (const line of membershipText.split('\n')) {
|
|
76
|
+
// "0::/path" (v2), "N:cpu:/path" or "N:cpu,cpuacct:/path" (v1).
|
|
77
|
+
const first = line.indexOf(':');
|
|
78
|
+
const second = line.indexOf(':', first + 1);
|
|
79
|
+
if (first < 0 || second < 0) continue;
|
|
80
|
+
const controllers = line.substring(first + 1, second);
|
|
81
|
+
const path = line.substring(second + 1);
|
|
82
|
+
if (controller === '') {
|
|
83
|
+
if (controllers !== '') continue;
|
|
84
|
+
forEachAncestor(path, (directory) => visit(root + directory));
|
|
85
|
+
} else if (controllers.split(',').indexOf(controller) >= 0) {
|
|
86
|
+
forEachAncestor(path, (directory) => visit(root + '/' + controller + directory));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Calls `visit` with `path` and each of its ancestors, deepest first ("/a/b/c", "/a/b", "/a", ""): a
|
|
93
|
+
* cgroup's limits apply to every process below it, in cgroup v1 as in v2.
|
|
94
|
+
*/
|
|
95
|
+
function forEachAncestor(path: string, visit: (directory: string) => void): void {
|
|
96
|
+
for (let directory = path; ; directory = directory.substring(0, directory.lastIndexOf('/'))) {
|
|
97
|
+
visit(directory === '/' ? '' : directory);
|
|
98
|
+
if (directory === '' || directory.lastIndexOf('/') < 0) break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** `/proc/self/cgroup`, or an empty text where it cannot be read (no cgroup limits). */
|
|
103
|
+
function readMembership(): string {
|
|
104
|
+
try {
|
|
105
|
+
return readFileSync('/proc/self/cgroup', 'utf8');
|
|
106
|
+
} catch {
|
|
107
|
+
return '';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The whole CPUs a cgroup v2 quota file allows, or 0 for `max`, an unreadable file or no number:
|
|
113
|
+
* `cpu.max` holds "MAX PERIOD" in microseconds.
|
|
114
|
+
*/
|
|
115
|
+
function cpuMaxValue(file: string): number {
|
|
116
|
+
let text: string;
|
|
117
|
+
try {
|
|
118
|
+
text = readFileSync(file, 'utf8').trim();
|
|
119
|
+
} catch {
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
if (text === '' || text === 'max') return 0;
|
|
123
|
+
const parts = text.split(/\s+/).map(Number);
|
|
124
|
+
return wholeCpus(parts[0]!, parts[1] ?? 100_000);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** A cgroup memory limit file's value in bytes, or 0 for `max`, an unreadable file or no number. */
|
|
128
|
+
function memoryLimitValue(file: string): number {
|
|
129
|
+
let text: string;
|
|
130
|
+
try {
|
|
131
|
+
text = readFileSync(file, 'utf8').trim();
|
|
132
|
+
} catch {
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
if (text === '' || text === 'max') return 0;
|
|
136
|
+
const value = Number(text);
|
|
137
|
+
// cgroup v1 reports no limit as a page-aligned value near 2^63.
|
|
138
|
+
return Number.isFinite(value) && value > 0 && value < 2 ** 62 ? value : 0;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** A file's number, or 0 where it cannot be read or holds none (a v1 quota of -1 is no quota). */
|
|
142
|
+
function numberIn(file: string): number {
|
|
143
|
+
let text: string;
|
|
144
|
+
try {
|
|
145
|
+
text = readFileSync(file, 'utf8').trim();
|
|
146
|
+
} catch {
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
const value = Number(text);
|
|
150
|
+
return Number.isFinite(value) && value > 0 ? value : 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** The whole CPUs `quota` microseconds per `period` microseconds allow, at least one where there is one. */
|
|
154
|
+
function wholeCpus(quota: number, period: number): number {
|
|
155
|
+
if (!Number.isFinite(quota) || !Number.isFinite(period) || quota <= 0 || period <= 0) return 0;
|
|
156
|
+
return Math.max(1, Math.floor(quota / period));
|
|
157
|
+
}
|
|
@@ -295,8 +295,8 @@ export function isIdentifierPart(codePoint: number, languageVariant = LanguageVa
|
|
|
295
295
|
isWordCharacter(codePoint) ||
|
|
296
296
|
codePoint === CharacterCodes.$ ||
|
|
297
297
|
(codePoint > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierPart(codePoint)) ||
|
|
298
|
-
|
|
299
|
-
|
|
298
|
+
// `:` is part of a JSX namespaced name, but not of a JSX identifier.
|
|
299
|
+
(languageVariant === LanguageVariant.JSX && codePoint === CharacterCodes.minus)
|
|
300
300
|
);
|
|
301
301
|
}
|
|
302
302
|
|
|
@@ -43,6 +43,7 @@ import {
|
|
|
43
43
|
isOptionalChain,
|
|
44
44
|
isOutermostOptionalChain,
|
|
45
45
|
isDottedName,
|
|
46
|
+
isFunctionExpressionOrArrowFunction,
|
|
46
47
|
} from './binder-utilities.js';
|
|
47
48
|
import { Diagnostic, type DiagnosticMessage, Diagnostics, chainDiagnostic } from './diagnostics.js';
|
|
48
49
|
import { resolveInstanceofExpression } from './checker-operators.js';
|
|
@@ -147,6 +148,7 @@ import {
|
|
|
147
148
|
checkNonNullType,
|
|
148
149
|
checkNonNullTypeEx,
|
|
149
150
|
checkTypeQueryExpression,
|
|
151
|
+
getResolvedSymbol,
|
|
150
152
|
} from './checker-expressions.js';
|
|
151
153
|
import { IterationUse, checkIteratedTypeOrElementType } from './checker-iteration.js';
|
|
152
154
|
import { isContextSensitive } from './checker-functions.js';
|
|
@@ -182,6 +184,7 @@ import {
|
|
|
182
184
|
everyInferenceHasCandidates,
|
|
183
185
|
someInferenceHasCandidates,
|
|
184
186
|
inferTypes,
|
|
187
|
+
inferTypesFromUnstarted,
|
|
185
188
|
isConstTypeVariable,
|
|
186
189
|
isMutableArrayLikeType,
|
|
187
190
|
} from './checker-inference.js';
|
|
@@ -207,7 +210,14 @@ import {
|
|
|
207
210
|
resolveJsxOpeningLikeElement,
|
|
208
211
|
} from './checker-jsx.js';
|
|
209
212
|
import { isCommonJSRequire, resolveExternalModuleTypeByLiteral } from './checker-javascript.js';
|
|
210
|
-
import {
|
|
213
|
+
import {
|
|
214
|
+
copyDeclarations,
|
|
215
|
+
declarationCount,
|
|
216
|
+
getDeclarations,
|
|
217
|
+
InternalSymbolName,
|
|
218
|
+
type Symbol,
|
|
219
|
+
SymbolFlags,
|
|
220
|
+
} from './symbol.js';
|
|
211
221
|
|
|
212
222
|
/** The type of an optional chain's expression with the chain's `undefined` removed. */
|
|
213
223
|
export function getOptionalExpressionType(c: Checker, exprType: Type, expression: Node): Type {
|
|
@@ -430,7 +440,7 @@ function resolveNewExpression(c: Checker, node: NewExpression, checkMode: CheckM
|
|
|
430
440
|
}
|
|
431
441
|
const constructSignatures = getSignaturesOfType(c, expressionType, SignatureKind.Construct);
|
|
432
442
|
if (constructSignatures.length !== 0) {
|
|
433
|
-
if (!isConstructorAccessible(c, node, constructSignatures
|
|
443
|
+
if (!isConstructorAccessible(c, node, constructSignatures)) return resolveErrorCall(c, node);
|
|
434
444
|
if (someSignature(constructSignatures, (s) => (s.flags & SignatureFlags.Abstract) !== 0)) {
|
|
435
445
|
c.error(node, Diagnostics.Cannot_create_an_instance_of_an_abstract_class);
|
|
436
446
|
return resolveErrorCall(c, node);
|
|
@@ -892,6 +902,8 @@ class CallState {
|
|
|
892
902
|
candidates: Signature[];
|
|
893
903
|
argCheckMode: CheckMode = CheckMode.Normal;
|
|
894
904
|
isSingleNonGenericCandidate = false;
|
|
905
|
+
/** The call is resolved while its own resolution is in progress. */
|
|
906
|
+
recursiveResolution = false;
|
|
895
907
|
candidatesForArgumentError: Signature[] = [];
|
|
896
908
|
candidateForArgumentArityError: Signature | undefined = undefined;
|
|
897
909
|
candidateForTypeArgumentError: Signature | undefined = undefined;
|
|
@@ -933,8 +945,19 @@ export function resolveCall(
|
|
|
933
945
|
s.argCheckMode = CheckMode.SkipContextSensitive;
|
|
934
946
|
// A subtype pass picks the best overload; assignability decides whether the call is an error.
|
|
935
947
|
let result: Signature | undefined = undefined;
|
|
948
|
+
const callResolutionDepth = c.callResolutionDepth;
|
|
949
|
+
const callResolutionStack = c.callResolutionStack;
|
|
950
|
+
for (let i = 0; i < callResolutionDepth; i++)
|
|
951
|
+
if (callResolutionStack[i] === node) {
|
|
952
|
+
s.recursiveResolution = true;
|
|
953
|
+
break;
|
|
954
|
+
}
|
|
955
|
+
if (callResolutionDepth < callResolutionStack.length) callResolutionStack[callResolutionDepth] = node;
|
|
956
|
+
else callResolutionStack.push(node);
|
|
957
|
+
c.callResolutionDepth = callResolutionDepth + 1;
|
|
936
958
|
if (candidates.length > 1) result = chooseOverload(c, s, c.subtypeRelation);
|
|
937
959
|
if (result === undefined) result = chooseOverload(c, s, c.assignableRelation);
|
|
960
|
+
c.callResolutionDepth = callResolutionDepth;
|
|
938
961
|
if (result !== undefined) return result;
|
|
939
962
|
result = getCandidateForOverloadFailure(c, node, s.candidates, s.args, checkMode);
|
|
940
963
|
// Cache now so that error reporting below handles circularities like getResolvedSignature would.
|
|
@@ -1031,7 +1054,11 @@ function chooseOverload(c: Checker, s: CallState, relation: Relation): Signature
|
|
|
1031
1054
|
c,
|
|
1032
1055
|
candidate.typeParameters,
|
|
1033
1056
|
candidate,
|
|
1034
|
-
|
|
1057
|
+
// A recursive resolution of a call with one candidate skips constraint checks during inference, which
|
|
1058
|
+
// would otherwise report circularities.
|
|
1059
|
+
(s.recursiveResolution && s.candidates.length === 1
|
|
1060
|
+
? InferenceFlags.NoConstraintChecks
|
|
1061
|
+
: InferenceFlags.None) | (isInJSFile(s.node) ? InferenceFlags.AnyDefault : InferenceFlags.None),
|
|
1035
1062
|
undefined,
|
|
1036
1063
|
);
|
|
1037
1064
|
typeArgumentTypes = inferTypeArguments(
|
|
@@ -1408,13 +1435,13 @@ function inferTypeArguments(
|
|
|
1408
1435
|
)
|
|
1409
1436
|
: instantiatedType;
|
|
1410
1437
|
// Return type inferences have the lowest priority.
|
|
1411
|
-
|
|
1438
|
+
inferTypesFromUnstarted(
|
|
1412
1439
|
c,
|
|
1440
|
+
signature,
|
|
1413
1441
|
context.inferences,
|
|
1414
1442
|
inferenceSourceType,
|
|
1415
1443
|
inferenceTargetType,
|
|
1416
1444
|
InferencePriority.ReturnType,
|
|
1417
|
-
false,
|
|
1418
1445
|
);
|
|
1419
1446
|
}
|
|
1420
1447
|
// A separate pass for the mapper used to instantiate generic contextual types, from the outer
|
|
@@ -1422,7 +1449,14 @@ function inferTypeArguments(
|
|
|
1422
1449
|
const returnContext = createInferenceContext(c, signature.typeParameters, signature, context.flags, undefined);
|
|
1423
1450
|
const outerReturnMapper = outerContext !== undefined ? createOuterReturnMapper(c, outerContext) : undefined;
|
|
1424
1451
|
const returnSourceType = instantiateType(c, contextualType, outerReturnMapper);
|
|
1425
|
-
|
|
1452
|
+
inferTypesFromUnstarted(
|
|
1453
|
+
c,
|
|
1454
|
+
signature,
|
|
1455
|
+
returnContext.inferences,
|
|
1456
|
+
returnSourceType,
|
|
1457
|
+
inferenceTargetType,
|
|
1458
|
+
InferencePriority.None,
|
|
1459
|
+
);
|
|
1426
1460
|
context.returnMapper = someInferenceHasCandidates(returnContext.inferences)
|
|
1427
1461
|
? getMapperFromContext(cloneInferredPartOfContext(c, returnContext))
|
|
1428
1462
|
: undefined;
|
|
@@ -1708,6 +1742,26 @@ function withHeadMessage(diagnostic: Diagnostic, headMessage: DiagnosticMessage
|
|
|
1708
1742
|
return headMessage !== undefined ? chainDiagnostic(diagnostic, headMessage) : diagnostic;
|
|
1709
1743
|
}
|
|
1710
1744
|
|
|
1745
|
+
/** Whether `node` calls the `resolve` parameter of an executor passed to the global `new Promise`. */
|
|
1746
|
+
function isPromiseResolveArityError(c: Checker, node: Node): boolean {
|
|
1747
|
+
if (node.kind !== SyntaxKind.CallExpression) return false;
|
|
1748
|
+
const callee = getExpression(node)!;
|
|
1749
|
+
if (callee.kind !== SyntaxKind.Identifier) return false;
|
|
1750
|
+
const symbol = resolveName(c, callee, getText(callee), SymbolFlags.Value, undefined, false, false);
|
|
1751
|
+
const declaration = symbol?.valueDeclaration;
|
|
1752
|
+
if (
|
|
1753
|
+
declaration === undefined ||
|
|
1754
|
+
declaration.kind !== SyntaxKind.Parameter ||
|
|
1755
|
+
!isFunctionExpressionOrArrowFunction(declaration.parent!) ||
|
|
1756
|
+
declaration.parent!.parent?.kind !== SyntaxKind.NewExpression
|
|
1757
|
+
)
|
|
1758
|
+
return false;
|
|
1759
|
+
const constructor = getExpression(declaration.parent!.parent!);
|
|
1760
|
+
if (constructor === undefined || constructor.kind !== SyntaxKind.Identifier) return false;
|
|
1761
|
+
const globalPromiseSymbol = getGlobalValueSymbol(c, 'Promise', false);
|
|
1762
|
+
return globalPromiseSymbol !== undefined && getResolvedSymbol(c, constructor) === globalPromiseSymbol;
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1711
1765
|
function getArgumentArityError(
|
|
1712
1766
|
c: Checker,
|
|
1713
1767
|
node: Node,
|
|
@@ -1750,7 +1804,16 @@ function getArgumentArityError(
|
|
|
1750
1804
|
: minCount < maxCount
|
|
1751
1805
|
? minCount + '-' + maxCount
|
|
1752
1806
|
: String(minCount);
|
|
1807
|
+
// `resolve()` without an argument, where `resolve` is the parameter of a `new Promise` executor.
|
|
1808
|
+
const isVoidPromiseError =
|
|
1809
|
+
!hasRestParameter && parameterRange === '1' && args.length === 0 && isPromiseResolveArityError(c, node);
|
|
1753
1810
|
const errorNode = getErrorNodeForCallNode(node);
|
|
1811
|
+
if (isVoidPromiseError && isInJSFile(node))
|
|
1812
|
+
return createDiagnosticForNode(
|
|
1813
|
+
errorNode,
|
|
1814
|
+
Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments,
|
|
1815
|
+
[],
|
|
1816
|
+
);
|
|
1754
1817
|
const message =
|
|
1755
1818
|
node.kind === SyntaxKind.Decorator
|
|
1756
1819
|
? hasRestParameter
|
|
@@ -1758,7 +1821,9 @@ function getArgumentArityError(
|
|
|
1758
1821
|
: Diagnostics.The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0
|
|
1759
1822
|
: hasRestParameter
|
|
1760
1823
|
? Diagnostics.Expected_at_least_0_arguments_but_got_1
|
|
1761
|
-
:
|
|
1824
|
+
: isVoidPromiseError
|
|
1825
|
+
? Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise
|
|
1826
|
+
: Diagnostics.Expected_0_arguments_but_got_1;
|
|
1762
1827
|
if (minCount < args.length && args.length < maxCount)
|
|
1763
1828
|
// Between min and max, but no overload matches.
|
|
1764
1829
|
return withHeadMessage(
|
|
@@ -2106,10 +2171,13 @@ class InstantiationExpressionInstantiator {
|
|
|
2106
2171
|
if (resolved.callSignatures.length !== 0 || resolved.constructSignatures.length !== 0) this.hasSignatures = true;
|
|
2107
2172
|
if (callSignatures.length !== 0 || constructSignatures.length !== 0) this.hasApplicableSignature = true;
|
|
2108
2173
|
if (callSignatures !== resolved.callSignatures || constructSignatures !== resolved.constructSignatures) {
|
|
2174
|
+
// A symbol of its own, with the declarations of the instantiated type's symbol.
|
|
2175
|
+
const symbol = c.newSymbol(SymbolFlags.None, InternalSymbolName.InstantiationExpression);
|
|
2176
|
+
if (t.symbol !== undefined) copyDeclarations(symbol, t.symbol);
|
|
2109
2177
|
const result = newObjectType(
|
|
2110
2178
|
c,
|
|
2111
2179
|
ObjectFlags.Anonymous | ObjectFlags.InstantiationExpressionType,
|
|
2112
|
-
|
|
2180
|
+
symbol,
|
|
2113
2181
|
) as InstantiationExpressionType;
|
|
2114
2182
|
setStructuredTypeMembers(c, result, resolved.members, callSignatures, constructSignatures, resolved.indexInfos);
|
|
2115
2183
|
result.node = this.node;
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
isPrivateIdentifierClassElementDeclaration,
|
|
47
47
|
isStatic,
|
|
48
48
|
} from './binder-utilities.js';
|
|
49
|
-
import { isFunctionLike, nodeIsMissing, nodeIsPresent } from './ast-utilities.js';
|
|
49
|
+
import { isFunctionLike, isInJSFile, nodeIsMissing, nodeIsPresent } from './ast-utilities.js';
|
|
50
50
|
import { ScriptTarget, getEmitScriptTarget, getUseDefineForClassFields } from './options.js';
|
|
51
51
|
import { hasDynamicName, hasLateBindableName } from './checker-utilities.js';
|
|
52
52
|
import { type DiagnosticMessage, Diagnostics } from './diagnostics.js';
|
|
@@ -78,7 +78,13 @@ import { getSymbolOfDeclaration } from './checker-symbols.js';
|
|
|
78
78
|
import { getOptionalType, getTypeOfSymbol } from './checker-symbol-types.js';
|
|
79
79
|
import { convertAutoToAny, getFlowTypeOfReference } from './checker-narrowing.js';
|
|
80
80
|
import { TypeFacts, hasTypeFacts } from './checker-flow.js';
|
|
81
|
-
import {
|
|
81
|
+
import {
|
|
82
|
+
getIndexInfosOfType,
|
|
83
|
+
getPropertiesOfType,
|
|
84
|
+
getSignaturesOfType,
|
|
85
|
+
getTypeOfPropertyOfType,
|
|
86
|
+
} from './checker-members.js';
|
|
87
|
+
import { isConstructorDeclaredThisProperty } from './checker-javascript.js';
|
|
82
88
|
import {
|
|
83
89
|
checkJSDocLinksOfNode,
|
|
84
90
|
checkNodeDeferred,
|
|
@@ -91,7 +97,7 @@ import {
|
|
|
91
97
|
checkExportsOnMergedDeclarations,
|
|
92
98
|
} from './checker-declarations.js';
|
|
93
99
|
import { checkFunctionLikeBody } from './checker-functions.js';
|
|
94
|
-
import { checkJSDocFullSignature } from './checker-jsdoc.js';
|
|
100
|
+
import { checkJSDocFullSignature, checkJSDocFullSignatureType } from './checker-jsdoc.js';
|
|
95
101
|
import { checkComputedPropertyName } from './checker-expressions.js';
|
|
96
102
|
import { checkFunctionOrConstructorSymbol, checkFunctionOrMethodSymbols } from './checker-overloads.js';
|
|
97
103
|
import {
|
|
@@ -100,6 +106,8 @@ import {
|
|
|
100
106
|
checkInterfaceHeritage,
|
|
101
107
|
} from './checker-heritage.js';
|
|
102
108
|
import { checkDecorators, getFirstTransformableStaticClassElement } from './checker-decorators.js';
|
|
109
|
+
import { getTypeOfNode } from './checker-services.js';
|
|
110
|
+
import { IdentifierName } from './identifier-name.js';
|
|
103
111
|
|
|
104
112
|
export function checkClassDeclaration(c: Checker, node: Node): void {
|
|
105
113
|
checkClassLikeDeclaration(c, node);
|
|
@@ -148,6 +156,23 @@ export function checkClassLikeDeferred(c: Checker, node: Node): void {
|
|
|
148
156
|
|
|
149
157
|
function checkClassMembers(c: Checker, node: Node): void {
|
|
150
158
|
for (const member of getMembers(node)!.nodes) checkClassMember(c, member);
|
|
159
|
+
checkConstructorDeclaredProperties(c, node);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Resolves the types of a JavaScript class's properties declared by `this.x` assignments in its
|
|
164
|
+
* constructor, so the diagnostics of their initializers don't depend on which use is checked first.
|
|
165
|
+
*/
|
|
166
|
+
function checkConstructorDeclaredProperties(c: Checker, node: Node): void {
|
|
167
|
+
if (!isInJSFile(node)) return;
|
|
168
|
+
const symbol = getSymbolOfDeclaration(c, node);
|
|
169
|
+
if (symbol === undefined) return;
|
|
170
|
+
for (const property of getPropertiesOfType(c, getDeclaredTypeOfSymbol(c, symbol)))
|
|
171
|
+
if (
|
|
172
|
+
isConstructorDeclaredThisProperty(c, property) &&
|
|
173
|
+
c.symbolLinks(property).thisAssignmentLocation!.parent === node
|
|
174
|
+
)
|
|
175
|
+
getTypeOfSymbol(c, property);
|
|
151
176
|
}
|
|
152
177
|
|
|
153
178
|
function checkClassLikeDeclaration(c: Checker, node: Node): void {
|
|
@@ -241,6 +266,7 @@ function checkClassMember(c: Checker, member: Node): void {
|
|
|
241
266
|
if (symbol !== undefined && member.kind !== SyntaxKind.Constructor) getTypeOfSymbol(c, symbol);
|
|
242
267
|
checkFunctionLikeBody(c, member);
|
|
243
268
|
if (member.kind === SyntaxKind.MethodDeclaration) {
|
|
269
|
+
checkJSDocFullSignatureType(c, member);
|
|
244
270
|
checkJSDocFullSignature(c, member);
|
|
245
271
|
checkFunctionOrMethodSymbols(c, member);
|
|
246
272
|
if (hasSyntacticModifier(member, ModifierFlags.Abstract) && getBody(member) !== undefined)
|
|
@@ -563,7 +589,7 @@ function newThisPropertyReference(symbol: Symbol, container: Node, flowNode: Flo
|
|
|
563
589
|
const name = symbol.name;
|
|
564
590
|
let accessName: Node;
|
|
565
591
|
if (name.startsWith('\ufffe#')) accessName = new PrivateIdentifier(name.substring(name.indexOf('@') + 1));
|
|
566
|
-
else accessName = new Identifier(name);
|
|
592
|
+
else accessName = new Identifier(new IdentifierName(name));
|
|
567
593
|
const thisExpression = new KeywordExpression(SyntaxKind.ThisKeyword);
|
|
568
594
|
const reference = new PropertyAccessExpression(thisExpression, undefined, accessName, NodeFlags.None);
|
|
569
595
|
thisExpression.parent = reference;
|
|
@@ -612,35 +638,64 @@ function containsUndefinedType(t: Type): boolean {
|
|
|
612
638
|
return (first.flags & TypeFlags.Undefined) !== 0;
|
|
613
639
|
}
|
|
614
640
|
|
|
615
|
-
/**
|
|
616
|
-
export
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
641
|
+
/** A constructor that `node` may not call: the modifiers that forbid it, and the class that declares it. */
|
|
642
|
+
export class ConstructorAccessibilityError {
|
|
643
|
+
constructor(
|
|
644
|
+
readonly kind: ModifierFlags,
|
|
645
|
+
readonly declaringClass: Type,
|
|
646
|
+
) {}
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* The first of `signatures` whose constructor `node` may not call because of the modifiers in `modifiersMask`:
|
|
651
|
+
* private and protected constructors are only callable within their class, or subclasses if protected.
|
|
652
|
+
*/
|
|
653
|
+
export function getConstructorAccessibilityError(
|
|
654
|
+
c: Checker,
|
|
655
|
+
node: Node,
|
|
656
|
+
signatures: readonly Signature[],
|
|
657
|
+
modifiersMask: ModifierFlags,
|
|
658
|
+
): ConstructorAccessibilityError | undefined {
|
|
659
|
+
for (const signature of signatures) {
|
|
660
|
+
const declaration = signature.declaration;
|
|
661
|
+
if (declaration === undefined) continue;
|
|
662
|
+
const modifiers = getModifierFlags(declaration) & modifiersMask;
|
|
663
|
+
// Public constructors and constructor functions are always accessible.
|
|
664
|
+
if (modifiers === 0 || declaration.kind !== SyntaxKind.Constructor) continue;
|
|
665
|
+
const classSymbol = getSymbol(declaration.parent!)!;
|
|
666
|
+
const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(classSymbol);
|
|
667
|
+
let withinClass = false;
|
|
668
|
+
for (let container = getContainingClass(node); container !== undefined; container = getContainingClass(container))
|
|
669
|
+
if (container === declaringClassDeclaration) {
|
|
670
|
+
withinClass = true;
|
|
671
|
+
break;
|
|
672
|
+
}
|
|
673
|
+
if (withinClass) continue;
|
|
674
|
+
const containingClass = getContainingClass(node);
|
|
675
|
+
if (containingClass !== undefined && (modifiers & ModifierFlags.Protected) !== 0) {
|
|
676
|
+
const containingType = getTypeOfNode(c, containingClass);
|
|
677
|
+
if (typeHasProtectedAccessibleBase(c, classSymbol, containingType)) continue;
|
|
678
|
+
}
|
|
679
|
+
return new ConstructorAccessibilityError(modifiers, getDeclaredTypeOfSymbol(c, classSymbol));
|
|
632
680
|
}
|
|
633
|
-
|
|
681
|
+
return undefined;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
/** Whether `new` at `node` may call the constructors of `signatures`, reporting private and protected ones out of reach. */
|
|
685
|
+
export function isConstructorAccessible(c: Checker, node: Node, signatures: readonly Signature[]): boolean {
|
|
686
|
+
const error = getConstructorAccessibilityError(c, node, signatures, ModifierFlags.NonPublicAccessibilityModifier);
|
|
687
|
+
if (error === undefined) return true;
|
|
688
|
+
if ((error.kind & ModifierFlags.Private) !== 0)
|
|
634
689
|
c.error(
|
|
635
690
|
node,
|
|
636
691
|
Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,
|
|
637
|
-
typeToString(c, declaringClass),
|
|
692
|
+
typeToString(c, error.declaringClass),
|
|
638
693
|
);
|
|
639
|
-
if ((
|
|
694
|
+
if ((error.kind & ModifierFlags.Protected) !== 0)
|
|
640
695
|
c.error(
|
|
641
696
|
node,
|
|
642
697
|
Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,
|
|
643
|
-
typeToString(c, declaringClass),
|
|
698
|
+
typeToString(c, error.declaringClass),
|
|
644
699
|
);
|
|
645
700
|
return false;
|
|
646
701
|
}
|