tsc-ts 0.0.3 → 0.0.5
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 +46 -0
- package/dist/api/compiler/ast-utilities.d.ts +82 -0
- package/dist/api/compiler/ast-utilities.js +462 -0
- package/dist/api/compiler/ast.d.ts +2350 -0
- package/dist/api/compiler/ast.js +11206 -0
- package/dist/api/compiler/astnav.d.ts +37 -0
- package/dist/api/compiler/astnav.js +767 -0
- package/dist/api/compiler/binder-utilities.d.ts +182 -0
- package/dist/api/compiler/binder-utilities.js +1240 -0
- package/dist/api/compiler/binder.d.ts +33 -0
- package/dist/api/compiler/binder.js +2358 -0
- package/dist/api/compiler/character-codes.d.ts +161 -0
- package/dist/api/compiler/character-codes.js +160 -0
- package/dist/api/compiler/checker-calls.d.ts +46 -0
- package/dist/api/compiler/checker-calls.js +1640 -0
- package/dist/api/compiler/checker-classes.d.ts +30 -0
- package/dist/api/compiler/checker-classes.js +582 -0
- package/dist/api/compiler/checker-contextual.d.ts +77 -0
- package/dist/api/compiler/checker-contextual.js +1136 -0
- package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
- package/dist/api/compiler/checker-declaration-order.js +356 -0
- package/dist/api/compiler/checker-declarations.d.ts +33 -0
- package/dist/api/compiler/checker-declarations.js +888 -0
- package/dist/api/compiler/checker-declared-types.d.ts +48 -0
- package/dist/api/compiler/checker-declared-types.js +787 -0
- package/dist/api/compiler/checker-decorators.d.ts +26 -0
- package/dist/api/compiler/checker-decorators.js +562 -0
- package/dist/api/compiler/checker-deprecation.d.ts +33 -0
- package/dist/api/compiler/checker-deprecation.js +315 -0
- package/dist/api/compiler/checker-destructuring.d.ts +34 -0
- package/dist/api/compiler/checker-destructuring.js +584 -0
- package/dist/api/compiler/checker-elaboration.d.ts +15 -0
- package/dist/api/compiler/checker-elaboration.js +290 -0
- package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
- package/dist/api/compiler/checker-emit-helpers.js +154 -0
- package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
- package/dist/api/compiler/checker-emit-resolver.js +579 -0
- package/dist/api/compiler/checker-evaluator.d.ts +27 -0
- package/dist/api/compiler/checker-evaluator.js +188 -0
- package/dist/api/compiler/checker-expressions.d.ts +67 -0
- package/dist/api/compiler/checker-expressions.js +1351 -0
- package/dist/api/compiler/checker-features.d.ts +6 -0
- package/dist/api/compiler/checker-features.js +354 -0
- package/dist/api/compiler/checker-flow.d.ts +86 -0
- package/dist/api/compiler/checker-flow.js +169 -0
- package/dist/api/compiler/checker-functions.d.ts +43 -0
- package/dist/api/compiler/checker-functions.js +1002 -0
- package/dist/api/compiler/checker-generated-code.d.ts +25 -0
- package/dist/api/compiler/checker-generated-code.js +168 -0
- package/dist/api/compiler/checker-globals.d.ts +14 -0
- package/dist/api/compiler/checker-globals.js +37 -0
- package/dist/api/compiler/checker-grammar.d.ts +35 -0
- package/dist/api/compiler/checker-grammar.js +2573 -0
- package/dist/api/compiler/checker-heritage.d.ts +28 -0
- package/dist/api/compiler/checker-heritage.js +900 -0
- package/dist/api/compiler/checker-inference.d.ts +179 -0
- package/dist/api/compiler/checker-inference.js +2105 -0
- package/dist/api/compiler/checker-iteration.d.ts +115 -0
- package/dist/api/compiler/checker-iteration.js +857 -0
- package/dist/api/compiler/checker-javascript.d.ts +42 -0
- package/dist/api/compiler/checker-javascript.js +441 -0
- package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
- package/dist/api/compiler/checker-jsdoc.js +320 -0
- package/dist/api/compiler/checker-jsx.d.ts +94 -0
- package/dist/api/compiler/checker-jsx.js +1433 -0
- package/dist/api/compiler/checker-literals.d.ts +6 -0
- package/dist/api/compiler/checker-literals.js +43 -0
- package/dist/api/compiler/checker-members.d.ts +198 -0
- package/dist/api/compiler/checker-members.js +2126 -0
- package/dist/api/compiler/checker-modules.d.ts +85 -0
- package/dist/api/compiler/checker-modules.js +2141 -0
- package/dist/api/compiler/checker-narrowing.d.ts +120 -0
- package/dist/api/compiler/checker-narrowing.js +2797 -0
- package/dist/api/compiler/checker-object-literals.d.ts +14 -0
- package/dist/api/compiler/checker-object-literals.js +479 -0
- package/dist/api/compiler/checker-operators.d.ts +33 -0
- package/dist/api/compiler/checker-operators.js +1040 -0
- package/dist/api/compiler/checker-overloads.d.ts +7 -0
- package/dist/api/compiler/checker-overloads.js +270 -0
- package/dist/api/compiler/checker-property-access.d.ts +34 -0
- package/dist/api/compiler/checker-property-access.js +672 -0
- package/dist/api/compiler/checker-services.d.ts +49 -0
- package/dist/api/compiler/checker-services.js +995 -0
- package/dist/api/compiler/checker-signatures.d.ts +55 -0
- package/dist/api/compiler/checker-signatures.js +788 -0
- package/dist/api/compiler/checker-source-file.d.ts +27 -0
- package/dist/api/compiler/checker-source-file.js +619 -0
- package/dist/api/compiler/checker-statements.d.ts +18 -0
- package/dist/api/compiler/checker-statements.js +226 -0
- package/dist/api/compiler/checker-super.d.ts +13 -0
- package/dist/api/compiler/checker-super.js +241 -0
- package/dist/api/compiler/checker-symbol-types.d.ts +67 -0
- package/dist/api/compiler/checker-symbol-types.js +1885 -0
- package/dist/api/compiler/checker-symbols.d.ts +181 -0
- package/dist/api/compiler/checker-symbols.js +1782 -0
- package/dist/api/compiler/checker-type-factory.d.ts +142 -0
- package/dist/api/compiler/checker-type-factory.js +2501 -0
- package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
- package/dist/api/compiler/checker-type-nodes.js +828 -0
- package/dist/api/compiler/checker-type-operators.d.ts +109 -0
- package/dist/api/compiler/checker-type-operators.js +1842 -0
- package/dist/api/compiler/checker-types.d.ts +1027 -0
- package/dist/api/compiler/checker-types.js +1697 -0
- package/dist/api/compiler/checker-unused.d.ts +19 -0
- package/dist/api/compiler/checker-unused.js +524 -0
- package/dist/api/compiler/checker-utilities.d.ts +33 -0
- package/dist/api/compiler/checker-utilities.js +141 -0
- package/dist/api/compiler/checker.d.ts +491 -0
- package/dist/api/compiler/checker.js +912 -0
- package/dist/api/compiler/command-line.d.ts +32 -0
- package/dist/api/compiler/command-line.js +383 -0
- package/dist/api/compiler/compile-program.d.ts +118 -0
- package/dist/api/compiler/compile-program.js +384 -0
- package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
- package/dist/api/compiler/diagnostic-locales.js +64 -0
- package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
- package/dist/api/compiler/diagnostic-messages.js +184 -0
- package/dist/api/compiler/diagnostics.d.ts +167 -0
- package/dist/api/compiler/diagnostics.js +820 -0
- package/dist/api/compiler/emitter.d.ts +71 -0
- package/dist/api/compiler/emitter.js +327 -0
- package/dist/api/compiler/file-include.d.ts +117 -0
- package/dist/api/compiler/file-include.js +536 -0
- package/dist/api/compiler/file-loader.d.ts +261 -0
- package/dist/api/compiler/file-loader.js +1257 -0
- package/dist/api/compiler/file-system.d.ts +51 -0
- package/dist/api/compiler/file-system.js +132 -0
- package/dist/api/compiler/flow.d.ts +60 -0
- package/dist/api/compiler/flow.js +45 -0
- package/dist/api/compiler/instantiation.d.ts +74 -0
- package/dist/api/compiler/instantiation.js +799 -0
- package/dist/api/compiler/jsdoc.d.ts +75 -0
- package/dist/api/compiler/jsdoc.js +1229 -0
- package/dist/api/compiler/link-tables.d.ts +36 -0
- package/dist/api/compiler/link-tables.js +83 -0
- package/dist/api/compiler/locale-data.d.ts +24 -0
- package/dist/api/compiler/locale-data.js +183 -0
- package/dist/api/compiler/locale.d.ts +4 -0
- package/dist/api/compiler/locale.js +317 -0
- package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
- package/dist/api/compiler/locales/cs-CZ.js +3 -0
- package/dist/api/compiler/locales/de-DE.d.ts +2 -0
- package/dist/api/compiler/locales/de-DE.js +3 -0
- package/dist/api/compiler/locales/es-ES.d.ts +2 -0
- package/dist/api/compiler/locales/es-ES.js +3 -0
- package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
- package/dist/api/compiler/locales/fr-FR.js +3 -0
- package/dist/api/compiler/locales/it-IT.d.ts +2 -0
- package/dist/api/compiler/locales/it-IT.js +3 -0
- package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
- package/dist/api/compiler/locales/ja-JP.js +3 -0
- package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
- package/dist/api/compiler/locales/ko-KR.js +3 -0
- package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
- package/dist/api/compiler/locales/pl-PL.js +3 -0
- package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
- package/dist/api/compiler/locales/pt-BR.js +3 -0
- package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
- package/dist/api/compiler/locales/ru-RU.js +3 -0
- package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
- package/dist/api/compiler/locales/tr-TR.js +3 -0
- package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
- package/dist/api/compiler/locales/zh-CN.js +3 -0
- package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
- package/dist/api/compiler/locales/zh-TW.js +3 -0
- package/dist/api/compiler/module-resolution-types.d.ts +83 -0
- package/dist/api/compiler/module-resolution-types.js +176 -0
- package/dist/api/compiler/module-resolution.d.ts +71 -0
- package/dist/api/compiler/module-resolution.js +1598 -0
- package/dist/api/compiler/module-specifiers.d.ts +64 -0
- package/dist/api/compiler/module-specifiers.js +1101 -0
- package/dist/api/compiler/name-resolver.d.ts +43 -0
- package/dist/api/compiler/name-resolver.js +509 -0
- package/dist/api/compiler/node-builder-names.d.ts +32 -0
- package/dist/api/compiler/node-builder-names.js +854 -0
- package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
- package/dist/api/compiler/node-builder-pseudo.js +744 -0
- package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
- package/dist/api/compiler/node-builder-reuse.js +647 -0
- package/dist/api/compiler/node-builder.d.ts +270 -0
- package/dist/api/compiler/node-builder.js +2645 -0
- package/dist/api/compiler/option-declarations.d.ts +90 -0
- package/dist/api/compiler/option-declarations.js +1460 -0
- package/dist/api/compiler/options.d.ts +289 -0
- package/dist/api/compiler/options.js +1197 -0
- package/dist/api/compiler/output-paths.d.ts +42 -0
- package/dist/api/compiler/output-paths.js +195 -0
- package/dist/api/compiler/package-json.d.ts +175 -0
- package/dist/api/compiler/package-json.js +1015 -0
- package/dist/api/compiler/parallel-parse.d.ts +219 -0
- package/dist/api/compiler/parallel-parse.js +537 -0
- package/dist/api/compiler/parser.d.ts +587 -0
- package/dist/api/compiler/parser.js +6407 -0
- package/dist/api/compiler/path.d.ts +91 -0
- package/dist/api/compiler/path.js +705 -0
- package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
- package/dist/api/compiler/printer/async-helpers.js +91 -0
- package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
- package/dist/api/compiler/printer/auto-generate.js +20 -0
- package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
- package/dist/api/compiler/printer/decorator-helpers.js +118 -0
- package/dist/api/compiler/printer/emit-context.d.ts +154 -0
- package/dist/api/compiler/printer/emit-context.js +576 -0
- package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
- package/dist/api/compiler/printer/emit-flags.js +2 -0
- package/dist/api/compiler/printer/factory-base.d.ts +171 -0
- package/dist/api/compiler/printer/factory-base.js +1505 -0
- package/dist/api/compiler/printer/factory.d.ts +147 -0
- package/dist/api/compiler/printer/factory.js +542 -0
- package/dist/api/compiler/printer/helpers.d.ts +27 -0
- package/dist/api/compiler/printer/helpers.js +164 -0
- package/dist/api/compiler/printer/name-generator.d.ts +41 -0
- package/dist/api/compiler/printer/name-generator.js +283 -0
- package/dist/api/compiler/printer/printer.d.ts +411 -0
- package/dist/api/compiler/printer/printer.js +4517 -0
- package/dist/api/compiler/printer/text-writer.d.ts +46 -0
- package/dist/api/compiler/printer/text-writer.js +172 -0
- package/dist/api/compiler/printer/utilities.d.ts +82 -0
- package/dist/api/compiler/printer/utilities.js +817 -0
- package/dist/api/compiler/program-checker.d.ts +156 -0
- package/dist/api/compiler/program-checker.js +526 -0
- package/dist/api/compiler/program-utilities.d.ts +52 -0
- package/dist/api/compiler/program-utilities.js +365 -0
- package/dist/api/compiler/program.d.ts +180 -0
- package/dist/api/compiler/program.js +1011 -0
- package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
- package/dist/api/compiler/pseudo-bigint.js +61 -0
- package/dist/api/compiler/regexp-checker.d.ts +38 -0
- package/dist/api/compiler/regexp-checker.js +942 -0
- package/dist/api/compiler/relations.d.ts +263 -0
- package/dist/api/compiler/relations.js +4002 -0
- package/dist/api/compiler/reparser.d.ts +48 -0
- package/dist/api/compiler/reparser.js +1323 -0
- package/dist/api/compiler/scanner.d.ts +256 -0
- package/dist/api/compiler/scanner.js +2853 -0
- package/dist/api/compiler/side-state.d.ts +16 -0
- package/dist/api/compiler/side-state.js +89 -0
- package/dist/api/compiler/sourcemap.d.ts +55 -0
- package/dist/api/compiler/sourcemap.js +340 -0
- package/dist/api/compiler/spelling.d.ts +14 -0
- package/dist/api/compiler/spelling.js +128 -0
- package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
- package/dist/api/compiler/symbol-accessibility.js +894 -0
- package/dist/api/compiler/symbol.d.ts +240 -0
- package/dist/api/compiler/symbol.js +228 -0
- package/dist/api/compiler/symlinks.d.ts +32 -0
- package/dist/api/compiler/symlinks.js +114 -0
- package/dist/api/compiler/syntax-kind.d.ts +389 -0
- package/dist/api/compiler/syntax-kind.js +2 -0
- package/dist/api/compiler/timeline.d.ts +9 -0
- package/dist/api/compiler/timeline.js +54 -0
- package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
- package/dist/api/compiler/transformers/alias-references.js +676 -0
- package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
- package/dist/api/compiler/transformers/async-utilities.js +260 -0
- package/dist/api/compiler/transformers/async.d.ts +53 -0
- package/dist/api/compiler/transformers/async.js +645 -0
- package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
- package/dist/api/compiler/transformers/class-fields.js +2418 -0
- package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
- package/dist/api/compiler/transformers/class-utilities.js +261 -0
- package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
- package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
- package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
- package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
- package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
- package/dist/api/compiler/transformers/declarations-diagnostics.js +538 -0
- package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
- package/dist/api/compiler/transformers/declarations-pseudo.js +797 -0
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
- package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
- package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
- package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
- package/dist/api/compiler/transformers/declarations-tracker.js +197 -0
- package/dist/api/compiler/transformers/declarations.d.ts +175 -0
- package/dist/api/compiler/transformers/declarations.js +2380 -0
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
- package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
- package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
- package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
- package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
- package/dist/api/compiler/transformers/destructuring.js +626 -0
- package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
- package/dist/api/compiler/transformers/downlevel.js +45 -0
- package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
- package/dist/api/compiler/transformers/emit-resolver.js +197 -0
- package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
- package/dist/api/compiler/transformers/es-decorators.js +1901 -0
- package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
- package/dist/api/compiler/transformers/exponentiation.js +76 -0
- package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
- package/dist/api/compiler/transformers/external-module-info.js +351 -0
- package/dist/api/compiler/transformers/for-await.d.ts +43 -0
- package/dist/api/compiler/transformers/for-await.js +469 -0
- package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
- package/dist/api/compiler/transformers/import-elision.js +124 -0
- package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
- package/dist/api/compiler/transformers/jsx-entities.js +256 -0
- package/dist/api/compiler/transformers/jsx.d.ts +71 -0
- package/dist/api/compiler/transformers/jsx.js +700 -0
- package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
- package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
- package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
- package/dist/api/compiler/transformers/logical-assignment.js +62 -0
- package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
- package/dist/api/compiler/transformers/module-utilities.js +36 -0
- package/dist/api/compiler/transformers/module.d.ts +49 -0
- package/dist/api/compiler/transformers/module.js +296 -0
- package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
- package/dist/api/compiler/transformers/named-evaluation.js +266 -0
- package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
- package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
- package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
- package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
- package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
- package/dist/api/compiler/transformers/optional-catch.js +20 -0
- package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
- package/dist/api/compiler/transformers/optional-chain.js +188 -0
- package/dist/api/compiler/transformers/reference-resolver.d.ts +128 -0
- package/dist/api/compiler/transformers/reference-resolver.js +1155 -0
- package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
- package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
- package/dist/api/compiler/transformers/subtree-facts.d.ts +9 -0
- package/dist/api/compiler/transformers/subtree-facts.js +203 -0
- package/dist/api/compiler/transformers/syntax-facts.d.ts +51 -0
- package/dist/api/compiler/transformers/syntax-facts.js +254 -0
- package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
- package/dist/api/compiler/transformers/tagged-template.js +148 -0
- package/dist/api/compiler/transformers/transformer.d.ts +17 -0
- package/dist/api/compiler/transformers/transformer.js +54 -0
- package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
- package/dist/api/compiler/transformers/type-eraser.js +346 -0
- package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
- package/dist/api/compiler/transformers/type-serialization.js +347 -0
- package/dist/api/compiler/transformers/using.d.ts +56 -0
- package/dist/api/compiler/transformers/using.js +453 -0
- package/dist/api/compiler/transformers/utilities.d.ts +50 -0
- package/dist/api/compiler/transformers/utilities.js +347 -0
- package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
- package/dist/api/compiler/transformers/visitor-base.js +817 -0
- package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
- package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
- package/dist/api/compiler/tsconfig.d.ts +177 -0
- package/dist/api/compiler/tsconfig.js +1311 -0
- package/dist/api/compiler/type-printer.d.ts +15 -0
- package/dist/api/compiler/type-printer.js +74 -0
- package/dist/api/compiler/types.d.ts +87 -0
- package/dist/api/compiler/types.js +23 -0
- package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
- package/dist/api/compiler/unicode-identifiers.js +209 -0
- package/dist/api/compiler/unicode-properties.d.ts +8 -0
- package/dist/api/compiler/unicode-properties.js +531 -0
- package/dist/api/compiler/vfs-match.d.ts +24 -0
- package/dist/api/compiler/vfs-match.js +587 -0
- package/dist/api/library/ast.d.ts +74 -0
- package/dist/api/library/ast.generated.d.ts +1145 -0
- package/dist/api/library/ast.generated.js +3 -0
- package/dist/api/library/ast.js +5 -0
- package/dist/api/library/checker.d.ts +51 -0
- package/dist/api/library/checker.js +318 -0
- package/dist/api/library/compiler-options.generated.d.ts +108 -0
- package/dist/api/library/compiler-options.generated.js +3 -0
- package/dist/api/library/diagnostics.d.ts +13 -0
- package/dist/api/library/diagnostics.js +50 -0
- package/dist/api/library/disk.d.ts +13 -0
- package/dist/api/library/disk.js +66 -0
- package/dist/api/library/enums.generated.d.ts +891 -0
- package/dist/api/library/enums.generated.js +916 -0
- package/dist/api/library/errors.d.ts +13 -0
- package/dist/api/library/errors.js +24 -0
- package/dist/api/library/host.d.ts +24 -0
- package/dist/api/library/host.js +52 -0
- package/dist/api/library/index.d.ts +14 -0
- package/dist/api/library/index.js +15 -0
- package/dist/api/library/nodes.d.ts +51 -0
- package/dist/api/library/nodes.js +196 -0
- package/dist/api/library/options.d.ts +144 -0
- package/dist/api/library/options.js +308 -0
- package/dist/api/library/parse.d.ts +19 -0
- package/dist/api/library/parse.js +41 -0
- package/dist/api/library/program.d.ts +21 -0
- package/dist/api/library/program.js +234 -0
- package/dist/api/library/symbols.d.ts +8 -0
- package/dist/api/library/symbols.js +11 -0
- package/dist/api/library/types.d.ts +313 -0
- package/dist/api/library/types.js +6 -0
- package/package.json +22 -8
- package/src/compiler/ast-utilities.ts +548 -0
- package/src/compiler/ast.ts +12862 -0
- package/src/compiler/astnav.ts +799 -0
- package/src/compiler/binder-utilities.ts +1392 -0
- package/src/compiler/binder.ts +2703 -0
- package/src/compiler/build-info.ts +1197 -0
- package/src/compiler/character-codes.ts +323 -0
- package/src/compiler/checker-calls.ts +2155 -0
- package/src/compiler/checker-classes.ts +706 -0
- package/src/compiler/checker-contextual.ts +1457 -0
- package/src/compiler/checker-declaration-order.ts +438 -0
- package/src/compiler/checker-declarations.ts +1194 -0
- package/src/compiler/checker-declared-types.ts +919 -0
- package/src/compiler/checker-decorators.ts +694 -0
- package/src/compiler/checker-deprecation.ts +359 -0
- package/src/compiler/checker-destructuring.ts +805 -0
- package/src/compiler/checker-elaboration.ts +477 -0
- package/src/compiler/checker-emit-helpers.ts +224 -0
- package/src/compiler/checker-emit-resolver.ts +769 -0
- package/src/compiler/checker-evaluator.ts +243 -0
- package/src/compiler/checker-expressions.ts +1831 -0
- package/src/compiler/checker-features.ts +361 -0
- package/src/compiler/checker-flow.ts +394 -0
- package/src/compiler/checker-functions.ts +1296 -0
- package/src/compiler/checker-generated-code.ts +227 -0
- package/src/compiler/checker-globals.ts +52 -0
- package/src/compiler/checker-grammar.ts +3584 -0
- package/src/compiler/checker-heritage.ts +1233 -0
- package/src/compiler/checker-inference.ts +2576 -0
- package/src/compiler/checker-iteration.ts +1206 -0
- package/src/compiler/checker-javascript.ts +502 -0
- package/src/compiler/checker-jsdoc.ts +360 -0
- package/src/compiler/checker-jsx.ts +1924 -0
- package/src/compiler/checker-literals.ts +61 -0
- package/src/compiler/checker-members.ts +2436 -0
- package/src/compiler/checker-modules.ts +2886 -0
- package/src/compiler/checker-narrowing.ts +3230 -0
- package/src/compiler/checker-object-literals.ts +575 -0
- package/src/compiler/checker-operators.ts +1422 -0
- package/src/compiler/checker-overloads.ts +328 -0
- package/src/compiler/checker-property-access.ts +906 -0
- package/src/compiler/checker-services.ts +1149 -0
- package/src/compiler/checker-signatures.ts +1032 -0
- package/src/compiler/checker-source-file.ts +732 -0
- package/src/compiler/checker-statements.ts +292 -0
- package/src/compiler/checker-super.ts +261 -0
- package/src/compiler/checker-symbol-types.ts +2107 -0
- package/src/compiler/checker-symbols.ts +2150 -0
- package/src/compiler/checker-type-factory.ts +2579 -0
- package/src/compiler/checker-type-nodes.ts +1033 -0
- package/src/compiler/checker-type-operators.ts +2502 -0
- package/src/compiler/checker-types.ts +2340 -0
- package/src/compiler/checker-unused.ts +642 -0
- package/src/compiler/checker-utilities.ts +161 -0
- package/src/compiler/checker.ts +1116 -0
- package/src/compiler/command-line.ts +436 -0
- package/src/compiler/compile-program.ts +439 -0
- package/src/compiler/decoder.ts +1209 -0
- package/src/compiler/diagnostic-locales.ts +86 -0
- package/src/compiler/diagnostic-messages.ts +2349 -0
- package/src/compiler/diagnostics.ts +897 -0
- package/src/compiler/emitter.ts +434 -0
- package/src/compiler/encoder.ts +1945 -0
- package/src/compiler/file-include.ts +673 -0
- package/src/compiler/file-loader.ts +1528 -0
- package/src/compiler/file-system.ts +143 -0
- package/src/compiler/flow.ts +89 -0
- package/src/compiler/help.ts +473 -0
- package/src/compiler/incremental.ts +2784 -0
- package/src/compiler/init.ts +141 -0
- package/src/compiler/instantiation.ts +894 -0
- package/src/compiler/jsdoc.ts +1386 -0
- package/src/compiler/link-tables.ts +98 -0
- package/src/compiler/locale-data.ts +203 -0
- package/src/compiler/locale.ts +307 -0
- package/src/compiler/locales/cs-CZ.ts +5 -0
- package/src/compiler/locales/de-DE.ts +5 -0
- package/src/compiler/locales/es-ES.ts +5 -0
- package/src/compiler/locales/fr-FR.ts +5 -0
- package/src/compiler/locales/it-IT.ts +5 -0
- package/src/compiler/locales/ja-JP.ts +5 -0
- package/src/compiler/locales/ko-KR.ts +5 -0
- package/src/compiler/locales/pl-PL.ts +5 -0
- package/src/compiler/locales/pt-BR.ts +5 -0
- package/src/compiler/locales/ru-RU.ts +5 -0
- package/src/compiler/locales/tr-TR.ts +5 -0
- package/src/compiler/locales/zh-CN.ts +5 -0
- package/src/compiler/locales/zh-TW.ts +5 -0
- package/src/compiler/module-resolution-types.ts +243 -0
- package/src/compiler/module-resolution.ts +2072 -0
- package/src/compiler/module-specifiers.ts +1491 -0
- package/src/compiler/name-resolver.ts +646 -0
- package/src/compiler/node-builder-names.ts +1069 -0
- package/src/compiler/node-builder-pseudo.ts +892 -0
- package/src/compiler/node-builder-reuse.ts +764 -0
- package/src/compiler/node-builder.ts +3425 -0
- package/src/compiler/option-declarations.ts +1560 -0
- package/src/compiler/options.ts +1576 -0
- package/src/compiler/output-paths.ts +334 -0
- package/src/compiler/package-json.ts +1083 -0
- package/src/compiler/parallel-check.ts +1951 -0
- package/src/compiler/parallel-parse.ts +590 -0
- package/src/compiler/parse-thread.ts +140 -0
- package/src/compiler/parser.ts +7716 -0
- package/src/compiler/path.ts +717 -0
- package/src/compiler/printer/async-helpers.ts +183 -0
- package/src/compiler/printer/auto-generate.ts +27 -0
- package/src/compiler/printer/decorator-helpers.ts +218 -0
- package/src/compiler/printer/emit-context.ts +679 -0
- package/src/compiler/printer/emit-flags.ts +64 -0
- package/src/compiler/printer/factory-base.ts +2577 -0
- package/src/compiler/printer/factory.ts +764 -0
- package/src/compiler/printer/helpers.ts +291 -0
- package/src/compiler/printer/name-generator.ts +372 -0
- package/src/compiler/printer/printer.ts +5072 -0
- package/src/compiler/printer/text-writer.ts +183 -0
- package/src/compiler/printer/utilities.ts +884 -0
- package/src/compiler/program-checker.ts +592 -0
- package/src/compiler/program-utilities.ts +435 -0
- package/src/compiler/program.ts +1419 -0
- package/src/compiler/pseudo-bigint.ts +62 -0
- package/src/compiler/regexp-checker.ts +1142 -0
- package/src/compiler/relations.ts +5149 -0
- package/src/compiler/reparser.ts +1566 -0
- package/src/compiler/scanner.ts +2951 -0
- package/src/compiler/show-config.ts +239 -0
- package/src/compiler/side-state.ts +125 -0
- package/src/compiler/sourcemap.ts +366 -0
- package/src/compiler/spelling.ts +122 -0
- package/src/compiler/symbol-accessibility.ts +1071 -0
- package/src/compiler/symbol.ts +439 -0
- package/src/compiler/symlinks.ts +137 -0
- package/src/compiler/syntax-kind.ts +391 -0
- package/src/compiler/thread-entry.ts +191 -0
- package/src/compiler/timeline.ts +53 -0
- package/src/compiler/transformers/alias-references.ts +757 -0
- package/src/compiler/transformers/async-utilities.ts +335 -0
- package/src/compiler/transformers/async.ts +838 -0
- package/src/compiler/transformers/class-fields.ts +2967 -0
- package/src/compiler/transformers/class-utilities.ts +324 -0
- package/src/compiler/transformers/commonjs-module.ts +1621 -0
- package/src/compiler/transformers/const-enum-inliner.ts +50 -0
- package/src/compiler/transformers/declarations-diagnostics.ts +832 -0
- package/src/compiler/transformers/declarations-pseudo.ts +966 -0
- package/src/compiler/transformers/declarations-resolver.ts +249 -0
- package/src/compiler/transformers/declarations-syntactic.ts +1859 -0
- package/src/compiler/transformers/declarations-tracker.ts +269 -0
- package/src/compiler/transformers/declarations.ts +3120 -0
- package/src/compiler/transformers/decorator-metadata.ts +697 -0
- package/src/compiler/transformers/decorator-utilities.ts +283 -0
- package/src/compiler/transformers/destructuring.ts +708 -0
- package/src/compiler/transformers/downlevel.ts +50 -0
- package/src/compiler/transformers/emit-resolver.ts +258 -0
- package/src/compiler/transformers/es-decorators.ts +2682 -0
- package/src/compiler/transformers/exponentiation.ts +80 -0
- package/src/compiler/transformers/external-module-info.ts +412 -0
- package/src/compiler/transformers/for-await.ts +687 -0
- package/src/compiler/transformers/import-elision.ts +152 -0
- package/src/compiler/transformers/jsx-entities.ts +256 -0
- package/src/compiler/transformers/jsx.ts +824 -0
- package/src/compiler/transformers/legacy-decorators.ts +726 -0
- package/src/compiler/transformers/logical-assignment.ts +75 -0
- package/src/compiler/transformers/module-utilities.ts +42 -0
- package/src/compiler/transformers/module.ts +474 -0
- package/src/compiler/transformers/named-evaluation.ts +389 -0
- package/src/compiler/transformers/nullish-coalescing.ts +35 -0
- package/src/compiler/transformers/object-rest-spread.ts +577 -0
- package/src/compiler/transformers/optional-catch.ts +29 -0
- package/src/compiler/transformers/optional-chain.ts +246 -0
- package/src/compiler/transformers/reference-resolver.ts +1201 -0
- package/src/compiler/transformers/runtime-syntax.ts +942 -0
- package/src/compiler/transformers/subtree-facts.ts +245 -0
- package/src/compiler/transformers/syntax-facts.ts +353 -0
- package/src/compiler/transformers/tagged-template.ts +167 -0
- package/src/compiler/transformers/transformer.ts +56 -0
- package/src/compiler/transformers/type-eraser.ts +520 -0
- package/src/compiler/transformers/type-serialization.ts +374 -0
- package/src/compiler/transformers/using.ts +613 -0
- package/src/compiler/transformers/utilities.ts +419 -0
- package/src/compiler/transformers/visitor-base.ts +1601 -0
- package/src/compiler/transformers/visitor-hooks.ts +252 -0
- package/src/compiler/tsc-build.ts +1418 -0
- package/src/compiler/tsc-cli.ts +666 -0
- package/src/compiler/tsc-compile.ts +437 -0
- package/src/compiler/tsc-watch.ts +854 -0
- package/src/compiler/tsconfig.ts +1574 -0
- package/src/compiler/type-printer.ts +110 -0
- package/src/compiler/types.ts +115 -0
- package/src/compiler/unicode-identifiers.ts +212 -0
- package/src/compiler/unicode-properties.ts +537 -0
- package/src/compiler/vfs-match.ts +597 -0
- package/src/compiler/xxh3.ts +650 -0
- package/src/library/ast.generated.ts +1685 -0
- package/src/library/ast.ts +104 -0
- package/src/library/checker.ts +384 -0
- package/src/library/compiler-options.generated.ts +114 -0
- package/src/library/diagnostics.ts +72 -0
- package/src/library/disk.ts +73 -0
- package/src/library/enums.generated.ts +1024 -0
- package/src/library/errors.ts +26 -0
- package/src/library/host.ts +63 -0
- package/src/library/index.ts +71 -0
- package/src/library/nodes.ts +232 -0
- package/src/library/options.ts +449 -0
- package/src/library/parse.ts +63 -0
- package/src/library/program.ts +293 -0
- package/src/library/symbols.ts +15 -0
- package/src/library/types.ts +359 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The file system the compiler reads, and a caching layer over it.
|
|
3
|
+
*/
|
|
4
|
+
import { getCanonicalFileName } from './path.js';
|
|
5
|
+
|
|
6
|
+
/** The files and directories directly inside a directory, sorted by name. */
|
|
7
|
+
export class DirectoryEntries {
|
|
8
|
+
constructor(
|
|
9
|
+
readonly files: readonly string[],
|
|
10
|
+
readonly directories: readonly string[],
|
|
11
|
+
/** Entries reached through a symlink; `undefined` if the file system doesn't track symlinks. */
|
|
12
|
+
readonly symlinks: ReadonlySet<string> | undefined,
|
|
13
|
+
) {}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const emptyDirectoryEntries = new DirectoryEntries([], [], undefined);
|
|
17
|
+
|
|
18
|
+
/** File system access. Paths are absolute and use `/`. */
|
|
19
|
+
export abstract class FileSystem {
|
|
20
|
+
constructor(readonly useCaseSensitiveFileNames: boolean) {}
|
|
21
|
+
|
|
22
|
+
abstract fileExists(path: string): boolean;
|
|
23
|
+
abstract directoryExists(path: string): boolean;
|
|
24
|
+
/** Returns `undefined` if the file can't be read. */
|
|
25
|
+
abstract readFile(path: string): string | undefined;
|
|
26
|
+
/** Entries of a readable directory; empty if it can't be read. */
|
|
27
|
+
abstract getAccessibleEntries(path: string): DirectoryEntries;
|
|
28
|
+
/** The path with symlinks resolved, or `path` itself if it does not exist. */
|
|
29
|
+
abstract realpath(path: string): string;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Called before the file system is shared with other threads, which makes it immutable
|
|
33
|
+
* (parallel-check.ts): a file system that caches keeps caching on each thread from then on.
|
|
34
|
+
*/
|
|
35
|
+
prepareForSharing(): void {}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** The answers a CachedFileSystem keeps. */
|
|
39
|
+
class FileSystemCaches {
|
|
40
|
+
readonly files = new Map<string, boolean>();
|
|
41
|
+
readonly directories = new Map<string, boolean>();
|
|
42
|
+
readonly entries = new Map<string, DirectoryEntries>();
|
|
43
|
+
readonly realpaths = new Map<string, string>();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// What each file system shared with other threads (and so immutable) did not know yet when it was
|
|
47
|
+
// shared, as this thread learned it.
|
|
48
|
+
const threadCaches = new Map<CachedFileSystem, FileSystemCaches>();
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Caches every query of another file system; for a single compilation, where files don't change.
|
|
52
|
+
* Once shared with other threads (`prepareForSharing`), what was cached until then is read by every
|
|
53
|
+
* thread, and each thread caches new answers in tables of its own.
|
|
54
|
+
*/
|
|
55
|
+
export class CachedFileSystem extends FileSystem {
|
|
56
|
+
private readonly caches = new FileSystemCaches();
|
|
57
|
+
private shared = false;
|
|
58
|
+
|
|
59
|
+
constructor(private readonly inner: FileSystem) {
|
|
60
|
+
super(inner.useCaseSensitiveFileNames);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
prepareForSharing(): void {
|
|
64
|
+
// A file system already shared (with an earlier program of a build) is immutable.
|
|
65
|
+
if (!this.shared) this.shared = true;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Where new answers go: this file system's caches, or once it is shared, this thread's. */
|
|
69
|
+
private ownCaches(): FileSystemCaches {
|
|
70
|
+
if (!this.shared) return this.caches;
|
|
71
|
+
let caches = threadCaches.get(this);
|
|
72
|
+
if (caches === undefined) {
|
|
73
|
+
caches = new FileSystemCaches();
|
|
74
|
+
threadCaches.set(this, caches);
|
|
75
|
+
}
|
|
76
|
+
return caches;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
fileExists(path: string): boolean {
|
|
80
|
+
const key = this.key(path);
|
|
81
|
+
let exists = this.caches.files.get(key);
|
|
82
|
+
if (exists !== undefined) return exists;
|
|
83
|
+
const own = this.ownCaches();
|
|
84
|
+
exists = own.files.get(key);
|
|
85
|
+
if (exists === undefined) {
|
|
86
|
+
exists = this.inner.fileExists(path);
|
|
87
|
+
own.files.set(key, exists);
|
|
88
|
+
}
|
|
89
|
+
return exists;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
directoryExists(path: string): boolean {
|
|
93
|
+
const key = this.key(path);
|
|
94
|
+
let exists = this.caches.directories.get(key);
|
|
95
|
+
if (exists !== undefined) return exists;
|
|
96
|
+
const own = this.ownCaches();
|
|
97
|
+
exists = own.directories.get(key);
|
|
98
|
+
if (exists === undefined) {
|
|
99
|
+
exists = this.inner.directoryExists(path);
|
|
100
|
+
own.directories.set(key, exists);
|
|
101
|
+
}
|
|
102
|
+
return exists;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
readFile(path: string): string | undefined {
|
|
106
|
+
return this.inner.readFile(path);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
getAccessibleEntries(path: string): DirectoryEntries {
|
|
110
|
+
const key = this.key(path);
|
|
111
|
+
let entries = this.caches.entries.get(key);
|
|
112
|
+
if (entries !== undefined) return entries;
|
|
113
|
+
const own = this.ownCaches();
|
|
114
|
+
entries = own.entries.get(key);
|
|
115
|
+
if (entries === undefined) {
|
|
116
|
+
entries = this.inner.getAccessibleEntries(path);
|
|
117
|
+
own.entries.set(key, entries);
|
|
118
|
+
}
|
|
119
|
+
return entries;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
realpath(path: string): string {
|
|
123
|
+
const key = this.key(path);
|
|
124
|
+
let real = this.caches.realpaths.get(key);
|
|
125
|
+
if (real !== undefined) return real;
|
|
126
|
+
const own = this.ownCaches();
|
|
127
|
+
real = own.realpaths.get(key);
|
|
128
|
+
if (real === undefined) {
|
|
129
|
+
real = this.inner.realpath(path);
|
|
130
|
+
own.realpaths.set(key, real);
|
|
131
|
+
}
|
|
132
|
+
return real;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Whether `fileExists` was called for `path`. */
|
|
136
|
+
lookedUpFile(path: string): boolean {
|
|
137
|
+
return this.caches.files.has(this.key(path));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private key(path: string): string {
|
|
141
|
+
return getCanonicalFileName(path, this.useCaseSensitiveFileNames);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// The control flow graph the binder builds for narrowing and reachability.
|
|
2
|
+
//
|
|
3
|
+
// Each flow node points back to what runs before it: `antecedent` for most nodes,
|
|
4
|
+
// `antecedents` for labels, where paths join.
|
|
5
|
+
import type { ProgramLifetime } from '@scriptc/types';
|
|
6
|
+
import type { Node } from './ast.js';
|
|
7
|
+
|
|
8
|
+
export const enum FlowFlags {
|
|
9
|
+
None = 0,
|
|
10
|
+
Unreachable = 1 << 0,
|
|
11
|
+
/** Start of a function, source file or other control flow container. */
|
|
12
|
+
Start = 1 << 1,
|
|
13
|
+
/** A junction of paths, e.g. after an `if`. */
|
|
14
|
+
BranchLabel = 1 << 2,
|
|
15
|
+
/** The top of a loop. */
|
|
16
|
+
LoopLabel = 1 << 3,
|
|
17
|
+
Assignment = 1 << 4,
|
|
18
|
+
/** `node` is known to be true here. */
|
|
19
|
+
TrueCondition = 1 << 5,
|
|
20
|
+
/** `node` is known to be false here. */
|
|
21
|
+
FalseCondition = 1 << 6,
|
|
22
|
+
/** The start of a range of `case` clauses. */
|
|
23
|
+
SwitchClause = 1 << 7,
|
|
24
|
+
/** A possible array mutation such as `x.push(…)` or `x[i] = …`. */
|
|
25
|
+
ArrayMutation = 1 << 8,
|
|
26
|
+
/** A call that may be an assertion. */
|
|
27
|
+
Call = 1 << 9,
|
|
28
|
+
/** Temporarily narrows a label's antecedents; see `FlowReduceLabel`. */
|
|
29
|
+
ReduceLabel = 1 << 10,
|
|
30
|
+
/** Referenced as an antecedent once. */
|
|
31
|
+
Referenced = 1 << 11,
|
|
32
|
+
/** Referenced as an antecedent more than once. */
|
|
33
|
+
Shared = 1 << 12,
|
|
34
|
+
|
|
35
|
+
Label = BranchLabel | LoopLabel,
|
|
36
|
+
Condition = TrueCondition | FalseCondition,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export class FlowNode implements ProgramLifetime {
|
|
40
|
+
flags: FlowFlags;
|
|
41
|
+
/** The assignment, condition, call or function this node is about. */
|
|
42
|
+
node: Node | undefined;
|
|
43
|
+
/** What runs before this node, for all but labels. */
|
|
44
|
+
antecedent: FlowNode | undefined;
|
|
45
|
+
/** For labels: the joined paths, in order of addition. */
|
|
46
|
+
antecedents: FlowNode[] | undefined;
|
|
47
|
+
|
|
48
|
+
constructor(flags: FlowFlags, node: Node | undefined, antecedent: FlowNode | undefined) {
|
|
49
|
+
this.flags = flags;
|
|
50
|
+
this.node = node;
|
|
51
|
+
this.antecedent = antecedent;
|
|
52
|
+
this.antecedents = undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Entry to clauses `clauseStart` to `clauseEnd` (exclusive) of `switchStatement`, which is
|
|
58
|
+
* also `node`. An empty range means no clause matched.
|
|
59
|
+
*/
|
|
60
|
+
export class FlowSwitchClause extends FlowNode {
|
|
61
|
+
readonly switchStatement: Node;
|
|
62
|
+
readonly clauseStart: number;
|
|
63
|
+
readonly clauseEnd: number;
|
|
64
|
+
|
|
65
|
+
constructor(antecedent: FlowNode, switchStatement: Node, clauseStart: number, clauseEnd: number) {
|
|
66
|
+
super(FlowFlags.SwitchClause, switchStatement, antecedent);
|
|
67
|
+
this.switchStatement = switchStatement;
|
|
68
|
+
this.clauseStart = clauseStart;
|
|
69
|
+
this.clauseEnd = clauseEnd;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
isEmpty(): boolean {
|
|
73
|
+
return this.clauseStart === this.clauseEnd;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* While analysis passes this node, `target` (the label before a `finally` block) has only
|
|
79
|
+
* `antecedents`, e.g. the paths that completed the `try` block normally.
|
|
80
|
+
*/
|
|
81
|
+
export class FlowReduceLabel extends FlowNode {
|
|
82
|
+
readonly target: FlowNode;
|
|
83
|
+
|
|
84
|
+
constructor(target: FlowNode, antecedents: FlowNode[], antecedent: FlowNode) {
|
|
85
|
+
super(FlowFlags.ReduceLabel, undefined, antecedent);
|
|
86
|
+
this.target = target;
|
|
87
|
+
this.antecedents = antecedents;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tsc --version`, `--help`, `--help --all` and `tsc --build --help` output.
|
|
3
|
+
*/
|
|
4
|
+
import { charSize, codePointAt, utf8Length } from './character-codes.js';
|
|
5
|
+
import { Diagnostics, localizeMessage, type DiagnosticMessage, type Locale } from './diagnostics.js';
|
|
6
|
+
import {
|
|
7
|
+
buildOption,
|
|
8
|
+
buildOptionDeclarations,
|
|
9
|
+
optionDeclarations,
|
|
10
|
+
optionsForBuild,
|
|
11
|
+
optionsForWatch,
|
|
12
|
+
sameEnumValue,
|
|
13
|
+
type OptionDeclaration,
|
|
14
|
+
} from './option-declarations.js';
|
|
15
|
+
import type { System } from './tsc-cli.js';
|
|
16
|
+
|
|
17
|
+
export const version = '7.0.2';
|
|
18
|
+
|
|
19
|
+
/** Whether output gets colors: `NO_COLOR` and `FORCE_COLOR` override the TTY check. */
|
|
20
|
+
export function defaultIsPretty(sys: System): boolean {
|
|
21
|
+
if (sys.getEnvironmentVariable('NO_COLOR') !== '') return false;
|
|
22
|
+
if (sys.getEnvironmentVariable('FORCE_COLOR') !== '') return true;
|
|
23
|
+
return sys.writeOutputIsTTY;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** ANSI styles, or plain text when colors are off. */
|
|
27
|
+
export class Colors {
|
|
28
|
+
private readonly enabled: boolean;
|
|
29
|
+
/** Console hosts where blue lacks contrast. */
|
|
30
|
+
private readonly avoidBlue: boolean;
|
|
31
|
+
private readonly richColors: boolean;
|
|
32
|
+
|
|
33
|
+
constructor(sys: System) {
|
|
34
|
+
this.enabled = defaultIsPretty(sys);
|
|
35
|
+
const isWindows = sys.getEnvironmentVariable('OS').toLowerCase().includes('windows');
|
|
36
|
+
const isWindowsTerminal = sys.getEnvironmentVariable('WT_SESSION') !== '';
|
|
37
|
+
const isVSCode = sys.getEnvironmentVariable('TERM_PROGRAM') === 'vscode';
|
|
38
|
+
this.avoidBlue = isWindows && !isWindowsTerminal && !isVSCode;
|
|
39
|
+
this.richColors =
|
|
40
|
+
sys.getEnvironmentVariable('COLORTERM') === 'truecolor' ||
|
|
41
|
+
sys.getEnvironmentVariable('TERM') === 'xterm-256color';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
bold(text: string): string {
|
|
45
|
+
return this.enabled ? '\x1b[1m' + text + '\x1b[22m' : text;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
blue(text: string): string {
|
|
49
|
+
if (!this.enabled) return text;
|
|
50
|
+
return this.avoidBlue ? this.brightWhite(text) : '\x1b[94m' + text + '\x1b[39m';
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
blueBackground(text: string): string {
|
|
54
|
+
if (!this.enabled) return text;
|
|
55
|
+
return (this.richColors ? '\x1b[48;5;68m' : '\x1b[44m') + text + '\x1b[39;49m';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
brightWhite(text: string): string {
|
|
59
|
+
return this.enabled ? '\x1b[97m' + text + '\x1b[39m' : text;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Number of code points, which Go's `%*s` pads to. */
|
|
64
|
+
function codePointLength(text: string): number {
|
|
65
|
+
let length = 0;
|
|
66
|
+
for (let i = 0; i < text.length; i += charSize(codePointAt(text, i, text.length))) length++;
|
|
67
|
+
return length;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function padEnd(text: string, width: number): string {
|
|
71
|
+
const length = codePointLength(text);
|
|
72
|
+
return length >= width ? text : text + ' '.repeat(width - length);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function padStart(text: string, width: number): string {
|
|
76
|
+
const length = codePointLength(text);
|
|
77
|
+
return length >= width ? text : ' '.repeat(width - length) + text;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The end of the longest piece of `text` from `start` that fits in `bytes` UTF-8 bytes, and at least
|
|
82
|
+
* one character. tsgo slices at the byte, which can split a character; here it moves to the next piece.
|
|
83
|
+
*/
|
|
84
|
+
function utf8PieceEnd(text: string, start: number, bytes: number): number {
|
|
85
|
+
let end = start;
|
|
86
|
+
let used = 0;
|
|
87
|
+
while (end < text.length) {
|
|
88
|
+
const codePoint = codePointAt(text, end, text.length);
|
|
89
|
+
used += codePoint < 0x80 ? 1 : codePoint < 0x800 ? 2 : codePoint < 0x10000 ? 3 : 4;
|
|
90
|
+
if (used > bytes && end > start) break;
|
|
91
|
+
end += charSize(codePoint);
|
|
92
|
+
}
|
|
93
|
+
return end;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** `message`, with the TypeScript logo right-aligned when the terminal is wide enough. */
|
|
97
|
+
export function header(sys: System, colors: Colors, message: string): string {
|
|
98
|
+
const width = sys.terminalWidth;
|
|
99
|
+
const icon = ' ';
|
|
100
|
+
if (width < utf8Length(message) + icon.length) return message + '\n\n';
|
|
101
|
+
const leftAlign = Math.min(width, 120) - icon.length;
|
|
102
|
+
return (
|
|
103
|
+
padEnd(message, leftAlign) +
|
|
104
|
+
colors.blueBackground(icon) +
|
|
105
|
+
'\n' +
|
|
106
|
+
' '.repeat(leftAlign) +
|
|
107
|
+
colors.blueBackground(colors.brightWhite(' TS ')) +
|
|
108
|
+
'\n'
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Help output for one terminal, in one language. */
|
|
113
|
+
class HelpWriter {
|
|
114
|
+
readonly colors: Colors;
|
|
115
|
+
readonly width: number;
|
|
116
|
+
|
|
117
|
+
constructor(
|
|
118
|
+
readonly sys: System,
|
|
119
|
+
readonly locale: Locale,
|
|
120
|
+
) {
|
|
121
|
+
this.colors = new Colors(sys);
|
|
122
|
+
this.width = sys.terminalWidth;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
text(message: DiagnosticMessage, ...args: string[]): string {
|
|
126
|
+
return localizeMessage(this.locale, message, args);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
header(): string {
|
|
130
|
+
return header(
|
|
131
|
+
this.sys,
|
|
132
|
+
this.colors,
|
|
133
|
+
this.text(Diagnostics.X_tsc_Colon_The_TypeScript_Compiler) + ' - ' + versionText(this.locale),
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function versionText(locale: Locale): string {
|
|
139
|
+
return localizeMessage(locale, Diagnostics.Version_0, [version]);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function printVersion(sys: System, locale: Locale): void {
|
|
143
|
+
sys.write(versionText(locale) + '\n');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** `tsc --help`, or with `all`, `tsc --help --all`. */
|
|
147
|
+
export function printHelp(sys: System, locale: Locale, all: boolean): void {
|
|
148
|
+
const writer = new HelpWriter(sys, locale);
|
|
149
|
+
const options = [...optionDeclarations, buildOption];
|
|
150
|
+
if (all) {
|
|
151
|
+
options.sort((a, b) => {
|
|
152
|
+
const x = a.name.toLowerCase();
|
|
153
|
+
const y = b.name.toLowerCase();
|
|
154
|
+
return x < y ? -1 : x > y ? 1 : 0;
|
|
155
|
+
});
|
|
156
|
+
printAllHelp(writer, options);
|
|
157
|
+
} else {
|
|
158
|
+
printEasyHelp(
|
|
159
|
+
writer,
|
|
160
|
+
options.filter((option) => option.showInSimplifiedHelpView === true),
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export function printBuildHelp(sys: System, locale: Locale): void {
|
|
166
|
+
const writer = new HelpWriter(sys, locale);
|
|
167
|
+
const options = buildOptionDeclarations.filter((option) => option !== buildOption);
|
|
168
|
+
sys.write(
|
|
169
|
+
writer.header() +
|
|
170
|
+
sectionOutput(
|
|
171
|
+
writer,
|
|
172
|
+
writer.text(Diagnostics.BUILD_OPTIONS),
|
|
173
|
+
options,
|
|
174
|
+
false,
|
|
175
|
+
buildModeIntroduction(writer),
|
|
176
|
+
undefined,
|
|
177
|
+
),
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function buildModeIntroduction(writer: HelpWriter): string {
|
|
182
|
+
return writer.text(
|
|
183
|
+
Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0,
|
|
184
|
+
'https://aka.ms/tsc-composite-builds',
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function learnMore(writer: HelpWriter): string {
|
|
189
|
+
return writer.text(Diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0, 'https://aka.ms/tsc');
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function printEasyHelp(writer: HelpWriter, options: readonly OptionDeclaration[]): void {
|
|
193
|
+
let out = writer.header();
|
|
194
|
+
out += writer.colors.bold(writer.text(Diagnostics.COMMON_COMMANDS)) + '\n\n';
|
|
195
|
+
out += example(writer, ['tsc'], Diagnostics.Compiles_the_current_project_tsconfig_json_in_the_working_directory);
|
|
196
|
+
out += example(
|
|
197
|
+
writer,
|
|
198
|
+
['tsc app.ts util.ts'],
|
|
199
|
+
Diagnostics.Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options,
|
|
200
|
+
);
|
|
201
|
+
out += example(writer, ['tsc -b'], Diagnostics.Build_a_composite_project_in_the_working_directory);
|
|
202
|
+
out += example(
|
|
203
|
+
writer,
|
|
204
|
+
['tsc --init'],
|
|
205
|
+
Diagnostics.Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory,
|
|
206
|
+
);
|
|
207
|
+
out += example(
|
|
208
|
+
writer,
|
|
209
|
+
['tsc -p ./path/to/tsconfig.json'],
|
|
210
|
+
Diagnostics.Compiles_the_TypeScript_project_located_at_the_specified_path,
|
|
211
|
+
);
|
|
212
|
+
out += example(
|
|
213
|
+
writer,
|
|
214
|
+
['tsc --help --all'],
|
|
215
|
+
Diagnostics.An_expanded_version_of_this_information_showing_all_possible_compiler_options,
|
|
216
|
+
);
|
|
217
|
+
out += example(
|
|
218
|
+
writer,
|
|
219
|
+
['tsc --noEmit', 'tsc --target esnext'],
|
|
220
|
+
Diagnostics.Compiles_the_current_project_with_additional_settings,
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
const commandLineOptions: OptionDeclaration[] = [];
|
|
224
|
+
const configOptions: OptionDeclaration[] = [];
|
|
225
|
+
for (const option of options) {
|
|
226
|
+
if (option.isCommandLineOnly === true || option.category === Diagnostics.Command_line_Options)
|
|
227
|
+
commandLineOptions.push(option);
|
|
228
|
+
else configOptions.push(option);
|
|
229
|
+
}
|
|
230
|
+
out += sectionOutput(
|
|
231
|
+
writer,
|
|
232
|
+
writer.text(Diagnostics.COMMAND_LINE_FLAGS),
|
|
233
|
+
commandLineOptions,
|
|
234
|
+
false,
|
|
235
|
+
undefined,
|
|
236
|
+
undefined,
|
|
237
|
+
);
|
|
238
|
+
out += sectionOutput(
|
|
239
|
+
writer,
|
|
240
|
+
writer.text(Diagnostics.COMMON_COMPILER_OPTIONS),
|
|
241
|
+
configOptions,
|
|
242
|
+
false,
|
|
243
|
+
undefined,
|
|
244
|
+
learnMore(writer),
|
|
245
|
+
);
|
|
246
|
+
writer.sys.write(out);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function example(writer: HelpWriter, commands: readonly string[], description: DiagnosticMessage): string {
|
|
250
|
+
let text = '';
|
|
251
|
+
for (const command of commands) text += ' ' + writer.colors.blue(command) + '\n';
|
|
252
|
+
return text + ' ' + writer.text(description) + '\n\n';
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function printAllHelp(writer: HelpWriter, options: readonly OptionDeclaration[]): void {
|
|
256
|
+
let out = writer.header();
|
|
257
|
+
out += sectionOutput(
|
|
258
|
+
writer,
|
|
259
|
+
writer.text(Diagnostics.ALL_COMPILER_OPTIONS),
|
|
260
|
+
options,
|
|
261
|
+
true,
|
|
262
|
+
undefined,
|
|
263
|
+
learnMore(writer),
|
|
264
|
+
);
|
|
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
|
+
out += sectionOutput(
|
|
276
|
+
writer,
|
|
277
|
+
writer.text(Diagnostics.BUILD_OPTIONS),
|
|
278
|
+
optionsForBuild.filter((option) => option !== buildOption),
|
|
279
|
+
false,
|
|
280
|
+
buildModeIntroduction(writer),
|
|
281
|
+
undefined,
|
|
282
|
+
);
|
|
283
|
+
writer.sys.write(out);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/** A section heading and its options, grouped by category when `byCategory` is set. */
|
|
287
|
+
function sectionOutput(
|
|
288
|
+
writer: HelpWriter,
|
|
289
|
+
name: string,
|
|
290
|
+
options: readonly OptionDeclaration[],
|
|
291
|
+
byCategory: boolean,
|
|
292
|
+
before: string | undefined,
|
|
293
|
+
after: string | undefined,
|
|
294
|
+
): string {
|
|
295
|
+
let out = writer.colors.bold(name) + '\n\n';
|
|
296
|
+
if (before !== undefined) out += before + '\n\n';
|
|
297
|
+
if (!byCategory) {
|
|
298
|
+
out += groupOutput(writer, options);
|
|
299
|
+
} else {
|
|
300
|
+
const categories = new Map<string, OptionDeclaration[]>();
|
|
301
|
+
for (const option of options) {
|
|
302
|
+
if (option.category === undefined) continue;
|
|
303
|
+
const category = writer.text(option.category);
|
|
304
|
+
const group = categories.get(category);
|
|
305
|
+
if (group === undefined) categories.set(category, [option]);
|
|
306
|
+
else group.push(option);
|
|
307
|
+
}
|
|
308
|
+
for (const [category, group] of categories) out += '### ' + category + '\n\n' + groupOutput(writer, group);
|
|
309
|
+
}
|
|
310
|
+
if (after !== undefined) out += after + '\n\n';
|
|
311
|
+
return out;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
function displayName(option: OptionDeclaration): string {
|
|
315
|
+
return '--' + option.name + (option.shortName !== undefined ? ', -' + option.shortName : '');
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function groupOutput(writer: HelpWriter, options: readonly OptionDeclaration[]): string {
|
|
319
|
+
let maxLength = 0;
|
|
320
|
+
for (const option of options) maxLength = Math.max(maxLength, displayName(option).length);
|
|
321
|
+
// Names are right-aligned two spaces from the margin; descriptions start two spaces after them.
|
|
322
|
+
const nameEnd = maxLength + 2;
|
|
323
|
+
const descriptionStart = nameEnd + 2;
|
|
324
|
+
let out = '';
|
|
325
|
+
for (const option of options) out += optionOutput(writer, option, nameEnd, descriptionStart);
|
|
326
|
+
// Always end with a blank line.
|
|
327
|
+
return out.endsWith('\n\n') ? out : out + '\n';
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
interface ValueCandidates {
|
|
331
|
+
/** `type:`, `one of:` or `one or more:`. */
|
|
332
|
+
readonly label: string;
|
|
333
|
+
readonly values: string;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function optionOutput(
|
|
337
|
+
writer: HelpWriter,
|
|
338
|
+
option: OptionDeclaration,
|
|
339
|
+
nameEnd: number,
|
|
340
|
+
descriptionStart: number,
|
|
341
|
+
): string {
|
|
342
|
+
const colors = writer.colors;
|
|
343
|
+
const name = displayName(option);
|
|
344
|
+
const candidates = valueCandidates(writer, option);
|
|
345
|
+
const defaultValue = defaultValueText(writer, option);
|
|
346
|
+
const showDetails = showAdditionalInfo(option, candidates);
|
|
347
|
+
const width = writer.width;
|
|
348
|
+
const description = option.description !== undefined ? writer.text(option.description) : '';
|
|
349
|
+
const defaultLabel = writer.text(Diagnostics.X_default_Colon);
|
|
350
|
+
let out = '';
|
|
351
|
+
|
|
352
|
+
if (width >= 80) {
|
|
353
|
+
out += prettyLines(colors, name, description, nameEnd, descriptionStart, width, true) + '\n';
|
|
354
|
+
if (showDetails) {
|
|
355
|
+
if (candidates !== undefined) {
|
|
356
|
+
out += prettyLines(colors, candidates.label, candidates.values, nameEnd, descriptionStart, width, false) + '\n';
|
|
357
|
+
}
|
|
358
|
+
if (defaultValue !== '') {
|
|
359
|
+
out += prettyLines(colors, defaultLabel, defaultValue, nameEnd, descriptionStart, width, false) + '\n';
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return out + '\n';
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
out += colors.blue(name) + '\n' + description + '\n';
|
|
366
|
+
if (showDetails) {
|
|
367
|
+
if (candidates !== undefined) out += candidates.label + ' ' + candidates.values;
|
|
368
|
+
if (defaultValue !== '') {
|
|
369
|
+
if (candidates !== undefined) out += '\n';
|
|
370
|
+
out += defaultLabel + ' ' + defaultValue;
|
|
371
|
+
}
|
|
372
|
+
out += '\n';
|
|
373
|
+
}
|
|
374
|
+
return out + '\n';
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/** `left` right-aligned in a column, then `right` wrapped at the terminal width, measured in UTF-8 bytes. */
|
|
378
|
+
function prettyLines(
|
|
379
|
+
colors: Colors,
|
|
380
|
+
left: string,
|
|
381
|
+
right: string,
|
|
382
|
+
nameEnd: number,
|
|
383
|
+
descriptionStart: number,
|
|
384
|
+
width: number,
|
|
385
|
+
colorLeft: boolean,
|
|
386
|
+
): string {
|
|
387
|
+
const lineLength = width - descriptionStart;
|
|
388
|
+
let out = '';
|
|
389
|
+
let start = 0;
|
|
390
|
+
while (start < right.length) {
|
|
391
|
+
let lineStart: string;
|
|
392
|
+
if (start === 0) {
|
|
393
|
+
lineStart = padEnd(padStart(left, nameEnd), descriptionStart);
|
|
394
|
+
if (colorLeft) lineStart = colors.blue(lineStart);
|
|
395
|
+
} else {
|
|
396
|
+
lineStart = ' '.repeat(descriptionStart);
|
|
397
|
+
}
|
|
398
|
+
const end = utf8PieceEnd(right, start, lineLength);
|
|
399
|
+
out += lineStart + right.slice(start, end) + '\n';
|
|
400
|
+
start = end;
|
|
401
|
+
}
|
|
402
|
+
return out;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
function showAdditionalInfo(option: OptionDeclaration, candidates: ValueCandidates | undefined): boolean {
|
|
406
|
+
if (option.category === Diagnostics.Command_line_Options) return false;
|
|
407
|
+
return !(
|
|
408
|
+
candidates !== undefined &&
|
|
409
|
+
candidates.values === 'string' &&
|
|
410
|
+
option.defaultValueDescription === undefined &&
|
|
411
|
+
option.defaultValueMessage === undefined
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
function valueCandidates(writer: HelpWriter, option: OptionDeclaration): ValueCandidates | undefined {
|
|
416
|
+
switch (option.kind) {
|
|
417
|
+
case 'object':
|
|
418
|
+
return undefined;
|
|
419
|
+
case 'listOrElement':
|
|
420
|
+
throw new Error('listOrElement options have no value candidates.');
|
|
421
|
+
case 'string':
|
|
422
|
+
case 'number':
|
|
423
|
+
case 'boolean':
|
|
424
|
+
return { label: writer.text(Diagnostics.X_type_Colon), values: possibleValues(option) };
|
|
425
|
+
case 'list':
|
|
426
|
+
return { label: writer.text(Diagnostics.X_one_or_more_Colon), values: possibleValues(option) };
|
|
427
|
+
case 'enum':
|
|
428
|
+
return { label: writer.text(Diagnostics.X_one_of_Colon), values: possibleValues(option) };
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
function possibleValues(option: OptionDeclaration): string {
|
|
433
|
+
switch (option.kind) {
|
|
434
|
+
case 'string':
|
|
435
|
+
case 'number':
|
|
436
|
+
case 'boolean':
|
|
437
|
+
return option.kind;
|
|
438
|
+
case 'list':
|
|
439
|
+
case 'listOrElement':
|
|
440
|
+
return option.element !== undefined ? possibleValues(option.element) : '';
|
|
441
|
+
case 'object':
|
|
442
|
+
return '';
|
|
443
|
+
case 'enum': {
|
|
444
|
+
// Synonyms share a value: `es6/es2015`.
|
|
445
|
+
const synonyms = new Map<string, string[]>();
|
|
446
|
+
if (option.values !== undefined) {
|
|
447
|
+
for (const [name, value] of option.values) {
|
|
448
|
+
if (option.deprecatedValues?.has(name) === true) continue;
|
|
449
|
+
const key = typeof value === 'number' ? String(value) : value;
|
|
450
|
+
const names = synonyms.get(key);
|
|
451
|
+
if (names === undefined) synonyms.set(key, [name]);
|
|
452
|
+
else names.push(name);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
const groups: string[] = [];
|
|
456
|
+
for (const names of synonyms.values()) groups.push(names.join('/'));
|
|
457
|
+
return groups.join(', ');
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
function defaultValueText(writer: HelpWriter, option: OptionDeclaration): string {
|
|
463
|
+
if (option.defaultValueMessage !== undefined) return writer.text(option.defaultValueMessage);
|
|
464
|
+
const value = option.defaultValueDescription;
|
|
465
|
+
if (value === undefined) return 'undefined';
|
|
466
|
+
if (typeof value === 'boolean') return value ? 'true' : 'false';
|
|
467
|
+
if (typeof value === 'string') return value;
|
|
468
|
+
const enumOption = option.kind === 'list' ? option.element : option;
|
|
469
|
+
if (enumOption?.kind !== 'enum' || enumOption.values === undefined) return String(value);
|
|
470
|
+
const names: string[] = [];
|
|
471
|
+
for (const [name, enumValue] of enumOption.values) if (sameEnumValue(enumValue, value)) names.push(name);
|
|
472
|
+
return names.join('/');
|
|
473
|
+
}
|