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,54 @@
|
|
|
1
|
+
import { type Node } from '../ast.js';
|
|
2
|
+
import { type CompilerOptions, ScriptTarget } from '../options.js';
|
|
3
|
+
import type { EmitContext } from '../printer/emit-context.js';
|
|
4
|
+
import type { EmitResolver } from './emit-resolver.js';
|
|
5
|
+
import { type SyntaxFacts } from './syntax-facts.js';
|
|
6
|
+
import { Transformer } from './transformer.js';
|
|
7
|
+
export declare class DecoratorMetadata extends Transformer {
|
|
8
|
+
private readonly legacyDecorators;
|
|
9
|
+
private readonly facts;
|
|
10
|
+
private readonly serializer;
|
|
11
|
+
/** The class whose members are visited. */
|
|
12
|
+
private parentClass;
|
|
13
|
+
constructor(context: EmitContext, options: CompilerOptions, resolver: EmitResolver, facts: SyntaxFacts);
|
|
14
|
+
visit(node: Node): Node | undefined;
|
|
15
|
+
private visitClass;
|
|
16
|
+
/** The modifiers with metadata after the decorators: `export`/`default` first, other modifiers last. */
|
|
17
|
+
private injectClassTypeMetadata;
|
|
18
|
+
private injectClassElementTypeMetadata;
|
|
19
|
+
private metadataOnly;
|
|
20
|
+
private withRange;
|
|
21
|
+
/** Metadata decorators for a declaration; none for standard decorators. */
|
|
22
|
+
private getTypeMetadata;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Serializes type annotations as the runtime values `Reflect.metadata` records: `Function`,
|
|
26
|
+
* `Array`, `Boolean`, `String`, `Number`, `BigInt`, `Symbol`, `Object`, `void 0`, or the class a
|
|
27
|
+
* type reference names. Type references need the resolver to tell classes from other types.
|
|
28
|
+
*/
|
|
29
|
+
export declare class MetadataSerializer {
|
|
30
|
+
private readonly context;
|
|
31
|
+
private readonly resolver;
|
|
32
|
+
private readonly target;
|
|
33
|
+
private readonly strictNullChecks;
|
|
34
|
+
currentLexicalScope: Node | undefined;
|
|
35
|
+
currentNameScope: Node | undefined;
|
|
36
|
+
private serializingConditionalTypeBranch;
|
|
37
|
+
constructor(context: EmitContext, resolver: EmitResolver, target: ScriptTarget, strictNullChecks: boolean);
|
|
38
|
+
serializeTypeOfNode(node: Node, container: Node): Node;
|
|
39
|
+
serializeParameterTypesOfNode(node: Node, container: Node): Node;
|
|
40
|
+
serializeReturnTypeOfNode(node: Node): Node;
|
|
41
|
+
private serializeTypeNode;
|
|
42
|
+
private serializeUnionOrIntersectionConstituents;
|
|
43
|
+
private serializeLiteralOfLiteralTypeNode;
|
|
44
|
+
/** The class a type reference names, or the constructor of what the resolver says it is. */
|
|
45
|
+
private serializeTypeReferenceNode;
|
|
46
|
+
private serializeBigIntConstructor;
|
|
47
|
+
/** An entity name as an expression; identifiers act as parse-tree references for the module transforms. */
|
|
48
|
+
private serializeEntityNameAsExpression;
|
|
49
|
+
/** An entity name guarded so that it doesn't throw if it isn't defined at runtime. */
|
|
50
|
+
private serializeEntityNameAsExpressionFallback;
|
|
51
|
+
/** `typeof left !== "undefined" && right` */
|
|
52
|
+
private createCheckedValue;
|
|
53
|
+
private equateSerializedTypeNodes;
|
|
54
|
+
}
|
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
// `emitDecoratorMetadata`: adds `__metadata("design:type", ...)`, `"design:paramtypes"` and
|
|
2
|
+
// `"design:returntype"` decorators to decorated declarations, from their type annotations.
|
|
3
|
+
// Runs before types are erased; the legacy decorator transform emits them.
|
|
4
|
+
import { ArrayLiteralExpression, BinaryExpression, ClassDeclaration, ClassExpression, ConditionalExpression, ConditionalTypeNode, Decorator, GetAccessorDeclaration, Identifier, IntersectionTypeNode, JSDocNonNullableType, JSDocNullableType, JSDocOptionalType, LiteralTypeNode, MethodDeclaration, ParameterDeclaration, ParenthesizedExpression, PrefixUnaryExpression, PropertyAccessExpression, PropertyDeclaration, QualifiedName, SetAccessorDeclaration, SourceFile, StringLiteral, TypeOfExpression, TypeOperatorNode, TypePredicateNode, TypeReferenceNode, UnionTypeNode, VoidExpression, getBody, getMembers, getParameters, getText, getType, } from '../ast.js';
|
|
5
|
+
import { isFunctionLike } from '../ast-utilities.js';
|
|
6
|
+
import { isAsyncFunction, isClassLike } from '../binder-utilities.js';
|
|
7
|
+
import { ScriptTarget, getEmitScriptTarget, getStrictOptionValue } from '../options.js';
|
|
8
|
+
import { createMetadataHelper } from '../printer/decorator-helpers.js';
|
|
9
|
+
import { isModifier } from '../printer/utilities.js';
|
|
10
|
+
import { getRestParameterElementType, getSetAccessorValueParameter, skipTypeParentheses, classElementOrClassElementParameterIsDecorated, classOrConstructorParameterIsDecorated, getAllAccessorDeclarations, getFirstConstructorWithBody, } from './decorator-utilities.js';
|
|
11
|
+
import { Transformer } from './transformer.js';
|
|
12
|
+
import { hasDecorators, isThisParameter } from './utilities.js';
|
|
13
|
+
export class DecoratorMetadata extends Transformer {
|
|
14
|
+
legacyDecorators;
|
|
15
|
+
facts;
|
|
16
|
+
serializer;
|
|
17
|
+
/** The class whose members are visited. */
|
|
18
|
+
parentClass;
|
|
19
|
+
constructor(context, options, resolver, facts) {
|
|
20
|
+
super(context);
|
|
21
|
+
this.legacyDecorators = options.experimentalDecorators === true;
|
|
22
|
+
this.facts = facts;
|
|
23
|
+
this.serializer = new MetadataSerializer(context, resolver, getEmitScriptTarget(options), getStrictOptionValue(options, options.strictNullChecks));
|
|
24
|
+
this.parentClass = undefined;
|
|
25
|
+
}
|
|
26
|
+
visit(node) {
|
|
27
|
+
if (!this.facts.has(node, 262144 /* SubtreeFacts.ContainsDecorators */))
|
|
28
|
+
return node;
|
|
29
|
+
switch (node.kind) {
|
|
30
|
+
case 264 /* SyntaxKind.ClassDeclaration */:
|
|
31
|
+
case 232 /* SyntaxKind.ClassExpression */:
|
|
32
|
+
return this.visitClass(node);
|
|
33
|
+
case 173 /* SyntaxKind.PropertyDeclaration */:
|
|
34
|
+
if (node instanceof PropertyDeclaration) {
|
|
35
|
+
if (!hasDecorators(node))
|
|
36
|
+
return this.visitEachChild(node);
|
|
37
|
+
return this.factory.updatePropertyDeclaration(node, this.injectClassElementTypeMetadata(this.visitModifiers(node.modifiers), node), this.visitNode(node.name), node.postfixToken, this.visitNode(node.type), this.visitNode(node.initializer));
|
|
38
|
+
}
|
|
39
|
+
break;
|
|
40
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
41
|
+
if (node instanceof MethodDeclaration) {
|
|
42
|
+
if (!hasDecorators(node) && !hasDecoratedParameter(node))
|
|
43
|
+
return this.visitEachChild(node);
|
|
44
|
+
return this.factory.updateMethodDeclaration(node, this.injectClassElementTypeMetadata(this.visitModifiers(node.modifiers), node), node.asteriskToken, this.visitNode(node.name), node.postfixToken, this.visitNodes(node.typeParameters), this.visitNodes(node.parameters), this.visitNode(node.type), this.visitNode(node.fullSignature), this.visitNode(node.body));
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
48
|
+
if (node instanceof SetAccessorDeclaration) {
|
|
49
|
+
if (!hasDecorators(node) && !hasDecoratedParameter(node))
|
|
50
|
+
return this.visitEachChild(node);
|
|
51
|
+
return this.factory.updateSetAccessorDeclaration(node, this.injectClassElementTypeMetadata(this.visitModifiers(node.modifiers), node), this.visitNode(node.name), this.visitNodes(node.typeParameters), this.visitNodes(node.parameters), this.visitNode(node.type), this.visitNode(node.fullSignature), this.visitNode(node.body));
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
55
|
+
if (node instanceof GetAccessorDeclaration) {
|
|
56
|
+
if (!hasDecorators(node))
|
|
57
|
+
return this.visitEachChild(node);
|
|
58
|
+
return this.factory.updateGetAccessorDeclaration(node, this.injectClassElementTypeMetadata(this.visitModifiers(node.modifiers), node), this.visitNode(node.name), this.visitNodes(node.typeParameters), this.visitNodes(node.parameters), this.visitNode(node.type), this.visitNode(node.fullSignature), this.visitNode(node.body));
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
case 307 /* SyntaxKind.SourceFile */:
|
|
62
|
+
if (node instanceof SourceFile) {
|
|
63
|
+
this.parentClass = undefined;
|
|
64
|
+
this.serializer.currentLexicalScope = node;
|
|
65
|
+
const updated = this.visitEachChild(node);
|
|
66
|
+
const helpers = this.context.readEmitHelpers();
|
|
67
|
+
for (let i = 0; i < helpers.length; i++)
|
|
68
|
+
this.context.addEmitHelper(updated, helpers[i]);
|
|
69
|
+
this.serializer.currentLexicalScope = undefined;
|
|
70
|
+
return updated;
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
case 269 /* SyntaxKind.ModuleBlock */:
|
|
74
|
+
case 242 /* SyntaxKind.Block */:
|
|
75
|
+
case 270 /* SyntaxKind.CaseBlock */: {
|
|
76
|
+
const saved = this.serializer.currentLexicalScope;
|
|
77
|
+
this.serializer.currentLexicalScope = node;
|
|
78
|
+
const updated = this.visitEachChild(node);
|
|
79
|
+
this.serializer.currentLexicalScope = saved;
|
|
80
|
+
return updated;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return this.visitEachChild(node);
|
|
84
|
+
}
|
|
85
|
+
visitClass(node) {
|
|
86
|
+
const saved = this.parentClass;
|
|
87
|
+
this.parentClass = node;
|
|
88
|
+
let result = node;
|
|
89
|
+
if (!classOrConstructorParameterIsDecorated(this.legacyDecorators, node))
|
|
90
|
+
result = this.visitEachChild(node);
|
|
91
|
+
else if (node instanceof ClassDeclaration)
|
|
92
|
+
result = this.factory.updateClassDeclaration(node, this.injectClassTypeMetadata(this.visitModifiers(node.modifiers), node), node.name, this.visitNodes(node.typeParameters), this.visitNodes(node.heritageClauses), this.visitNodes(node.members));
|
|
93
|
+
else if (node instanceof ClassExpression)
|
|
94
|
+
result = this.factory.updateClassExpression(node, this.injectClassTypeMetadata(this.visitModifiers(node.modifiers), node), node.name, this.visitNodes(node.typeParameters), this.visitNodes(node.heritageClauses), this.visitNodes(node.members));
|
|
95
|
+
this.parentClass = saved;
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
/** The modifiers with metadata after the decorators: `export`/`default` first, other modifiers last. */
|
|
99
|
+
injectClassTypeMetadata(list, node) {
|
|
100
|
+
const metadata = this.getTypeMetadata(node, node);
|
|
101
|
+
if (metadata.length === 0)
|
|
102
|
+
return list;
|
|
103
|
+
if (list === undefined || list.nodes.length === 0)
|
|
104
|
+
return this.metadataOnly(list, metadata);
|
|
105
|
+
const original = list.nodes;
|
|
106
|
+
const modifiers = [];
|
|
107
|
+
if (isExportOrDefault(original[0])) {
|
|
108
|
+
modifiers.push(original[0]);
|
|
109
|
+
if (original.length > 1 && isExportOrDefault(original[1]))
|
|
110
|
+
modifiers.push(original[1]);
|
|
111
|
+
}
|
|
112
|
+
const rest = modifiers.length;
|
|
113
|
+
for (let i = 0; i < original.length; i++)
|
|
114
|
+
if (original[i] instanceof Decorator)
|
|
115
|
+
modifiers.push(original[i]);
|
|
116
|
+
for (let i = 0; i < metadata.length; i++)
|
|
117
|
+
modifiers.push(metadata[i]);
|
|
118
|
+
for (let i = rest; i < original.length; i++)
|
|
119
|
+
if (isModifier(original[i]))
|
|
120
|
+
modifiers.push(original[i]);
|
|
121
|
+
return this.withRange(modifiers, list);
|
|
122
|
+
}
|
|
123
|
+
injectClassElementTypeMetadata(list, node) {
|
|
124
|
+
const container = this.parentClass;
|
|
125
|
+
if (container === undefined || !isClassLike(container))
|
|
126
|
+
return list;
|
|
127
|
+
if (!classElementOrClassElementParameterIsDecorated(this.legacyDecorators, node, container))
|
|
128
|
+
return list;
|
|
129
|
+
const metadata = this.getTypeMetadata(node, container);
|
|
130
|
+
if (metadata.length === 0)
|
|
131
|
+
return list;
|
|
132
|
+
if (list === undefined || list.nodes.length === 0)
|
|
133
|
+
return this.metadataOnly(list, metadata);
|
|
134
|
+
const original = list.nodes;
|
|
135
|
+
const modifiers = [];
|
|
136
|
+
for (let i = 0; i < original.length; i++)
|
|
137
|
+
if (original[i] instanceof Decorator)
|
|
138
|
+
modifiers.push(original[i]);
|
|
139
|
+
for (let i = 0; i < metadata.length; i++)
|
|
140
|
+
modifiers.push(metadata[i]);
|
|
141
|
+
for (let i = 0; i < original.length; i++)
|
|
142
|
+
if (isModifier(original[i]))
|
|
143
|
+
modifiers.push(original[i]);
|
|
144
|
+
return this.withRange(modifiers, list);
|
|
145
|
+
}
|
|
146
|
+
metadataOnly(list, metadata) {
|
|
147
|
+
const result = this.factory.createModifierList(metadata);
|
|
148
|
+
if (list !== undefined) {
|
|
149
|
+
result.pos = list.pos;
|
|
150
|
+
result.end = list.end;
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
withRange(modifiers, list) {
|
|
155
|
+
const result = this.factory.createModifierList(modifiers);
|
|
156
|
+
result.pos = list.pos;
|
|
157
|
+
result.end = list.end;
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
/** Metadata decorators for a declaration; none for standard decorators. */
|
|
161
|
+
getTypeMetadata(node, container) {
|
|
162
|
+
const decorators = [];
|
|
163
|
+
if (!this.legacyDecorators)
|
|
164
|
+
return decorators;
|
|
165
|
+
const factory = this.factory;
|
|
166
|
+
const serializer = this.serializer;
|
|
167
|
+
serializer.currentNameScope = container;
|
|
168
|
+
switch (node.kind) {
|
|
169
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
170
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
171
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
172
|
+
case 173 /* SyntaxKind.PropertyDeclaration */:
|
|
173
|
+
decorators.push(factory.created(new Decorator(createMetadataHelper(factory, 'design:type', serializer.serializeTypeOfNode(node, container)))));
|
|
174
|
+
}
|
|
175
|
+
if (shouldAddParamTypesMetadata(node))
|
|
176
|
+
decorators.push(factory.created(new Decorator(createMetadataHelper(factory, 'design:paramtypes', serializer.serializeParameterTypesOfNode(node, container)))));
|
|
177
|
+
if (node.kind === 175 /* SyntaxKind.MethodDeclaration */)
|
|
178
|
+
decorators.push(factory.created(new Decorator(createMetadataHelper(factory, 'design:returntype', serializer.serializeReturnTypeOfNode(node)))));
|
|
179
|
+
serializer.currentNameScope = undefined;
|
|
180
|
+
return decorators;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function shouldAddParamTypesMetadata(node) {
|
|
184
|
+
switch (node.kind) {
|
|
185
|
+
case 264 /* SyntaxKind.ClassDeclaration */:
|
|
186
|
+
case 232 /* SyntaxKind.ClassExpression */:
|
|
187
|
+
return getFirstConstructorWithBody(node) !== undefined;
|
|
188
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
189
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
190
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
function isExportOrDefault(node) {
|
|
196
|
+
return node.kind === 94 /* SyntaxKind.ExportKeyword */ || node.kind === 89 /* SyntaxKind.DefaultKeyword */;
|
|
197
|
+
}
|
|
198
|
+
function hasDecoratedParameter(node) {
|
|
199
|
+
const parameters = getParameters(node).nodes;
|
|
200
|
+
const first = parameters.length > 0 && isThisParameter(parameters[0]) ? 1 : 0;
|
|
201
|
+
for (let i = first; i < parameters.length; i++)
|
|
202
|
+
if (hasDecorators(parameters[i]))
|
|
203
|
+
return true;
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Serializes type annotations as the runtime values `Reflect.metadata` records: `Function`,
|
|
208
|
+
* `Array`, `Boolean`, `String`, `Number`, `BigInt`, `Symbol`, `Object`, `void 0`, or the class a
|
|
209
|
+
* type reference names. Type references need the resolver to tell classes from other types.
|
|
210
|
+
*/
|
|
211
|
+
export class MetadataSerializer {
|
|
212
|
+
context;
|
|
213
|
+
resolver;
|
|
214
|
+
target;
|
|
215
|
+
strictNullChecks;
|
|
216
|
+
currentLexicalScope;
|
|
217
|
+
currentNameScope;
|
|
218
|
+
serializingConditionalTypeBranch;
|
|
219
|
+
constructor(context, resolver, target, strictNullChecks) {
|
|
220
|
+
this.context = context;
|
|
221
|
+
this.resolver = resolver;
|
|
222
|
+
this.target = target;
|
|
223
|
+
this.strictNullChecks = strictNullChecks;
|
|
224
|
+
this.currentLexicalScope = undefined;
|
|
225
|
+
this.currentNameScope = undefined;
|
|
226
|
+
this.serializingConditionalTypeBranch = false;
|
|
227
|
+
}
|
|
228
|
+
serializeTypeOfNode(node, container) {
|
|
229
|
+
const factory = this.context.factory;
|
|
230
|
+
switch (node.kind) {
|
|
231
|
+
case 173 /* SyntaxKind.PropertyDeclaration */:
|
|
232
|
+
case 170 /* SyntaxKind.Parameter */:
|
|
233
|
+
return this.serializeTypeNode(getType(node));
|
|
234
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
235
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
236
|
+
return this.serializeTypeNode(getAccessorTypeNode(node, container));
|
|
237
|
+
case 264 /* SyntaxKind.ClassDeclaration */:
|
|
238
|
+
case 232 /* SyntaxKind.ClassExpression */:
|
|
239
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
240
|
+
return factory.createIdentifier('Function');
|
|
241
|
+
}
|
|
242
|
+
return factory.createVoidZero();
|
|
243
|
+
}
|
|
244
|
+
serializeParameterTypesOfNode(node, container) {
|
|
245
|
+
const factory = this.context.factory;
|
|
246
|
+
let declaration = undefined;
|
|
247
|
+
if (isClassLike(node))
|
|
248
|
+
declaration = getFirstConstructorWithBody(node);
|
|
249
|
+
else if (isFunctionLike(node) && getBody(node) !== undefined)
|
|
250
|
+
declaration = node;
|
|
251
|
+
const expressions = [];
|
|
252
|
+
if (declaration !== undefined) {
|
|
253
|
+
const parameters = getParametersOfDecoratedDeclaration(declaration, container);
|
|
254
|
+
for (let i = 0; i < parameters.length; i++) {
|
|
255
|
+
const parameter = parameters[i];
|
|
256
|
+
if (i === 0 && isThisParameter(parameter))
|
|
257
|
+
continue;
|
|
258
|
+
if (parameter instanceof ParameterDeclaration && parameter.dotDotDotToken !== undefined)
|
|
259
|
+
expressions.push(this.serializeTypeNode(getRestParameterElementType(parameter.type)));
|
|
260
|
+
else
|
|
261
|
+
expressions.push(this.serializeTypeOfNode(parameter, container));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return factory.created(new ArrayLiteralExpression(factory.createNodeList(expressions), false));
|
|
265
|
+
}
|
|
266
|
+
serializeReturnTypeOfNode(node) {
|
|
267
|
+
const factory = this.context.factory;
|
|
268
|
+
const type = getType(node);
|
|
269
|
+
if (isFunctionLike(node) && type !== undefined)
|
|
270
|
+
return this.serializeTypeNode(type);
|
|
271
|
+
if (isAsyncFunction(node))
|
|
272
|
+
return factory.createIdentifier('Promise');
|
|
273
|
+
return factory.createVoidZero();
|
|
274
|
+
}
|
|
275
|
+
serializeTypeNode(type) {
|
|
276
|
+
const factory = this.context.factory;
|
|
277
|
+
if (type === undefined)
|
|
278
|
+
return factory.createIdentifier('Object');
|
|
279
|
+
const node = skipTypeParentheses(type);
|
|
280
|
+
switch (node.kind) {
|
|
281
|
+
case 115 /* SyntaxKind.VoidKeyword */:
|
|
282
|
+
case 157 /* SyntaxKind.UndefinedKeyword */:
|
|
283
|
+
case 146 /* SyntaxKind.NeverKeyword */:
|
|
284
|
+
return factory.createVoidZero();
|
|
285
|
+
case 185 /* SyntaxKind.FunctionType */:
|
|
286
|
+
case 186 /* SyntaxKind.ConstructorType */:
|
|
287
|
+
return factory.createIdentifier('Function');
|
|
288
|
+
case 189 /* SyntaxKind.ArrayType */:
|
|
289
|
+
case 190 /* SyntaxKind.TupleType */:
|
|
290
|
+
return factory.createIdentifier('Array');
|
|
291
|
+
case 183 /* SyntaxKind.TypePredicate */:
|
|
292
|
+
if (node instanceof TypePredicateNode && node.assertsModifier !== undefined)
|
|
293
|
+
return factory.createVoidZero();
|
|
294
|
+
return factory.createIdentifier('Boolean');
|
|
295
|
+
case 135 /* SyntaxKind.BooleanKeyword */:
|
|
296
|
+
return factory.createIdentifier('Boolean');
|
|
297
|
+
case 204 /* SyntaxKind.TemplateLiteralType */:
|
|
298
|
+
case 154 /* SyntaxKind.StringKeyword */:
|
|
299
|
+
return factory.createIdentifier('String');
|
|
300
|
+
case 151 /* SyntaxKind.ObjectKeyword */:
|
|
301
|
+
return factory.createIdentifier('Object');
|
|
302
|
+
case 202 /* SyntaxKind.LiteralType */:
|
|
303
|
+
if (node instanceof LiteralTypeNode)
|
|
304
|
+
return this.serializeLiteralOfLiteralTypeNode(node.literal);
|
|
305
|
+
break;
|
|
306
|
+
case 150 /* SyntaxKind.NumberKeyword */:
|
|
307
|
+
return factory.createIdentifier('Number');
|
|
308
|
+
case 163 /* SyntaxKind.BigIntKeyword */:
|
|
309
|
+
return this.serializeBigIntConstructor();
|
|
310
|
+
case 155 /* SyntaxKind.SymbolKeyword */:
|
|
311
|
+
return factory.createIdentifier('Symbol');
|
|
312
|
+
case 184 /* SyntaxKind.TypeReference */:
|
|
313
|
+
if (node instanceof TypeReferenceNode)
|
|
314
|
+
return this.serializeTypeReferenceNode(node);
|
|
315
|
+
break;
|
|
316
|
+
case 194 /* SyntaxKind.IntersectionType */:
|
|
317
|
+
if (node instanceof IntersectionTypeNode)
|
|
318
|
+
return this.serializeUnionOrIntersectionConstituents(node.types.nodes, true);
|
|
319
|
+
break;
|
|
320
|
+
case 193 /* SyntaxKind.UnionType */:
|
|
321
|
+
if (node instanceof UnionTypeNode)
|
|
322
|
+
return this.serializeUnionOrIntersectionConstituents(node.types.nodes, false);
|
|
323
|
+
break;
|
|
324
|
+
case 195 /* SyntaxKind.ConditionalType */:
|
|
325
|
+
if (node instanceof ConditionalTypeNode) {
|
|
326
|
+
const saved = this.serializingConditionalTypeBranch;
|
|
327
|
+
this.serializingConditionalTypeBranch = true;
|
|
328
|
+
const result = this.serializeUnionOrIntersectionConstituents([node.trueType, node.falseType], false);
|
|
329
|
+
this.serializingConditionalTypeBranch = saved;
|
|
330
|
+
return result;
|
|
331
|
+
}
|
|
332
|
+
break;
|
|
333
|
+
case 199 /* SyntaxKind.TypeOperator */:
|
|
334
|
+
// `unique symbol` falls back to `Object` as in tsgo.
|
|
335
|
+
if (node instanceof TypeOperatorNode && node.operator === 148 /* SyntaxKind.ReadonlyKeyword */)
|
|
336
|
+
return this.serializeTypeNode(node.type);
|
|
337
|
+
break;
|
|
338
|
+
case 311 /* SyntaxKind.JSDocNullableType */:
|
|
339
|
+
if (node instanceof JSDocNullableType)
|
|
340
|
+
return this.serializeTypeNode(node.type);
|
|
341
|
+
break;
|
|
342
|
+
case 312 /* SyntaxKind.JSDocNonNullableType */:
|
|
343
|
+
if (node instanceof JSDocNonNullableType)
|
|
344
|
+
return this.serializeTypeNode(node.type);
|
|
345
|
+
break;
|
|
346
|
+
case 313 /* SyntaxKind.JSDocOptionalType */:
|
|
347
|
+
if (node instanceof JSDocOptionalType)
|
|
348
|
+
return this.serializeTypeNode(node.type);
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
return factory.createIdentifier('Object');
|
|
352
|
+
}
|
|
353
|
+
serializeUnionOrIntersectionConstituents(types, isIntersection) {
|
|
354
|
+
const factory = this.context.factory;
|
|
355
|
+
let serialized = undefined;
|
|
356
|
+
for (let i = 0; i < types.length; i++) {
|
|
357
|
+
const type = skipTypeParentheses(types[i]);
|
|
358
|
+
if (type.kind === 146 /* SyntaxKind.NeverKeyword */) {
|
|
359
|
+
// `never` reduces an intersection and is elided from a union.
|
|
360
|
+
if (isIntersection)
|
|
361
|
+
return factory.createVoidZero();
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
if (type.kind === 159 /* SyntaxKind.UnknownKeyword */) {
|
|
365
|
+
if (!isIntersection)
|
|
366
|
+
return factory.createIdentifier('Object');
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
if (type.kind === 132 /* SyntaxKind.AnyKeyword */)
|
|
370
|
+
return factory.createIdentifier('Object');
|
|
371
|
+
// Without strict null checks, `null` and `undefined` are elided as before they existed.
|
|
372
|
+
if (!this.strictNullChecks && (isNullLiteralType(type) || type.kind === 157 /* SyntaxKind.UndefinedKeyword */))
|
|
373
|
+
continue;
|
|
374
|
+
const constituent = this.serializeTypeNode(type);
|
|
375
|
+
if (constituent instanceof Identifier && constituent.text === 'Object')
|
|
376
|
+
return constituent;
|
|
377
|
+
if (serialized === undefined)
|
|
378
|
+
serialized = constituent;
|
|
379
|
+
else if (!this.equateSerializedTypeNodes(serialized, constituent))
|
|
380
|
+
return factory.createIdentifier('Object');
|
|
381
|
+
}
|
|
382
|
+
return serialized !== undefined ? serialized : factory.createVoidZero();
|
|
383
|
+
}
|
|
384
|
+
serializeLiteralOfLiteralTypeNode(node) {
|
|
385
|
+
const factory = this.context.factory;
|
|
386
|
+
switch (node.kind) {
|
|
387
|
+
case 10 /* SyntaxKind.StringLiteral */:
|
|
388
|
+
case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
|
|
389
|
+
return factory.createIdentifier('String');
|
|
390
|
+
case 225 /* SyntaxKind.PrefixUnaryExpression */:
|
|
391
|
+
if (node instanceof PrefixUnaryExpression)
|
|
392
|
+
return this.serializeLiteralOfLiteralTypeNode(node.operand);
|
|
393
|
+
break;
|
|
394
|
+
case 8 /* SyntaxKind.NumericLiteral */:
|
|
395
|
+
return factory.createIdentifier('Number');
|
|
396
|
+
case 9 /* SyntaxKind.BigIntLiteral */:
|
|
397
|
+
return this.serializeBigIntConstructor();
|
|
398
|
+
case 111 /* SyntaxKind.TrueKeyword */:
|
|
399
|
+
case 96 /* SyntaxKind.FalseKeyword */:
|
|
400
|
+
return factory.createIdentifier('Boolean');
|
|
401
|
+
case 105 /* SyntaxKind.NullKeyword */:
|
|
402
|
+
return factory.createVoidZero();
|
|
403
|
+
}
|
|
404
|
+
return factory.createIdentifier('Object');
|
|
405
|
+
}
|
|
406
|
+
/** The class a type reference names, or the constructor of what the resolver says it is. */
|
|
407
|
+
serializeTypeReferenceNode(node) {
|
|
408
|
+
const factory = this.context.factory;
|
|
409
|
+
const scope = this.currentNameScope !== undefined ? this.currentNameScope : this.currentLexicalScope;
|
|
410
|
+
const location = scope === undefined ? undefined : this.context.parseNode(scope);
|
|
411
|
+
const typeName = this.context.parseNode(node.typeName);
|
|
412
|
+
const kind = typeName === undefined
|
|
413
|
+
? 0 /* TypeReferenceSerializationKind.Unknown */
|
|
414
|
+
: this.resolver.getTypeReferenceSerializationKind(typeName, location);
|
|
415
|
+
switch (kind) {
|
|
416
|
+
case 0 /* TypeReferenceSerializationKind.Unknown */: {
|
|
417
|
+
// An unresolved reference in a conditional type branch is like `any`.
|
|
418
|
+
if (this.serializingConditionalTypeBranch)
|
|
419
|
+
return factory.createIdentifier('Object');
|
|
420
|
+
// `typeof (_a = typeof A !== "undefined" && A) === "function" ? _a : Object`
|
|
421
|
+
const serialized = this.serializeEntityNameAsExpressionFallback(node.typeName);
|
|
422
|
+
const temp = factory.createTempVariable(0);
|
|
423
|
+
this.context.addVariableDeclaration(temp);
|
|
424
|
+
return factory.createConditionalExpression(factory.createTypeCheck(factory.createAssignment(temp, serialized), 'function'), temp, factory.createIdentifier('Object'));
|
|
425
|
+
}
|
|
426
|
+
case 1 /* TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue */:
|
|
427
|
+
return this.serializeEntityNameAsExpression(node.typeName);
|
|
428
|
+
case 2 /* TypeReferenceSerializationKind.VoidNullableOrNeverType */:
|
|
429
|
+
return factory.createVoidZero();
|
|
430
|
+
case 4 /* TypeReferenceSerializationKind.BigIntLikeType */:
|
|
431
|
+
return this.serializeBigIntConstructor();
|
|
432
|
+
case 6 /* TypeReferenceSerializationKind.BooleanType */:
|
|
433
|
+
return factory.createIdentifier('Boolean');
|
|
434
|
+
case 3 /* TypeReferenceSerializationKind.NumberLikeType */:
|
|
435
|
+
return factory.createIdentifier('Number');
|
|
436
|
+
case 5 /* TypeReferenceSerializationKind.StringLikeType */:
|
|
437
|
+
return factory.createIdentifier('String');
|
|
438
|
+
case 7 /* TypeReferenceSerializationKind.ArrayLikeType */:
|
|
439
|
+
return factory.createIdentifier('Array');
|
|
440
|
+
case 8 /* TypeReferenceSerializationKind.ESSymbolType */:
|
|
441
|
+
return factory.createIdentifier('Symbol');
|
|
442
|
+
case 10 /* TypeReferenceSerializationKind.TypeWithCallSignature */:
|
|
443
|
+
return factory.createIdentifier('Function');
|
|
444
|
+
case 9 /* TypeReferenceSerializationKind.Promise */:
|
|
445
|
+
return factory.createIdentifier('Promise');
|
|
446
|
+
}
|
|
447
|
+
return factory.createIdentifier('Object');
|
|
448
|
+
}
|
|
449
|
+
serializeBigIntConstructor() {
|
|
450
|
+
const factory = this.context.factory;
|
|
451
|
+
if (this.target >= ScriptTarget.ES2020)
|
|
452
|
+
return factory.createIdentifier('BigInt');
|
|
453
|
+
return factory.createConditionalExpression(factory.createTypeCheck(factory.createIdentifier('BigInt'), 'function'), factory.createIdentifier('BigInt'), factory.createIdentifier('Object'));
|
|
454
|
+
}
|
|
455
|
+
/** An entity name as an expression; identifiers act as parse-tree references for the module transforms. */
|
|
456
|
+
serializeEntityNameAsExpression(node) {
|
|
457
|
+
const factory = this.context.factory;
|
|
458
|
+
if (node instanceof Identifier) {
|
|
459
|
+
const name = factory.cloneIdentifier(node);
|
|
460
|
+
name.pos = node.pos;
|
|
461
|
+
name.end = node.end;
|
|
462
|
+
this.context.unsetOriginal(name);
|
|
463
|
+
const scope = this.currentLexicalScope;
|
|
464
|
+
name.parent = scope === undefined ? undefined : this.context.parseNode(scope);
|
|
465
|
+
return name;
|
|
466
|
+
}
|
|
467
|
+
if (node instanceof QualifiedName)
|
|
468
|
+
return factory.createPropertyAccessExpression(this.serializeEntityNameAsExpression(node.left), node.right);
|
|
469
|
+
return node;
|
|
470
|
+
}
|
|
471
|
+
/** An entity name guarded so that it doesn't throw if it isn't defined at runtime. */
|
|
472
|
+
serializeEntityNameAsExpressionFallback(node) {
|
|
473
|
+
const factory = this.context.factory;
|
|
474
|
+
// A -> typeof A !== "undefined" && A
|
|
475
|
+
if (node instanceof Identifier) {
|
|
476
|
+
const copied = this.serializeEntityNameAsExpression(node);
|
|
477
|
+
return this.createCheckedValue(copied, copied);
|
|
478
|
+
}
|
|
479
|
+
if (!(node instanceof QualifiedName))
|
|
480
|
+
return node;
|
|
481
|
+
// A.B -> typeof A !== "undefined" && A.B
|
|
482
|
+
if (node.left instanceof Identifier)
|
|
483
|
+
return this.createCheckedValue(this.serializeEntityNameAsExpression(node.left), this.serializeEntityNameAsExpression(node));
|
|
484
|
+
// A.B.C -> typeof A !== "undefined" && (_a = A.B) !== void 0 && _a.C
|
|
485
|
+
const left = this.serializeEntityNameAsExpressionFallback(node.left);
|
|
486
|
+
const temp = factory.createTempVariable(0);
|
|
487
|
+
this.context.addVariableDeclaration(temp);
|
|
488
|
+
const check = left instanceof BinaryExpression ? left.left : left;
|
|
489
|
+
const value = left instanceof BinaryExpression ? left.right : left;
|
|
490
|
+
return factory.createBinaryExpression(factory.createBinaryExpression(check, 55 /* SyntaxKind.AmpersandAmpersandToken */, factory.createBinaryExpression(factory.createAssignment(temp, value), 37 /* SyntaxKind.ExclamationEqualsEqualsToken */, factory.createVoidZero())), 55 /* SyntaxKind.AmpersandAmpersandToken */, factory.createPropertyAccessExpression(temp, node.right));
|
|
491
|
+
}
|
|
492
|
+
/** `typeof left !== "undefined" && right` */
|
|
493
|
+
createCheckedValue(left, right) {
|
|
494
|
+
const factory = this.context.factory;
|
|
495
|
+
return factory.createBinaryExpression(factory.createBinaryExpression(factory.created(new TypeOfExpression(left)), 37 /* SyntaxKind.ExclamationEqualsEqualsToken */, factory.createStringLiteral('undefined', 0 /* TokenFlags.None */)), 55 /* SyntaxKind.AmpersandAmpersandToken */, right);
|
|
496
|
+
}
|
|
497
|
+
equateSerializedTypeNodes(left, right) {
|
|
498
|
+
// Temporaries of fallbacks.
|
|
499
|
+
if (left instanceof Identifier && this.context.hasAutoGenerateInfo(left))
|
|
500
|
+
return right instanceof Identifier && this.context.hasAutoGenerateInfo(right);
|
|
501
|
+
if (left instanceof Identifier)
|
|
502
|
+
return right instanceof Identifier && left.text === right.text;
|
|
503
|
+
if (left instanceof PropertyAccessExpression)
|
|
504
|
+
return (right instanceof PropertyAccessExpression &&
|
|
505
|
+
this.equateSerializedTypeNodes(left.expression, right.expression) &&
|
|
506
|
+
this.equateSerializedTypeNodes(left.name, right.name));
|
|
507
|
+
if (left instanceof VoidExpression)
|
|
508
|
+
return (right instanceof VoidExpression &&
|
|
509
|
+
left.expression.kind === 8 /* SyntaxKind.NumericLiteral */ &&
|
|
510
|
+
right.expression.kind === 8 /* SyntaxKind.NumericLiteral */ &&
|
|
511
|
+
getText(left.expression) === '0' &&
|
|
512
|
+
getText(right.expression) === '0');
|
|
513
|
+
if (left instanceof StringLiteral)
|
|
514
|
+
return right instanceof StringLiteral && left.text === right.text;
|
|
515
|
+
if (left instanceof TypeOfExpression)
|
|
516
|
+
return right instanceof TypeOfExpression && this.equateSerializedTypeNodes(left.expression, right.expression);
|
|
517
|
+
if (left instanceof ParenthesizedExpression)
|
|
518
|
+
return (right instanceof ParenthesizedExpression && this.equateSerializedTypeNodes(left.expression, right.expression));
|
|
519
|
+
if (left instanceof ConditionalExpression)
|
|
520
|
+
return (right instanceof ConditionalExpression &&
|
|
521
|
+
this.equateSerializedTypeNodes(left.condition, right.condition) &&
|
|
522
|
+
this.equateSerializedTypeNodes(left.whenTrue, right.whenTrue) &&
|
|
523
|
+
this.equateSerializedTypeNodes(left.whenFalse, right.whenFalse));
|
|
524
|
+
if (left instanceof BinaryExpression)
|
|
525
|
+
return (right instanceof BinaryExpression &&
|
|
526
|
+
left.operatorToken.kind === right.operatorToken.kind &&
|
|
527
|
+
this.equateSerializedTypeNodes(left.left, right.left) &&
|
|
528
|
+
this.equateSerializedTypeNodes(left.right, right.right));
|
|
529
|
+
return false;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
/** The type annotation of an accessor pair: the setter's parameter, else the getter's return. */
|
|
533
|
+
function getAccessorTypeNode(node, container) {
|
|
534
|
+
const accessors = getAllAccessorDeclarations(getMembers(container).nodes, node);
|
|
535
|
+
if (accessors.setAccessor !== undefined) {
|
|
536
|
+
const parameter = getSetAccessorValueParameter(accessors.setAccessor);
|
|
537
|
+
return parameter === undefined ? undefined : getType(parameter);
|
|
538
|
+
}
|
|
539
|
+
if (accessors.getAccessor !== undefined)
|
|
540
|
+
return getType(accessors.getAccessor);
|
|
541
|
+
return undefined;
|
|
542
|
+
}
|
|
543
|
+
/** A getter's metadata uses the parameters of its setter. */
|
|
544
|
+
function getParametersOfDecoratedDeclaration(node, container) {
|
|
545
|
+
if (node.kind === 178 /* SyntaxKind.GetAccessor */) {
|
|
546
|
+
const accessors = getAllAccessorDeclarations(getMembers(container).nodes, node);
|
|
547
|
+
if (accessors.setAccessor !== undefined)
|
|
548
|
+
return getParameters(accessors.setAccessor).nodes;
|
|
549
|
+
}
|
|
550
|
+
return getParameters(node).nodes;
|
|
551
|
+
}
|
|
552
|
+
function isNullLiteralType(node) {
|
|
553
|
+
return node instanceof LiteralTypeNode && node.literal.kind === 105 /* SyntaxKind.NullKeyword */;
|
|
554
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Node } from '../ast.js';
|
|
2
|
+
import { TextRange } from '../binder-utilities.js';
|
|
3
|
+
/** The decorators among the modifiers of `node`. */
|
|
4
|
+
export declare function getDecorators(node: Node): Node[];
|
|
5
|
+
export declare function isAccessor(node: Node): boolean;
|
|
6
|
+
export declare function getFirstConstructorWithBody(node: Node): Node | undefined;
|
|
7
|
+
/** Whether decorators on `node` take effect, as opposed to being a grammar error. */
|
|
8
|
+
export declare function nodeCanBeDecorated(legacy: boolean, node: Node, parent: Node | undefined, grandparent: Node | undefined): boolean;
|
|
9
|
+
export declare function nodeIsDecorated(legacy: boolean, node: Node, parent: Node | undefined, grandparent: Node | undefined): boolean;
|
|
10
|
+
export declare function nodeOrChildIsDecorated(legacy: boolean, node: Node, parent: Node | undefined, grandparent: Node | undefined): boolean;
|
|
11
|
+
/** Whether a member of a class, or a parameter of a method, setter or constructor, is decorated. */
|
|
12
|
+
export declare function childIsDecorated(legacy: boolean, node: Node, parent: Node | undefined): boolean;
|
|
13
|
+
export declare function classOrConstructorParameterIsDecorated(legacy: boolean, node: Node): boolean;
|
|
14
|
+
export declare function classElementOrClassElementParameterIsDecorated(legacy: boolean, node: Node, parent: Node): boolean;
|
|
15
|
+
/** The get and set accessors declaring one property, in source order. */
|
|
16
|
+
export declare class AllAccessorDeclarations {
|
|
17
|
+
readonly firstAccessor: Node;
|
|
18
|
+
readonly secondAccessor: Node | undefined;
|
|
19
|
+
readonly getAccessor: Node | undefined;
|
|
20
|
+
readonly setAccessor: Node | undefined;
|
|
21
|
+
constructor(firstAccessor: Node, secondAccessor: Node | undefined, getAccessor: Node | undefined, setAccessor: Node | undefined);
|
|
22
|
+
/** The first of the pair with decorators: legacy decorators apply to both. */
|
|
23
|
+
firstWithDecorators(): Node | undefined;
|
|
24
|
+
}
|
|
25
|
+
/** `accessor` and the other accessor among `members` with the same name and staticness. */
|
|
26
|
+
export declare function getAllAccessorDeclarations(members: Node[], accessor: Node): AllAccessorDeclarations;
|
|
27
|
+
/** The property name a name node declares; computed names other than literals are missing. */
|
|
28
|
+
export declare function getPropertyNameForPropertyNameNode(name: Node): string;
|
|
29
|
+
/** The range of `node` after its modifiers, for source maps of what replaces it. */
|
|
30
|
+
export declare function moveRangePastModifiers(node: Node): TextRange;
|
|
31
|
+
/** The range of `node` after its decorators. */
|
|
32
|
+
export declare function moveRangePastDecorators(node: Node): TextRange;
|
|
33
|
+
/** A literal or keyword: evaluated in place rather than cached. */
|
|
34
|
+
export declare function isSimpleInlineableExpression(node: Node): boolean;
|
|
35
|
+
export declare function getSetAccessorValueParameter(node: Node): Node | undefined;
|
|
36
|
+
/** `T` of a rest parameter's `T[]` or `Array<T>`. */
|
|
37
|
+
export declare function getRestParameterElementType(node: Node | undefined): Node | undefined;
|
|
38
|
+
export declare function skipTypeParentheses(node: Node): Node;
|