tsc-ts 0.0.4 → 0.0.6
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 +34 -2
- 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 +2351 -0
- package/dist/api/compiler/ast.js +11212 -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 +1241 -0
- package/dist/api/compiler/binder.d.ts +33 -0
- package/dist/api/compiler/binder.js +2359 -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 +1641 -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 +357 -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 +788 -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 +314 -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 +291 -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 +580 -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 +2587 -0
- package/dist/api/compiler/checker-heritage.d.ts +28 -0
- package/dist/api/compiler/checker-heritage.js +901 -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 +442 -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 +200 -0
- package/dist/api/compiler/checker-members.js +2148 -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 +483 -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 +271 -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 +789 -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 +51 -0
- package/dist/api/compiler/checker-symbol-types.js +955 -0
- package/dist/api/compiler/checker-symbols.d.ts +181 -0
- package/dist/api/compiler/checker-symbols.js +1784 -0
- package/dist/api/compiler/checker-type-factory.d.ts +142 -0
- package/dist/api/compiler/checker-type-factory.js +2542 -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 +1093 -0
- package/dist/api/compiler/checker-types.js +1874 -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 +512 -0
- package/dist/api/compiler/checker.js +932 -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 +161 -0
- package/dist/api/compiler/diagnostics.js +784 -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 +144 -0
- package/dist/api/compiler/file-include.js +599 -0
- package/dist/api/compiler/file-loader.d.ts +290 -0
- package/dist/api/compiler/file-loader.js +1323 -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 +835 -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 +105 -0
- package/dist/api/compiler/link-tables.js +319 -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 +745 -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 +221 -0
- package/dist/api/compiler/parallel-parse.js +541 -0
- package/dist/api/compiler/parser.d.ts +604 -0
- package/dist/api/compiler/parser.js +6426 -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 +157 -0
- package/dist/api/compiler/printer/emit-context.js +582 -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 +529 -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 +1019 -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 +991 -0
- package/dist/api/compiler/symbol.d.ts +282 -0
- package/dist/api/compiler/symbol.js +339 -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 +677 -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 +539 -0
- package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
- package/dist/api/compiler/transformers/declarations-pseudo.js +799 -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 +198 -0
- package/dist/api/compiler/transformers/declarations.d.ts +175 -0
- package/dist/api/compiler/transformers/declarations.js +2381 -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 +129 -0
- package/dist/api/compiler/transformers/reference-resolver.js +1157 -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 +10 -0
- package/dist/api/compiler/transformers/subtree-facts.js +205 -0
- package/dist/api/compiler/transformers/syntax-facts.d.ts +52 -0
- package/dist/api/compiler/transformers/syntax-facts.js +258 -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 +3 -2
- package/dist/api/library/ast.generated.d.ts +127 -139
- package/dist/api/library/checker.d.ts +51 -0
- package/dist/api/library/checker.js +318 -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/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 +5 -1
- package/dist/api/library/index.js +4 -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/types.d.ts +14 -1
- package/package.json +12 -8
- package/src/compiler/ast-utilities.ts +548 -0
- package/src/compiler/ast.ts +12870 -0
- package/src/compiler/astnav.ts +799 -0
- package/src/compiler/binder-utilities.ts +1392 -0
- package/src/compiler/binder.ts +2707 -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 +1201 -0
- package/src/compiler/checker-declared-types.ts +919 -0
- package/src/compiler/checker-decorators.ts +694 -0
- package/src/compiler/checker-deprecation.ts +355 -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 +3596 -0
- package/src/compiler/checker-heritage.ts +1240 -0
- package/src/compiler/checker-inference.ts +2584 -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 +1928 -0
- package/src/compiler/checker-literals.ts +61 -0
- package/src/compiler/checker-members.ts +2480 -0
- package/src/compiler/checker-modules.ts +2896 -0
- package/src/compiler/checker-narrowing.ts +3230 -0
- package/src/compiler/checker-object-literals.ts +591 -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 +1187 -0
- package/src/compiler/checker-symbols.ts +2157 -0
- package/src/compiler/checker-type-factory.ts +2616 -0
- package/src/compiler/checker-type-nodes.ts +1033 -0
- package/src/compiler/checker-type-operators.ts +2510 -0
- package/src/compiler/checker-types.ts +2520 -0
- package/src/compiler/checker-unused.ts +642 -0
- package/src/compiler/checker-utilities.ts +161 -0
- package/src/compiler/checker.ts +1138 -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 +858 -0
- package/src/compiler/emitter.ts +434 -0
- package/src/compiler/encoder.ts +1945 -0
- package/src/compiler/file-include.ts +741 -0
- package/src/compiler/file-loader.ts +1597 -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 +2818 -0
- package/src/compiler/init.ts +141 -0
- package/src/compiler/instantiation.ts +938 -0
- package/src/compiler/jsdoc.ts +1386 -0
- package/src/compiler/link-tables.ts +343 -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 +1071 -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 +3433 -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 +1954 -0
- package/src/compiler/parallel-parse.ts +595 -0
- package/src/compiler/parse-thread.ts +136 -0
- package/src/compiler/parser.ts +7766 -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 +684 -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 +594 -0
- package/src/compiler/program-utilities.ts +435 -0
- package/src/compiler/program.ts +1426 -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 +1166 -0
- package/src/compiler/symbol.ts +557 -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 +833 -0
- package/src/compiler/transformers/declarations-pseudo.ts +969 -0
- package/src/compiler/transformers/declarations-resolver.ts +249 -0
- package/src/compiler/transformers/declarations-syntactic.ts +1867 -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 +1213 -0
- package/src/compiler/transformers/runtime-syntax.ts +942 -0
- package/src/compiler/transformers/subtree-facts.ts +253 -0
- package/src/compiler/transformers/syntax-facts.ts +358 -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 +1422 -0
- package/src/compiler/tsc-cli.ts +669 -0
- package/src/compiler/tsc-compile.ts +446 -0
- package/src/compiler/tsc-watch.ts +922 -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 +141 -167
- package/src/library/ast.ts +4 -1
- package/src/library/checker.ts +384 -0
- package/src/library/diagnostics.ts +72 -0
- package/src/library/disk.ts +73 -0
- package/src/library/errors.ts +26 -0
- package/src/library/host.ts +63 -0
- package/src/library/index.ts +21 -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/types.ts +14 -1
|
@@ -0,0 +1,854 @@
|
|
|
1
|
+
// Naming symbols in built nodes: the chain of symbols reaching a symbol from the enclosing
|
|
2
|
+
// declaration, written as an entity name, `import("…")` type, indexed access or expression.
|
|
3
|
+
import { ComputedPropertyName, ElementAccessExpression, ExpressionWithTypeArguments, ImportAttribute, ImportAttributes, ImportTypeNode, IndexedAccessTypeNode, LiteralTypeNode, ParenthesizedTypeNode, PrefixUnaryExpression, PropertyAccessExpression, QualifiedName, SourceFile, StringLiteral, TypeQueryNode, TypeReferenceNode, getArguments, getExpression, getInitializer, getModuleSpecifier, getName, getSymbol, getText, } from './ast.js';
|
|
4
|
+
import { declarationNameToString, getDeclarationOfKind, getNameOfDeclaration, getSourceFileOfNode, isModuleAugmentationExternal, } from './binder-utilities.js';
|
|
5
|
+
import { getExternalModuleName, isAmbientModule, isGlobalScopeAugmentation, isRequireCall } from './ast-utilities.js';
|
|
6
|
+
import { getSymbolAtLocation } from './checker-services.js';
|
|
7
|
+
import { checkExpression } from './checker-expressions.js';
|
|
8
|
+
import { getExportsOfSymbol, getMembersOfSymbol, isAmbientModuleSymbolName, resolveAlias } from './checker-symbols.js';
|
|
9
|
+
import { compareSymbols } from './checker-type-factory.js';
|
|
10
|
+
import { isLateBoundName } from './checker-utilities.js';
|
|
11
|
+
import { isExternalModuleNameRelative, pathIsRelative } from './path.js';
|
|
12
|
+
import { ModuleSpecifierHost, ModuleSpecifierPreferences, countPathComponents, getModuleSpecifiersForFile, } from './module-specifiers.js';
|
|
13
|
+
import { ModuleKind, ModuleResolutionKind, getModuleResolutionKind } from './options.js';
|
|
14
|
+
import { isExternalModuleAugmentation } from './transformers/declarations-syntactic.js';
|
|
15
|
+
import { isIdentifierText } from './scanner.js';
|
|
16
|
+
import { getAccessibleSymbolChain, getAliasForSymbolInContainer, getContainersOfSymbol, getFileSymbolIfFileSymbolExportEqualsContainer, getQualifiedLeftMeaning, getSymbolIfSameReference, hasNonGlobalAugmentationExternalModuleDeclaration, needsQualification, } from './symbol-accessibility.js';
|
|
17
|
+
import { classifyPropertyName, isNumericLiteralName } from './node-builder.js';
|
|
18
|
+
import { declarationCount, escapeInternalSymbolName, getDeclarations, getSymbolId, } from './symbol.js';
|
|
19
|
+
// ---- Symbol chains
|
|
20
|
+
/** The chain of symbols naming `symbol`, reported to the tracker. */
|
|
21
|
+
export function lookupSymbolChain(b, symbol, meaning, yieldModuleSymbol) {
|
|
22
|
+
b.trackSymbol(symbol, b.enclosingDeclaration, meaning);
|
|
23
|
+
// Qualified only with somewhere to qualify from, and never for type parameters.
|
|
24
|
+
if ((symbol.flags & 262144 /* SymbolFlags.TypeParameter */) === 0 &&
|
|
25
|
+
(b.enclosingDeclaration !== undefined || (b.flags & 64 /* NodeBuilderFlags.UseFullyQualifiedType */) !== 0) &&
|
|
26
|
+
(b.internalFlags & 4 /* NodeBuilderInternalFlags.DoNotIncludeSymbolChain */) === 0)
|
|
27
|
+
return getSymbolChain(b, symbol, meaning, true, yieldModuleSymbol);
|
|
28
|
+
return [symbol];
|
|
29
|
+
}
|
|
30
|
+
/** `endOfChain` is false for parents, which may be omitted. */
|
|
31
|
+
function getSymbolChain(b, symbol, meaning, endOfChain, yieldModuleSymbol) {
|
|
32
|
+
const c = b.c;
|
|
33
|
+
let chain = getAccessibleSymbolChain(c, symbol, b.enclosingDeclaration, meaning, (b.flags & 128 /* NodeBuilderFlags.UseOnlyExternalAliasing */) !== 0);
|
|
34
|
+
const qualifierMeaning = chain.length > 1 ? getQualifiedLeftMeaning(meaning) : meaning;
|
|
35
|
+
if (chain.length === 0 || needsQualification(c, chain[0], b.enclosingDeclaration, qualifierMeaning)) {
|
|
36
|
+
// Go up and add the parent.
|
|
37
|
+
const root = chain.length > 0 ? chain[0] : symbol;
|
|
38
|
+
const parents = getContainersOfSymbol(c, root, b.enclosingDeclaration, meaning);
|
|
39
|
+
if (parents.length > 0) {
|
|
40
|
+
const specifiers = [];
|
|
41
|
+
const order = [];
|
|
42
|
+
for (const p of parents) {
|
|
43
|
+
order.push(specifiers.length);
|
|
44
|
+
specifiers.push(hasNonGlobalAugmentationExternalModuleDeclaration(p)
|
|
45
|
+
? getSpecifierForModuleSymbol(b, p, ModuleKind.None)
|
|
46
|
+
: '');
|
|
47
|
+
}
|
|
48
|
+
order.sort((x, y) => compareByBestName(b, parents[x], specifiers[x], parents[y], specifiers[y]) || x - y);
|
|
49
|
+
for (const index of order) {
|
|
50
|
+
const parent = parents[index];
|
|
51
|
+
const parentChain = getSymbolChain(b, parent, getQualifiedLeftMeaning(meaning), false, yieldModuleSymbol);
|
|
52
|
+
if (parentChain === undefined || parentChain.length === 0)
|
|
53
|
+
continue;
|
|
54
|
+
const exportEquals = parent.exports?.get("export=" /* InternalSymbolName.ExportEquals */);
|
|
55
|
+
if (exportEquals !== undefined && getSymbolIfSameReference(c, exportEquals, symbol) !== undefined) {
|
|
56
|
+
// The parent's `export =` is the symbol itself: no alias to look up.
|
|
57
|
+
chain = parentChain;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
const next = chain.length > 0 ? chain : [getAliasForSymbolInContainer(c, parent, symbol) ?? symbol];
|
|
61
|
+
chain = parentChain.concat(next);
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (chain.length > 0)
|
|
67
|
+
return chain;
|
|
68
|
+
// The end of a chain is always written; an anonymous type parent never is.
|
|
69
|
+
if (endOfChain || (symbol.flags & (2048 /* SymbolFlags.TypeLiteral */ | 4096 /* SymbolFlags.ObjectLiteral */)) === 0) {
|
|
70
|
+
// An external module parent isn't written: `x` rather than `"foo/bar".x`.
|
|
71
|
+
if (!endOfChain && !yieldModuleSymbol && hasNonGlobalAugmentationExternalModuleDeclaration(symbol))
|
|
72
|
+
return undefined;
|
|
73
|
+
return [symbol];
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
function compareByBestName(b, a, specifierA, other, specifierB) {
|
|
78
|
+
if (specifierA.length > 0 && specifierB.length > 0) {
|
|
79
|
+
const isBRelative = pathIsRelative(specifierB);
|
|
80
|
+
if (pathIsRelative(specifierA) === isBRelative)
|
|
81
|
+
return countPathComponents(specifierA) - countPathComponents(specifierB);
|
|
82
|
+
return isBRelative ? -1 : 1;
|
|
83
|
+
}
|
|
84
|
+
return compareSymbols(b.c, a, other);
|
|
85
|
+
}
|
|
86
|
+
// ---- Type nodes
|
|
87
|
+
/** A type node naming `symbol` with `mask`: a type reference, `typeof`, indexed access or `import("…")`. */
|
|
88
|
+
export function symbolToTypeNode(b, symbol, mask, typeArguments) {
|
|
89
|
+
// Outside the current scope, the module isn't needed.
|
|
90
|
+
const chain = lookupSymbolChain(b, symbol, mask, (b.flags & 16384 /* NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope */) === 0);
|
|
91
|
+
if (chain.length === 0)
|
|
92
|
+
return undefined;
|
|
93
|
+
const isTypeOf = mask === 111551 /* SymbolFlags.Value */;
|
|
94
|
+
if (hasNonGlobalAugmentationExternalModuleDeclaration(chain[0])) {
|
|
95
|
+
// A module root needs an `import` type.
|
|
96
|
+
const nonRootParts = chain.length > 1 ? createAccessFromSymbolChain(b, chain, chain.length - 1, 1, typeArguments) : undefined;
|
|
97
|
+
const typeParameterNodes = typeArguments ?? lookupTypeParameterNodes(b, chain, 0);
|
|
98
|
+
let specifier = '';
|
|
99
|
+
let attributes = undefined;
|
|
100
|
+
const c = b.c;
|
|
101
|
+
const resolution = getModuleResolutionKind(c.compilerOptions);
|
|
102
|
+
const nodeNext = resolution === ModuleResolutionKind.Node16 || resolution === ModuleResolutionKind.NodeNext;
|
|
103
|
+
const contextFile = b.enclosingDeclaration === undefined
|
|
104
|
+
? undefined
|
|
105
|
+
: getSourceFileOfNode(b.context.mostOriginal(b.enclosingDeclaration));
|
|
106
|
+
if (nodeNext) {
|
|
107
|
+
// An `import` type of an ES module from a file of another format resolves only in ESM mode.
|
|
108
|
+
const targetFile = getSourceFileOfModule(chain[0]);
|
|
109
|
+
if (targetFile !== undefined && contextFile !== undefined) {
|
|
110
|
+
const targetFormat = c.host.getEmitModuleFormatOfFile(targetFile);
|
|
111
|
+
if (targetFormat === ModuleKind.ESNext && targetFormat !== c.host.getEmitModuleFormatOfFile(contextFile)) {
|
|
112
|
+
specifier = getSpecifierForModuleSymbol(b, chain[0], ModuleKind.ESNext);
|
|
113
|
+
attributes = resolutionModeAttributes(b, 'import');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (specifier === '')
|
|
118
|
+
specifier = getSpecifierForModuleSymbol(b, chain[0], ModuleKind.None);
|
|
119
|
+
if ((b.flags & 67108864 /* NodeBuilderFlags.AllowNodeModulesRelativePaths */) === 0 && specifier.includes('/node_modules/')) {
|
|
120
|
+
const oldSpecifier = specifier;
|
|
121
|
+
if (nodeNext && contextFile !== undefined) {
|
|
122
|
+
// The other mode may reach the module portably.
|
|
123
|
+
const swappedMode = c.host.getEmitModuleFormatOfFile(contextFile) === ModuleKind.ESNext ? ModuleKind.CommonJS : ModuleKind.ESNext;
|
|
124
|
+
specifier = getSpecifierForModuleSymbol(b, chain[0], swappedMode);
|
|
125
|
+
if (specifier.includes('/node_modules/'))
|
|
126
|
+
specifier = oldSpecifier;
|
|
127
|
+
else
|
|
128
|
+
attributes = resolutionModeAttributes(b, swappedMode === ModuleKind.ESNext ? 'import' : 'require');
|
|
129
|
+
}
|
|
130
|
+
if (attributes === undefined) {
|
|
131
|
+
// A reference into `node_modules` is likely to break when published.
|
|
132
|
+
b.encounteredError = true;
|
|
133
|
+
b.tracker.reportLikelyUnsafeImportRequiredError(oldSpecifier, symbol.name);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const literal = b.created(new LiteralTypeNode(b.stringLiteral(specifier, false)));
|
|
137
|
+
b.approximateLength += specifier.length + 10;
|
|
138
|
+
if (nonRootParts === undefined || isEntityName(nonRootParts))
|
|
139
|
+
return b.created(new ImportTypeNode(isTypeOf, literal, attributes, nonRootParts, typeParameterNodes));
|
|
140
|
+
const splitNode = getTopmostIndexedAccessType(nonRootParts);
|
|
141
|
+
const qualifier = splitNode.objectType.typeName;
|
|
142
|
+
return b.created(new IndexedAccessTypeNode(b.created(new ImportTypeNode(isTypeOf, literal, attributes, qualifier, typeParameterNodes)), splitNode.indexType));
|
|
143
|
+
}
|
|
144
|
+
const entityName = createAccessFromSymbolChain(b, chain, chain.length - 1, 0, typeArguments);
|
|
145
|
+
// Indexed accesses can't be `typeof`.
|
|
146
|
+
if (entityName instanceof IndexedAccessTypeNode)
|
|
147
|
+
return entityName;
|
|
148
|
+
if (isEntityName(entityName))
|
|
149
|
+
return isTypeOf
|
|
150
|
+
? b.created(new TypeQueryNode(entityName, undefined))
|
|
151
|
+
: b.created(new TypeReferenceNode(entityName, typeArguments));
|
|
152
|
+
if (isTypeOf && entityName instanceof ExpressionWithTypeArguments)
|
|
153
|
+
return b.created(new TypeQueryNode(entityName.expression.deepClone(), entityName.typeArguments));
|
|
154
|
+
return entityName;
|
|
155
|
+
}
|
|
156
|
+
function isEntityName(node) {
|
|
157
|
+
return node.kind === 79 /* SyntaxKind.Identifier */ || node.kind === 167 /* SyntaxKind.QualifiedName */;
|
|
158
|
+
}
|
|
159
|
+
/** `with { "resolution-mode": "import" }` or `"require"`. */
|
|
160
|
+
function resolutionModeAttributes(b, mode) {
|
|
161
|
+
const attribute = b.created(new ImportAttribute(b.stringLiteral('resolution-mode', false), b.stringLiteral(mode, false)));
|
|
162
|
+
return b.created(new ImportAttributes(117 /* SyntaxKind.WithKeyword */, b.list([attribute]), false));
|
|
163
|
+
}
|
|
164
|
+
function getTopmostIndexedAccessType(node) {
|
|
165
|
+
const objectType = node.objectType;
|
|
166
|
+
return objectType instanceof IndexedAccessTypeNode ? getTopmostIndexedAccessType(objectType) : node;
|
|
167
|
+
}
|
|
168
|
+
function createAccessFromSymbolChain(b, chain, index, stopper, overrideTypeArguments) {
|
|
169
|
+
const c = b.c;
|
|
170
|
+
const typeParameterNodes = index !== chain.length - 1 ? lookupTypeParameterNodes(b, chain, index) : overrideTypeArguments;
|
|
171
|
+
const symbol = chain[index];
|
|
172
|
+
const parent = index > 0 ? chain[index - 1] : undefined;
|
|
173
|
+
let symbolName = '';
|
|
174
|
+
if (index === 0) {
|
|
175
|
+
b.flags |= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
|
|
176
|
+
symbolName = getNameOfSymbolAsWritten(b, symbol);
|
|
177
|
+
b.approximateLength += symbolName.length + 1;
|
|
178
|
+
b.flags ^= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
|
|
179
|
+
}
|
|
180
|
+
else if (parent !== undefined) {
|
|
181
|
+
// A reference to the symbol within its parent, for export aliases.
|
|
182
|
+
const exports = getExportsOfSymbol(c, parent);
|
|
183
|
+
const direct = exports.get(symbol.name);
|
|
184
|
+
if (symbol.name !== "export=" /* InternalSymbolName.ExportEquals */ &&
|
|
185
|
+
!isLateBoundName(symbol.name) &&
|
|
186
|
+
direct !== undefined &&
|
|
187
|
+
getSymbolIfSameReference(c, direct, symbol) !== undefined)
|
|
188
|
+
symbolName = symbol.name;
|
|
189
|
+
else {
|
|
190
|
+
const candidates = [];
|
|
191
|
+
const names = [];
|
|
192
|
+
for (const [name, exported] of exports)
|
|
193
|
+
if (getSymbolIfSameReference(c, exported, symbol) !== undefined &&
|
|
194
|
+
!isLateBoundName(name) &&
|
|
195
|
+
name !== "export=" /* InternalSymbolName.ExportEquals */) {
|
|
196
|
+
candidates.push(exported);
|
|
197
|
+
names.push(name);
|
|
198
|
+
}
|
|
199
|
+
if (candidates.length > 0) {
|
|
200
|
+
let best = 0;
|
|
201
|
+
for (let i = 1; i < candidates.length; i++)
|
|
202
|
+
if (compareSymbols(c, candidates[i], candidates[best]) < 0)
|
|
203
|
+
best = i;
|
|
204
|
+
symbolName = names[best];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (symbolName.length === 0) {
|
|
209
|
+
let name = undefined;
|
|
210
|
+
for (const d of getDeclarations(symbol)) {
|
|
211
|
+
name = getNameOfDeclaration(d);
|
|
212
|
+
if (name !== undefined)
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
if (name !== undefined && name.kind === 168 /* SyntaxKind.ComputedPropertyName */ && isEntityName(getExpression(name))) {
|
|
216
|
+
const lhs = createAccessFromSymbolChain(b, chain, index - 1, stopper, overrideTypeArguments);
|
|
217
|
+
if (isEntityName(lhs))
|
|
218
|
+
return b.created(new IndexedAccessTypeNode(b.created(new ParenthesizedTypeNode(b.created(new TypeQueryNode(lhs, undefined)))), b.created(new TypeQueryNode(getExpression(name), undefined))));
|
|
219
|
+
return lhs;
|
|
220
|
+
}
|
|
221
|
+
symbolName = getNameOfSymbolAsWritten(b, symbol);
|
|
222
|
+
}
|
|
223
|
+
b.approximateLength += symbolName.length + 1;
|
|
224
|
+
if ((b.flags & 16 /* NodeBuilderFlags.ForbidIndexedAccessSymbolReferences */) === 0 && parent !== undefined) {
|
|
225
|
+
const member = getMembersOfSymbol(c, parent).get(symbol.name);
|
|
226
|
+
if (member !== undefined && getSymbolIfSameReference(c, member, symbol) !== undefined) {
|
|
227
|
+
// An indexed access.
|
|
228
|
+
const lhs = createAccessFromSymbolChain(b, chain, index - 1, stopper, overrideTypeArguments);
|
|
229
|
+
const literal = b.created(new LiteralTypeNode(b.stringLiteral(symbolName, false)));
|
|
230
|
+
if (lhs instanceof IndexedAccessTypeNode)
|
|
231
|
+
return b.created(new IndexedAccessTypeNode(lhs, literal));
|
|
232
|
+
return b.created(new IndexedAccessTypeNode(b.created(new TypeReferenceNode(lhs, typeParameterNodes)), literal));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const identifier = b.identifier(symbolName);
|
|
236
|
+
b.context.addEmitFlags(identifier, 131072 /* EmitFlags.NoAsciiEscaping */);
|
|
237
|
+
if (index > stopper) {
|
|
238
|
+
const lhs = createAccessFromSymbolChain(b, chain, index - 1, stopper, overrideTypeArguments);
|
|
239
|
+
if ((b.flags & 1073741824 /* NodeBuilderFlags.UseInstantiationExpressions */) === 0 ||
|
|
240
|
+
(isEntityName(lhs) && (typeParameterNodes === undefined || typeParameterNodes.nodes.length === 0)))
|
|
241
|
+
return b.created(new QualifiedName(lhs, identifier));
|
|
242
|
+
return createExpressionWithTypeArguments(b, b.created(new PropertyAccessExpression(createAccessExpression(b, lhs), undefined, identifier, 0 /* NodeFlags.None */)), typeParameterNodes);
|
|
243
|
+
}
|
|
244
|
+
return identifier;
|
|
245
|
+
}
|
|
246
|
+
/** `ref`'s names appended to the reference `root`, for an outer type parameter group. */
|
|
247
|
+
export function appendReferenceToType(b, root, ref) {
|
|
248
|
+
if (root instanceof ImportTypeNode)
|
|
249
|
+
return appendReferenceToImportType(b, root, ref);
|
|
250
|
+
if (root instanceof TypeReferenceNode)
|
|
251
|
+
return appendReferenceToTypeReference(b, root, ref);
|
|
252
|
+
let expr = createAccessExpression(b, root);
|
|
253
|
+
for (const id of getAccessStack(ref))
|
|
254
|
+
expr = b.created(new PropertyAccessExpression(expr, undefined, id, 0 /* NodeFlags.None */));
|
|
255
|
+
return expr;
|
|
256
|
+
}
|
|
257
|
+
function appendReferenceToImportType(b, root, ref) {
|
|
258
|
+
// Type arguments of the root are dropped, as tsgo does.
|
|
259
|
+
let qualifier = root.qualifier;
|
|
260
|
+
for (const id of getAccessStack(ref))
|
|
261
|
+
qualifier = qualifier === undefined ? id : b.created(new QualifiedName(qualifier, id));
|
|
262
|
+
return b.factory.updateImportTypeNode(root, root.isTypeOf, root.argument, root.attributes, qualifier, referenceTypeArguments(ref));
|
|
263
|
+
}
|
|
264
|
+
function appendReferenceToTypeReference(b, root, ref) {
|
|
265
|
+
if ((b.flags & 1073741824 /* NodeBuilderFlags.UseInstantiationExpressions */) !== 0 &&
|
|
266
|
+
root.typeArguments !== undefined &&
|
|
267
|
+
root.typeArguments.nodes.length !== 0) {
|
|
268
|
+
let expr = createExpressionWithTypeArguments(b, createAccessExpression(b, root.typeName), root.typeArguments);
|
|
269
|
+
for (const id of getAccessStack(ref))
|
|
270
|
+
expr = b.created(new PropertyAccessExpression(expr, undefined, id, 0 /* NodeFlags.None */));
|
|
271
|
+
return expr;
|
|
272
|
+
}
|
|
273
|
+
let typeName = root.typeName;
|
|
274
|
+
for (const id of getAccessStack(ref))
|
|
275
|
+
typeName = b.created(new QualifiedName(typeName, id));
|
|
276
|
+
return b.factory.updateTypeReferenceNode(root, typeName, referenceTypeArguments(ref));
|
|
277
|
+
}
|
|
278
|
+
function referenceTypeArguments(ref) {
|
|
279
|
+
return ref instanceof TypeReferenceNode ? ref.typeArguments : undefined;
|
|
280
|
+
}
|
|
281
|
+
function getAccessStack(ref) {
|
|
282
|
+
let state = ref.typeName;
|
|
283
|
+
const ids = [];
|
|
284
|
+
while (state instanceof QualifiedName) {
|
|
285
|
+
ids.unshift(state.right);
|
|
286
|
+
state = state.left;
|
|
287
|
+
}
|
|
288
|
+
ids.unshift(state);
|
|
289
|
+
return ids;
|
|
290
|
+
}
|
|
291
|
+
function createAccessExpression(b, node) {
|
|
292
|
+
if (node instanceof QualifiedName)
|
|
293
|
+
return b.created(new PropertyAccessExpression(createAccessExpression(b, node.left), undefined, node.right.deepClone(), 0 /* NodeFlags.None */));
|
|
294
|
+
return node.deepClone();
|
|
295
|
+
}
|
|
296
|
+
function createExpressionWithTypeArguments(b, expr, typeArguments) {
|
|
297
|
+
if (typeArguments === undefined || typeArguments.nodes.length === 0)
|
|
298
|
+
return expr;
|
|
299
|
+
return b.created(new ExpressionWithTypeArguments(expr, typeArguments));
|
|
300
|
+
}
|
|
301
|
+
// ---- Entity names and expressions
|
|
302
|
+
/** An entity name for `symbol`; with `expectsIdentifier`, a qualified name is an error unless allowed. */
|
|
303
|
+
export function symbolToName(b, symbol, meaning, expectsIdentifier) {
|
|
304
|
+
const chain = lookupSymbolChain(b, symbol, meaning, false);
|
|
305
|
+
if (expectsIdentifier &&
|
|
306
|
+
chain.length !== 1 &&
|
|
307
|
+
!b.encounteredError &&
|
|
308
|
+
(b.flags & 65536 /* NodeBuilderFlags.AllowQualifiedNameInPlaceOfIdentifier */) !== 0)
|
|
309
|
+
b.encounteredError = true;
|
|
310
|
+
return createEntityNameFromSymbolChain(b, chain, chain.length - 1);
|
|
311
|
+
}
|
|
312
|
+
function createEntityNameFromSymbolChain(b, chain, index) {
|
|
313
|
+
const symbol = chain[index];
|
|
314
|
+
if (index === 0)
|
|
315
|
+
b.flags |= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
|
|
316
|
+
const symbolName = getNameOfSymbolAsWritten(b, symbol);
|
|
317
|
+
if (index === 0)
|
|
318
|
+
b.flags ^= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
|
|
319
|
+
const identifier = b.identifier(symbolName);
|
|
320
|
+
b.context.addEmitFlags(identifier, 131072 /* EmitFlags.NoAsciiEscaping */);
|
|
321
|
+
if (index > 0)
|
|
322
|
+
return b.created(new QualifiedName(createEntityNameFromSymbolChain(b, chain, index - 1), identifier));
|
|
323
|
+
return identifier;
|
|
324
|
+
}
|
|
325
|
+
/** The symbol's name qualified by its parents' names, without looking up a chain. */
|
|
326
|
+
export function symbolToEntityNameNode(b, symbol) {
|
|
327
|
+
const identifier = b.identifier(symbol.name);
|
|
328
|
+
if (symbol.parent !== undefined)
|
|
329
|
+
return b.created(new QualifiedName(symbolToEntityNameNode(b, symbol.parent), identifier));
|
|
330
|
+
return identifier;
|
|
331
|
+
}
|
|
332
|
+
export function symbolToExpression(b, symbol, meaning) {
|
|
333
|
+
const chain = lookupSymbolChain(b, symbol, meaning, false);
|
|
334
|
+
return createExpressionFromSymbolChain(b, chain, chain.length - 1);
|
|
335
|
+
}
|
|
336
|
+
function createExpressionFromSymbolChain(b, chain, index) {
|
|
337
|
+
const typeParameterNodes = lookupExpressionChainTypeArgumentNodes(b, chain, index);
|
|
338
|
+
const symbol = chain[index];
|
|
339
|
+
if (index === 0)
|
|
340
|
+
b.flags |= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
|
|
341
|
+
let symbolName = getNameOfSymbolAsWritten(b, symbol);
|
|
342
|
+
if (index === 0)
|
|
343
|
+
b.flags ^= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
|
|
344
|
+
if (startsWithQuote(symbolName) && hasNonGlobalAugmentationExternalModuleDeclaration(symbol)) {
|
|
345
|
+
const specifier = getSpecifierForModuleSymbol(b, symbol, ModuleKind.None);
|
|
346
|
+
b.approximateLength += 2 + specifier.length;
|
|
347
|
+
return b.stringLiteral(specifier, false);
|
|
348
|
+
}
|
|
349
|
+
if (index === 0 || canUsePropertyAccess(symbolName)) {
|
|
350
|
+
const identifier = b.identifier(symbolName);
|
|
351
|
+
b.context.addEmitFlags(identifier, 131072 /* EmitFlags.NoAsciiEscaping */);
|
|
352
|
+
b.approximateLength += 1 + symbolName.length;
|
|
353
|
+
if (index > 0) {
|
|
354
|
+
const result = b.created(new PropertyAccessExpression(createExpressionFromSymbolChain(b, chain, index - 1), undefined, identifier, 0 /* NodeFlags.None */));
|
|
355
|
+
b.context.addEmitFlags(result, 16384 /* EmitFlags.NoIndentation */);
|
|
356
|
+
return createExpressionWithTypeArguments(b, result, typeParameterNodes);
|
|
357
|
+
}
|
|
358
|
+
return createExpressionWithTypeArguments(b, identifier, typeParameterNodes);
|
|
359
|
+
}
|
|
360
|
+
if (symbolName.startsWith('['))
|
|
361
|
+
symbolName = symbolName.substring(1, symbolName.length - 1);
|
|
362
|
+
let expression = undefined;
|
|
363
|
+
if (startsWithQuote(symbolName) && (symbol.flags & 8 /* SymbolFlags.EnumMember */) === 0) {
|
|
364
|
+
const literalText = unquote(symbolName);
|
|
365
|
+
b.approximateLength += literalText.length + 2;
|
|
366
|
+
expression = b.stringLiteral(literalText, symbolName.charCodeAt(0) === 0x27);
|
|
367
|
+
}
|
|
368
|
+
else if (String(Number(symbolName)) === symbolName) {
|
|
369
|
+
b.approximateLength += symbolName.length;
|
|
370
|
+
expression = b.factory.createNumericLiteral(symbolName);
|
|
371
|
+
}
|
|
372
|
+
if (expression === undefined) {
|
|
373
|
+
b.approximateLength += symbolName.length;
|
|
374
|
+
expression = b.identifier(symbolName);
|
|
375
|
+
b.context.addEmitFlags(expression, 131072 /* EmitFlags.NoAsciiEscaping */);
|
|
376
|
+
}
|
|
377
|
+
b.approximateLength += 2;
|
|
378
|
+
return createExpressionWithTypeArguments(b, b.created(new ElementAccessExpression(createExpressionFromSymbolChain(b, chain, index - 1), undefined, expression, 0 /* NodeFlags.None */)), typeParameterNodes);
|
|
379
|
+
}
|
|
380
|
+
function canUsePropertyAccess(name) {
|
|
381
|
+
if (name.length === 0)
|
|
382
|
+
return false;
|
|
383
|
+
if (name.startsWith('#'))
|
|
384
|
+
return name.length > 1 && isIdentifierText(name.substring(1));
|
|
385
|
+
return isIdentifierText(name);
|
|
386
|
+
}
|
|
387
|
+
function startsWithQuote(s) {
|
|
388
|
+
return s.startsWith("'") || s.startsWith('"');
|
|
389
|
+
}
|
|
390
|
+
function unquote(s) {
|
|
391
|
+
if (s.length >= 2 &&
|
|
392
|
+
(s.charCodeAt(0) === 0x22 || s.charCodeAt(0) === 0x27) &&
|
|
393
|
+
s.charCodeAt(s.length - 1) === s.charCodeAt(0))
|
|
394
|
+
return s.substring(1, s.length - 1);
|
|
395
|
+
return s;
|
|
396
|
+
}
|
|
397
|
+
// ---- Type arguments in qualified names
|
|
398
|
+
function shouldWriteTypeParametersInQualifiedName(b, chain, index) {
|
|
399
|
+
return (b.flags & 512 /* NodeBuilderFlags.WriteTypeParametersInQualifiedName */) !== 0 && index < chain.length - 1;
|
|
400
|
+
}
|
|
401
|
+
function lookupTypeParameterNodes(b, chain, index) {
|
|
402
|
+
const symbolId = getSymbolId(chain[index]);
|
|
403
|
+
const symbolList = b.typeParameterSymbolList ?? new Set();
|
|
404
|
+
if (symbolList.has(symbolId))
|
|
405
|
+
return undefined;
|
|
406
|
+
symbolList.add(symbolId);
|
|
407
|
+
b.typeParameterSymbolList = symbolList;
|
|
408
|
+
if (shouldWriteTypeParametersInQualifiedName(b, chain, index)) {
|
|
409
|
+
const typeArgumentNodes = lookupInstantiatedTypeArgumentNodes(b, chain, index);
|
|
410
|
+
if (typeArgumentNodes !== undefined)
|
|
411
|
+
return typeArgumentNodes;
|
|
412
|
+
const typeParameterNodes = b.typeParametersToTypeParameterDeclarations(chain[index]);
|
|
413
|
+
return typeParameterNodes.length > 0 ? b.list(typeParameterNodes) : undefined;
|
|
414
|
+
}
|
|
415
|
+
return undefined;
|
|
416
|
+
}
|
|
417
|
+
function lookupInstantiatedTypeArgumentNodes(b, chain, index) {
|
|
418
|
+
if (!shouldWriteTypeParametersInQualifiedName(b, chain, index))
|
|
419
|
+
return undefined;
|
|
420
|
+
const symbol = chain[index];
|
|
421
|
+
const nextSymbol = chain[index + 1];
|
|
422
|
+
if ((nextSymbol.checkFlags & 1 /* CheckFlags.Instantiated */) === 0)
|
|
423
|
+
return undefined;
|
|
424
|
+
const target = (symbol.flags & 2097152 /* SymbolFlags.Alias */) !== 0 ? resolveAlias(b.c, symbol) : symbol;
|
|
425
|
+
let params = b.getTypeParametersOfClassOrInterface(target);
|
|
426
|
+
const mapper = b.c.symbolMappers.get(getSymbolId(nextSymbol));
|
|
427
|
+
if (mapper !== undefined) {
|
|
428
|
+
const mapped = [];
|
|
429
|
+
for (const p of params)
|
|
430
|
+
mapped.push(mapper.map(p));
|
|
431
|
+
params = mapped;
|
|
432
|
+
}
|
|
433
|
+
return b.mapToTypeNodes(params, false);
|
|
434
|
+
}
|
|
435
|
+
function lookupExpressionChainTypeArgumentNodes(b, chain, index) {
|
|
436
|
+
if (!shouldWriteTypeParametersInQualifiedName(b, chain, index))
|
|
437
|
+
return undefined;
|
|
438
|
+
const symbolId = getSymbolId(chain[index]);
|
|
439
|
+
const symbolList = b.typeParameterSymbolList ?? new Set();
|
|
440
|
+
if (symbolList.has(symbolId))
|
|
441
|
+
return undefined;
|
|
442
|
+
symbolList.add(symbolId);
|
|
443
|
+
b.typeParameterSymbolList = symbolList;
|
|
444
|
+
const typeArgumentNodes = lookupInstantiatedTypeArgumentNodes(b, chain, index);
|
|
445
|
+
if (typeArgumentNodes !== undefined)
|
|
446
|
+
return typeArgumentNodes;
|
|
447
|
+
const typeParameterNodes = b.typeParametersToTypeParameterDeclarations(chain[index]);
|
|
448
|
+
return typeParameterNodes.length > 0 ? b.list(typeParameterNodes) : undefined;
|
|
449
|
+
}
|
|
450
|
+
// ---- Names as written
|
|
451
|
+
function isDefaultBindingContext(node) {
|
|
452
|
+
return node.kind === 307 /* SyntaxKind.SourceFile */ || isAmbientModule(node);
|
|
453
|
+
}
|
|
454
|
+
function findDefaultBindingContext(node) {
|
|
455
|
+
for (let current = node; current !== undefined; current = current.parent)
|
|
456
|
+
if (isDefaultBindingContext(current))
|
|
457
|
+
return current;
|
|
458
|
+
return undefined;
|
|
459
|
+
}
|
|
460
|
+
function getNameOfSymbolFromNameType(b, symbol) {
|
|
461
|
+
const nameType = b.c.symbolNameTypes.get(getSymbolId(symbol));
|
|
462
|
+
if (nameType === undefined)
|
|
463
|
+
return '';
|
|
464
|
+
if ((nameType.flags & 3072 /* TypeFlags.StringOrNumberLiteral */) !== 0) {
|
|
465
|
+
const literal = nameType;
|
|
466
|
+
const name = (nameType.flags & 1024 /* TypeFlags.StringLiteral */) !== 0 ? literal.stringValue : String(literal.numberValue);
|
|
467
|
+
if (!isIdentifierText(name) && !isNumericLiteralName(name))
|
|
468
|
+
return (nameType.flags & 1024 /* TypeFlags.StringLiteral */) !== 0 ? quoteString(name) : name;
|
|
469
|
+
if (isNumericLiteralName(name) && name.startsWith('-'))
|
|
470
|
+
return '[' + name + ']';
|
|
471
|
+
return name;
|
|
472
|
+
}
|
|
473
|
+
if ((nameType.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0)
|
|
474
|
+
return '[' + getNameOfSymbolAsWritten(b, nameType.symbol) + ']';
|
|
475
|
+
return '';
|
|
476
|
+
}
|
|
477
|
+
/** A JSON-style double quoted string, as tsgo's `valueToString`. */
|
|
478
|
+
function quoteString(s) {
|
|
479
|
+
return JSON.stringify(s);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* A readable name for a symbol, not for the right of a `.`: quoted if from a string literal,
|
|
483
|
+
* and a number as written (`0o11`, not `9`).
|
|
484
|
+
*/
|
|
485
|
+
export function getNameOfSymbolAsWritten(b, symbol) {
|
|
486
|
+
const remapped = b.remappedSymbolReferences.get(getSymbolId(symbol));
|
|
487
|
+
if (remapped !== undefined)
|
|
488
|
+
symbol = remapped;
|
|
489
|
+
if (symbol.name === "default" /* InternalSymbolName.Default */ &&
|
|
490
|
+
(b.flags & 16384 /* NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope */) === 0 &&
|
|
491
|
+
// Not the first part of an entity name, synthesized, or from another binding context.
|
|
492
|
+
((b.flags & 16777216 /* NodeBuilderFlags.InInitialEntityName */) === 0 ||
|
|
493
|
+
declarationCount(symbol) === 0 ||
|
|
494
|
+
(b.enclosingDeclaration !== undefined &&
|
|
495
|
+
findDefaultBindingContext(symbol.declaration) !== findDefaultBindingContext(b.enclosingDeclaration))))
|
|
496
|
+
return 'default';
|
|
497
|
+
if (declarationCount(symbol) > 0) {
|
|
498
|
+
let name = undefined;
|
|
499
|
+
for (const d of getDeclarations(symbol)) {
|
|
500
|
+
name = getNameOfDeclaration(d);
|
|
501
|
+
if (name !== undefined)
|
|
502
|
+
break;
|
|
503
|
+
}
|
|
504
|
+
if (name !== undefined) {
|
|
505
|
+
if (name.kind === 168 /* SyntaxKind.ComputedPropertyName */ && (symbol.checkFlags & 4096 /* CheckFlags.Late */) === 0) {
|
|
506
|
+
const nameType = b.c.symbolNameTypes.get(getSymbolId(symbol));
|
|
507
|
+
if (nameType !== undefined && (nameType.flags & 3072 /* TypeFlags.StringOrNumberLiteral */) !== 0) {
|
|
508
|
+
const result = getNameOfSymbolFromNameType(b, symbol);
|
|
509
|
+
if (result.length > 0)
|
|
510
|
+
return result;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return declarationNameToString(getSourceFileOfNode(name), name);
|
|
514
|
+
}
|
|
515
|
+
const declaration = symbol.declaration;
|
|
516
|
+
const parent = declaration.parent;
|
|
517
|
+
if (parent !== undefined && parent.kind === 261 /* SyntaxKind.VariableDeclaration */) {
|
|
518
|
+
const parentName = getName(parent);
|
|
519
|
+
return declarationNameToString(getSourceFileOfNode(parentName), parentName);
|
|
520
|
+
}
|
|
521
|
+
switch (declaration.kind) {
|
|
522
|
+
case 232 /* SyntaxKind.ClassExpression */:
|
|
523
|
+
case 219 /* SyntaxKind.FunctionExpression */:
|
|
524
|
+
case 220 /* SyntaxKind.ArrowFunction */:
|
|
525
|
+
if (!b.encounteredError && (b.flags & 131072 /* NodeBuilderFlags.AllowAnonymousIdentifier */) === 0)
|
|
526
|
+
b.encounteredError = true;
|
|
527
|
+
return declaration.kind === 232 /* SyntaxKind.ClassExpression */ ? '(Anonymous class)' : '(Anonymous function)';
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
const name = getNameOfSymbolFromNameType(b, symbol);
|
|
531
|
+
if (name.length > 0)
|
|
532
|
+
return name;
|
|
533
|
+
return escapeInternalSymbolName(symbol.name);
|
|
534
|
+
}
|
|
535
|
+
// ---- Property names
|
|
536
|
+
function isStringNamed(b, d) {
|
|
537
|
+
const name = getNameOfDeclaration(d);
|
|
538
|
+
if (name === undefined)
|
|
539
|
+
return false;
|
|
540
|
+
if (name instanceof ComputedPropertyName)
|
|
541
|
+
return (checkExpression(b.c, name.expression).flags & 12583968 /* TypeFlags.StringLike */) !== 0;
|
|
542
|
+
if (name instanceof ElementAccessExpression)
|
|
543
|
+
return (checkExpression(b.c, name.argumentExpression).flags & 12583968 /* TypeFlags.StringLike */) !== 0;
|
|
544
|
+
return name.kind === 10 /* SyntaxKind.StringLiteral */;
|
|
545
|
+
}
|
|
546
|
+
function isSingleQuotedStringNamed(d) {
|
|
547
|
+
const name = getNameOfDeclaration(d);
|
|
548
|
+
return name instanceof StringLiteral && (name.tokenFlags & 65536 /* TokenFlags.SingleQuote */) !== 0;
|
|
549
|
+
}
|
|
550
|
+
/** The name node of a property. */
|
|
551
|
+
export function getPropertyNameNodeForSymbol(b, symbol) {
|
|
552
|
+
// A private name is the declaration's.
|
|
553
|
+
const valueDeclaration = symbol.valueDeclaration;
|
|
554
|
+
if (valueDeclaration !== undefined) {
|
|
555
|
+
const declarationName = getName(valueDeclaration);
|
|
556
|
+
if (declarationName !== undefined && declarationName.kind === 80 /* SyntaxKind.PrivateIdentifier */)
|
|
557
|
+
return b.cloneSynthesized(declarationName);
|
|
558
|
+
}
|
|
559
|
+
const declarations = getDeclarations(symbol);
|
|
560
|
+
let stringNamed = declarations.length !== 0;
|
|
561
|
+
for (const d of declarations)
|
|
562
|
+
if (!isStringNamed(b, d)) {
|
|
563
|
+
stringNamed = false;
|
|
564
|
+
break;
|
|
565
|
+
}
|
|
566
|
+
let singleQuote = declarations.length !== 0;
|
|
567
|
+
for (const d of declarations)
|
|
568
|
+
if (!isSingleQuotedStringNamed(d)) {
|
|
569
|
+
singleQuote = false;
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
const isMethod = (symbol.flags & 8192 /* SymbolFlags.Method */) !== 0;
|
|
573
|
+
const fromNameType = getPropertyNameNodeForSymbolFromNameType(b, symbol, singleQuote, stringNamed, isMethod);
|
|
574
|
+
if (fromNameType !== undefined)
|
|
575
|
+
return fromNameType;
|
|
576
|
+
let name = symbol.name;
|
|
577
|
+
const privateNamePrefix = '#';
|
|
578
|
+
if (name.startsWith(privateNamePrefix)) {
|
|
579
|
+
// Symbol ids are unstable: `#123@#x` becomes `__#private@#x`.
|
|
580
|
+
let rest = name.substring(privateNamePrefix.length);
|
|
581
|
+
let i = 0;
|
|
582
|
+
while (i < rest.length && rest.charCodeAt(i) >= 0x30 && rest.charCodeAt(i) <= 0x39)
|
|
583
|
+
i++;
|
|
584
|
+
rest = rest.substring(i);
|
|
585
|
+
name = '__#private' + rest;
|
|
586
|
+
}
|
|
587
|
+
return createPropertyNameNodeForIdentifierOrLiteral(b, name, singleQuote, stringNamed, isMethod);
|
|
588
|
+
}
|
|
589
|
+
function createPropertyNameNodeForIdentifierOrLiteral(b, name, singleQuote, stringNamed, isMethod) {
|
|
590
|
+
switch (classifyPropertyName(name, stringNamed, isMethod)) {
|
|
591
|
+
case 0:
|
|
592
|
+
return b.identifier(name);
|
|
593
|
+
case 1:
|
|
594
|
+
return b.factory.createNumericLiteral(name);
|
|
595
|
+
}
|
|
596
|
+
return b.factory.createStringLiteral(name, singleQuote ? 65536 /* TokenFlags.SingleQuote */ : 0 /* TokenFlags.None */);
|
|
597
|
+
}
|
|
598
|
+
function getPropertyNameNodeForSymbolFromNameType(b, symbol, singleQuote, stringNamed, isMethod) {
|
|
599
|
+
const nameType = b.c.symbolNameTypes.get(getSymbolId(symbol));
|
|
600
|
+
if (nameType === undefined)
|
|
601
|
+
return undefined;
|
|
602
|
+
if ((nameType.flags & 3072 /* TypeFlags.StringOrNumberLiteral */) !== 0) {
|
|
603
|
+
const literal = nameType;
|
|
604
|
+
const name = (nameType.flags & 1024 /* TypeFlags.StringLiteral */) !== 0 ? literal.stringValue : String(literal.numberValue);
|
|
605
|
+
if (!isIdentifierText(name) && (stringNamed || !isNumericLiteralName(name)))
|
|
606
|
+
return b.factory.createStringLiteral(name, singleQuote ? 65536 /* TokenFlags.SingleQuote */ : 0 /* TokenFlags.None */);
|
|
607
|
+
if (isNumericLiteralName(name) && name.startsWith('-'))
|
|
608
|
+
return b.created(new ComputedPropertyName(b.created(new PrefixUnaryExpression(40 /* SyntaxKind.MinusToken */, b.factory.createNumericLiteral(name.substring(1))))));
|
|
609
|
+
return createPropertyNameNodeForIdentifierOrLiteral(b, name, singleQuote, stringNamed, isMethod);
|
|
610
|
+
}
|
|
611
|
+
if ((nameType.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0)
|
|
612
|
+
return b.created(new ComputedPropertyName(symbolToExpression(b, nameType.symbol, 111551 /* SymbolFlags.Value */)));
|
|
613
|
+
return undefined;
|
|
614
|
+
}
|
|
615
|
+
// ---- Module specifiers
|
|
616
|
+
/**
|
|
617
|
+
* The specifier an `import("…")` type names a module with: an ambient module's name, the file
|
|
618
|
+
* name without an enclosing file, else what module specifier generation gives for the enclosing
|
|
619
|
+
* file. `overrideImportMode` is `None` for the mode of the enclosing import or file.
|
|
620
|
+
*/
|
|
621
|
+
export function getSpecifierForModuleSymbol(b, symbol, overrideImportMode) {
|
|
622
|
+
const c = b.c;
|
|
623
|
+
let file = asSourceFile(getDeclarationOfKind(symbol, 307 /* SyntaxKind.SourceFile */));
|
|
624
|
+
if (file === undefined)
|
|
625
|
+
for (const d of getDeclarations(symbol)) {
|
|
626
|
+
const equivalent = getFileSymbolIfFileSymbolExportEqualsContainer(c, d, symbol);
|
|
627
|
+
if (equivalent !== undefined) {
|
|
628
|
+
file = asSourceFile(getDeclarationOfKind(equivalent, 307 /* SyntaxKind.SourceFile */));
|
|
629
|
+
break;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
if (file === undefined && isAmbientModuleSymbolName(symbol.name))
|
|
633
|
+
return symbol.name.substring(1, symbol.name.length - 1);
|
|
634
|
+
const contextFile = b.enclosingFile;
|
|
635
|
+
if (contextFile === undefined) {
|
|
636
|
+
if (isAmbientModuleSymbolName(symbol.name))
|
|
637
|
+
return symbol.name.substring(1, symbol.name.length - 1);
|
|
638
|
+
const moduleFile = getSourceFileOfModule(symbol);
|
|
639
|
+
return moduleFile === undefined ? '' : moduleFile.fileName;
|
|
640
|
+
}
|
|
641
|
+
const enclosingDeclaration = b.enclosingDeclaration === undefined ? undefined : b.context.mostOriginal(b.enclosingDeclaration);
|
|
642
|
+
const originalModuleSpecifier = enclosingDeclaration !== undefined && canHaveModuleSpecifier(enclosingDeclaration)
|
|
643
|
+
? tryGetModuleSpecifierFromDeclaration(enclosingDeclaration)
|
|
644
|
+
: undefined;
|
|
645
|
+
let resolutionMode = overrideImportMode;
|
|
646
|
+
if (resolutionMode === ModuleKind.None)
|
|
647
|
+
resolutionMode =
|
|
648
|
+
originalModuleSpecifier !== undefined
|
|
649
|
+
? c.host.getModeForUsageLocation(contextFile, originalModuleSpecifier)
|
|
650
|
+
: c.host.getDefaultResolutionModeForFile(contextFile);
|
|
651
|
+
const key = getSymbolId(symbol) + '|' + contextFile.path + '|' + resolutionMode;
|
|
652
|
+
const cached = c.moduleSpecifiers.get(key);
|
|
653
|
+
if (cached !== undefined)
|
|
654
|
+
return cached;
|
|
655
|
+
// Declaration emit prefers project-relative specifiers, with `.js` extensions in ES modules.
|
|
656
|
+
const preferences = new ModuleSpecifierPreferences('project-relative', resolutionMode === ModuleKind.ESNext ? 'js' : '');
|
|
657
|
+
const specifiers = getModuleSpecifiers(c, symbol, contextFile, preferences, overrideImportMode);
|
|
658
|
+
const specifier = specifiers.length > 0 ? specifiers[0] : '';
|
|
659
|
+
c.moduleSpecifiers.set(key, specifier);
|
|
660
|
+
return specifier;
|
|
661
|
+
}
|
|
662
|
+
/** Specifiers `importingFile` can import the module `moduleSymbol` with, best first. */
|
|
663
|
+
export function getModuleSpecifiers(c, moduleSymbol, importingFile, preferences, overrideImportMode) {
|
|
664
|
+
const ambient = tryGetModuleNameFromAmbientModule(c, moduleSymbol);
|
|
665
|
+
if (ambient !== '')
|
|
666
|
+
return [ambient];
|
|
667
|
+
const moduleFile = getSourceFileOfModule(moduleSymbol);
|
|
668
|
+
if (moduleFile === undefined)
|
|
669
|
+
return [];
|
|
670
|
+
const host = getModuleSpecifierHost(c);
|
|
671
|
+
// A referenced project's declaration output is named by its source.
|
|
672
|
+
return getModuleSpecifiersForFile(importingFile, host.getSourceOfProjectReferenceIfOutputIncluded(moduleFile), c.compilerOptions, host, preferences, overrideImportMode, false);
|
|
673
|
+
}
|
|
674
|
+
function getModuleSpecifierHost(c) {
|
|
675
|
+
let host = c.host.getModuleSpecifierHost();
|
|
676
|
+
if (host === undefined) {
|
|
677
|
+
host = c.fallbackModuleSpecifierHost;
|
|
678
|
+
if (host === undefined) {
|
|
679
|
+
host = new CheckerModuleSpecifierHost(c);
|
|
680
|
+
c.fallbackModuleSpecifierHost = host;
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
return host;
|
|
684
|
+
}
|
|
685
|
+
/** The name of an ambient module declaring `moduleSymbol`, or of the one whose `export =` it is, else `''`. */
|
|
686
|
+
function tryGetModuleNameFromAmbientModule(c, moduleSymbol) {
|
|
687
|
+
for (const d of getDeclarations(moduleSymbol)) {
|
|
688
|
+
const name = isModuleWithStringLiteralName(d) ? getName(d) : undefined;
|
|
689
|
+
if (name !== undefined && (!isModuleAugmentationExternal(d) || !isExternalModuleNameRelative(getText(name))))
|
|
690
|
+
return getText(name);
|
|
691
|
+
}
|
|
692
|
+
// A namespace exported with `export =` from an ambient module: `import { c } from "m"` names
|
|
693
|
+
// `ns.c` for `declare module "m" { namespace ns { class c {} } export = ns; }`.
|
|
694
|
+
for (const d of getDeclarations(moduleSymbol)) {
|
|
695
|
+
if (d.kind !== 268 /* SyntaxKind.ModuleDeclaration */)
|
|
696
|
+
continue;
|
|
697
|
+
let container = d;
|
|
698
|
+
while (container !== undefined && !isModuleWithStringLiteralName(container))
|
|
699
|
+
container = container.parent;
|
|
700
|
+
if (container === undefined || container.parent === undefined || container.parent.kind !== 307 /* SyntaxKind.SourceFile */)
|
|
701
|
+
continue;
|
|
702
|
+
const exportEquals = getSymbol(container)?.exports?.get("export=" /* InternalSymbolName.ExportEquals */);
|
|
703
|
+
const assignment = exportEquals?.valueDeclaration;
|
|
704
|
+
if (assignment === undefined || assignment.kind !== 278 /* SyntaxKind.ExportAssignment */)
|
|
705
|
+
continue;
|
|
706
|
+
let exported = getSymbolAtLocation(c, getExpression(assignment));
|
|
707
|
+
if (exported === undefined)
|
|
708
|
+
continue;
|
|
709
|
+
if ((exported.flags & 2097152 /* SymbolFlags.Alias */) !== 0)
|
|
710
|
+
exported = resolveAlias(c, exported);
|
|
711
|
+
if (exported === getSymbol(d))
|
|
712
|
+
return getText(getName(container));
|
|
713
|
+
}
|
|
714
|
+
return '';
|
|
715
|
+
}
|
|
716
|
+
function isModuleWithStringLiteralName(node) {
|
|
717
|
+
return node.kind === 268 /* SyntaxKind.ModuleDeclaration */ && getName(node)?.kind === 10 /* SyntaxKind.StringLiteral */;
|
|
718
|
+
}
|
|
719
|
+
function canHaveModuleSpecifier(node) {
|
|
720
|
+
switch (node.kind) {
|
|
721
|
+
case 261 /* SyntaxKind.VariableDeclaration */:
|
|
722
|
+
case 209 /* SyntaxKind.BindingElement */:
|
|
723
|
+
case 273 /* SyntaxKind.ImportDeclaration */:
|
|
724
|
+
case 279 /* SyntaxKind.ExportDeclaration */:
|
|
725
|
+
case 272 /* SyntaxKind.ImportEqualsDeclaration */:
|
|
726
|
+
case 274 /* SyntaxKind.ImportClause */:
|
|
727
|
+
case 281 /* SyntaxKind.NamespaceExport */:
|
|
728
|
+
case 275 /* SyntaxKind.NamespaceImport */:
|
|
729
|
+
case 282 /* SyntaxKind.ExportSpecifier */:
|
|
730
|
+
case 277 /* SyntaxKind.ImportSpecifier */:
|
|
731
|
+
case 206 /* SyntaxKind.ImportType */:
|
|
732
|
+
return true;
|
|
733
|
+
}
|
|
734
|
+
return false;
|
|
735
|
+
}
|
|
736
|
+
/** The string literal module specifier of an import, export, `require` or `import("…")` type declaration. */
|
|
737
|
+
function tryGetModuleSpecifierFromDeclaration(node) {
|
|
738
|
+
let specifier;
|
|
739
|
+
switch (node.kind) {
|
|
740
|
+
case 261 /* SyntaxKind.VariableDeclaration */:
|
|
741
|
+
case 209 /* SyntaxKind.BindingElement */: {
|
|
742
|
+
let call = getInitializer(node);
|
|
743
|
+
while (call !== undefined && !isRequireCall(call, true))
|
|
744
|
+
call = call.parent;
|
|
745
|
+
specifier = call === undefined ? undefined : getArguments(call).nodes[0];
|
|
746
|
+
break;
|
|
747
|
+
}
|
|
748
|
+
case 273 /* SyntaxKind.ImportDeclaration */:
|
|
749
|
+
case 279 /* SyntaxKind.ExportDeclaration */:
|
|
750
|
+
specifier = getModuleSpecifier(node);
|
|
751
|
+
break;
|
|
752
|
+
case 272 /* SyntaxKind.ImportEqualsDeclaration */:
|
|
753
|
+
specifier = getExternalModuleName(node);
|
|
754
|
+
break;
|
|
755
|
+
case 274 /* SyntaxKind.ImportClause */:
|
|
756
|
+
case 281 /* SyntaxKind.NamespaceExport */:
|
|
757
|
+
specifier = getModuleSpecifier(node.parent);
|
|
758
|
+
break;
|
|
759
|
+
case 275 /* SyntaxKind.NamespaceImport */:
|
|
760
|
+
case 282 /* SyntaxKind.ExportSpecifier */:
|
|
761
|
+
specifier = getModuleSpecifier(node.parent.parent);
|
|
762
|
+
break;
|
|
763
|
+
case 277 /* SyntaxKind.ImportSpecifier */:
|
|
764
|
+
specifier = getModuleSpecifier(node.parent.parent.parent);
|
|
765
|
+
break;
|
|
766
|
+
case 206 /* SyntaxKind.ImportType */: {
|
|
767
|
+
const argument = node.argument;
|
|
768
|
+
specifier = argument instanceof LiteralTypeNode ? argument.literal : undefined;
|
|
769
|
+
break;
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
return specifier !== undefined && specifier.kind === 10 /* SyntaxKind.StringLiteral */ ? specifier : undefined;
|
|
773
|
+
}
|
|
774
|
+
/**
|
|
775
|
+
* Specifier generation without a program, as the checker of single files uses: relative paths
|
|
776
|
+
* between the checker's files.
|
|
777
|
+
*/
|
|
778
|
+
class CheckerModuleSpecifierHost extends ModuleSpecifierHost {
|
|
779
|
+
c;
|
|
780
|
+
constructor(c) {
|
|
781
|
+
super();
|
|
782
|
+
this.c = c;
|
|
783
|
+
}
|
|
784
|
+
getCurrentDirectory() {
|
|
785
|
+
return '';
|
|
786
|
+
}
|
|
787
|
+
useCaseSensitiveFileNames() {
|
|
788
|
+
return true;
|
|
789
|
+
}
|
|
790
|
+
getSymlinkCache() {
|
|
791
|
+
return undefined;
|
|
792
|
+
}
|
|
793
|
+
getGlobalTypingsCacheLocation() {
|
|
794
|
+
return '';
|
|
795
|
+
}
|
|
796
|
+
getProjectReferenceOutputDts(_path) {
|
|
797
|
+
return '';
|
|
798
|
+
}
|
|
799
|
+
getRedirectTargets(_path) {
|
|
800
|
+
return [];
|
|
801
|
+
}
|
|
802
|
+
getSourceOfProjectReferenceIfOutputIncluded(file) {
|
|
803
|
+
return file.fileName;
|
|
804
|
+
}
|
|
805
|
+
fileExists(path) {
|
|
806
|
+
for (const file of this.c.files)
|
|
807
|
+
if (file.fileName === path)
|
|
808
|
+
return true;
|
|
809
|
+
return false;
|
|
810
|
+
}
|
|
811
|
+
getNearestAncestorDirectoryWithPackageJson(_directory) {
|
|
812
|
+
return '';
|
|
813
|
+
}
|
|
814
|
+
getPackageJsonInfo(_packageJsonPath) {
|
|
815
|
+
return undefined;
|
|
816
|
+
}
|
|
817
|
+
getDefaultResolutionModeForFile(file) {
|
|
818
|
+
return this.c.host.getDefaultResolutionModeForFile(file);
|
|
819
|
+
}
|
|
820
|
+
getResolvedModuleFromModuleSpecifier(_file, _specifier) {
|
|
821
|
+
return undefined;
|
|
822
|
+
}
|
|
823
|
+
getModeForUsageLocation(file, specifier) {
|
|
824
|
+
return this.c.host.getModeForUsageLocation(file, specifier);
|
|
825
|
+
}
|
|
826
|
+
getOutputPathsHost() {
|
|
827
|
+
return new FallbackOutputPathsHost();
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
class FallbackOutputPathsHost {
|
|
831
|
+
currentDirectory = '';
|
|
832
|
+
useCaseSensitiveFileNames = true;
|
|
833
|
+
commonSourceDirectory() {
|
|
834
|
+
return '';
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
function asSourceFile(node) {
|
|
838
|
+
if (node === undefined)
|
|
839
|
+
return undefined;
|
|
840
|
+
if (node instanceof SourceFile)
|
|
841
|
+
return node;
|
|
842
|
+
return undefined;
|
|
843
|
+
}
|
|
844
|
+
/** The file of a module: its value declaration's, else that of a declaration that isn't an augmentation. */
|
|
845
|
+
function getSourceFileOfModule(symbol) {
|
|
846
|
+
let d = symbol.valueDeclaration;
|
|
847
|
+
if (d === undefined)
|
|
848
|
+
for (const declaration of getDeclarations(symbol))
|
|
849
|
+
if (!isExternalModuleAugmentation(declaration) && !isGlobalScopeAugmentation(declaration)) {
|
|
850
|
+
d = declaration;
|
|
851
|
+
break;
|
|
852
|
+
}
|
|
853
|
+
return d === undefined ? undefined : getSourceFileOfNode(d);
|
|
854
|
+
}
|