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
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
type Node,
|
|
14
14
|
type SourceFile,
|
|
15
15
|
} from './ast.js';
|
|
16
|
-
import { Diagnostics, type DiagnosticMessage, type MessageWithArgs } from './diagnostics.js';
|
|
16
|
+
import { Diagnostics, type DiagnosticMessage, type MessageWithArgs, messageWithArgs } from './diagnostics.js';
|
|
17
17
|
import { FileIncludeKind, FileIncludeReason, IncludeProcessor, ProcessingDiagnostic } from './file-include.js';
|
|
18
18
|
import type { FileSystem } from './file-system.js';
|
|
19
19
|
import { ModuleResolutionHost, Resolver, getAutomaticTypeDirectiveNames } from './module-resolution.js';
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
takePreparedFile,
|
|
43
43
|
} from './parallel-parse.js';
|
|
44
44
|
import type { PackageJsonLookup } from './package-json.js';
|
|
45
|
-
import { parseSourceFile } from './parser.js';
|
|
45
|
+
import { parseSourceFile, getScriptKindFromFileName } from './parser.js';
|
|
46
46
|
import { mark } from './timeline.js';
|
|
47
47
|
import {
|
|
48
48
|
combinePaths,
|
|
@@ -59,6 +59,7 @@ import {
|
|
|
59
59
|
supportedTSExtensionsWithJsonFlat,
|
|
60
60
|
toFileNameLowerCase,
|
|
61
61
|
toPath,
|
|
62
|
+
isNetworkPath,
|
|
62
63
|
} from './path.js';
|
|
63
64
|
import {
|
|
64
65
|
getDefaultLibFileName,
|
|
@@ -76,6 +77,7 @@ import {
|
|
|
76
77
|
SourceFileMetadata,
|
|
77
78
|
} from './program-utilities.js';
|
|
78
79
|
import { SyntaxKind } from './syntax-kind.js';
|
|
80
|
+
import { isSourcePhaseImport } from './ast-utilities.js';
|
|
79
81
|
import { hasExtension } from './vfs-match.js';
|
|
80
82
|
import { TokenFlags } from './types.js';
|
|
81
83
|
import {
|
|
@@ -140,7 +142,10 @@ export class CompilerHost extends ModuleResolutionHost {
|
|
|
140
142
|
if (prepared !== undefined) return prepared;
|
|
141
143
|
const text = this.fs.readFile(fileName);
|
|
142
144
|
if (text === undefined) return undefined;
|
|
143
|
-
|
|
145
|
+
// A file without a known extension (with allowNonTsExtensions) parses as TypeScript.
|
|
146
|
+
const kind = getScriptKindFromFileName(fileName);
|
|
147
|
+
const scriptKind = kind === ScriptKind.Unknown ? ScriptKind.TS : kind;
|
|
148
|
+
return parseSourceFile(fileName, text, new ParseOptions(path, scriptKind, externalModuleIndicatorOptions));
|
|
144
149
|
}
|
|
145
150
|
|
|
146
151
|
/** The config of a referenced project, or `undefined` if it can't be read. */
|
|
@@ -246,6 +251,8 @@ class ParseTask {
|
|
|
246
251
|
subTasks: ParseTask[] | undefined = undefined;
|
|
247
252
|
loaded = false;
|
|
248
253
|
startedSubTasks = false;
|
|
254
|
+
/** A root file name that resolved to no supported file: the task only carries its processing diagnostic. */
|
|
255
|
+
failedLookup = false;
|
|
249
256
|
metadata: SourceFileMetadata = libFileMetadata;
|
|
250
257
|
resolutionsInFile: ModeAwareCache<ResolvedModule> | undefined = undefined;
|
|
251
258
|
resolutionsTrace: MessageWithArgs[] | undefined = undefined;
|
|
@@ -256,6 +263,8 @@ class ParseTask {
|
|
|
256
263
|
jsxRuntimeImport: JsxRuntimeImport | undefined = undefined;
|
|
257
264
|
/** The task of the same file name that was loaded instead of this one. */
|
|
258
265
|
loadedTask: ParseTask | undefined = undefined;
|
|
266
|
+
/** The index in `FileLoader.taskData` of the tasks of this task's path, once known; -1 before. */
|
|
267
|
+
dataIndex = -1;
|
|
259
268
|
/** Whether an import or a type reference directive adds the file (`ProcessedFiles.addedFiles`). */
|
|
260
269
|
readonly byImport: boolean;
|
|
261
270
|
|
|
@@ -303,9 +312,30 @@ class ParseTask {
|
|
|
303
312
|
|
|
304
313
|
const noData: readonly ParseTaskData[] = [];
|
|
305
314
|
|
|
315
|
+
/** The resolution of a module the importing file declares itself: none. */
|
|
316
|
+
const locallyDeclaredModule: ResolvedModule = {
|
|
317
|
+
resolvedFileName: '',
|
|
318
|
+
originalPath: '',
|
|
319
|
+
extension: '',
|
|
320
|
+
resolvedUsingTsExtension: false,
|
|
321
|
+
packageId: undefined,
|
|
322
|
+
isExternalLibraryImport: false,
|
|
323
|
+
alternateResult: '',
|
|
324
|
+
resolutionDiagnostics: [],
|
|
325
|
+
};
|
|
326
|
+
|
|
306
327
|
/** The tasks of one path, by file name casing. */
|
|
307
328
|
class ParseTaskData {
|
|
308
329
|
readonly tasks = new Map<string, ParseTask>();
|
|
330
|
+
/** Whether a task of the path is queued (`start`). */
|
|
331
|
+
queued = false;
|
|
332
|
+
/** The path's first queued task, the first of `tasks`. */
|
|
333
|
+
first: ParseTask | undefined = undefined;
|
|
334
|
+
/**
|
|
335
|
+
* Whether every task of `tasks` is loaded (`run`): then more work of the path does nothing unless it
|
|
336
|
+
* reaches the path at a lower depth.
|
|
337
|
+
*/
|
|
338
|
+
settled = false;
|
|
309
339
|
lowestDepth = Number.MAX_SAFE_INTEGER;
|
|
310
340
|
startedSubTasks = false;
|
|
311
341
|
packageId: PackageId | undefined = undefined;
|
|
@@ -315,10 +345,10 @@ class ParseTaskData {
|
|
|
315
345
|
keptCopy: ParseTaskData | undefined = undefined;
|
|
316
346
|
/** The paths the file's imports and type reference directives add, once collected. */
|
|
317
347
|
added: readonly ParseTaskData[] = noData;
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
348
|
+
/** The file name `collect` reached the path by first, once it did. */
|
|
349
|
+
collectedName: string | undefined = undefined;
|
|
350
|
+
/** The path's include reasons, once `collect` found one: the list in `IncludeProcessor.fileIncludeReasons`. */
|
|
351
|
+
reasons: FileIncludeReason[] | undefined = undefined;
|
|
322
352
|
}
|
|
323
353
|
|
|
324
354
|
/** Pending processing of `tasks[index]`. */
|
|
@@ -477,7 +507,7 @@ export function needsImportHelpersImportSpecifier(file: SourceFile, options: Com
|
|
|
477
507
|
|
|
478
508
|
/** The module `file` imports the JSX runtime from under `options`, or '' if it imports none. */
|
|
479
509
|
export function jsxRuntimeImportOf(file: SourceFile, options: CompilerOptions): string {
|
|
480
|
-
if (file
|
|
510
|
+
if (!isSourceFileJS(file) && file.scriptKind !== ScriptKind.TSX) return '';
|
|
481
511
|
return getJSXRuntimeImport(getJSXImplicitImportBase(options, file), options);
|
|
482
512
|
}
|
|
483
513
|
|
|
@@ -557,7 +587,10 @@ export class FileLoader {
|
|
|
557
587
|
private readonly supportedExtensionsWithJson: readonly (readonly string[])[];
|
|
558
588
|
private readonly maxNodeModuleJsDepth: number;
|
|
559
589
|
private readonly rootTasks: ParseTask[] = [];
|
|
560
|
-
|
|
590
|
+
/** The tasks of each path, created when a task of the path is first queued or built ahead. */
|
|
591
|
+
private readonly taskData: ParseTaskData[] = [];
|
|
592
|
+
/** The index in `taskData` of each path's tasks. */
|
|
593
|
+
private readonly taskDataByPath = new Map<string, number>();
|
|
561
594
|
/** Work queued by `start`, run last-in first-out like tsgo's single-threaded work group. */
|
|
562
595
|
private readonly work: ParseWork[] = [];
|
|
563
596
|
private readonly libFileCache = new Map<string, LibFile>();
|
|
@@ -627,7 +660,11 @@ export class FileLoader {
|
|
|
627
660
|
const loaded = prepared.loaded;
|
|
628
661
|
if (loaded === undefined) continue;
|
|
629
662
|
const subTasks = this.subTasksOf(loaded);
|
|
630
|
-
|
|
663
|
+
// Their paths and tasks, found here while threads parse rather than when the walk reaches them.
|
|
664
|
+
for (const task of subTasks) {
|
|
665
|
+
task.path = this.toPath(task.normalizedFilePath);
|
|
666
|
+
task.dataIndex = this.dataIndexOf(task.path);
|
|
667
|
+
}
|
|
631
668
|
this.subTasksAhead.set(prepared.fileName, new SubTasksAhead(loaded, subTasks));
|
|
632
669
|
}
|
|
633
670
|
}
|
|
@@ -705,7 +742,7 @@ export class FileLoader {
|
|
|
705
742
|
|
|
706
743
|
private walk(): void {
|
|
707
744
|
for (let work = this.work.pop(); work !== undefined; work = this.work.pop()) {
|
|
708
|
-
if (this.walkingAhead && this.parsesUnprepared(work.tasks[work.index], work.data)) {
|
|
745
|
+
if (this.walkingAhead && !this.elides(work) && this.parsesUnprepared(work.tasks[work.index], work.data)) {
|
|
709
746
|
this.work.push(work);
|
|
710
747
|
return;
|
|
711
748
|
}
|
|
@@ -721,6 +758,7 @@ export class FileLoader {
|
|
|
721
758
|
*/
|
|
722
759
|
release(): void {
|
|
723
760
|
this.rootTasks.length = 0;
|
|
761
|
+
this.taskData.length = 0;
|
|
724
762
|
this.taskDataByPath.clear();
|
|
725
763
|
this.work.length = 0;
|
|
726
764
|
this.subTasksAhead.clear();
|
|
@@ -900,6 +938,7 @@ export class FileLoader {
|
|
|
900
938
|
return;
|
|
901
939
|
}
|
|
902
940
|
const task = new ParseTask(absolute, undefined, reason, false, false, false, undefined);
|
|
941
|
+
task.failedLookup = true;
|
|
903
942
|
task.addProcessingDiagnostic(
|
|
904
943
|
ProcessingDiagnostic.explainingFileInclude('', reason, resolved.message, resolved.args),
|
|
905
944
|
);
|
|
@@ -926,6 +965,8 @@ export class FileLoader {
|
|
|
926
965
|
): string | ReferenceDiagnostic {
|
|
927
966
|
const allowNonTsExtensions = this.options.allowNonTsExtensions === true;
|
|
928
967
|
const diagnosticFileName = normalizeSlashes(referenceText);
|
|
968
|
+
if (isNetworkPath(fileName))
|
|
969
|
+
return new ReferenceDiagnostic(Diagnostics.Network_path_0_is_not_supported, [diagnosticFileName]);
|
|
929
970
|
const fs = this.host.fs;
|
|
930
971
|
if (hasExtension(fileName)) {
|
|
931
972
|
const canonicalFileName = getCanonicalFileName(fileName, fs.useCaseSensitiveFileNames);
|
|
@@ -1026,43 +1067,67 @@ export class FileLoader {
|
|
|
1026
1067
|
// ---- Loading
|
|
1027
1068
|
|
|
1028
1069
|
private start(tasks: ParseTask[], depth: number): void {
|
|
1070
|
+
const taskData = this.taskData;
|
|
1029
1071
|
for (let i = 0; i < tasks.length; i++) {
|
|
1030
1072
|
const task = tasks[i];
|
|
1031
|
-
// Sub-tasks built ahead have their paths.
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1073
|
+
// Sub-tasks built ahead have their paths and tasks.
|
|
1074
|
+
let k = task.dataIndex;
|
|
1075
|
+
if (k < 0) {
|
|
1076
|
+
if (task.path === '') task.path = this.toPath(task.normalizedFilePath);
|
|
1077
|
+
k = this.dataIndexOf(task.path);
|
|
1078
|
+
task.dataIndex = k;
|
|
1079
|
+
}
|
|
1080
|
+
const data = taskData[k];
|
|
1081
|
+
const loaded = data.queued;
|
|
1082
|
+
if (!loaded) {
|
|
1083
|
+
data.queued = true;
|
|
1084
|
+
data.first = task;
|
|
1085
|
+
data.tasks.set(task.normalizedFilePath, task);
|
|
1038
1086
|
}
|
|
1039
1087
|
this.work.push(new ParseWork(tasks, i, data, loaded, depth));
|
|
1040
1088
|
}
|
|
1041
1089
|
}
|
|
1042
1090
|
|
|
1091
|
+
/** The index in `taskData` of the tasks of `path`, created if needed. */
|
|
1092
|
+
private dataIndexOf(path: string): number {
|
|
1093
|
+
let k = this.taskDataByPath.get(path);
|
|
1094
|
+
if (k === undefined) {
|
|
1095
|
+
k = this.taskData.length;
|
|
1096
|
+
this.taskData.push(new ParseTaskData());
|
|
1097
|
+
this.taskDataByPath.set(path, k);
|
|
1098
|
+
}
|
|
1099
|
+
return k;
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1043
1102
|
private run(work: ParseWork): void {
|
|
1044
1103
|
const task = work.tasks[work.index];
|
|
1045
1104
|
const data = work.data;
|
|
1046
1105
|
let startSubTasks = false;
|
|
1047
1106
|
if (work.loaded) {
|
|
1048
|
-
const
|
|
1107
|
+
const name = task.normalizedFilePath;
|
|
1108
|
+
const first = data.first;
|
|
1109
|
+
const existing = first !== undefined && first.normalizedFilePath === name ? first : data.tasks.get(name);
|
|
1049
1110
|
if (existing !== undefined) {
|
|
1050
1111
|
task.loadedTask = existing;
|
|
1051
1112
|
} else {
|
|
1052
|
-
data.tasks.set(
|
|
1113
|
+
data.tasks.set(name, task);
|
|
1114
|
+
data.settled = false;
|
|
1053
1115
|
// A new casing of a file: load its references if another casing's were.
|
|
1054
1116
|
startSubTasks = data.startedSubTasks;
|
|
1055
1117
|
}
|
|
1056
1118
|
}
|
|
1057
1119
|
if (data.packageId === undefined && task.packageId !== undefined) data.packageId = task.packageId;
|
|
1058
1120
|
const depth = task.increaseDepth ? work.depth + 1 : work.depth;
|
|
1059
|
-
|
|
1121
|
+
const lowered = depth < data.lowestDepth;
|
|
1122
|
+
if (lowered) {
|
|
1060
1123
|
// Reached at a lower depth than before: load references again.
|
|
1061
1124
|
data.lowestDepth = depth;
|
|
1062
1125
|
startSubTasks = true;
|
|
1063
1126
|
data.startedSubTasks = true;
|
|
1064
1127
|
}
|
|
1065
1128
|
if (task.elideOnDepth && depth > this.maxNodeModuleJsDepth) return;
|
|
1129
|
+
// Most work reaches a path already loaded, at no lower depth.
|
|
1130
|
+
if (data.settled && !startSubTasks) return;
|
|
1066
1131
|
for (const taskByFileName of data.tasks.values()) {
|
|
1067
1132
|
let loadSubTasks = startSubTasks;
|
|
1068
1133
|
if (!taskByFileName.loaded) {
|
|
@@ -1072,11 +1137,23 @@ export class FileLoader {
|
|
|
1072
1137
|
data.startedSubTasks = true;
|
|
1073
1138
|
}
|
|
1074
1139
|
}
|
|
1075
|
-
|
|
1140
|
+
// A lower depth restarts references already started, which may now be loaded past `maxNodeModuleJsDepth`.
|
|
1141
|
+
// Every file reached from them is at least as deep, so a depth past it changes nothing they load.
|
|
1142
|
+
if (loadSubTasks && ((lowered && depth <= this.maxNodeModuleJsDepth) || !taskByFileName.startedSubTasks)) {
|
|
1076
1143
|
taskByFileName.startedSubTasks = true;
|
|
1077
1144
|
if (taskByFileName.subTasks !== undefined) this.start(taskByFileName.subTasks, data.lowestDepth);
|
|
1078
1145
|
}
|
|
1079
1146
|
}
|
|
1147
|
+
data.settled = true;
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
/**
|
|
1151
|
+
* Whether `run` drops `work` without loading its file: a JavaScript file past `maxNodeModuleJsDepth`,
|
|
1152
|
+
* which no parse thread prepares, so the walk ahead does not wait for it.
|
|
1153
|
+
*/
|
|
1154
|
+
private elides(work: ParseWork): boolean {
|
|
1155
|
+
const task = work.tasks[work.index];
|
|
1156
|
+
return task.elideOnDepth && (task.increaseDepth ? work.depth + 1 : work.depth) > this.maxNodeModuleJsDepth;
|
|
1080
1157
|
}
|
|
1081
1158
|
|
|
1082
1159
|
/**
|
|
@@ -1096,6 +1173,7 @@ export class FileLoader {
|
|
|
1096
1173
|
this.loadAutomaticTypeDirectives(task);
|
|
1097
1174
|
return;
|
|
1098
1175
|
}
|
|
1176
|
+
if (task.failedLookup) return;
|
|
1099
1177
|
const redirect = this.mapper.getParseFileRedirect(task.path);
|
|
1100
1178
|
if (redirect !== '') {
|
|
1101
1179
|
const redirected = new ParseTask(
|
|
@@ -1344,8 +1422,24 @@ export class FileLoader {
|
|
|
1344
1422
|
for (let index = 0; index < moduleNames.length; index++) {
|
|
1345
1423
|
const entry = moduleNames[index];
|
|
1346
1424
|
const moduleName = getText(entry);
|
|
1347
|
-
|
|
1425
|
+
// A source phase import loads no module declarations.
|
|
1426
|
+
if (moduleName === '' || isSourcePhaseImport(entry.parent!)) continue;
|
|
1348
1427
|
const mode = getModeForUsageLocation(file.fileName, task.metadata, entry, options);
|
|
1428
|
+
// A module the file declares itself (`declare module "m"`) isn't resolved.
|
|
1429
|
+
if (file.ambientModuleNames.includes(moduleName)) {
|
|
1430
|
+
if (options.traceResolution === true)
|
|
1431
|
+
task
|
|
1432
|
+
.moduleTraces(true)!
|
|
1433
|
+
.push(
|
|
1434
|
+
messageWithArgs(
|
|
1435
|
+
Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1,
|
|
1436
|
+
moduleName,
|
|
1437
|
+
file.fileName,
|
|
1438
|
+
),
|
|
1439
|
+
);
|
|
1440
|
+
resolutions.set(modeAwareKey(moduleName, mode), locallyDeclaredModule);
|
|
1441
|
+
continue;
|
|
1442
|
+
}
|
|
1349
1443
|
const resolved = this.resolver.resolveModuleName(
|
|
1350
1444
|
moduleName,
|
|
1351
1445
|
containingFile,
|
|
@@ -1412,7 +1506,7 @@ export class FileLoader {
|
|
|
1412
1506
|
const redirectFilesByPath = new Map<string, RedirectFile>();
|
|
1413
1507
|
const packageIdToSourceFile = new Map<string, SourceFile>();
|
|
1414
1508
|
const checkCasing = this.options.forceConsistentCasingInFileNames !== false;
|
|
1415
|
-
const
|
|
1509
|
+
const taskData = this.taskData;
|
|
1416
1510
|
// The paths each file's imports and type reference directives add (the tasks of each path), for
|
|
1417
1511
|
// `ProcessedFiles.addedFiles`: recorded while collecting visits them, as their files are only known
|
|
1418
1512
|
// once every file is collected.
|
|
@@ -1427,13 +1521,13 @@ export class FileLoader {
|
|
|
1427
1521
|
// Automatic type directive tasks are an implementation detail, not a reason.
|
|
1428
1522
|
if (task.redirectedParseTask === undefined && !task.isForAutomaticTypeDirective) {
|
|
1429
1523
|
if (task.loadedTask !== undefined) task = task.loadedTask;
|
|
1430
|
-
if (includeReason !== undefined) addIncludeReason(includeProcessor, task, includeReason);
|
|
1524
|
+
if (includeReason !== undefined) addIncludeReason(includeProcessor, taskData, task, includeReason);
|
|
1431
1525
|
}
|
|
1432
|
-
const data =
|
|
1526
|
+
const data = task.dataIndex >= 0 ? taskData[task.dataIndex] : undefined;
|
|
1433
1527
|
if (added !== undefined && data !== undefined && byImport) added.push(data);
|
|
1434
1528
|
if (!task.loaded || data === undefined) continue;
|
|
1435
1529
|
|
|
1436
|
-
const checkedName =
|
|
1530
|
+
const checkedName = data.collectedName;
|
|
1437
1531
|
if (checkedName !== undefined) {
|
|
1438
1532
|
// The same name normalizes the same: only another spelling needs comparing.
|
|
1439
1533
|
if (
|
|
@@ -1446,7 +1540,7 @@ export class FileLoader {
|
|
|
1446
1540
|
}
|
|
1447
1541
|
continue;
|
|
1448
1542
|
}
|
|
1449
|
-
|
|
1543
|
+
data.collectedName = task.normalizedFilePath;
|
|
1450
1544
|
|
|
1451
1545
|
if (tasksSeenByNameIgnoreCase !== undefined) {
|
|
1452
1546
|
const lowerCasePath = toFileNameLowerCase(task.path);
|
|
@@ -1509,13 +1603,15 @@ export class FileLoader {
|
|
|
1509
1603
|
includeProcessor.addProcessingDiagnostic(diagnostic);
|
|
1510
1604
|
continue;
|
|
1511
1605
|
}
|
|
1512
|
-
const path = task.path;
|
|
1513
1606
|
for (const diagnostic of task.processingDiagnostics ?? noProcessingDiagnostics)
|
|
1514
1607
|
includeProcessor.addProcessingDiagnostic(diagnostic);
|
|
1515
1608
|
if (file === undefined) {
|
|
1516
1609
|
missingFiles.push(task.normalizedFilePath);
|
|
1517
1610
|
continue;
|
|
1518
1611
|
}
|
|
1612
|
+
// The program's maps of the file are keyed by the file's own path: lookups by `file.path` then find
|
|
1613
|
+
// the same string, also for a file a parse thread created, whose path is another string than the task's.
|
|
1614
|
+
const path = file.path === task.path ? file.path : task.path;
|
|
1519
1615
|
if (task.libFile !== undefined) {
|
|
1520
1616
|
libFiles.push(file);
|
|
1521
1617
|
libData.set(file, data);
|
|
@@ -1599,10 +1695,21 @@ export function releaseLater(loader: FileLoader): void {
|
|
|
1599
1695
|
setImmediate(() => loader.release());
|
|
1600
1696
|
}
|
|
1601
1697
|
|
|
1602
|
-
function addIncludeReason(
|
|
1698
|
+
function addIncludeReason(
|
|
1699
|
+
processor: IncludeProcessor,
|
|
1700
|
+
taskData: readonly ParseTaskData[],
|
|
1701
|
+
task: ParseTask,
|
|
1702
|
+
reason: FileIncludeReason,
|
|
1703
|
+
): void {
|
|
1603
1704
|
const redirected = task.redirectedParseTask;
|
|
1604
|
-
if (redirected !== undefined) addIncludeReason(processor, redirected, reason);
|
|
1605
|
-
else if (task.loaded)
|
|
1705
|
+
if (redirected !== undefined) addIncludeReason(processor, taskData, redirected, reason);
|
|
1706
|
+
else if (task.loaded) {
|
|
1707
|
+
// The path's list, without looking the path up for each reference to the file.
|
|
1708
|
+
const data = task.dataIndex >= 0 ? taskData[task.dataIndex] : undefined;
|
|
1709
|
+
if (data === undefined) processor.addReason(task.path, reason);
|
|
1710
|
+
else if (data.reasons !== undefined) data.reasons.push(reason);
|
|
1711
|
+
else data.reasons = processor.addReason(task.path, reason);
|
|
1712
|
+
}
|
|
1606
1713
|
}
|
|
1607
1714
|
|
|
1608
1715
|
function createProjectReferenceTasks(paths: readonly string[]): ProjectReferenceTask[] {
|
package/src/compiler/help.ts
CHANGED
|
@@ -8,18 +8,24 @@ import {
|
|
|
8
8
|
buildOptionDeclarations,
|
|
9
9
|
optionDeclarations,
|
|
10
10
|
optionsForBuild,
|
|
11
|
-
optionsForWatch,
|
|
12
11
|
sameEnumValue,
|
|
13
12
|
type OptionDeclaration,
|
|
14
13
|
} from './option-declarations.js';
|
|
15
14
|
import type { System } from './tsc-cli.js';
|
|
16
15
|
|
|
17
|
-
export const version = '7.0
|
|
16
|
+
export const version = '7.1.0-beta';
|
|
18
17
|
|
|
19
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Whether output gets colors. As in Node, a set `FORCE_COLOR` decides: on when empty, `1`, `2`, `3` or `true`, off
|
|
20
|
+
* otherwise. Then `NO_COLOR` or `TERM=dumb` turn colors off, else they follow the TTY check.
|
|
21
|
+
*/
|
|
20
22
|
export function defaultIsPretty(sys: System): boolean {
|
|
23
|
+
if (sys.hasEnvironmentVariable('FORCE_COLOR')) {
|
|
24
|
+
const forceColor = sys.getEnvironmentVariable('FORCE_COLOR');
|
|
25
|
+
return forceColor === '' || forceColor === '1' || forceColor === '2' || forceColor === '3' || forceColor === 'true';
|
|
26
|
+
}
|
|
21
27
|
if (sys.getEnvironmentVariable('NO_COLOR') !== '') return false;
|
|
22
|
-
if (sys.getEnvironmentVariable('
|
|
28
|
+
if (sys.getEnvironmentVariable('TERM') === 'dumb') return false;
|
|
23
29
|
return sys.writeOutputIsTTY;
|
|
24
30
|
}
|
|
25
31
|
|
|
@@ -262,16 +268,6 @@ function printAllHelp(writer: HelpWriter, options: readonly OptionDeclaration[])
|
|
|
262
268
|
undefined,
|
|
263
269
|
learnMore(writer),
|
|
264
270
|
);
|
|
265
|
-
out += sectionOutput(
|
|
266
|
-
writer,
|
|
267
|
-
writer.text(Diagnostics.WATCH_OPTIONS),
|
|
268
|
-
optionsForWatch,
|
|
269
|
-
false,
|
|
270
|
-
writer.text(
|
|
271
|
-
Diagnostics.Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon,
|
|
272
|
-
),
|
|
273
|
-
undefined,
|
|
274
|
-
);
|
|
275
271
|
out += sectionOutput(
|
|
276
272
|
writer,
|
|
277
273
|
writer.text(Diagnostics.BUILD_OPTIONS),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ProgramLifetime } from '@scriptc/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The text of an identifier. The identifiers a parser's scanner interns with the same text share one
|
|
5
|
+
* (scanner.ts `IdentifierTable`), and natively an identifier refers to it in 4 bytes.
|
|
6
|
+
*/
|
|
7
|
+
export class IdentifierName implements ProgramLifetime {
|
|
8
|
+
readonly text: string;
|
|
9
|
+
|
|
10
|
+
constructor(text: string) {
|
|
11
|
+
this.text = text;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -41,6 +41,7 @@ import {
|
|
|
41
41
|
modeMismatchDetails,
|
|
42
42
|
moduleNotFoundDetails,
|
|
43
43
|
resolveExternalModuleName,
|
|
44
|
+
getImportAttributesTypeForModuleSpecifier,
|
|
44
45
|
} from './checker-modules.js';
|
|
45
46
|
import { getSymbolAtLocation } from './checker-services.js';
|
|
46
47
|
import { resolveAlias } from './checker-symbols.js';
|
|
@@ -1231,7 +1232,17 @@ function addOwnReferencedFiles(checked: CheckedProgram, file: SourceFile, refere
|
|
|
1231
1232
|
// call that does not initialize a variable (`exports.a = require("./a").a`), so its build info leaves out that
|
|
1232
1233
|
// module and its incremental builds keep outputs that depend on it.
|
|
1233
1234
|
for (const importName of file.imports) {
|
|
1234
|
-
addReferencedFilesFromSymbol(
|
|
1235
|
+
addReferencedFilesFromSymbol(
|
|
1236
|
+
file,
|
|
1237
|
+
referenced,
|
|
1238
|
+
resolveExternalModuleName(
|
|
1239
|
+
checker,
|
|
1240
|
+
importName,
|
|
1241
|
+
importName,
|
|
1242
|
+
true,
|
|
1243
|
+
getImportAttributesTypeForModuleSpecifier(checker, importName),
|
|
1244
|
+
),
|
|
1245
|
+
);
|
|
1235
1246
|
}
|
|
1236
1247
|
const sourceFileDirectory = getDirectoryPath(file.fileName);
|
|
1237
1248
|
for (const reference of file.referencedFiles) {
|
|
@@ -1275,9 +1286,16 @@ function programToSnapshot(checked: CheckedProgram, oldSnapshot: Snapshot | unde
|
|
|
1275
1286
|
// Reuse from the old state.
|
|
1276
1287
|
if (oldSnapshot !== undefined) {
|
|
1277
1288
|
if (options.composite === true) snapshot.latestChangedDtsFile = oldSnapshot.latestChangedDtsFile;
|
|
1278
|
-
for (const path of oldSnapshot.changedFilesSet) snapshot.changedFilesSet.add(path);
|
|
1279
|
-
for (const [path, kind] of oldSnapshot.affectedFilesPendingEmit) snapshot.affectedFilesPendingEmit.set(path, kind);
|
|
1280
1289
|
snapshot.buildInfoEmitPending = oldSnapshot.buildInfoEmitPending;
|
|
1290
|
+
// Changes and pending emit of files no longer in the program are dropped, which changes the build info.
|
|
1291
|
+
for (const path of oldSnapshot.changedFilesSet) {
|
|
1292
|
+
if (program.getSourceFileByPath(path) !== undefined) snapshot.changedFilesSet.add(path);
|
|
1293
|
+
else snapshot.buildInfoEmitPending = true;
|
|
1294
|
+
}
|
|
1295
|
+
for (const [path, kind] of oldSnapshot.affectedFilesPendingEmit) {
|
|
1296
|
+
if (program.getSourceFileByPath(path) !== undefined) snapshot.affectedFilesPendingEmit.set(path, kind);
|
|
1297
|
+
else snapshot.buildInfoEmitPending = true;
|
|
1298
|
+
}
|
|
1281
1299
|
snapshot.hasErrorsFromOldState = oldSnapshot.hasErrors;
|
|
1282
1300
|
snapshot.hasSemanticErrorsFromOldState = oldSnapshot.hasSemanticErrors;
|
|
1283
1301
|
const oldPackageJsons = oldSnapshot.packageJsons;
|
|
@@ -1425,13 +1443,23 @@ function programToSnapshot(checked: CheckedProgram, oldSnapshot: Snapshot | unde
|
|
|
1425
1443
|
if (oldSnapshot !== undefined) {
|
|
1426
1444
|
for (const [path, oldInfo] of oldSnapshot.fileInfos) {
|
|
1427
1445
|
if (snapshot.fileInfos.has(path)) continue;
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1446
|
+
snapshot.buildInfoEmitPending = true;
|
|
1447
|
+
snapshot.changedFilesSet.delete(path);
|
|
1448
|
+
snapshot.affectedFilesPendingEmit.delete(path);
|
|
1449
|
+
if (oldInfo.affectsGlobalScope) globalFileRemoved = true;
|
|
1450
|
+
}
|
|
1451
|
+
if (globalFileRemoved) invalidateGlobalScope(checked, snapshot);
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
// A file that no longer affects the global scope changes it as its removal would.
|
|
1455
|
+
if (oldSnapshot !== undefined && !globalFileRemoved) {
|
|
1456
|
+
for (const [path, oldInfo] of oldSnapshot.fileInfos) {
|
|
1457
|
+
if (!oldInfo.affectsGlobalScope) continue;
|
|
1458
|
+
const info = snapshot.fileInfos.get(path);
|
|
1459
|
+
if (info !== undefined && !info.affectsGlobalScope) {
|
|
1460
|
+
invalidateGlobalScope(checked, snapshot);
|
|
1461
|
+
break;
|
|
1462
|
+
}
|
|
1435
1463
|
}
|
|
1436
1464
|
}
|
|
1437
1465
|
|
|
@@ -1460,6 +1488,19 @@ function programToSnapshot(checked: CheckedProgram, oldSnapshot: Snapshot | unde
|
|
|
1460
1488
|
return snapshot;
|
|
1461
1489
|
}
|
|
1462
1490
|
|
|
1491
|
+
/**
|
|
1492
|
+
* After a change to the global scope, every file but the default libraries is changed, and the default
|
|
1493
|
+
* libraries that are checked are checked again.
|
|
1494
|
+
*/
|
|
1495
|
+
function invalidateGlobalScope(checked: CheckedProgram, snapshot: Snapshot): void {
|
|
1496
|
+
const program = checked.program;
|
|
1497
|
+
snapshot.buildInfoEmitPending = true;
|
|
1498
|
+
for (const file of program.getSourceFiles()) {
|
|
1499
|
+
if (!program.isSourceFileDefaultLibrary(file.path)) snapshot.addFileToChangeSet(file.path);
|
|
1500
|
+
else if (!checked.skipTypeChecking(file, true)) snapshot.semanticDiagnosticsPerFile.delete(file.path);
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1463
1504
|
// ---- Affected files
|
|
1464
1505
|
|
|
1465
1506
|
class AffectedFilesHandler {
|
|
@@ -1510,7 +1551,12 @@ class AffectedFilesHandler {
|
|
|
1510
1551
|
private computeDtsSignature(file: SourceFile): string {
|
|
1511
1552
|
const known = this.incremental.signatures.get(file.path);
|
|
1512
1553
|
if (known !== undefined) return known;
|
|
1513
|
-
|
|
1554
|
+
const done = this.incremental.beginNestedEmit();
|
|
1555
|
+
try {
|
|
1556
|
+
return declarationSignature(this.incremental.emitter, file, this.snapshot.options);
|
|
1557
|
+
} finally {
|
|
1558
|
+
done();
|
|
1559
|
+
}
|
|
1514
1560
|
}
|
|
1515
1561
|
|
|
1516
1562
|
updateShapeSignature(file: SourceFile, useFileVersionAsSignature: boolean): boolean {
|
|
@@ -1519,7 +1565,10 @@ class AffectedFilesHandler {
|
|
|
1519
1565
|
if (info === undefined) return false;
|
|
1520
1566
|
const previous = info.signature;
|
|
1521
1567
|
let signature = '';
|
|
1522
|
-
|
|
1568
|
+
// A JSON file has no declaration output, so its version is its signature, which invalidates its importers.
|
|
1569
|
+
if (!file.isDeclarationFile && !isJsonSourceFile(file) && !useFileVersionAsSignature) {
|
|
1570
|
+
signature = this.computeDtsSignature(file);
|
|
1571
|
+
}
|
|
1523
1572
|
if (signature === '') signature = info.version;
|
|
1524
1573
|
this.updatedSignatures.set(file.path, signature);
|
|
1525
1574
|
return signature !== previous;
|
|
@@ -1549,7 +1598,7 @@ class AffectedFilesHandler {
|
|
|
1549
1598
|
const info = this.snapshot.fileInfos.get(file.path);
|
|
1550
1599
|
if (info !== undefined && info.affectsGlobalScope) {
|
|
1551
1600
|
this.hasAllFilesExcludingDefaultLibraryFile = true;
|
|
1552
|
-
this.snapshot.getAllFilesExcludingDefaultLibraryFile(this.program, file);
|
|
1601
|
+
return this.snapshot.getAllFilesExcludingDefaultLibraryFile(this.program, file);
|
|
1553
1602
|
}
|
|
1554
1603
|
if (this.snapshot.options.isolatedModules === true) return [file];
|
|
1555
1604
|
const seen = this.forEachFileReferencedBy(file, (currentFile) => {
|
|
@@ -1966,7 +2015,7 @@ class EmitFilesHandler {
|
|
|
1966
2015
|
results.push(
|
|
1967
2016
|
declarations !== undefined
|
|
1968
2017
|
? this.writeThreadOutputs(file, declarations, writer)
|
|
1969
|
-
: program.emitter.emit([file], EmitOnly.Dts, wrapped),
|
|
2018
|
+
: program.emitter.emit([file], emitOnly === EmitOnly.Dts ? EmitOnly.Dts : EmitOnly.DtsAfterJs, wrapped),
|
|
1970
2019
|
);
|
|
1971
2020
|
return combineEmitResults(results);
|
|
1972
2021
|
}
|
|
@@ -2558,6 +2607,7 @@ export class IncrementalProgram extends CompilerProgram {
|
|
|
2558
2607
|
readonly signatures: ReadonlyMap<string, string> = new Map(),
|
|
2559
2608
|
) {
|
|
2560
2609
|
super(checked, times);
|
|
2610
|
+
checked.globalsInFileDiagnostics = true;
|
|
2561
2611
|
this.snapshot = programToSnapshot(checked, oldSnapshot);
|
|
2562
2612
|
}
|
|
2563
2613
|
|
|
@@ -2565,6 +2615,25 @@ export class IncrementalProgram extends CompilerProgram {
|
|
|
2565
2615
|
return this.snapshot.hasChangedDtsFile;
|
|
2566
2616
|
}
|
|
2567
2617
|
|
|
2618
|
+
/** Time spent in declaration emit for signatures while checking (`computeDtsSignature`), not yet taken. */
|
|
2619
|
+
private nestedEmitTime = 0;
|
|
2620
|
+
private nestedEmitDepth = 0;
|
|
2621
|
+
private nestedEmitStart = 0;
|
|
2622
|
+
|
|
2623
|
+
/** Starts timing a nested declaration emit; returns the function that ends it. */
|
|
2624
|
+
beginNestedEmit(): () => void {
|
|
2625
|
+
if (this.nestedEmitDepth++ === 0) this.nestedEmitStart = performance.now();
|
|
2626
|
+
return () => {
|
|
2627
|
+
if (--this.nestedEmitDepth === 0) this.nestedEmitTime += performance.now() - this.nestedEmitStart;
|
|
2628
|
+
};
|
|
2629
|
+
}
|
|
2630
|
+
|
|
2631
|
+
override takeNestedEmitTime(): number {
|
|
2632
|
+
const time = this.nestedEmitTime;
|
|
2633
|
+
this.nestedEmitTime = 0;
|
|
2634
|
+
return time;
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2568
2637
|
/**
|
|
2569
2638
|
* The global diagnostics found before `filesToCheck` computed the affected files, which the program
|
|
2570
2639
|
* reports before its semantic diagnostics (`getGlobalDiagnostics(false)`), as when they are computed
|
|
@@ -2697,10 +2766,9 @@ export class IncrementalProgram extends CompilerProgram {
|
|
|
2697
2766
|
emit(writer: OutputWriter): EmitResult {
|
|
2698
2767
|
const options = this.snapshot.options;
|
|
2699
2768
|
let result: EmitResult | undefined;
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
} else result = handleNoEmitOnError(this);
|
|
2769
|
+
// A `noEmit` program emits only its build info, and its emit is not skipped (tsgo's `HandleNoEmitOptions`).
|
|
2770
|
+
if (options.noEmit === true) result = new EmitResult();
|
|
2771
|
+
else result = handleNoEmitOnError(this);
|
|
2704
2772
|
if (result !== undefined) {
|
|
2705
2773
|
const buildInfoResult = this.emitBuildInfo(writer);
|
|
2706
2774
|
if (buildInfoResult !== undefined) {
|
package/src/compiler/init.ts
CHANGED
|
@@ -2,12 +2,7 @@
|
|
|
2
2
|
* The tsconfig.json written by `tsc --init`.
|
|
3
3
|
*/
|
|
4
4
|
import { Diagnostics, localizeMessage, type DiagnosticMessage, type Locale } from './diagnostics.js';
|
|
5
|
-
import {
|
|
6
|
-
compilerOptionsByName,
|
|
7
|
-
sameEnumValue,
|
|
8
|
-
watchOptionsByName,
|
|
9
|
-
type OptionDeclaration,
|
|
10
|
-
} from './option-declarations.js';
|
|
5
|
+
import { compilerOptionsByName, sameEnumValue, type OptionDeclaration } from './option-declarations.js';
|
|
11
6
|
import { JsxEmit, ModuleDetectionKind, ModuleKind, ScriptTarget, type OptionValue } from './options.js';
|
|
12
7
|
|
|
13
8
|
const enum Commented {
|
|
@@ -124,7 +119,7 @@ class ConfigWriter {
|
|
|
124
119
|
}
|
|
125
120
|
|
|
126
121
|
function formatValue(name: string, value: OptionValue): string {
|
|
127
|
-
const option = compilerOptionsByName.get(name)
|
|
122
|
+
const option = compilerOptionsByName.get(name);
|
|
128
123
|
if (value === null) return 'null';
|
|
129
124
|
if (typeof value === 'boolean') return value ? 'true' : 'false';
|
|
130
125
|
if (typeof value === 'number' || typeof value === 'string') return formatScalar(value, option);
|