tsc-ts 0.0.9 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/bin/tsc-ts.js +70 -1
- package/dist/api/compiler/ast-utilities.d.ts +19 -1
- package/dist/api/compiler/ast-utilities.js +180 -95
- package/dist/api/compiler/ast.d.ts +22 -15
- package/dist/api/compiler/ast.js +1026 -995
- package/dist/api/compiler/astnav.js +15 -15
- package/dist/api/compiler/binder-utilities.js +186 -186
- package/dist/api/compiler/binder.js +290 -263
- package/dist/api/compiler/character-codes.js +2 -2
- package/dist/api/compiler/checker-calls.js +178 -124
- package/dist/api/compiler/checker-classes.d.ts +14 -3
- package/dist/api/compiler/checker-classes.js +134 -90
- package/dist/api/compiler/checker-contextual.js +64 -61
- package/dist/api/compiler/checker-declaration-order.js +79 -79
- package/dist/api/compiler/checker-declarations.d.ts +1 -0
- package/dist/api/compiler/checker-declarations.js +160 -136
- package/dist/api/compiler/checker-declared-types.js +67 -65
- package/dist/api/compiler/checker-decorators.js +77 -77
- package/dist/api/compiler/checker-deprecation.d.ts +8 -3
- package/dist/api/compiler/checker-deprecation.js +76 -55
- package/dist/api/compiler/checker-destructuring.js +47 -45
- package/dist/api/compiler/checker-elaboration.js +24 -24
- package/dist/api/compiler/checker-emit-helpers.js +4 -4
- package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
- package/dist/api/compiler/checker-emit-resolver.js +25 -13
- package/dist/api/compiler/checker-evaluator.js +9 -9
- package/dist/api/compiler/checker-expressions.js +244 -211
- package/dist/api/compiler/checker-functions.js +113 -107
- package/dist/api/compiler/checker-generated-code.d.ts +0 -11
- package/dist/api/compiler/checker-generated-code.js +28 -52
- package/dist/api/compiler/checker-grammar.d.ts +1 -0
- package/dist/api/compiler/checker-grammar.js +472 -440
- package/dist/api/compiler/checker-heritage.js +91 -93
- package/dist/api/compiler/checker-inference.d.ts +77 -5
- package/dist/api/compiler/checker-inference.js +487 -107
- package/dist/api/compiler/checker-iteration.d.ts +0 -10
- package/dist/api/compiler/checker-iteration.js +35 -52
- package/dist/api/compiler/checker-javascript.js +14 -14
- package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
- package/dist/api/compiler/checker-jsdoc.js +67 -58
- package/dist/api/compiler/checker-jsx.js +105 -88
- package/dist/api/compiler/checker-members.d.ts +9 -2
- package/dist/api/compiler/checker-members.js +212 -75
- package/dist/api/compiler/checker-modules.d.ts +15 -6
- package/dist/api/compiler/checker-modules.js +469 -309
- package/dist/api/compiler/checker-narrowing.js +273 -189
- package/dist/api/compiler/checker-object-literals.js +25 -22
- package/dist/api/compiler/checker-operators.js +126 -118
- package/dist/api/compiler/checker-overloads.js +27 -27
- package/dist/api/compiler/checker-property-access.js +59 -55
- package/dist/api/compiler/checker-services.d.ts +1 -0
- package/dist/api/compiler/checker-services.js +222 -210
- package/dist/api/compiler/checker-signatures.js +65 -49
- package/dist/api/compiler/checker-source-file.d.ts +5 -0
- package/dist/api/compiler/checker-source-file.js +154 -130
- package/dist/api/compiler/checker-statements.js +33 -32
- package/dist/api/compiler/checker-super.js +50 -50
- package/dist/api/compiler/checker-symbol-types.js +109 -93
- package/dist/api/compiler/checker-symbols.d.ts +13 -1
- package/dist/api/compiler/checker-symbols.js +264 -149
- package/dist/api/compiler/checker-type-factory.d.ts +5 -0
- package/dist/api/compiler/checker-type-factory.js +145 -36
- package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
- package/dist/api/compiler/checker-type-nodes.js +179 -141
- package/dist/api/compiler/checker-type-operators.d.ts +2 -0
- package/dist/api/compiler/checker-type-operators.js +110 -63
- package/dist/api/compiler/checker-types.d.ts +80 -3
- package/dist/api/compiler/checker-types.js +121 -2
- package/dist/api/compiler/checker-unused.js +114 -118
- package/dist/api/compiler/checker-utilities.js +11 -11
- package/dist/api/compiler/checker.d.ts +104 -31
- package/dist/api/compiler/checker.js +181 -33
- package/dist/api/compiler/command-line.d.ts +1 -3
- package/dist/api/compiler/command-line.js +47 -44
- package/dist/api/compiler/compile-program.d.ts +42 -3
- package/dist/api/compiler/compile-program.js +139 -27
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.d.ts +22 -0
- package/dist/api/compiler/diagnostics.js +93 -11
- package/dist/api/compiler/emitter.d.ts +7 -1
- package/dist/api/compiler/emitter.js +53 -11
- package/dist/api/compiler/file-include.d.ts +2 -1
- package/dist/api/compiler/file-include.js +11 -7
- package/dist/api/compiler/file-loader.d.ts +21 -1
- package/dist/api/compiler/file-loader.js +201 -48
- package/dist/api/compiler/instantiation.d.ts +7 -0
- package/dist/api/compiler/instantiation.js +101 -49
- package/dist/api/compiler/jsdoc.js +23 -23
- package/dist/api/compiler/link-tables.d.ts +48 -18
- package/dist/api/compiler/link-tables.js +80 -37
- package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
- package/dist/api/compiler/locales/cs-CZ.js +1 -1
- package/dist/api/compiler/locales/de-DE.d.ts +1 -1
- package/dist/api/compiler/locales/de-DE.js +1 -1
- package/dist/api/compiler/locales/es-ES.d.ts +1 -1
- package/dist/api/compiler/locales/es-ES.js +1 -1
- package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
- package/dist/api/compiler/locales/fr-FR.js +1 -1
- package/dist/api/compiler/locales/it-IT.d.ts +1 -1
- package/dist/api/compiler/locales/it-IT.js +1 -1
- package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
- package/dist/api/compiler/locales/ja-JP.js +1 -1
- package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
- package/dist/api/compiler/locales/ko-KR.js +1 -1
- package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
- package/dist/api/compiler/locales/pl-PL.js +1 -1
- package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
- package/dist/api/compiler/locales/pt-BR.js +1 -1
- package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
- package/dist/api/compiler/locales/ru-RU.js +1 -1
- package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
- package/dist/api/compiler/locales/tr-TR.js +1 -1
- package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
- package/dist/api/compiler/locales/zh-CN.js +1 -1
- package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
- package/dist/api/compiler/locales/zh-TW.js +1 -1
- package/dist/api/compiler/module-resolution-types.js +6 -6
- package/dist/api/compiler/module-resolution.d.ts +10 -1
- package/dist/api/compiler/module-resolution.js +115 -84
- package/dist/api/compiler/module-specifiers.d.ts +15 -0
- package/dist/api/compiler/module-specifiers.js +24 -18
- package/dist/api/compiler/name-resolver.js +74 -65
- package/dist/api/compiler/node-builder-names.d.ts +11 -3
- package/dist/api/compiler/node-builder-names.js +210 -90
- package/dist/api/compiler/node-builder-pseudo.js +29 -31
- package/dist/api/compiler/node-builder-reuse.js +23 -22
- package/dist/api/compiler/node-builder.d.ts +18 -1
- package/dist/api/compiler/node-builder.js +191 -102
- package/dist/api/compiler/option-declarations.d.ts +2 -6
- package/dist/api/compiler/option-declarations.js +315 -375
- package/dist/api/compiler/options.d.ts +15 -33
- package/dist/api/compiler/options.js +21 -54
- package/dist/api/compiler/output-paths.d.ts +4 -1
- package/dist/api/compiler/output-paths.js +6 -11
- package/dist/api/compiler/package-json.d.ts +3 -3
- package/dist/api/compiler/package-json.js +11 -10
- package/dist/api/compiler/parallel-parse.d.ts +3 -2
- package/dist/api/compiler/parallel-parse.js +17 -5
- package/dist/api/compiler/parser.d.ts +40 -19
- package/dist/api/compiler/parser.js +308 -216
- package/dist/api/compiler/path.d.ts +9 -0
- package/dist/api/compiler/path.js +20 -3
- package/dist/api/compiler/printer/emit-context.d.ts +5 -1
- package/dist/api/compiler/printer/emit-context.js +20 -1
- package/dist/api/compiler/printer/factory-base.d.ts +2 -2
- package/dist/api/compiler/printer/factory-base.js +7 -3
- package/dist/api/compiler/printer/factory.js +3 -1
- package/dist/api/compiler/printer/helpers.js +10 -1
- package/dist/api/compiler/printer/name-generator.d.ts +1 -1
- package/dist/api/compiler/printer/name-generator.js +35 -16
- package/dist/api/compiler/printer/printer.d.ts +49 -2
- package/dist/api/compiler/printer/printer.js +539 -293
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +12 -2
- package/dist/api/compiler/program-checker.js +88 -34
- package/dist/api/compiler/program-utilities.d.ts +3 -1
- package/dist/api/compiler/program-utilities.js +28 -15
- package/dist/api/compiler/program.d.ts +4 -6
- package/dist/api/compiler/program.js +74 -87
- package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
- package/dist/api/compiler/pseudo-bigint.js +18 -0
- package/dist/api/compiler/regexp-checker.d.ts +1 -1
- package/dist/api/compiler/regexp-checker.js +93 -76
- package/dist/api/compiler/relations.d.ts +27 -4
- package/dist/api/compiler/relations.js +347 -180
- package/dist/api/compiler/reparser.js +60 -56
- package/dist/api/compiler/scanner.d.ts +19 -2
- package/dist/api/compiler/scanner.js +123 -108
- package/dist/api/compiler/shared-results.d.ts +463 -0
- package/dist/api/compiler/shared-results.js +2128 -0
- package/dist/api/compiler/sourcemap.js +2 -2
- package/dist/api/compiler/symbol-accessibility.js +87 -74
- package/dist/api/compiler/symbol.d.ts +23 -14
- package/dist/api/compiler/symbol.js +23 -11
- package/dist/api/compiler/syntax-kind.d.ts +198 -197
- package/dist/api/compiler/transformers/alias-references.js +247 -139
- package/dist/api/compiler/transformers/async-utilities.js +25 -25
- package/dist/api/compiler/transformers/async.d.ts +0 -1
- package/dist/api/compiler/transformers/async.js +64 -77
- package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
- package/dist/api/compiler/transformers/class-fields.js +81 -78
- package/dist/api/compiler/transformers/commonjs-module.js +18 -15
- package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
- package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
- package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
- package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
- package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
- package/dist/api/compiler/transformers/declarations.d.ts +4 -1
- package/dist/api/compiler/transformers/declarations.js +305 -238
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
- package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
- package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
- package/dist/api/compiler/transformers/destructuring.js +19 -18
- package/dist/api/compiler/transformers/emit-resolver.js +1 -1
- package/dist/api/compiler/transformers/es-decorators.js +55 -55
- package/dist/api/compiler/transformers/external-module-info.js +3 -3
- package/dist/api/compiler/transformers/for-await.js +25 -25
- package/dist/api/compiler/transformers/import-elision.js +14 -14
- package/dist/api/compiler/transformers/jsx.js +12 -12
- package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
- package/dist/api/compiler/transformers/module.js +8 -8
- package/dist/api/compiler/transformers/named-evaluation.js +4 -4
- package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
- package/dist/api/compiler/transformers/optional-chain.js +10 -10
- package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
- package/dist/api/compiler/transformers/reference-resolver.js +131 -69
- package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
- package/dist/api/compiler/transformers/subtree-facts.js +47 -47
- package/dist/api/compiler/transformers/syntax-facts.js +56 -58
- package/dist/api/compiler/transformers/type-eraser.js +73 -66
- package/dist/api/compiler/transformers/type-serialization.js +24 -24
- package/dist/api/compiler/transformers/using.js +12 -12
- package/dist/api/compiler/transformers/utilities.js +77 -77
- package/dist/api/compiler/transformers/visitor-base.js +172 -172
- package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
- package/dist/api/compiler/tsconfig.d.ts +10 -2
- package/dist/api/compiler/tsconfig.js +136 -48
- package/dist/api/compiler/type-printer.js +40 -3
- package/dist/api/compiler/types.d.ts +2 -1
- package/dist/api/library/ast.generated.d.ts +42 -39
- package/dist/api/library/ast.generated.js +1 -1
- package/dist/api/library/compiler-options.generated.d.ts +111 -100
- package/dist/api/library/compiler-options.generated.js +1 -1
- package/dist/api/library/disk.js +12 -1
- package/dist/api/library/enums.generated.d.ts +206 -206
- package/dist/api/library/enums.generated.js +206 -206
- package/dist/api/library/nodes.js +26 -26
- package/package.json +9 -9
- package/src/compiler/ast-utilities.ts +99 -7
- package/src/compiler/ast.ts +58 -26
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +79 -9
- package/src/compiler/checker-classes.ts +78 -24
- package/src/compiler/checker-contextual.ts +6 -1
- package/src/compiler/checker-declarations.ts +31 -4
- package/src/compiler/checker-declared-types.ts +8 -5
- package/src/compiler/checker-decorators.ts +1 -1
- package/src/compiler/checker-deprecation.ts +29 -8
- package/src/compiler/checker-destructuring.ts +10 -3
- package/src/compiler/checker-emit-helpers.ts +1 -0
- package/src/compiler/checker-emit-resolver.ts +16 -6
- package/src/compiler/checker-expressions.ts +79 -46
- package/src/compiler/checker-functions.ts +21 -6
- package/src/compiler/checker-generated-code.ts +2 -22
- package/src/compiler/checker-grammar.ts +136 -62
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -82
- package/src/compiler/checker-iteration.ts +18 -31
- package/src/compiler/checker-javascript.ts +1 -1
- package/src/compiler/checker-jsdoc.ts +50 -27
- package/src/compiler/checker-jsx.ts +26 -4
- package/src/compiler/checker-members.ts +200 -56
- package/src/compiler/checker-modules.ts +332 -65
- package/src/compiler/checker-narrowing.ts +98 -19
- package/src/compiler/checker-object-literals.ts +3 -0
- package/src/compiler/checker-operators.ts +11 -4
- package/src/compiler/checker-property-access.ts +7 -2
- package/src/compiler/checker-services.ts +39 -12
- package/src/compiler/checker-signatures.ts +15 -1
- package/src/compiler/checker-source-file.ts +39 -13
- package/src/compiler/checker-statements.ts +3 -2
- package/src/compiler/checker-symbol-types.ts +29 -6
- package/src/compiler/checker-symbols.ts +158 -15
- package/src/compiler/checker-type-factory.ts +124 -23
- package/src/compiler/checker-type-nodes.ts +46 -3
- package/src/compiler/checker-type-operators.ts +83 -26
- package/src/compiler/checker-types.ts +147 -4
- package/src/compiler/checker-unused.ts +9 -14
- package/src/compiler/checker.ts +203 -39
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +167 -27
- package/src/compiler/decoder.ts +13 -4
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/diagnostics.ts +84 -3
- package/src/compiler/emitter.ts +57 -8
- package/src/compiler/encoder.ts +23 -8
- package/src/compiler/file-include.ts +9 -3
- package/src/compiler/file-loader.ts +197 -38
- package/src/compiler/help.ts +10 -14
- package/src/compiler/incremental.ts +165 -30
- package/src/compiler/init.ts +2 -7
- package/src/compiler/instantiation.ts +77 -22
- package/src/compiler/jsdoc.ts +3 -1
- package/src/compiler/link-tables.ts +82 -37
- package/src/compiler/locales/cs-CZ.ts +1 -1
- package/src/compiler/locales/de-DE.ts +1 -1
- package/src/compiler/locales/es-ES.ts +1 -1
- package/src/compiler/locales/fr-FR.ts +1 -1
- package/src/compiler/locales/it-IT.ts +1 -1
- package/src/compiler/locales/ja-JP.ts +1 -1
- package/src/compiler/locales/ko-KR.ts +1 -1
- package/src/compiler/locales/pl-PL.ts +1 -1
- package/src/compiler/locales/pt-BR.ts +1 -1
- package/src/compiler/locales/ru-RU.ts +1 -1
- package/src/compiler/locales/tr-TR.ts +1 -1
- package/src/compiler/locales/zh-CN.ts +1 -1
- package/src/compiler/locales/zh-TW.ts +1 -1
- package/src/compiler/module-resolution.ts +44 -8
- package/src/compiler/module-specifiers.ts +62 -20
- package/src/compiler/name-resolver.ts +9 -1
- package/src/compiler/node-builder-names.ts +236 -54
- package/src/compiler/node-builder-pseudo.ts +4 -7
- package/src/compiler/node-builder-reuse.ts +5 -4
- package/src/compiler/node-builder.ts +130 -31
- package/src/compiler/option-declarations.ts +33 -103
- package/src/compiler/options.ts +23 -62
- package/src/compiler/output-paths.ts +5 -18
- package/src/compiler/package-entrypoints.ts +345 -0
- package/src/compiler/package-json.ts +4 -4
- package/src/compiler/parallel-check.ts +326 -52
- package/src/compiler/parallel-emit.ts +320 -0
- package/src/compiler/parallel-parse.ts +16 -5
- package/src/compiler/parse-thread.ts +3 -0
- package/src/compiler/parser.ts +156 -39
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +21 -0
- package/src/compiler/printer/factory-base.ts +10 -3
- package/src/compiler/printer/factory.ts +4 -1
- package/src/compiler/printer/helpers.ts +10 -1
- package/src/compiler/printer/name-generator.ts +24 -2
- package/src/compiler/printer/printer.ts +266 -30
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +57 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +18 -26
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +240 -77
- package/src/compiler/reparser.ts +7 -2
- package/src/compiler/scanner.ts +109 -79
- package/src/compiler/shared-results.ts +2414 -0
- package/src/compiler/show-config.ts +18 -1
- package/src/compiler/sourcemap.ts +2 -2
- package/src/compiler/symbol-accessibility.ts +26 -3
- package/src/compiler/symbol.ts +46 -24
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +64 -4
- package/src/compiler/transformers/alias-references.ts +123 -4
- package/src/compiler/transformers/async.ts +2 -17
- package/src/compiler/transformers/class-fields.ts +13 -12
- package/src/compiler/transformers/commonjs-module.ts +11 -7
- package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
- package/src/compiler/transformers/declarations-pseudo.ts +2 -4
- package/src/compiler/transformers/declarations-resolver.ts +0 -3
- package/src/compiler/transformers/declarations-syntactic.ts +1 -21
- package/src/compiler/transformers/declarations.ts +134 -48
- package/src/compiler/transformers/decorator-metadata.ts +9 -1
- package/src/compiler/transformers/destructuring.ts +4 -3
- package/src/compiler/transformers/external-module-info.ts +1 -1
- package/src/compiler/transformers/jsx.ts +2 -1
- package/src/compiler/transformers/reference-resolver.ts +83 -19
- package/src/compiler/transformers/runtime-syntax.ts +6 -1
- package/src/compiler/transformers/syntax-facts.ts +2 -7
- package/src/compiler/transformers/type-eraser.ts +10 -1
- package/src/compiler/transformers/type-serialization.ts +3 -2
- package/src/compiler/transformers/visitor-base.ts +2 -1
- package/src/compiler/transformers/visitor-hooks.ts +9 -4
- package/src/compiler/tsc-build.ts +66 -9
- package/src/compiler/tsc-cli.ts +7 -0
- package/src/compiler/tsc-compile.ts +284 -4
- package/src/compiler/tsc-watch.ts +74 -45
- package/src/compiler/tsconfig.ts +176 -19
- package/src/compiler/type-printer.ts +36 -2
- package/src/compiler/types.ts +2 -1
- package/src/library/ast.generated.ts +57 -41
- package/src/library/compiler-options.generated.ts +117 -103
- package/src/library/disk.ts +10 -1
- package/src/library/enums.generated.ts +196 -196
|
@@ -474,14 +474,6 @@ class Watcher {
|
|
|
474
474
|
|
|
475
475
|
start(): void {
|
|
476
476
|
const sys = this.sys;
|
|
477
|
-
if (this.config.options.incremental === true || this.config.options.composite === true) {
|
|
478
|
-
this.snapshot = readBuildInfoProgram(
|
|
479
|
-
this.config,
|
|
480
|
-
new FileBuildInfoReader(new SystemFileSystem(sys)),
|
|
481
|
-
sys.defaultLibraryPath,
|
|
482
|
-
sys.currentDirectory,
|
|
483
|
-
);
|
|
484
|
-
}
|
|
485
477
|
this.status.report(
|
|
486
478
|
watchRestart.resumed
|
|
487
479
|
? Diagnostics.File_change_detected_Starting_incremental_compilation
|
|
@@ -491,59 +483,86 @@ class Watcher {
|
|
|
491
483
|
watchRestart.firstBuildDone();
|
|
492
484
|
this.changes.watch([this.stamps, this.configStamps]);
|
|
493
485
|
};
|
|
494
|
-
// A program shared with checker threads is never written: symbols get their ids when created.
|
|
495
486
|
const options = this.config.options;
|
|
496
|
-
if (parallelParse.spawn !== undefined &&
|
|
487
|
+
if (parallelParse.spawn !== undefined && options.singleThreaded !== true) {
|
|
488
|
+
// Parse threads load the first program, as they load a compile's (`parsesAhead`, tsc-cli.ts), and
|
|
489
|
+
// it is shared with them: its symbols get their ids when they are created.
|
|
497
490
|
assignSymbolIdsAtCreation();
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
const options = this.config.options;
|
|
510
|
-
if (this.snapshot !== undefined || isIncremental(options) || parallelParse.spawn === undefined) return 1;
|
|
511
|
-
return checkerThreads(options.checkers, options.singleThreaded);
|
|
491
|
+
this.buildOnThreads(watchChanges);
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
if (isIncremental(options))
|
|
495
|
+
this.snapshot = readBuildInfoProgram(
|
|
496
|
+
this.config,
|
|
497
|
+
new FileBuildInfoReader(new SystemFileSystem(sys)),
|
|
498
|
+
sys.defaultLibraryPath,
|
|
499
|
+
sys.currentDirectory,
|
|
500
|
+
);
|
|
501
|
+
this.build(watchChanges);
|
|
512
502
|
}
|
|
513
503
|
|
|
514
504
|
/**
|
|
515
|
-
* Builds the first program as a compile does: parse threads load its files
|
|
516
|
-
* it (parallel-check.ts) unless it checks little.
|
|
517
|
-
*
|
|
518
|
-
*
|
|
519
|
-
* the
|
|
505
|
+
* Builds the first program as a compile does: parse threads load its files while this thread reads the
|
|
506
|
+
* build info (`--incremental`), and checker threads check it (parallel-check.ts) unless it checks little.
|
|
507
|
+
* Without old state, every file is checked, as a compile does; with build info, the files the changes
|
|
508
|
+
* since affect are, as a rebuild checks them (`recheckOnThreads`). The program is shared with the
|
|
509
|
+
* threads, so it gets its own copy of the config and a host of its own. Its files go to the watch's
|
|
510
|
+
* file maps for rebuilds to take, and are never written again: rebuilds check them with the checker's
|
|
511
|
+
* side tables. Calls `done` once the build is reported.
|
|
520
512
|
*/
|
|
521
|
-
private buildOnThreads(
|
|
513
|
+
private buildOnThreads(done: () => void): void {
|
|
522
514
|
releaseProgramCaches();
|
|
523
515
|
const sys = this.sys;
|
|
524
516
|
const config = copyCommandLine(this.config);
|
|
525
517
|
const options = config.options;
|
|
518
|
+
const incremental = isIncremental(options);
|
|
526
519
|
const session = new ParseSession(
|
|
527
|
-
parseThreads(
|
|
520
|
+
parseThreads(checkerThreads(options.checkers, options.singleThreaded)),
|
|
528
521
|
options,
|
|
529
522
|
sys.currentDirectory,
|
|
530
523
|
config.configName,
|
|
531
524
|
config.fileNames.length > 0,
|
|
532
525
|
);
|
|
533
|
-
const
|
|
534
|
-
|
|
535
|
-
new CachedFileSystem(new SystemFileSystem(sys)),
|
|
536
|
-
this.locale,
|
|
537
|
-
new WatchSourceFiles(),
|
|
538
|
-
);
|
|
526
|
+
const fs = new CachedFileSystem(new SystemFileSystem(sys));
|
|
527
|
+
const host = new WatchCompilerHost(sys, fs, this.locale, new WatchSourceFiles());
|
|
539
528
|
const loader = new FileLoader(host, config);
|
|
540
529
|
let rootFilesAdded = false;
|
|
530
|
+
// The build info lists the real paths of the `package.json` files module resolution looked up, as
|
|
531
|
+
// a compile's does (tsc-cli.ts): those of the threads' lookups are resolved into the file system's cache.
|
|
532
|
+
const resolvesPackageJsons = incremental && config.configName !== '' && config.buildInfoFileName() !== '';
|
|
541
533
|
session.onIdle = (batch) => {
|
|
542
534
|
if (!rootFilesAdded) rootFilesAdded = loader.addRootFiles(rootFilesPerChunk);
|
|
543
535
|
loader.walkAhead(batch.files);
|
|
536
|
+
if (resolvesPackageJsons) {
|
|
537
|
+
const lookups = batch.packageJsons;
|
|
538
|
+
for (let k = 0; k < lookups.directories.length; k++)
|
|
539
|
+
if (lookups.exists[k]! || lookups.directoryExists[k]!)
|
|
540
|
+
fs.realpath(combinePaths(lookups.directories[k]!, 'package.json'));
|
|
541
|
+
}
|
|
542
|
+
};
|
|
543
|
+
// The build info is read while the threads parse, as a compile reads it, or here if they are done first.
|
|
544
|
+
let buildInfoRead = !incremental;
|
|
545
|
+
const readBuildInfo = (): void => {
|
|
546
|
+
if (buildInfoRead) return;
|
|
547
|
+
buildInfoRead = true;
|
|
548
|
+
this.snapshot = readBuildInfoProgram(
|
|
549
|
+
config,
|
|
550
|
+
new FileBuildInfoReader(new SystemFileSystem(sys)),
|
|
551
|
+
sys.defaultLibraryPath,
|
|
552
|
+
sys.currentDirectory,
|
|
553
|
+
);
|
|
554
|
+
mark('build info read');
|
|
544
555
|
};
|
|
545
556
|
session.start(config.fileNames, () => {
|
|
546
|
-
|
|
557
|
+
readBuildInfo();
|
|
558
|
+
let program = new Program(config, host, loader);
|
|
559
|
+
// Where the threads' lookups may miss some `package.json` files of the build info, the program is
|
|
560
|
+
// loaded again, resolving every file's imports and references itself, as a compile does.
|
|
561
|
+
if (incremental && !program.hasAllPackageJsonLookups()) {
|
|
562
|
+
const own = new FileLoader(host, config);
|
|
563
|
+
own.takesPreparedResolutions = false;
|
|
564
|
+
program = new Program(config, host, own);
|
|
565
|
+
}
|
|
547
566
|
// The session's callbacks keep the loader: its tasks go once checking has started.
|
|
548
567
|
releaseLater(loader);
|
|
549
568
|
this.files = this.files.next();
|
|
@@ -552,16 +571,25 @@ class Watcher {
|
|
|
552
571
|
this.files.current.set(watchFileKey(file.fileName, file.path, indicator), file);
|
|
553
572
|
}
|
|
554
573
|
const checked = new CheckedProgram(program);
|
|
574
|
+
// The incremental program `finishBuild` makes after checking keeps the globals found checking a file
|
|
575
|
+
// with the file.
|
|
576
|
+
checked.globalsInFileDiagnostics = true;
|
|
555
577
|
const finish = (): void => {
|
|
556
|
-
this.finishBuild(checked);
|
|
557
578
|
// Rebuilds parse what changed themselves.
|
|
558
579
|
clearPreparedFiles();
|
|
559
580
|
done();
|
|
560
581
|
};
|
|
561
|
-
const
|
|
562
|
-
if (
|
|
563
|
-
|
|
582
|
+
const threads = checkerThreads(options.checkers, options.singleThreaded, program);
|
|
583
|
+
if (this.snapshot !== undefined && threads > 1) return this.recheckOnThreads(checked, threads, new Map(), finish);
|
|
584
|
+
const report = (): void => {
|
|
585
|
+
this.finishBuild(checked);
|
|
586
|
+
finish();
|
|
587
|
+
};
|
|
588
|
+
if (this.snapshot === undefined && threads > 1) startParallelCheck(checked, threads, report);
|
|
589
|
+
else report();
|
|
564
590
|
});
|
|
591
|
+
if (incremental && sys.fileExists(config.buildInfoFileName())) session.queueAhead();
|
|
592
|
+
readBuildInfo();
|
|
565
593
|
}
|
|
566
594
|
|
|
567
595
|
private configFiles(): string[] {
|
|
@@ -650,6 +678,7 @@ class Watcher {
|
|
|
650
678
|
computeLastSignatures(this.snapshot, this.lastChecked, this.files.parsed);
|
|
651
679
|
this.lastChecked = undefined;
|
|
652
680
|
const checked = new CheckedProgram(program);
|
|
681
|
+
checked.globalsInFileDiagnostics = true;
|
|
653
682
|
const signatures = new Map<string, string>();
|
|
654
683
|
const threads = this.rebuildThreads(checked, signatures);
|
|
655
684
|
// A new checker for checker threads: `rebuildThreads` may have emitted declarations with this one.
|
|
@@ -690,9 +719,9 @@ class Watcher {
|
|
|
690
719
|
* affects the global scope. A changed file whose declaration file keeps the signature of the last
|
|
691
720
|
* build affects only itself (`getFilesAffectedBy`); its signature is computed with `checked`'s checker
|
|
692
721
|
* and added to `signatures`. That is what the change affects at most; `recheckOnThreads` then takes
|
|
693
|
-
* what it does affect. A watch
|
|
694
|
-
* creation (`start`), so its rebuilds, which take the unchanged files of earlier builds, stay on
|
|
695
|
-
* thread after a config edit turns checker threads on.
|
|
722
|
+
* what it does affect. A watch that started without parse threads (`--singleThreaded`) gave its symbols
|
|
723
|
+
* no ids at creation (`start`), so its rebuilds, which take the unchanged files of earlier builds, stay on
|
|
724
|
+
* this thread after a config edit turns checker threads on.
|
|
696
725
|
*/
|
|
697
726
|
private rebuildThreads(checked: CheckedProgram, signatures: Map<string, string>): number {
|
|
698
727
|
const program = checked.program;
|
package/src/compiler/tsconfig.ts
CHANGED
|
@@ -38,6 +38,7 @@ import { ModuleResolutionHost, resolveConfig } from './module-resolution.js';
|
|
|
38
38
|
import {
|
|
39
39
|
compilerOptionsByName,
|
|
40
40
|
OptionNameMap,
|
|
41
|
+
optionsForCompiler,
|
|
41
42
|
typeAcquisitionDeclarations,
|
|
42
43
|
type OptionDeclaration,
|
|
43
44
|
} from './option-declarations.js';
|
|
@@ -45,6 +46,7 @@ import {
|
|
|
45
46
|
getAllowJS,
|
|
46
47
|
getResolveJsonModule,
|
|
47
48
|
mergeCompilerOptions,
|
|
49
|
+
PluginImport,
|
|
48
50
|
setCompilerOption,
|
|
49
51
|
setTypeAcquisitionOption,
|
|
50
52
|
type CompilerOptions,
|
|
@@ -72,6 +74,7 @@ import {
|
|
|
72
74
|
getPathFromPathComponents,
|
|
73
75
|
hasJSFileExtension,
|
|
74
76
|
isDeclarationFileName,
|
|
77
|
+
isNetworkPathValue,
|
|
75
78
|
isRootedDiskPath,
|
|
76
79
|
normalizePath,
|
|
77
80
|
normalizeSlashes,
|
|
@@ -223,6 +226,11 @@ export class ParsedCommandLine implements OutputPathsHost {
|
|
|
223
226
|
private outputDtsToReference: Map<string, SourceOutputAndProjectReference> | undefined = undefined;
|
|
224
227
|
private commonSourceDirectoryValue: string | undefined = undefined;
|
|
225
228
|
private referencePaths: string[] | undefined = undefined;
|
|
229
|
+
/**
|
|
230
|
+
* The config file's JSON, with what the configs it extends add to `files`, `include`, `exclude` and
|
|
231
|
+
* `compileOnSave`; `undefined` without a config file.
|
|
232
|
+
*/
|
|
233
|
+
raw: JsonValue | undefined = undefined;
|
|
226
234
|
|
|
227
235
|
constructor(
|
|
228
236
|
readonly options: CompilerOptions,
|
|
@@ -452,6 +460,33 @@ export function findPropertyAssignment(
|
|
|
452
460
|
return undefined;
|
|
453
461
|
}
|
|
454
462
|
|
|
463
|
+
/**
|
|
464
|
+
* A diagnostic at property `propertyName` of the `index`th project reference: at its value, else at the
|
|
465
|
+
* reference, else a compiler diagnostic. As in tsgo, `index` counts the references the JSON value kept.
|
|
466
|
+
*/
|
|
467
|
+
function diagnosticAtProjectReferenceProperty(
|
|
468
|
+
file: SourceFile | undefined,
|
|
469
|
+
index: number,
|
|
470
|
+
propertyName: string,
|
|
471
|
+
message: DiagnosticMessage,
|
|
472
|
+
...args: string[]
|
|
473
|
+
): Diagnostic {
|
|
474
|
+
let node: Node | undefined;
|
|
475
|
+
const root = getTsConfigObjectLiteral(file);
|
|
476
|
+
if (root !== undefined)
|
|
477
|
+
for (const property of root.properties.nodes) {
|
|
478
|
+
if (!(property instanceof PropertyAssignment) || propertyNameText(property.name) !== 'references') continue;
|
|
479
|
+
const initializer = (property as PropertyAssignment).initializer;
|
|
480
|
+
if (!(initializer instanceof ArrayLiteralExpression)) continue;
|
|
481
|
+
const elements = initializer.elements.nodes;
|
|
482
|
+
if (index >= elements.length || !(elements[index] instanceof ObjectLiteralExpression)) continue;
|
|
483
|
+
const element = elements[index] as ObjectLiteralExpression;
|
|
484
|
+
node = findPropertyAssignment(element, propertyName)?.initializer ?? element;
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
return diagnosticAtNode(file, node, message, ...args);
|
|
488
|
+
}
|
|
489
|
+
|
|
455
490
|
/** The string literal `value` in the array of the root property `key`. */
|
|
456
491
|
export function findTsConfigArrayElement(
|
|
457
492
|
file: SourceFile | undefined,
|
|
@@ -490,8 +525,17 @@ export function propertyNameText(name: Node): string | undefined {
|
|
|
490
525
|
|
|
491
526
|
// ---- Spec validation
|
|
492
527
|
|
|
493
|
-
/**
|
|
494
|
-
|
|
528
|
+
/**
|
|
529
|
+
* Rejects specs that resolve to a network root (`basePath` given), specs ending in `**` (for `include`) and `..`
|
|
530
|
+
* after a `**`. `?` is a wildcard in specs, so only UNC and device roots name a network path there.
|
|
531
|
+
*/
|
|
532
|
+
export function specToDiagnostic(
|
|
533
|
+
spec: string,
|
|
534
|
+
disallowTrailingRecursion: boolean,
|
|
535
|
+
basePath?: string,
|
|
536
|
+
): DiagnosticMessage | undefined {
|
|
537
|
+
if (basePath !== undefined && getNormalizedAbsolutePath(spec, basePath).startsWith('//'))
|
|
538
|
+
return Diagnostics.Network_path_0_is_not_supported;
|
|
495
539
|
if (disallowTrailingRecursion) {
|
|
496
540
|
const trimmed = spec.endsWith('/') ? spec.slice(0, -1) : spec;
|
|
497
541
|
if (trimmed === '**' || trimmed.endsWith('/**')) {
|
|
@@ -509,6 +553,7 @@ export function specToDiagnostic(spec: string, disallowTrailingRecursion: boolea
|
|
|
509
553
|
function validateSpecs(
|
|
510
554
|
specs: readonly JsonValue[],
|
|
511
555
|
disallowTrailingRecursion: boolean,
|
|
556
|
+
basePath: string,
|
|
512
557
|
file: SourceFile,
|
|
513
558
|
key: string,
|
|
514
559
|
errors: Diagnostic[],
|
|
@@ -516,7 +561,7 @@ function validateSpecs(
|
|
|
516
561
|
const result: string[] = [];
|
|
517
562
|
for (const spec of specs) {
|
|
518
563
|
if (typeof spec !== 'string') continue;
|
|
519
|
-
const message = specToDiagnostic(spec, disallowTrailingRecursion);
|
|
564
|
+
const message = specToDiagnostic(spec, disallowTrailingRecursion, basePath);
|
|
520
565
|
if (message === undefined) result.push(spec);
|
|
521
566
|
else errors.push(diagnosticAtNode(file, findTsConfigArrayElement(file, key, spec), message, spec));
|
|
522
567
|
}
|
|
@@ -763,6 +808,8 @@ class ConfigFileConverter {
|
|
|
763
808
|
readonly options: CompilerOptions;
|
|
764
809
|
readonly typeAcquisition: TypeAcquisition = {};
|
|
765
810
|
extendedConfigPaths: string[] | undefined = undefined;
|
|
811
|
+
/** Names of compiler options written at the root instead of in `compilerOptions`. */
|
|
812
|
+
readonly rootCompilerOptions: Node[] = [];
|
|
766
813
|
|
|
767
814
|
constructor(
|
|
768
815
|
private readonly parser: ConfigParser,
|
|
@@ -797,7 +844,9 @@ class ConfigFileConverter {
|
|
|
797
844
|
}
|
|
798
845
|
}
|
|
799
846
|
const name = getBaseFileName(this.file.fileName) === 'jsconfig.json' ? 'jsconfig.json' : 'tsconfig.json';
|
|
800
|
-
this.errors.push(
|
|
847
|
+
this.errors.push(
|
|
848
|
+
diagnosticAtNode(this.file, root, Diagnostics.The_root_value_of_a_0_file_must_be_an_object, name),
|
|
849
|
+
);
|
|
801
850
|
return new JsonObject();
|
|
802
851
|
}
|
|
803
852
|
return this.convertObject(root, rootDeclaration);
|
|
@@ -932,10 +981,16 @@ class ConfigFileConverter {
|
|
|
932
981
|
this.file,
|
|
933
982
|
this.errors,
|
|
934
983
|
);
|
|
935
|
-
} else if (option === undefined
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
984
|
+
} else if (option === undefined) {
|
|
985
|
+
if (key === 'excludes')
|
|
986
|
+
this.errors.push(
|
|
987
|
+
diagnosticAtNode(this.file, property.name, Diagnostics.Unknown_option_excludes_Did_you_mean_exclude),
|
|
988
|
+
);
|
|
989
|
+
for (const compilerOption of optionsForCompiler)
|
|
990
|
+
if (compilerOption.name === key) {
|
|
991
|
+
this.rootCompilerOptions.push(property.name);
|
|
992
|
+
break;
|
|
993
|
+
}
|
|
939
994
|
}
|
|
940
995
|
}
|
|
941
996
|
}
|
|
@@ -949,6 +1004,14 @@ function setCompilerOptionFromJson(options: CompilerOptions, option: OptionDecla
|
|
|
949
1004
|
options.paths = paths;
|
|
950
1005
|
return;
|
|
951
1006
|
}
|
|
1007
|
+
if (option.name === 'plugins') {
|
|
1008
|
+
if (!(value instanceof JsonArray)) return;
|
|
1009
|
+
options.plugins = value.items.map((item) => {
|
|
1010
|
+
const name = item instanceof JsonObject ? item.entries.get('name') : undefined;
|
|
1011
|
+
return new PluginImport(typeof name === 'string' ? name : '');
|
|
1012
|
+
});
|
|
1013
|
+
return;
|
|
1014
|
+
}
|
|
952
1015
|
setCompilerOption(options, option.name, toOptionValue(option, value));
|
|
953
1016
|
}
|
|
954
1017
|
|
|
@@ -1063,20 +1126,41 @@ export class ConfigParser {
|
|
|
1063
1126
|
let validatedIncludeBeforeSubstitution: string[] = [];
|
|
1064
1127
|
let validatedInclude: string[] = [];
|
|
1065
1128
|
if (include.items !== undefined) {
|
|
1066
|
-
validatedIncludeBeforeSubstitution = validateSpecs(
|
|
1129
|
+
validatedIncludeBeforeSubstitution = validateSpecs(
|
|
1130
|
+
include.items,
|
|
1131
|
+
true,
|
|
1132
|
+
basePathForFileNames,
|
|
1133
|
+
file.sourceFile,
|
|
1134
|
+
'include',
|
|
1135
|
+
errors,
|
|
1136
|
+
);
|
|
1067
1137
|
validatedInclude =
|
|
1068
1138
|
substituteConfigDirInList(validatedIncludeBeforeSubstitution, basePathForFileNames) ??
|
|
1069
1139
|
validatedIncludeBeforeSubstitution;
|
|
1070
1140
|
}
|
|
1071
1141
|
let validatedExclude: string[] = [];
|
|
1072
1142
|
if (exclude.items !== undefined) {
|
|
1073
|
-
validatedExclude = validateSpecs(exclude.items, false, file.sourceFile, 'exclude', errors);
|
|
1143
|
+
validatedExclude = validateSpecs(exclude.items, false, basePathForFileNames, file.sourceFile, 'exclude', errors);
|
|
1074
1144
|
validatedExclude = substituteConfigDirInList(validatedExclude, basePathForFileNames) ?? validatedExclude;
|
|
1075
1145
|
}
|
|
1076
1146
|
let validatedFilesBeforeSubstitution: string[] = [];
|
|
1077
1147
|
let validatedFiles: string[] = [];
|
|
1078
1148
|
if (files.items !== undefined) {
|
|
1079
|
-
for (const spec of files.items)
|
|
1149
|
+
for (const spec of files.items) {
|
|
1150
|
+
if (typeof spec !== 'string') continue;
|
|
1151
|
+
if (isNetworkPathValue(spec, basePathForFileNames)) {
|
|
1152
|
+
errors.push(
|
|
1153
|
+
diagnosticAtNode(
|
|
1154
|
+
file.sourceFile,
|
|
1155
|
+
findTsConfigArrayElement(file.sourceFile, 'files', spec),
|
|
1156
|
+
Diagnostics.Network_path_0_is_not_supported,
|
|
1157
|
+
spec,
|
|
1158
|
+
),
|
|
1159
|
+
);
|
|
1160
|
+
continue;
|
|
1161
|
+
}
|
|
1162
|
+
validatedFilesBeforeSubstitution.push(spec);
|
|
1163
|
+
}
|
|
1080
1164
|
validatedFiles =
|
|
1081
1165
|
substituteConfigDirInList(validatedFilesBeforeSubstitution, basePathForFileNames) ??
|
|
1082
1166
|
validatedFilesBeforeSubstitution;
|
|
@@ -1118,18 +1202,67 @@ export class ConfigParser {
|
|
|
1118
1202
|
|
|
1119
1203
|
const projectReferences: ProjectReference[] = [];
|
|
1120
1204
|
if (references.items !== undefined) {
|
|
1121
|
-
|
|
1205
|
+
const items = references.items;
|
|
1206
|
+
for (let index = 0; index < items.length; index++) {
|
|
1207
|
+
const reference = items[index];
|
|
1122
1208
|
if (!(reference instanceof JsonObject)) continue;
|
|
1123
1209
|
const path = reference.entries.get('path');
|
|
1210
|
+
if (typeof path !== 'string') {
|
|
1211
|
+
errors.push(
|
|
1212
|
+
diagnosticAtProjectReferenceProperty(
|
|
1213
|
+
file.sourceFile,
|
|
1214
|
+
index,
|
|
1215
|
+
'path',
|
|
1216
|
+
Diagnostics.Compiler_option_0_requires_a_value_of_type_1,
|
|
1217
|
+
'reference.path',
|
|
1218
|
+
'string',
|
|
1219
|
+
),
|
|
1220
|
+
);
|
|
1221
|
+
continue;
|
|
1222
|
+
}
|
|
1223
|
+
if (path === '') {
|
|
1224
|
+
errors.push(
|
|
1225
|
+
diagnosticAtProjectReferenceProperty(
|
|
1226
|
+
file.sourceFile,
|
|
1227
|
+
index,
|
|
1228
|
+
'path',
|
|
1229
|
+
Diagnostics.Compiler_option_0_cannot_be_given_an_empty_string,
|
|
1230
|
+
'reference.path',
|
|
1231
|
+
),
|
|
1232
|
+
);
|
|
1233
|
+
continue;
|
|
1234
|
+
}
|
|
1235
|
+
if (isNetworkPathValue(path, basePathForFileNames)) {
|
|
1236
|
+
errors.push(
|
|
1237
|
+
diagnosticAtProjectReferenceProperty(
|
|
1238
|
+
file.sourceFile,
|
|
1239
|
+
index,
|
|
1240
|
+
'path',
|
|
1241
|
+
Diagnostics.Network_path_0_is_not_supported,
|
|
1242
|
+
path,
|
|
1243
|
+
),
|
|
1244
|
+
);
|
|
1245
|
+
continue;
|
|
1246
|
+
}
|
|
1124
1247
|
const circular = reference.entries.get('circular');
|
|
1125
|
-
if (
|
|
1248
|
+
if (circular !== undefined && typeof circular !== 'boolean')
|
|
1249
|
+
errors.push(
|
|
1250
|
+
diagnosticAtProjectReferenceProperty(
|
|
1251
|
+
file.sourceFile,
|
|
1252
|
+
index,
|
|
1253
|
+
'circular',
|
|
1254
|
+
Diagnostics.Compiler_option_0_requires_a_value_of_type_1,
|
|
1255
|
+
'reference.circular',
|
|
1256
|
+
'boolean',
|
|
1257
|
+
),
|
|
1258
|
+
);
|
|
1126
1259
|
projectReferences.push(
|
|
1127
1260
|
new ProjectReference(getNormalizedAbsolutePath(path, basePathForFileNames), path, circular === true),
|
|
1128
1261
|
);
|
|
1129
1262
|
}
|
|
1130
1263
|
}
|
|
1131
1264
|
|
|
1132
|
-
|
|
1265
|
+
const parsedCommandLine = new ParsedCommandLine(
|
|
1133
1266
|
options,
|
|
1134
1267
|
parsed.typeAcquisition,
|
|
1135
1268
|
fileNames,
|
|
@@ -1140,6 +1273,8 @@ export class ConfigParser {
|
|
|
1140
1273
|
cs,
|
|
1141
1274
|
literalFiles.size,
|
|
1142
1275
|
);
|
|
1276
|
+
parsedCommandLine.raw = raw;
|
|
1277
|
+
return parsedCommandLine;
|
|
1143
1278
|
}
|
|
1144
1279
|
|
|
1145
1280
|
/** A config file's options with what it extends applied. */
|
|
@@ -1159,6 +1294,17 @@ export class ConfigParser {
|
|
|
1159
1294
|
|
|
1160
1295
|
const converter = new ConfigFileConverter(this, file.sourceFile, basePath, configFileName, errors);
|
|
1161
1296
|
const raw = converter.convertRoot();
|
|
1297
|
+
// A compiler option at the root is reported once, unless there's a `compilerOptions` too.
|
|
1298
|
+
const rootOption = converter.rootCompilerOptions.length > 0 ? converter.rootCompilerOptions[0] : undefined;
|
|
1299
|
+
if (rootOption !== undefined && raw instanceof JsonObject && !raw.entries.has('compilerOptions'))
|
|
1300
|
+
errors.push(
|
|
1301
|
+
diagnosticAtNode(
|
|
1302
|
+
file.sourceFile,
|
|
1303
|
+
rootOption,
|
|
1304
|
+
Diagnostics.X_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file,
|
|
1305
|
+
propertyNameText(rootOption) ?? '',
|
|
1306
|
+
),
|
|
1307
|
+
);
|
|
1162
1308
|
const own = new OwnConfig(raw, converter.options, converter.typeAcquisition, converter.extendedConfigPaths);
|
|
1163
1309
|
const ownOptions = converter.options;
|
|
1164
1310
|
// `paths` may be inherited, so remember which directory it is relative to.
|
|
@@ -1303,6 +1449,10 @@ export class ConfigParser {
|
|
|
1303
1449
|
}
|
|
1304
1450
|
const validated = validateOptionValue(option, value, valueExpression, file, errors);
|
|
1305
1451
|
if (validated === null || option.isFilePath !== true || typeof validated !== 'string') return validated;
|
|
1452
|
+
if (isNetworkPathValue(validated, basePath)) {
|
|
1453
|
+
errors.push(diagnosticAtNode(file, valueExpression, Diagnostics.Network_path_0_is_not_supported, validated));
|
|
1454
|
+
return null;
|
|
1455
|
+
}
|
|
1306
1456
|
let path = normalizeSlashes(validated);
|
|
1307
1457
|
if (!startsWithConfigDirTemplate(path)) path = getNormalizedAbsolutePath(path, basePath);
|
|
1308
1458
|
return path === '' ? '.' : path;
|
|
@@ -1375,6 +1525,10 @@ export class ConfigParser {
|
|
|
1375
1525
|
errors: Diagnostic[],
|
|
1376
1526
|
): string {
|
|
1377
1527
|
extendedConfig = normalizeSlashes(extendedConfig);
|
|
1528
|
+
if (isNetworkPathValue(extendedConfig, basePath)) {
|
|
1529
|
+
errors.push(diagnosticAtNode(file, valueExpression, Diagnostics.Network_path_0_is_not_supported, extendedConfig));
|
|
1530
|
+
return '';
|
|
1531
|
+
}
|
|
1378
1532
|
if (isRootedDiskPath(extendedConfig) || extendedConfig.startsWith('./') || extendedConfig.startsWith('../')) {
|
|
1379
1533
|
let path = getNormalizedAbsolutePath(extendedConfig, basePath);
|
|
1380
1534
|
if (!this.fs.fileExists(path) && !path.endsWith('.json')) {
|
|
@@ -1415,25 +1569,28 @@ export class ConfigParser {
|
|
|
1415
1569
|
const wildcardJsonFiles = new Map<string, string>();
|
|
1416
1570
|
const supportedExtensions = getSupportedExtensions(options);
|
|
1417
1571
|
const extensionsWithJson = getSupportedExtensionsWithJsonIfResolveJsonModule(options);
|
|
1418
|
-
//
|
|
1572
|
+
// Literal files are keyed by path, so `a.ts` and `./a.ts` are one file, also when `include` matches it.
|
|
1419
1573
|
for (const fileName of specs.validatedFilesSpec) {
|
|
1420
|
-
|
|
1574
|
+
const file = getNormalizedAbsolutePath(fileName, basePath);
|
|
1575
|
+
literalFiles.set(getCanonicalFileName(file, cs), file);
|
|
1421
1576
|
}
|
|
1422
1577
|
if (onRootFile !== undefined) for (const fileName of literalFiles.values()) onRootFile(fileName);
|
|
1423
1578
|
|
|
1424
1579
|
const includes = specs.validatedIncludeSpecs;
|
|
1425
1580
|
if (includes.length > 0) {
|
|
1426
|
-
// Matches go to `onRootFile` a directory at a time, without
|
|
1427
|
-
// with a higher priority extension leaves out below.
|
|
1581
|
+
// Matches go to `onRootFile` a directory at a time, without the literal files, which it has, and those that a
|
|
1582
|
+
// file of the same name with a higher priority extension leaves out below.
|
|
1428
1583
|
let directory = '';
|
|
1429
1584
|
let pending: string[] = [];
|
|
1430
1585
|
const flush = (): void => {
|
|
1431
1586
|
if (onRootFile === undefined || pending.length === 0) return;
|
|
1432
1587
|
const siblings = new Map<string, string>();
|
|
1433
1588
|
for (const file of pending) siblings.set(getCanonicalFileName(file, cs), file);
|
|
1434
|
-
for (const file of pending)
|
|
1589
|
+
for (const file of pending) {
|
|
1590
|
+
if (literalFiles.has(getCanonicalFileName(file, cs))) continue;
|
|
1435
1591
|
if (!hasFileWithHigherPriorityExtension(file, supportedExtensions, literalFiles, siblings, cs))
|
|
1436
1592
|
onRootFile(file);
|
|
1593
|
+
}
|
|
1437
1594
|
pending = [];
|
|
1438
1595
|
};
|
|
1439
1596
|
const onMatch =
|
|
@@ -29,7 +29,26 @@ export function typeToString(c: Checker, t: Type, enclosingDeclaration?: Node, f
|
|
|
29
29
|
// Without explicit flags, unique symbols print as such and aliases from other scopes are used.
|
|
30
30
|
const formatFlags =
|
|
31
31
|
flags ?? NodeBuilderFlags.AllowUniqueESSymbolType | NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope;
|
|
32
|
-
|
|
32
|
+
// Prints nested in a serialization depend on its depth (typeToStringFromTypeNode), so only the others are kept.
|
|
33
|
+
if (c.serializationLevel !== 0) return typeToStringFromTypeNode(c, t, enclosingDeclaration, formatFlags) ?? '';
|
|
34
|
+
// The variance check in progress names the marker types (`sub-T`, `super-T`) after its type parameter.
|
|
35
|
+
const variance = c.varianceTypeParameter;
|
|
36
|
+
const key =
|
|
37
|
+
String(t.id) +
|
|
38
|
+
',' +
|
|
39
|
+
String(enclosingDeclaration === undefined ? 0 : enclosingDeclaration.id) +
|
|
40
|
+
',' +
|
|
41
|
+
String(formatFlags) +
|
|
42
|
+
',' +
|
|
43
|
+
String(variance === undefined ? 0 : variance.id);
|
|
44
|
+
const cached = c.typeStrings.get(key);
|
|
45
|
+
if (cached !== undefined) return cached;
|
|
46
|
+
// A print that creates no types reads only types that exist and settled state, so printing again gives the same
|
|
47
|
+
// text and creates nothing; prints that create types run each time, as in tsgo, so type ids stay in tsgo's order.
|
|
48
|
+
const typeCount = c.typeCount;
|
|
49
|
+
const text = typeToStringFromTypeNode(c, t, enclosingDeclaration, formatFlags) ?? '';
|
|
50
|
+
if (c.typeCount === typeCount) c.typeStrings.set(key, text);
|
|
51
|
+
return text;
|
|
33
52
|
}
|
|
34
53
|
|
|
35
54
|
/** `symbol` as text: the expression naming it, as seen from `enclosingDeclaration` if given. */
|
|
@@ -39,12 +58,27 @@ export function symbolToString(
|
|
|
39
58
|
enclosingDeclaration?: Node,
|
|
40
59
|
internalFlags: NodeBuilderInternalFlags = NodeBuilderInternalFlags.None,
|
|
41
60
|
): string {
|
|
61
|
+
// Kept as typeToString keeps type prints: outside serializations, when printing created no types.
|
|
62
|
+
const key = String(enclosingDeclaration === undefined ? 0 : enclosingDeclaration.id) + ',' + String(internalFlags);
|
|
63
|
+
const kept = c.serializationLevel === 0 ? c.symbolStrings.get(symbol) : undefined;
|
|
64
|
+
const cached = kept?.get(key);
|
|
65
|
+
if (cached !== undefined) return cached;
|
|
66
|
+
const typeCount = c.typeCount;
|
|
42
67
|
const b = new NodeBuilder(c, enclosingDeclaration, NodeBuilderFlags.IgnoreErrors, internalFlags, undefined);
|
|
43
|
-
|
|
68
|
+
const text = printSingleLine(
|
|
44
69
|
b,
|
|
45
70
|
symbolToExpression(b, symbol, SymbolFlags.All),
|
|
46
71
|
enclosingDeclaration !== undefined && enclosingDeclaration.kind === SyntaxKind.SourceFile,
|
|
47
72
|
);
|
|
73
|
+
if (c.serializationLevel === 0 && c.typeCount === typeCount) {
|
|
74
|
+
let byKey = kept;
|
|
75
|
+
if (byKey === undefined) {
|
|
76
|
+
byKey = new Map<string, string>();
|
|
77
|
+
c.symbolStrings.set(symbol, byKey);
|
|
78
|
+
}
|
|
79
|
+
byKey.set(key, text);
|
|
80
|
+
}
|
|
81
|
+
return text;
|
|
48
82
|
}
|
|
49
83
|
|
|
50
84
|
/** `signature` as text: a call or construct signature without its trailing semicolon. */
|
package/src/compiler/types.ts
CHANGED
|
@@ -70,10 +70,11 @@ export const enum ScriptTarget {
|
|
|
70
70
|
ES2023 = 10,
|
|
71
71
|
ES2024 = 11,
|
|
72
72
|
ES2025 = 12,
|
|
73
|
+
ES2026 = 13,
|
|
73
74
|
ESNext = 99,
|
|
74
75
|
JSON = 100,
|
|
75
76
|
Latest = ESNext,
|
|
76
|
-
LatestStandard =
|
|
77
|
+
LatestStandard = ES2026,
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
export const enum LanguageVariant {
|