tsc-ts 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -1
- package/dist/api/compiler/ast-utilities.d.ts +82 -0
- package/dist/api/compiler/ast-utilities.js +462 -0
- package/dist/api/compiler/ast.d.ts +2350 -0
- package/dist/api/compiler/ast.js +11206 -0
- package/dist/api/compiler/astnav.d.ts +37 -0
- package/dist/api/compiler/astnav.js +767 -0
- package/dist/api/compiler/binder-utilities.d.ts +182 -0
- package/dist/api/compiler/binder-utilities.js +1240 -0
- package/dist/api/compiler/binder.d.ts +33 -0
- package/dist/api/compiler/binder.js +2358 -0
- package/dist/api/compiler/character-codes.d.ts +161 -0
- package/dist/api/compiler/character-codes.js +160 -0
- package/dist/api/compiler/checker-calls.d.ts +46 -0
- package/dist/api/compiler/checker-calls.js +1640 -0
- package/dist/api/compiler/checker-classes.d.ts +30 -0
- package/dist/api/compiler/checker-classes.js +582 -0
- package/dist/api/compiler/checker-contextual.d.ts +77 -0
- package/dist/api/compiler/checker-contextual.js +1136 -0
- package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
- package/dist/api/compiler/checker-declaration-order.js +356 -0
- package/dist/api/compiler/checker-declarations.d.ts +33 -0
- package/dist/api/compiler/checker-declarations.js +888 -0
- package/dist/api/compiler/checker-declared-types.d.ts +48 -0
- package/dist/api/compiler/checker-declared-types.js +787 -0
- package/dist/api/compiler/checker-decorators.d.ts +26 -0
- package/dist/api/compiler/checker-decorators.js +562 -0
- package/dist/api/compiler/checker-deprecation.d.ts +33 -0
- package/dist/api/compiler/checker-deprecation.js +315 -0
- package/dist/api/compiler/checker-destructuring.d.ts +34 -0
- package/dist/api/compiler/checker-destructuring.js +584 -0
- package/dist/api/compiler/checker-elaboration.d.ts +15 -0
- package/dist/api/compiler/checker-elaboration.js +290 -0
- package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
- package/dist/api/compiler/checker-emit-helpers.js +154 -0
- package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
- package/dist/api/compiler/checker-emit-resolver.js +579 -0
- package/dist/api/compiler/checker-evaluator.d.ts +27 -0
- package/dist/api/compiler/checker-evaluator.js +188 -0
- package/dist/api/compiler/checker-expressions.d.ts +67 -0
- package/dist/api/compiler/checker-expressions.js +1351 -0
- package/dist/api/compiler/checker-features.d.ts +6 -0
- package/dist/api/compiler/checker-features.js +354 -0
- package/dist/api/compiler/checker-flow.d.ts +86 -0
- package/dist/api/compiler/checker-flow.js +169 -0
- package/dist/api/compiler/checker-functions.d.ts +43 -0
- package/dist/api/compiler/checker-functions.js +1002 -0
- package/dist/api/compiler/checker-generated-code.d.ts +25 -0
- package/dist/api/compiler/checker-generated-code.js +168 -0
- package/dist/api/compiler/checker-globals.d.ts +14 -0
- package/dist/api/compiler/checker-globals.js +37 -0
- package/dist/api/compiler/checker-grammar.d.ts +35 -0
- package/dist/api/compiler/checker-grammar.js +2573 -0
- package/dist/api/compiler/checker-heritage.d.ts +28 -0
- package/dist/api/compiler/checker-heritage.js +900 -0
- package/dist/api/compiler/checker-inference.d.ts +179 -0
- package/dist/api/compiler/checker-inference.js +2105 -0
- package/dist/api/compiler/checker-iteration.d.ts +115 -0
- package/dist/api/compiler/checker-iteration.js +857 -0
- package/dist/api/compiler/checker-javascript.d.ts +42 -0
- package/dist/api/compiler/checker-javascript.js +441 -0
- package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
- package/dist/api/compiler/checker-jsdoc.js +320 -0
- package/dist/api/compiler/checker-jsx.d.ts +94 -0
- package/dist/api/compiler/checker-jsx.js +1433 -0
- package/dist/api/compiler/checker-literals.d.ts +6 -0
- package/dist/api/compiler/checker-literals.js +43 -0
- package/dist/api/compiler/checker-members.d.ts +198 -0
- package/dist/api/compiler/checker-members.js +2126 -0
- package/dist/api/compiler/checker-modules.d.ts +85 -0
- package/dist/api/compiler/checker-modules.js +2141 -0
- package/dist/api/compiler/checker-narrowing.d.ts +120 -0
- package/dist/api/compiler/checker-narrowing.js +2797 -0
- package/dist/api/compiler/checker-object-literals.d.ts +14 -0
- package/dist/api/compiler/checker-object-literals.js +479 -0
- package/dist/api/compiler/checker-operators.d.ts +33 -0
- package/dist/api/compiler/checker-operators.js +1040 -0
- package/dist/api/compiler/checker-overloads.d.ts +7 -0
- package/dist/api/compiler/checker-overloads.js +270 -0
- package/dist/api/compiler/checker-property-access.d.ts +34 -0
- package/dist/api/compiler/checker-property-access.js +672 -0
- package/dist/api/compiler/checker-services.d.ts +49 -0
- package/dist/api/compiler/checker-services.js +995 -0
- package/dist/api/compiler/checker-signatures.d.ts +55 -0
- package/dist/api/compiler/checker-signatures.js +788 -0
- package/dist/api/compiler/checker-source-file.d.ts +27 -0
- package/dist/api/compiler/checker-source-file.js +619 -0
- package/dist/api/compiler/checker-statements.d.ts +18 -0
- package/dist/api/compiler/checker-statements.js +226 -0
- package/dist/api/compiler/checker-super.d.ts +13 -0
- package/dist/api/compiler/checker-super.js +241 -0
- package/dist/api/compiler/checker-symbol-types.d.ts +67 -0
- package/dist/api/compiler/checker-symbol-types.js +1885 -0
- package/dist/api/compiler/checker-symbols.d.ts +181 -0
- package/dist/api/compiler/checker-symbols.js +1782 -0
- package/dist/api/compiler/checker-type-factory.d.ts +142 -0
- package/dist/api/compiler/checker-type-factory.js +2501 -0
- package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
- package/dist/api/compiler/checker-type-nodes.js +828 -0
- package/dist/api/compiler/checker-type-operators.d.ts +109 -0
- package/dist/api/compiler/checker-type-operators.js +1842 -0
- package/dist/api/compiler/checker-types.d.ts +1027 -0
- package/dist/api/compiler/checker-types.js +1697 -0
- package/dist/api/compiler/checker-unused.d.ts +19 -0
- package/dist/api/compiler/checker-unused.js +524 -0
- package/dist/api/compiler/checker-utilities.d.ts +33 -0
- package/dist/api/compiler/checker-utilities.js +141 -0
- package/dist/api/compiler/checker.d.ts +491 -0
- package/dist/api/compiler/checker.js +912 -0
- package/dist/api/compiler/command-line.d.ts +32 -0
- package/dist/api/compiler/command-line.js +383 -0
- package/dist/api/compiler/compile-program.d.ts +118 -0
- package/dist/api/compiler/compile-program.js +384 -0
- package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
- package/dist/api/compiler/diagnostic-locales.js +64 -0
- package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
- package/dist/api/compiler/diagnostic-messages.js +184 -0
- package/dist/api/compiler/diagnostics.d.ts +167 -0
- package/dist/api/compiler/diagnostics.js +820 -0
- package/dist/api/compiler/emitter.d.ts +71 -0
- package/dist/api/compiler/emitter.js +327 -0
- package/dist/api/compiler/file-include.d.ts +117 -0
- package/dist/api/compiler/file-include.js +536 -0
- package/dist/api/compiler/file-loader.d.ts +261 -0
- package/dist/api/compiler/file-loader.js +1257 -0
- package/dist/api/compiler/file-system.d.ts +51 -0
- package/dist/api/compiler/file-system.js +132 -0
- package/dist/api/compiler/flow.d.ts +60 -0
- package/dist/api/compiler/flow.js +45 -0
- package/dist/api/compiler/instantiation.d.ts +74 -0
- package/dist/api/compiler/instantiation.js +799 -0
- package/dist/api/compiler/jsdoc.d.ts +75 -0
- package/dist/api/compiler/jsdoc.js +1229 -0
- package/dist/api/compiler/link-tables.d.ts +36 -0
- package/dist/api/compiler/link-tables.js +83 -0
- package/dist/api/compiler/locale-data.d.ts +24 -0
- package/dist/api/compiler/locale-data.js +183 -0
- package/dist/api/compiler/locale.d.ts +4 -0
- package/dist/api/compiler/locale.js +317 -0
- package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
- package/dist/api/compiler/locales/cs-CZ.js +3 -0
- package/dist/api/compiler/locales/de-DE.d.ts +2 -0
- package/dist/api/compiler/locales/de-DE.js +3 -0
- package/dist/api/compiler/locales/es-ES.d.ts +2 -0
- package/dist/api/compiler/locales/es-ES.js +3 -0
- package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
- package/dist/api/compiler/locales/fr-FR.js +3 -0
- package/dist/api/compiler/locales/it-IT.d.ts +2 -0
- package/dist/api/compiler/locales/it-IT.js +3 -0
- package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
- package/dist/api/compiler/locales/ja-JP.js +3 -0
- package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
- package/dist/api/compiler/locales/ko-KR.js +3 -0
- package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
- package/dist/api/compiler/locales/pl-PL.js +3 -0
- package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
- package/dist/api/compiler/locales/pt-BR.js +3 -0
- package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
- package/dist/api/compiler/locales/ru-RU.js +3 -0
- package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
- package/dist/api/compiler/locales/tr-TR.js +3 -0
- package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
- package/dist/api/compiler/locales/zh-CN.js +3 -0
- package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
- package/dist/api/compiler/locales/zh-TW.js +3 -0
- package/dist/api/compiler/module-resolution-types.d.ts +83 -0
- package/dist/api/compiler/module-resolution-types.js +176 -0
- package/dist/api/compiler/module-resolution.d.ts +71 -0
- package/dist/api/compiler/module-resolution.js +1598 -0
- package/dist/api/compiler/module-specifiers.d.ts +64 -0
- package/dist/api/compiler/module-specifiers.js +1101 -0
- package/dist/api/compiler/name-resolver.d.ts +43 -0
- package/dist/api/compiler/name-resolver.js +509 -0
- package/dist/api/compiler/node-builder-names.d.ts +32 -0
- package/dist/api/compiler/node-builder-names.js +854 -0
- package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
- package/dist/api/compiler/node-builder-pseudo.js +744 -0
- package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
- package/dist/api/compiler/node-builder-reuse.js +647 -0
- package/dist/api/compiler/node-builder.d.ts +270 -0
- package/dist/api/compiler/node-builder.js +2645 -0
- package/dist/api/compiler/option-declarations.d.ts +90 -0
- package/dist/api/compiler/option-declarations.js +1460 -0
- package/dist/api/compiler/options.d.ts +289 -0
- package/dist/api/compiler/options.js +1197 -0
- package/dist/api/compiler/output-paths.d.ts +42 -0
- package/dist/api/compiler/output-paths.js +195 -0
- package/dist/api/compiler/package-json.d.ts +175 -0
- package/dist/api/compiler/package-json.js +1015 -0
- package/dist/api/compiler/parallel-parse.d.ts +219 -0
- package/dist/api/compiler/parallel-parse.js +537 -0
- package/dist/api/compiler/parser.d.ts +587 -0
- package/dist/api/compiler/parser.js +6407 -0
- package/dist/api/compiler/path.d.ts +91 -0
- package/dist/api/compiler/path.js +705 -0
- package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
- package/dist/api/compiler/printer/async-helpers.js +91 -0
- package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
- package/dist/api/compiler/printer/auto-generate.js +20 -0
- package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
- package/dist/api/compiler/printer/decorator-helpers.js +118 -0
- package/dist/api/compiler/printer/emit-context.d.ts +154 -0
- package/dist/api/compiler/printer/emit-context.js +576 -0
- package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
- package/dist/api/compiler/printer/emit-flags.js +2 -0
- package/dist/api/compiler/printer/factory-base.d.ts +171 -0
- package/dist/api/compiler/printer/factory-base.js +1505 -0
- package/dist/api/compiler/printer/factory.d.ts +147 -0
- package/dist/api/compiler/printer/factory.js +542 -0
- package/dist/api/compiler/printer/helpers.d.ts +27 -0
- package/dist/api/compiler/printer/helpers.js +164 -0
- package/dist/api/compiler/printer/name-generator.d.ts +41 -0
- package/dist/api/compiler/printer/name-generator.js +283 -0
- package/dist/api/compiler/printer/printer.d.ts +411 -0
- package/dist/api/compiler/printer/printer.js +4517 -0
- package/dist/api/compiler/printer/text-writer.d.ts +46 -0
- package/dist/api/compiler/printer/text-writer.js +172 -0
- package/dist/api/compiler/printer/utilities.d.ts +82 -0
- package/dist/api/compiler/printer/utilities.js +817 -0
- package/dist/api/compiler/program-checker.d.ts +156 -0
- package/dist/api/compiler/program-checker.js +526 -0
- package/dist/api/compiler/program-utilities.d.ts +52 -0
- package/dist/api/compiler/program-utilities.js +365 -0
- package/dist/api/compiler/program.d.ts +180 -0
- package/dist/api/compiler/program.js +1011 -0
- package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
- package/dist/api/compiler/pseudo-bigint.js +61 -0
- package/dist/api/compiler/regexp-checker.d.ts +38 -0
- package/dist/api/compiler/regexp-checker.js +942 -0
- package/dist/api/compiler/relations.d.ts +263 -0
- package/dist/api/compiler/relations.js +4002 -0
- package/dist/api/compiler/reparser.d.ts +48 -0
- package/dist/api/compiler/reparser.js +1323 -0
- package/dist/api/compiler/scanner.d.ts +256 -0
- package/dist/api/compiler/scanner.js +2853 -0
- package/dist/api/compiler/side-state.d.ts +16 -0
- package/dist/api/compiler/side-state.js +89 -0
- package/dist/api/compiler/sourcemap.d.ts +55 -0
- package/dist/api/compiler/sourcemap.js +340 -0
- package/dist/api/compiler/spelling.d.ts +14 -0
- package/dist/api/compiler/spelling.js +128 -0
- package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
- package/dist/api/compiler/symbol-accessibility.js +894 -0
- package/dist/api/compiler/symbol.d.ts +240 -0
- package/dist/api/compiler/symbol.js +228 -0
- package/dist/api/compiler/symlinks.d.ts +32 -0
- package/dist/api/compiler/symlinks.js +114 -0
- package/dist/api/compiler/syntax-kind.d.ts +389 -0
- package/dist/api/compiler/syntax-kind.js +2 -0
- package/dist/api/compiler/timeline.d.ts +9 -0
- package/dist/api/compiler/timeline.js +54 -0
- package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
- package/dist/api/compiler/transformers/alias-references.js +676 -0
- package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
- package/dist/api/compiler/transformers/async-utilities.js +260 -0
- package/dist/api/compiler/transformers/async.d.ts +53 -0
- package/dist/api/compiler/transformers/async.js +645 -0
- package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
- package/dist/api/compiler/transformers/class-fields.js +2418 -0
- package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
- package/dist/api/compiler/transformers/class-utilities.js +261 -0
- package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
- package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
- package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
- package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
- package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
- package/dist/api/compiler/transformers/declarations-diagnostics.js +538 -0
- package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
- package/dist/api/compiler/transformers/declarations-pseudo.js +797 -0
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
- package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
- package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
- package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
- package/dist/api/compiler/transformers/declarations-tracker.js +197 -0
- package/dist/api/compiler/transformers/declarations.d.ts +175 -0
- package/dist/api/compiler/transformers/declarations.js +2380 -0
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
- package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
- package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
- package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
- package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
- package/dist/api/compiler/transformers/destructuring.js +626 -0
- package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
- package/dist/api/compiler/transformers/downlevel.js +45 -0
- package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
- package/dist/api/compiler/transformers/emit-resolver.js +197 -0
- package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
- package/dist/api/compiler/transformers/es-decorators.js +1901 -0
- package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
- package/dist/api/compiler/transformers/exponentiation.js +76 -0
- package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
- package/dist/api/compiler/transformers/external-module-info.js +351 -0
- package/dist/api/compiler/transformers/for-await.d.ts +43 -0
- package/dist/api/compiler/transformers/for-await.js +469 -0
- package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
- package/dist/api/compiler/transformers/import-elision.js +124 -0
- package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
- package/dist/api/compiler/transformers/jsx-entities.js +256 -0
- package/dist/api/compiler/transformers/jsx.d.ts +71 -0
- package/dist/api/compiler/transformers/jsx.js +700 -0
- package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
- package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
- package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
- package/dist/api/compiler/transformers/logical-assignment.js +62 -0
- package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
- package/dist/api/compiler/transformers/module-utilities.js +36 -0
- package/dist/api/compiler/transformers/module.d.ts +49 -0
- package/dist/api/compiler/transformers/module.js +296 -0
- package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
- package/dist/api/compiler/transformers/named-evaluation.js +266 -0
- package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
- package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
- package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
- package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
- package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
- package/dist/api/compiler/transformers/optional-catch.js +20 -0
- package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
- package/dist/api/compiler/transformers/optional-chain.js +188 -0
- package/dist/api/compiler/transformers/reference-resolver.d.ts +128 -0
- package/dist/api/compiler/transformers/reference-resolver.js +1155 -0
- package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
- package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
- package/dist/api/compiler/transformers/subtree-facts.d.ts +9 -0
- package/dist/api/compiler/transformers/subtree-facts.js +203 -0
- package/dist/api/compiler/transformers/syntax-facts.d.ts +51 -0
- package/dist/api/compiler/transformers/syntax-facts.js +254 -0
- package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
- package/dist/api/compiler/transformers/tagged-template.js +148 -0
- package/dist/api/compiler/transformers/transformer.d.ts +17 -0
- package/dist/api/compiler/transformers/transformer.js +54 -0
- package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
- package/dist/api/compiler/transformers/type-eraser.js +346 -0
- package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
- package/dist/api/compiler/transformers/type-serialization.js +347 -0
- package/dist/api/compiler/transformers/using.d.ts +56 -0
- package/dist/api/compiler/transformers/using.js +453 -0
- package/dist/api/compiler/transformers/utilities.d.ts +50 -0
- package/dist/api/compiler/transformers/utilities.js +347 -0
- package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
- package/dist/api/compiler/transformers/visitor-base.js +817 -0
- package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
- package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
- package/dist/api/compiler/tsconfig.d.ts +177 -0
- package/dist/api/compiler/tsconfig.js +1311 -0
- package/dist/api/compiler/type-printer.d.ts +15 -0
- package/dist/api/compiler/type-printer.js +74 -0
- package/dist/api/compiler/types.d.ts +87 -0
- package/dist/api/compiler/types.js +23 -0
- package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
- package/dist/api/compiler/unicode-identifiers.js +209 -0
- package/dist/api/compiler/unicode-properties.d.ts +8 -0
- package/dist/api/compiler/unicode-properties.js +531 -0
- package/dist/api/compiler/vfs-match.d.ts +24 -0
- package/dist/api/compiler/vfs-match.js +587 -0
- package/dist/api/library/ast.d.ts +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 +12862 -0
- package/src/compiler/astnav.ts +799 -0
- package/src/compiler/binder-utilities.ts +1392 -0
- package/src/compiler/binder.ts +2703 -0
- package/src/compiler/build-info.ts +1197 -0
- package/src/compiler/character-codes.ts +323 -0
- package/src/compiler/checker-calls.ts +2155 -0
- package/src/compiler/checker-classes.ts +706 -0
- package/src/compiler/checker-contextual.ts +1457 -0
- package/src/compiler/checker-declaration-order.ts +438 -0
- package/src/compiler/checker-declarations.ts +1194 -0
- package/src/compiler/checker-declared-types.ts +919 -0
- package/src/compiler/checker-decorators.ts +694 -0
- package/src/compiler/checker-deprecation.ts +359 -0
- package/src/compiler/checker-destructuring.ts +805 -0
- package/src/compiler/checker-elaboration.ts +477 -0
- package/src/compiler/checker-emit-helpers.ts +224 -0
- package/src/compiler/checker-emit-resolver.ts +769 -0
- package/src/compiler/checker-evaluator.ts +243 -0
- package/src/compiler/checker-expressions.ts +1831 -0
- package/src/compiler/checker-features.ts +361 -0
- package/src/compiler/checker-flow.ts +394 -0
- package/src/compiler/checker-functions.ts +1296 -0
- package/src/compiler/checker-generated-code.ts +227 -0
- package/src/compiler/checker-globals.ts +52 -0
- package/src/compiler/checker-grammar.ts +3584 -0
- package/src/compiler/checker-heritage.ts +1233 -0
- package/src/compiler/checker-inference.ts +2576 -0
- package/src/compiler/checker-iteration.ts +1206 -0
- package/src/compiler/checker-javascript.ts +502 -0
- package/src/compiler/checker-jsdoc.ts +360 -0
- package/src/compiler/checker-jsx.ts +1924 -0
- package/src/compiler/checker-literals.ts +61 -0
- package/src/compiler/checker-members.ts +2436 -0
- package/src/compiler/checker-modules.ts +2886 -0
- package/src/compiler/checker-narrowing.ts +3230 -0
- package/src/compiler/checker-object-literals.ts +575 -0
- package/src/compiler/checker-operators.ts +1422 -0
- package/src/compiler/checker-overloads.ts +328 -0
- package/src/compiler/checker-property-access.ts +906 -0
- package/src/compiler/checker-services.ts +1149 -0
- package/src/compiler/checker-signatures.ts +1032 -0
- package/src/compiler/checker-source-file.ts +732 -0
- package/src/compiler/checker-statements.ts +292 -0
- package/src/compiler/checker-super.ts +261 -0
- package/src/compiler/checker-symbol-types.ts +2107 -0
- package/src/compiler/checker-symbols.ts +2150 -0
- package/src/compiler/checker-type-factory.ts +2579 -0
- package/src/compiler/checker-type-nodes.ts +1033 -0
- package/src/compiler/checker-type-operators.ts +2502 -0
- package/src/compiler/checker-types.ts +2340 -0
- package/src/compiler/checker-unused.ts +642 -0
- package/src/compiler/checker-utilities.ts +161 -0
- package/src/compiler/checker.ts +1116 -0
- package/src/compiler/command-line.ts +436 -0
- package/src/compiler/compile-program.ts +439 -0
- package/src/compiler/decoder.ts +1209 -0
- package/src/compiler/diagnostic-locales.ts +86 -0
- package/src/compiler/diagnostic-messages.ts +2349 -0
- package/src/compiler/diagnostics.ts +897 -0
- package/src/compiler/emitter.ts +434 -0
- package/src/compiler/encoder.ts +1945 -0
- package/src/compiler/file-include.ts +673 -0
- package/src/compiler/file-loader.ts +1528 -0
- package/src/compiler/file-system.ts +143 -0
- package/src/compiler/flow.ts +89 -0
- package/src/compiler/help.ts +473 -0
- package/src/compiler/incremental.ts +2784 -0
- package/src/compiler/init.ts +141 -0
- package/src/compiler/instantiation.ts +894 -0
- package/src/compiler/jsdoc.ts +1386 -0
- package/src/compiler/link-tables.ts +98 -0
- package/src/compiler/locale-data.ts +203 -0
- package/src/compiler/locale.ts +307 -0
- package/src/compiler/locales/cs-CZ.ts +5 -0
- package/src/compiler/locales/de-DE.ts +5 -0
- package/src/compiler/locales/es-ES.ts +5 -0
- package/src/compiler/locales/fr-FR.ts +5 -0
- package/src/compiler/locales/it-IT.ts +5 -0
- package/src/compiler/locales/ja-JP.ts +5 -0
- package/src/compiler/locales/ko-KR.ts +5 -0
- package/src/compiler/locales/pl-PL.ts +5 -0
- package/src/compiler/locales/pt-BR.ts +5 -0
- package/src/compiler/locales/ru-RU.ts +5 -0
- package/src/compiler/locales/tr-TR.ts +5 -0
- package/src/compiler/locales/zh-CN.ts +5 -0
- package/src/compiler/locales/zh-TW.ts +5 -0
- package/src/compiler/module-resolution-types.ts +243 -0
- package/src/compiler/module-resolution.ts +2072 -0
- package/src/compiler/module-specifiers.ts +1491 -0
- package/src/compiler/name-resolver.ts +646 -0
- package/src/compiler/node-builder-names.ts +1069 -0
- package/src/compiler/node-builder-pseudo.ts +892 -0
- package/src/compiler/node-builder-reuse.ts +764 -0
- package/src/compiler/node-builder.ts +3425 -0
- package/src/compiler/option-declarations.ts +1560 -0
- package/src/compiler/options.ts +1576 -0
- package/src/compiler/output-paths.ts +334 -0
- package/src/compiler/package-json.ts +1083 -0
- package/src/compiler/parallel-check.ts +1951 -0
- package/src/compiler/parallel-parse.ts +590 -0
- package/src/compiler/parse-thread.ts +140 -0
- package/src/compiler/parser.ts +7716 -0
- package/src/compiler/path.ts +717 -0
- package/src/compiler/printer/async-helpers.ts +183 -0
- package/src/compiler/printer/auto-generate.ts +27 -0
- package/src/compiler/printer/decorator-helpers.ts +218 -0
- package/src/compiler/printer/emit-context.ts +679 -0
- package/src/compiler/printer/emit-flags.ts +64 -0
- package/src/compiler/printer/factory-base.ts +2577 -0
- package/src/compiler/printer/factory.ts +764 -0
- package/src/compiler/printer/helpers.ts +291 -0
- package/src/compiler/printer/name-generator.ts +372 -0
- package/src/compiler/printer/printer.ts +5072 -0
- package/src/compiler/printer/text-writer.ts +183 -0
- package/src/compiler/printer/utilities.ts +884 -0
- package/src/compiler/program-checker.ts +592 -0
- package/src/compiler/program-utilities.ts +435 -0
- package/src/compiler/program.ts +1419 -0
- package/src/compiler/pseudo-bigint.ts +62 -0
- package/src/compiler/regexp-checker.ts +1142 -0
- package/src/compiler/relations.ts +5149 -0
- package/src/compiler/reparser.ts +1566 -0
- package/src/compiler/scanner.ts +2951 -0
- package/src/compiler/show-config.ts +239 -0
- package/src/compiler/side-state.ts +125 -0
- package/src/compiler/sourcemap.ts +366 -0
- package/src/compiler/spelling.ts +122 -0
- package/src/compiler/symbol-accessibility.ts +1071 -0
- package/src/compiler/symbol.ts +439 -0
- package/src/compiler/symlinks.ts +137 -0
- package/src/compiler/syntax-kind.ts +391 -0
- package/src/compiler/thread-entry.ts +191 -0
- package/src/compiler/timeline.ts +53 -0
- package/src/compiler/transformers/alias-references.ts +757 -0
- package/src/compiler/transformers/async-utilities.ts +335 -0
- package/src/compiler/transformers/async.ts +838 -0
- package/src/compiler/transformers/class-fields.ts +2967 -0
- package/src/compiler/transformers/class-utilities.ts +324 -0
- package/src/compiler/transformers/commonjs-module.ts +1621 -0
- package/src/compiler/transformers/const-enum-inliner.ts +50 -0
- package/src/compiler/transformers/declarations-diagnostics.ts +832 -0
- package/src/compiler/transformers/declarations-pseudo.ts +966 -0
- package/src/compiler/transformers/declarations-resolver.ts +249 -0
- package/src/compiler/transformers/declarations-syntactic.ts +1859 -0
- package/src/compiler/transformers/declarations-tracker.ts +269 -0
- package/src/compiler/transformers/declarations.ts +3120 -0
- package/src/compiler/transformers/decorator-metadata.ts +697 -0
- package/src/compiler/transformers/decorator-utilities.ts +283 -0
- package/src/compiler/transformers/destructuring.ts +708 -0
- package/src/compiler/transformers/downlevel.ts +50 -0
- package/src/compiler/transformers/emit-resolver.ts +258 -0
- package/src/compiler/transformers/es-decorators.ts +2682 -0
- package/src/compiler/transformers/exponentiation.ts +80 -0
- package/src/compiler/transformers/external-module-info.ts +412 -0
- package/src/compiler/transformers/for-await.ts +687 -0
- package/src/compiler/transformers/import-elision.ts +152 -0
- package/src/compiler/transformers/jsx-entities.ts +256 -0
- package/src/compiler/transformers/jsx.ts +824 -0
- package/src/compiler/transformers/legacy-decorators.ts +726 -0
- package/src/compiler/transformers/logical-assignment.ts +75 -0
- package/src/compiler/transformers/module-utilities.ts +42 -0
- package/src/compiler/transformers/module.ts +474 -0
- package/src/compiler/transformers/named-evaluation.ts +389 -0
- package/src/compiler/transformers/nullish-coalescing.ts +35 -0
- package/src/compiler/transformers/object-rest-spread.ts +577 -0
- package/src/compiler/transformers/optional-catch.ts +29 -0
- package/src/compiler/transformers/optional-chain.ts +246 -0
- package/src/compiler/transformers/reference-resolver.ts +1201 -0
- package/src/compiler/transformers/runtime-syntax.ts +942 -0
- package/src/compiler/transformers/subtree-facts.ts +245 -0
- package/src/compiler/transformers/syntax-facts.ts +353 -0
- package/src/compiler/transformers/tagged-template.ts +167 -0
- package/src/compiler/transformers/transformer.ts +56 -0
- package/src/compiler/transformers/type-eraser.ts +520 -0
- package/src/compiler/transformers/type-serialization.ts +374 -0
- package/src/compiler/transformers/using.ts +613 -0
- package/src/compiler/transformers/utilities.ts +419 -0
- package/src/compiler/transformers/visitor-base.ts +1601 -0
- package/src/compiler/transformers/visitor-hooks.ts +252 -0
- package/src/compiler/tsc-build.ts +1418 -0
- package/src/compiler/tsc-cli.ts +666 -0
- package/src/compiler/tsc-compile.ts +437 -0
- package/src/compiler/tsc-watch.ts +854 -0
- package/src/compiler/tsconfig.ts +1574 -0
- package/src/compiler/type-printer.ts +110 -0
- package/src/compiler/types.ts +115 -0
- package/src/compiler/unicode-identifiers.ts +212 -0
- package/src/compiler/unicode-properties.ts +537 -0
- package/src/compiler/vfs-match.ts +597 -0
- package/src/compiler/xxh3.ts +650 -0
- package/src/library/ast.generated.ts +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,56 @@
|
|
|
1
|
+
import { type Node } from '../ast.js';
|
|
2
|
+
import { type CompilerOptions } 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 LegacyDecorators extends Transformer {
|
|
8
|
+
private readonly target;
|
|
9
|
+
private readonly resolver;
|
|
10
|
+
private readonly facts;
|
|
11
|
+
/** Aliases of decorated classes that refer to themselves. */
|
|
12
|
+
private readonly classAliases;
|
|
13
|
+
/** Decorated classes with aliases whose bodies are being visited. */
|
|
14
|
+
private enclosingClasses;
|
|
15
|
+
constructor(context: EmitContext, options: CompilerOptions, resolver: EmitResolver, facts: SyntaxFacts);
|
|
16
|
+
visit(node: Node): Node | undefined;
|
|
17
|
+
private visitSourceFile;
|
|
18
|
+
/** A reference to a decorated class from inside its body becomes a reference to its alias. */
|
|
19
|
+
private visitIdentifier;
|
|
20
|
+
private finishClassElement;
|
|
21
|
+
private visitParameter;
|
|
22
|
+
/** The visited name of a class element; a decorated computed name is cached in a temporary for `__decorate`. */
|
|
23
|
+
private visitPropertyNameOfClassElement;
|
|
24
|
+
private visitPropertyDeclaration;
|
|
25
|
+
private visitClassDeclaration;
|
|
26
|
+
private transformClassDeclarationWithoutClassDecorators;
|
|
27
|
+
/**
|
|
28
|
+
* A decorated class becomes `let C = class C {}` followed by the decorations; an export of it
|
|
29
|
+
* moves after them.
|
|
30
|
+
*/
|
|
31
|
+
private transformClassDeclarationWithClassDecorators;
|
|
32
|
+
/** Whether a member refers to the class by name, other than as a property name. */
|
|
33
|
+
private hasInternalStaticReference;
|
|
34
|
+
isReferenceTo(node: Node, declaration: Node): boolean;
|
|
35
|
+
/** The declaration the parse-tree identifier behind `node` refers to. */
|
|
36
|
+
private getReferencedValueDeclaration;
|
|
37
|
+
private getClassAliasIfNeeded;
|
|
38
|
+
private getConstructorDecorationStatement;
|
|
39
|
+
/** `C = __decorate([...], C)`, or `C = C_1 = __decorate([...], C)` with an alias. */
|
|
40
|
+
private generateConstructorDecorationExpression;
|
|
41
|
+
/** The members, and the statements decorating them after the class. */
|
|
42
|
+
private transformDecoratorsOfClassElements;
|
|
43
|
+
private hasClassElementWithDecoratorContainingPrivateIdentifierInExpression;
|
|
44
|
+
private someContainsPrivateIdentifierInExpression;
|
|
45
|
+
/** `__decorate` statements for the static or instance members. */
|
|
46
|
+
private addClassElementDecorationStatements;
|
|
47
|
+
/**
|
|
48
|
+
* `__decorate([...], C.prototype, "name", null)` for a method or accessor, or with `void 0`
|
|
49
|
+
* for a property, so `__decorate` defines it without reading its descriptor first.
|
|
50
|
+
*/
|
|
51
|
+
private generateClassElementDecorationExpression;
|
|
52
|
+
/** The decorator expressions, then `__param` calls, then `__metadata` calls. */
|
|
53
|
+
private transformAllDecoratorsOfDeclaration;
|
|
54
|
+
private visitDecoratorExpression;
|
|
55
|
+
private getExpressionForPropertyName;
|
|
56
|
+
}
|
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
// Legacy (`experimentalDecorators`) decorators: decorated classes and members become
|
|
2
|
+
// `__decorate` calls after the class, and parameter decorators `__param` calls.
|
|
3
|
+
//
|
|
4
|
+
// @dec class C { @m method(@p x) {} }
|
|
5
|
+
// becomes
|
|
6
|
+
// let C = class C { method(x) {} };
|
|
7
|
+
// __decorate([m, __param(0, p)], C.prototype, "method", null);
|
|
8
|
+
// C = __decorate([dec], C);
|
|
9
|
+
//
|
|
10
|
+
// A decorated class that refers to itself inside its body gets an alias (`C_1`) for those
|
|
11
|
+
// references, since a class decorator can replace the class binding.
|
|
12
|
+
import { ClassDeclaration, ClassExpression, ClassStaticBlockDeclaration, ComputedPropertyName, ConstructorDeclaration, Decorator, ExportAssignment, ExportDeclaration, ExportSpecifier, GetAccessorDeclaration, Identifier, MethodDeclaration, NamedExports, NodeVisitor, ParameterDeclaration, PrivateIdentifier, PropertyAccessExpression, PropertyDeclaration, SetAccessorDeclaration, SourceFile, getBody, getMembers, getName, getParameters, } from '../ast.js';
|
|
13
|
+
import { canHaveDecorators } from '../ast-utilities.js';
|
|
14
|
+
import { isStatic } from '../binder-utilities.js';
|
|
15
|
+
import { ScriptTarget, getEmitScriptTarget } from '../options.js';
|
|
16
|
+
import { createDecorateHelper, createParamHelper } from '../printer/decorator-helpers.js';
|
|
17
|
+
import { skipPartiallyEmittedExpressions } from '../printer/utilities.js';
|
|
18
|
+
import { childIsDecorated, classOrConstructorParameterIsDecorated, getAllAccessorDeclarations, getDecorators, getFirstConstructorWithBody, isSimpleInlineableExpression, moveRangePastModifiers, nodeOrChildIsDecorated, } from './decorator-utilities.js';
|
|
19
|
+
import { Transformer } from './transformer.js';
|
|
20
|
+
import { hasDecorators, hasSyntacticModifier, isThisParameter } from './utilities.js';
|
|
21
|
+
/** The decorators of a declaration, and of its parameters by index. */
|
|
22
|
+
class AllDecorators {
|
|
23
|
+
decorators;
|
|
24
|
+
parameters;
|
|
25
|
+
constructor(decorators, parameters) {
|
|
26
|
+
this.decorators = decorators;
|
|
27
|
+
this.parameters = parameters;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class ClassElementDecorations {
|
|
31
|
+
members;
|
|
32
|
+
statements;
|
|
33
|
+
constructor(members, statements) {
|
|
34
|
+
this.members = members;
|
|
35
|
+
this.statements = statements;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class LegacyDecorators extends Transformer {
|
|
39
|
+
target;
|
|
40
|
+
resolver;
|
|
41
|
+
facts;
|
|
42
|
+
/** Aliases of decorated classes that refer to themselves. */
|
|
43
|
+
classAliases;
|
|
44
|
+
/** Decorated classes with aliases whose bodies are being visited. */
|
|
45
|
+
enclosingClasses;
|
|
46
|
+
constructor(context, options, resolver, facts) {
|
|
47
|
+
super(context);
|
|
48
|
+
this.target = getEmitScriptTarget(options);
|
|
49
|
+
this.resolver = resolver;
|
|
50
|
+
this.facts = facts;
|
|
51
|
+
this.classAliases = new Map();
|
|
52
|
+
this.enclosingClasses = [];
|
|
53
|
+
}
|
|
54
|
+
visit(node) {
|
|
55
|
+
// Identifiers in classes with aliases may need substitution.
|
|
56
|
+
if (!this.facts.has(node, 262144 /* SubtreeFacts.ContainsDecorators */) && this.enclosingClasses.length === 0)
|
|
57
|
+
return node;
|
|
58
|
+
switch (node.kind) {
|
|
59
|
+
case 79 /* SyntaxKind.Identifier */:
|
|
60
|
+
return node instanceof Identifier ? this.visitIdentifier(node) : node;
|
|
61
|
+
case 212 /* SyntaxKind.PropertyAccessExpression */:
|
|
62
|
+
if (node instanceof PropertyAccessExpression) {
|
|
63
|
+
// Property names are never substituted.
|
|
64
|
+
const expression = this.visitNode(node.expression);
|
|
65
|
+
return this.factory.updatePropertyAccessExpression(node, expression, node.questionDotToken, node.name, node.flags);
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
case 171 /* SyntaxKind.Decorator */:
|
|
69
|
+
// Emitted as part of the class.
|
|
70
|
+
return undefined;
|
|
71
|
+
case 264 /* SyntaxKind.ClassDeclaration */:
|
|
72
|
+
if (node instanceof ClassDeclaration)
|
|
73
|
+
return this.visitClassDeclaration(node);
|
|
74
|
+
break;
|
|
75
|
+
case 232 /* SyntaxKind.ClassExpression */:
|
|
76
|
+
if (node instanceof ClassExpression)
|
|
77
|
+
// Legacy decorators don't apply to class expressions.
|
|
78
|
+
return this.factory.updateClassExpression(node, this.visitModifiers(node.modifiers), node.name, undefined, this.visitNodes(node.heritageClauses), this.visitNodes(node.members));
|
|
79
|
+
break;
|
|
80
|
+
case 177 /* SyntaxKind.Constructor */:
|
|
81
|
+
if (node instanceof ConstructorDeclaration)
|
|
82
|
+
return this.factory.updateConstructorDeclaration(node, this.visitModifiers(node.modifiers), undefined, this.visitNodes(node.parameters), undefined, undefined, this.visitNode(node.body));
|
|
83
|
+
break;
|
|
84
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
85
|
+
if (node instanceof MethodDeclaration)
|
|
86
|
+
return this.finishClassElement(this.factory.updateMethodDeclaration(node, this.visitModifiers(node.modifiers), node.asteriskToken, this.visitPropertyNameOfClassElement(node), undefined, undefined, this.visitNodes(node.parameters), undefined, undefined, this.visitNode(node.body)), node);
|
|
87
|
+
break;
|
|
88
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
89
|
+
if (node instanceof GetAccessorDeclaration)
|
|
90
|
+
return this.finishClassElement(this.factory.updateGetAccessorDeclaration(node, this.visitModifiers(node.modifiers), this.visitPropertyNameOfClassElement(node), undefined, this.visitNodes(node.parameters), undefined, undefined, this.visitNode(node.body)), node);
|
|
91
|
+
break;
|
|
92
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
93
|
+
if (node instanceof SetAccessorDeclaration)
|
|
94
|
+
return this.finishClassElement(this.factory.updateSetAccessorDeclaration(node, this.visitModifiers(node.modifiers), this.visitPropertyNameOfClassElement(node), undefined, this.visitNodes(node.parameters), undefined, undefined, this.visitNode(node.body)), node);
|
|
95
|
+
break;
|
|
96
|
+
case 173 /* SyntaxKind.PropertyDeclaration */:
|
|
97
|
+
if (node instanceof PropertyDeclaration)
|
|
98
|
+
return this.visitPropertyDeclaration(node);
|
|
99
|
+
break;
|
|
100
|
+
case 170 /* SyntaxKind.Parameter */:
|
|
101
|
+
if (node instanceof ParameterDeclaration)
|
|
102
|
+
return this.visitParameter(node);
|
|
103
|
+
break;
|
|
104
|
+
case 307 /* SyntaxKind.SourceFile */:
|
|
105
|
+
if (node instanceof SourceFile)
|
|
106
|
+
return this.visitSourceFile(node);
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
return this.visitEachChild(node);
|
|
110
|
+
}
|
|
111
|
+
visitSourceFile(node) {
|
|
112
|
+
this.classAliases.clear();
|
|
113
|
+
this.enclosingClasses = [];
|
|
114
|
+
const result = this.visitEachChild(node);
|
|
115
|
+
const helpers = this.context.readEmitHelpers();
|
|
116
|
+
for (let i = 0; i < helpers.length; i++)
|
|
117
|
+
this.context.addEmitHelper(result, helpers[i]);
|
|
118
|
+
this.classAliases.clear();
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
/** A reference to a decorated class from inside its body becomes a reference to its alias. */
|
|
122
|
+
visitIdentifier(node) {
|
|
123
|
+
if (this.enclosingClasses.length === 0)
|
|
124
|
+
return node;
|
|
125
|
+
const declaration = this.getReferencedValueDeclaration(node);
|
|
126
|
+
if (declaration === undefined)
|
|
127
|
+
return node;
|
|
128
|
+
for (let i = 0; i < this.enclosingClasses.length; i++) {
|
|
129
|
+
const enclosing = this.enclosingClasses[i];
|
|
130
|
+
const alias = this.classAliases.get(enclosing);
|
|
131
|
+
if (alias !== undefined && declaration === this.context.mostOriginal(enclosing))
|
|
132
|
+
return alias;
|
|
133
|
+
}
|
|
134
|
+
return node;
|
|
135
|
+
}
|
|
136
|
+
finishClassElement(updated, original) {
|
|
137
|
+
if (updated !== original) {
|
|
138
|
+
// Source maps skip the decorators and modifiers; comments keep the original range.
|
|
139
|
+
this.context.setCommentRange(updated, original.pos, original.end);
|
|
140
|
+
const range = moveRangePastModifiers(original);
|
|
141
|
+
this.context.setSourceMapRange(updated, range.pos, range.end);
|
|
142
|
+
}
|
|
143
|
+
return updated;
|
|
144
|
+
}
|
|
145
|
+
visitParameter(node) {
|
|
146
|
+
const updated = this.factory.updateParameterDeclaration(node, elideModifiers(this, node.modifiers), node.dotDotDotToken, this.visitNode(node.name), undefined, undefined, this.visitNode(node.initializer));
|
|
147
|
+
if (updated !== node) {
|
|
148
|
+
this.context.setCommentRange(updated, node.pos, node.end);
|
|
149
|
+
const range = moveRangePastModifiers(node);
|
|
150
|
+
updated.pos = range.pos | 0;
|
|
151
|
+
updated.end = range.end | 0;
|
|
152
|
+
this.context.setSourceMapRange(updated, range.pos, range.end);
|
|
153
|
+
if (updated instanceof ParameterDeclaration)
|
|
154
|
+
this.context.setEmitFlags(updated.name, 8 /* EmitFlags.NoTrailingSourceMap */);
|
|
155
|
+
}
|
|
156
|
+
return updated;
|
|
157
|
+
}
|
|
158
|
+
/** The visited name of a class element; a decorated computed name is cached in a temporary for `__decorate`. */
|
|
159
|
+
visitPropertyNameOfClassElement(member) {
|
|
160
|
+
const name = getName(member);
|
|
161
|
+
if (name instanceof ComputedPropertyName && hasDecorators(member)) {
|
|
162
|
+
const expression = this.visitNode(name.expression);
|
|
163
|
+
if (!isSimpleInlineableExpression(skipPartiallyEmittedExpressions(expression))) {
|
|
164
|
+
const generated = this.factory.createGeneratedNameForNode(name, 0, '', '');
|
|
165
|
+
this.context.addVariableDeclaration(generated);
|
|
166
|
+
return this.factory.updateComputedPropertyName(name, this.factory.createAssignment(generated, expression));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return this.visitNode(name);
|
|
170
|
+
}
|
|
171
|
+
visitPropertyDeclaration(node) {
|
|
172
|
+
if ((node.flags & 8388608 /* NodeFlags.Ambient */) !== 0)
|
|
173
|
+
return undefined;
|
|
174
|
+
if (hasSyntacticModifier(node, 128 /* ModifierFlags.Ambient */ | 64 /* ModifierFlags.Abstract */))
|
|
175
|
+
return undefined;
|
|
176
|
+
return this.finishClassElement(this.factory.updatePropertyDeclaration(node, this.visitModifiers(node.modifiers), this.visitPropertyNameOfClassElement(node), undefined, undefined, this.visitNode(node.initializer)), node);
|
|
177
|
+
}
|
|
178
|
+
// Classes
|
|
179
|
+
visitClassDeclaration(node) {
|
|
180
|
+
const decorated = classOrConstructorParameterIsDecorated(true, node);
|
|
181
|
+
if (!decorated && !childIsDecorated(true, node, undefined))
|
|
182
|
+
return this.visitEachChild(node);
|
|
183
|
+
if (decorated)
|
|
184
|
+
return this.transformClassDeclarationWithClassDecorators(node, node.name);
|
|
185
|
+
return this.transformClassDeclarationWithoutClassDecorators(node, node.name);
|
|
186
|
+
}
|
|
187
|
+
transformClassDeclarationWithoutClassDecorators(node, name) {
|
|
188
|
+
const modifiers = this.visitModifiers(node.modifiers);
|
|
189
|
+
const heritageClauses = this.visitNodes(node.heritageClauses);
|
|
190
|
+
const visitedMembers = this.visitNodes(node.members);
|
|
191
|
+
const decorations = this.transformDecoratorsOfClassElements(node, visitedMembers);
|
|
192
|
+
const members = decorations.members;
|
|
193
|
+
const decorationStatements = decorations.statements;
|
|
194
|
+
if (name === undefined && decorationStatements.length > 0)
|
|
195
|
+
name = this.factory.createGeneratedNameForNode(node, 0, '', '');
|
|
196
|
+
const updated = this.factory.updateClassDeclaration(node, modifiers, name, undefined, heritageClauses, members);
|
|
197
|
+
if (decorationStatements.length === 0)
|
|
198
|
+
return updated;
|
|
199
|
+
return this.factory.createSyntaxList([updated].concat(decorationStatements));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* A decorated class becomes `let C = class C {}` followed by the decorations; an export of it
|
|
203
|
+
* moves after them.
|
|
204
|
+
*/
|
|
205
|
+
transformClassDeclarationWithClassDecorators(node, name) {
|
|
206
|
+
const factory = this.factory;
|
|
207
|
+
const context = this.context;
|
|
208
|
+
const isExport = hasSyntacticModifier(node, 32 /* ModifierFlags.Export */);
|
|
209
|
+
const isDefault = hasSyntacticModifier(node, 2048 /* ModifierFlags.Default */);
|
|
210
|
+
let modifiers = undefined;
|
|
211
|
+
if (node.modifiers !== undefined && node.modifiers.nodes.length > 0) {
|
|
212
|
+
const kept = [];
|
|
213
|
+
for (let i = 0; i < node.modifiers.nodes.length; i++) {
|
|
214
|
+
const modifier = node.modifiers.nodes[i];
|
|
215
|
+
if (!(modifier instanceof Decorator) &&
|
|
216
|
+
modifier.kind !== 94 /* SyntaxKind.ExportKeyword */ &&
|
|
217
|
+
modifier.kind !== 89 /* SyntaxKind.DefaultKeyword */)
|
|
218
|
+
kept.push(modifier);
|
|
219
|
+
}
|
|
220
|
+
if (kept.length !== node.modifiers.nodes.length) {
|
|
221
|
+
modifiers = factory.createModifierList(kept);
|
|
222
|
+
modifiers.pos = node.modifiers.pos;
|
|
223
|
+
modifiers.end = node.modifiers.end;
|
|
224
|
+
}
|
|
225
|
+
else
|
|
226
|
+
modifiers = node.modifiers;
|
|
227
|
+
}
|
|
228
|
+
const location = moveRangePastModifiers(node);
|
|
229
|
+
const classAlias = this.getClassAliasIfNeeded(node);
|
|
230
|
+
if (classAlias !== undefined)
|
|
231
|
+
this.enclosingClasses.push(node);
|
|
232
|
+
// Always the local name: there are no ES5 IIFEs to name differently.
|
|
233
|
+
const declarationName = factory.getLocalName(node, 2 /* NameOptions.AllowSourceMaps */);
|
|
234
|
+
const heritageClauses = this.visitNodes(node.heritageClauses);
|
|
235
|
+
const visitedMembers = this.visitNodes(node.members);
|
|
236
|
+
const decorations = this.transformDecoratorsOfClassElements(node, visitedMembers);
|
|
237
|
+
let members = decorations.members;
|
|
238
|
+
const decorationStatements = decorations.statements;
|
|
239
|
+
// From ES2022, the alias must be assigned before static initializers run.
|
|
240
|
+
const assignClassAliasInStaticBlock = this.target >= ScriptTarget.ES2022 &&
|
|
241
|
+
classAlias !== undefined &&
|
|
242
|
+
members.nodes.length > 0 &&
|
|
243
|
+
members.nodes.some(isClassStaticBlockDeclarationOrStaticProperty);
|
|
244
|
+
if (assignClassAliasInStaticBlock) {
|
|
245
|
+
const block = factory.created(new ClassStaticBlockDeclaration(undefined, factory.createBlock([
|
|
246
|
+
factory.createExpressionStatement(factory.createAssignment(classAlias, factory.createKeywordExpression(109 /* SyntaxKind.ThisKeyword */))),
|
|
247
|
+
], false)));
|
|
248
|
+
const list = factory.createNodeList([block].concat(members.nodes));
|
|
249
|
+
list.pos = members.pos;
|
|
250
|
+
list.end = members.end;
|
|
251
|
+
members = list;
|
|
252
|
+
}
|
|
253
|
+
const expressionName = name !== undefined && context.hasAutoGenerateInfo(name) ? undefined : name;
|
|
254
|
+
const classExpression = factory.created(new ClassExpression(modifiers, expressionName, undefined, heritageClauses, members));
|
|
255
|
+
context.setOriginal(classExpression, node);
|
|
256
|
+
classExpression.pos = location.pos | 0;
|
|
257
|
+
classExpression.end = location.end | 0;
|
|
258
|
+
const initializer = classAlias !== undefined && !assignClassAliasInStaticBlock
|
|
259
|
+
? factory.createAssignment(classAlias, classExpression)
|
|
260
|
+
: classExpression;
|
|
261
|
+
const declaration = factory.createVariableDeclaration(declarationName, undefined, undefined, initializer);
|
|
262
|
+
context.setOriginal(declaration, node);
|
|
263
|
+
const statement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList(factory.createNodeList([declaration]), 1 /* NodeFlags.Let */));
|
|
264
|
+
context.setOriginal(statement, node);
|
|
265
|
+
statement.pos = location.pos | 0;
|
|
266
|
+
statement.end = location.end | 0;
|
|
267
|
+
context.setCommentRange(statement, node.pos, node.end);
|
|
268
|
+
const statements = [statement];
|
|
269
|
+
for (let i = 0; i < decorationStatements.length; i++)
|
|
270
|
+
statements.push(decorationStatements[i]);
|
|
271
|
+
const constructorDecoration = this.getConstructorDecorationStatement(node);
|
|
272
|
+
if (constructorDecoration !== undefined)
|
|
273
|
+
statements.push(constructorDecoration);
|
|
274
|
+
if (isExport) {
|
|
275
|
+
if (isDefault)
|
|
276
|
+
statements.push(factory.created(new ExportAssignment(undefined, false, undefined, declarationName)));
|
|
277
|
+
else {
|
|
278
|
+
const specifier = factory.created(new ExportSpecifier(false, undefined, factory.getDeclarationName(node, 0 /* NameOptions.None */)));
|
|
279
|
+
statements.push(factory.created(new ExportDeclaration(undefined, false, factory.created(new NamedExports(factory.createNodeList([specifier]))), undefined, undefined)));
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (classAlias !== undefined)
|
|
283
|
+
this.enclosingClasses.pop();
|
|
284
|
+
return statements.length === 1 ? statements[0] : factory.createSyntaxList(statements);
|
|
285
|
+
}
|
|
286
|
+
/** Whether a member refers to the class by name, other than as a property name. */
|
|
287
|
+
hasInternalStaticReference(node) {
|
|
288
|
+
const classNode = this.context.mostOriginal(node);
|
|
289
|
+
const members = node.members.nodes;
|
|
290
|
+
const finder = new SelfReferenceFinder(this, classNode);
|
|
291
|
+
for (let i = 0; i < members.length; i++)
|
|
292
|
+
if (members[i].forEachChild(finder))
|
|
293
|
+
return true;
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
isReferenceTo(node, declaration) {
|
|
297
|
+
return node instanceof Identifier && this.getReferencedValueDeclaration(node) === declaration;
|
|
298
|
+
}
|
|
299
|
+
/** The declaration the parse-tree identifier behind `node` refers to. */
|
|
300
|
+
getReferencedValueDeclaration(node) {
|
|
301
|
+
const original = this.context.mostOriginal(node);
|
|
302
|
+
if (original instanceof Identifier && (original.flags & 16 /* NodeFlags.Synthesized */) === 0) {
|
|
303
|
+
return this.resolver.getReferencedValueDeclaration(original);
|
|
304
|
+
}
|
|
305
|
+
return undefined;
|
|
306
|
+
}
|
|
307
|
+
getClassAliasIfNeeded(node) {
|
|
308
|
+
if (!this.hasInternalStaticReference(node))
|
|
309
|
+
return undefined;
|
|
310
|
+
const name = node.name;
|
|
311
|
+
const text = name !== undefined && !this.context.hasAutoGenerateInfo(name) ? name.text : 'default';
|
|
312
|
+
const alias = this.factory.createUniqueName(text, 0);
|
|
313
|
+
this.context.addVariableDeclaration(alias);
|
|
314
|
+
this.classAliases.set(node, alias);
|
|
315
|
+
return alias;
|
|
316
|
+
}
|
|
317
|
+
getConstructorDecorationStatement(node) {
|
|
318
|
+
const expression = this.generateConstructorDecorationExpression(node);
|
|
319
|
+
if (expression === undefined)
|
|
320
|
+
return undefined;
|
|
321
|
+
const statement = this.factory.createExpressionStatement(expression);
|
|
322
|
+
this.context.setOriginal(statement, node);
|
|
323
|
+
return statement;
|
|
324
|
+
}
|
|
325
|
+
/** `C = __decorate([...], C)`, or `C = C_1 = __decorate([...], C)` with an alias. */
|
|
326
|
+
generateConstructorDecorationExpression(node) {
|
|
327
|
+
const all = getAllDecoratorsOfClass(node);
|
|
328
|
+
// Class decorators are evaluated outside the class body, where its name isn't aliased.
|
|
329
|
+
const enclosing = this.enclosingClasses;
|
|
330
|
+
const aliased = enclosing.length > 0 && enclosing[enclosing.length - 1] === node;
|
|
331
|
+
if (aliased)
|
|
332
|
+
enclosing.pop();
|
|
333
|
+
const decoratorExpressions = this.transformAllDecoratorsOfDeclaration(all);
|
|
334
|
+
if (aliased)
|
|
335
|
+
enclosing.push(node);
|
|
336
|
+
if (decoratorExpressions.length === 0)
|
|
337
|
+
return undefined;
|
|
338
|
+
const factory = this.factory;
|
|
339
|
+
const classAlias = this.classAliases.get(node);
|
|
340
|
+
const localName = factory.getDeclarationName(node, 2 /* NameOptions.AllowSourceMaps */);
|
|
341
|
+
const decorate = createDecorateHelper(factory, decoratorExpressions, localName, undefined, undefined);
|
|
342
|
+
const value = classAlias !== undefined ? factory.createAssignment(classAlias, decorate) : decorate;
|
|
343
|
+
const expression = factory.createAssignment(localName, value);
|
|
344
|
+
this.context.setEmitFlags(expression, 384 /* EmitFlags.NoComments */);
|
|
345
|
+
const range = moveRangePastModifiers(node);
|
|
346
|
+
this.context.setSourceMapRange(expression, range.pos, range.end);
|
|
347
|
+
return expression;
|
|
348
|
+
}
|
|
349
|
+
// Members
|
|
350
|
+
/** The members, and the statements decorating them after the class. */
|
|
351
|
+
transformDecoratorsOfClassElements(node, members) {
|
|
352
|
+
const statements = [];
|
|
353
|
+
this.addClassElementDecorationStatements(node, false, statements);
|
|
354
|
+
this.addClassElementDecorationStatements(node, true, statements);
|
|
355
|
+
// Decorators using private names must run in the class's private name scope.
|
|
356
|
+
if (!this.hasClassElementWithDecoratorContainingPrivateIdentifierInExpression(node))
|
|
357
|
+
return new ClassElementDecorations(members, statements);
|
|
358
|
+
const block = this.factory.created(new ClassStaticBlockDeclaration(undefined, this.factory.createBlock(statements, true)));
|
|
359
|
+
const extra = [block];
|
|
360
|
+
return new ClassElementDecorations(this.factory.createNodeList(members.nodes.concat(extra)), []);
|
|
361
|
+
}
|
|
362
|
+
hasClassElementWithDecoratorContainingPrivateIdentifierInExpression(node) {
|
|
363
|
+
const members = node.members.nodes;
|
|
364
|
+
for (let i = 0; i < members.length; i++) {
|
|
365
|
+
const member = members[i];
|
|
366
|
+
if (!canHaveDecorators(member))
|
|
367
|
+
continue;
|
|
368
|
+
const all = getAllDecoratorsOfClassElement(member, node);
|
|
369
|
+
if (all === undefined)
|
|
370
|
+
continue;
|
|
371
|
+
if (this.someContainsPrivateIdentifierInExpression(all.decorators))
|
|
372
|
+
return true;
|
|
373
|
+
for (let j = 0; j < all.parameters.length; j++) {
|
|
374
|
+
const parameter = all.parameters[j];
|
|
375
|
+
if (parameter !== undefined && this.someContainsPrivateIdentifierInExpression(parameter))
|
|
376
|
+
return true;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
someContainsPrivateIdentifierInExpression(decorators) {
|
|
382
|
+
for (let i = 0; i < decorators.length; i++)
|
|
383
|
+
if (this.facts.has(decorators[i], 1048576 /* SubtreeFacts.ContainsPrivateIdentifierInExpression */))
|
|
384
|
+
return true;
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
387
|
+
/** `__decorate` statements for the static or instance members. */
|
|
388
|
+
addClassElementDecorationStatements(node, isStaticMember, statements) {
|
|
389
|
+
const members = node.members.nodes;
|
|
390
|
+
for (let i = 0; i < members.length; i++) {
|
|
391
|
+
const member = members[i];
|
|
392
|
+
if (isStatic(member) !== isStaticMember || !nodeOrChildIsDecorated(true, member, node, undefined))
|
|
393
|
+
continue;
|
|
394
|
+
const expression = this.generateClassElementDecorationExpression(node, member);
|
|
395
|
+
if (expression !== undefined)
|
|
396
|
+
statements.push(this.factory.createExpressionStatement(expression));
|
|
397
|
+
}
|
|
398
|
+
return true;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* `__decorate([...], C.prototype, "name", null)` for a method or accessor, or with `void 0`
|
|
402
|
+
* for a property, so `__decorate` defines it without reading its descriptor first.
|
|
403
|
+
*/
|
|
404
|
+
generateClassElementDecorationExpression(node, member) {
|
|
405
|
+
const all = getAllDecoratorsOfClassElement(member, node);
|
|
406
|
+
const decoratorExpressions = this.transformAllDecoratorsOfDeclaration(all);
|
|
407
|
+
if (decoratorExpressions.length === 0)
|
|
408
|
+
return undefined;
|
|
409
|
+
const factory = this.factory;
|
|
410
|
+
const prefix = isStatic(member)
|
|
411
|
+
? factory.getDeclarationName(node, 0 /* NameOptions.None */)
|
|
412
|
+
: factory.createPropertyAccessExpression(factory.getDeclarationName(node, 0 /* NameOptions.None */), factory.createIdentifier('prototype'));
|
|
413
|
+
const memberName = this.getExpressionForPropertyName(member, (member.flags & 8388608 /* NodeFlags.Ambient */) === 0);
|
|
414
|
+
const descriptor = member instanceof PropertyDeclaration && !hasSyntacticModifier(member, 512 /* ModifierFlags.Accessor */)
|
|
415
|
+
? factory.createVoidZero()
|
|
416
|
+
: factory.createKeywordExpression(105 /* SyntaxKind.NullKeyword */);
|
|
417
|
+
const helper = createDecorateHelper(factory, decoratorExpressions, prefix, memberName, descriptor);
|
|
418
|
+
this.context.setEmitFlags(helper, 384 /* EmitFlags.NoComments */);
|
|
419
|
+
const range = moveRangePastModifiers(member);
|
|
420
|
+
this.context.setSourceMapRange(helper, range.pos, range.end);
|
|
421
|
+
return helper;
|
|
422
|
+
}
|
|
423
|
+
/** The decorator expressions, then `__param` calls, then `__metadata` calls. */
|
|
424
|
+
transformAllDecoratorsOfDeclaration(all) {
|
|
425
|
+
const expressions = [];
|
|
426
|
+
if (all === undefined)
|
|
427
|
+
return expressions;
|
|
428
|
+
const metadata = [];
|
|
429
|
+
for (let i = 0; i < all.decorators.length; i++) {
|
|
430
|
+
const decorator = all.decorators[i];
|
|
431
|
+
if (decorator instanceof Decorator && this.factory.isCallToHelper(decorator.expression, '__metadata'))
|
|
432
|
+
metadata.push(decorator);
|
|
433
|
+
else
|
|
434
|
+
expressions.push(this.visitDecoratorExpression(decorator));
|
|
435
|
+
}
|
|
436
|
+
for (let i = 0; i < all.parameters.length; i++) {
|
|
437
|
+
const decorators = all.parameters[i];
|
|
438
|
+
if (decorators === undefined)
|
|
439
|
+
continue;
|
|
440
|
+
for (let j = 0; j < decorators.length; j++) {
|
|
441
|
+
const decorator = decorators[j];
|
|
442
|
+
if (!(decorator instanceof Decorator))
|
|
443
|
+
continue;
|
|
444
|
+
const expression = decorator.expression;
|
|
445
|
+
const helper = createParamHelper(this.factory, this.visitNode(expression), i, expression.pos, expression.end);
|
|
446
|
+
this.context.setEmitFlags(helper, 384 /* EmitFlags.NoComments */);
|
|
447
|
+
expressions.push(helper);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
for (let i = 0; i < metadata.length; i++)
|
|
451
|
+
expressions.push(this.visitDecoratorExpression(metadata[i]));
|
|
452
|
+
return expressions;
|
|
453
|
+
}
|
|
454
|
+
visitDecoratorExpression(decorator) {
|
|
455
|
+
return decorator instanceof Decorator ? this.visitNode(decorator.expression) : decorator;
|
|
456
|
+
}
|
|
457
|
+
getExpressionForPropertyName(member, generateNameForComputedPropertyName) {
|
|
458
|
+
const name = getName(member);
|
|
459
|
+
const factory = this.factory;
|
|
460
|
+
if (name instanceof PrivateIdentifier)
|
|
461
|
+
return factory.createIdentifier('');
|
|
462
|
+
if (name instanceof ComputedPropertyName) {
|
|
463
|
+
if (generateNameForComputedPropertyName && !isSimpleInlineableExpression(name.expression))
|
|
464
|
+
return factory.createGeneratedNameForNode(name, 0, '', '');
|
|
465
|
+
return name.expression;
|
|
466
|
+
}
|
|
467
|
+
if (name instanceof Identifier)
|
|
468
|
+
return factory.createStringLiteral(name.text, 0 /* TokenFlags.None */);
|
|
469
|
+
return factory.cloneNode(name, name.deepClone());
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
/** Finds a reference to a class among the children of its members; property names don't count. */
|
|
473
|
+
class SelfReferenceFinder extends NodeVisitor {
|
|
474
|
+
transformer;
|
|
475
|
+
declaration;
|
|
476
|
+
constructor(transformer, declaration) {
|
|
477
|
+
super();
|
|
478
|
+
this.transformer = transformer;
|
|
479
|
+
this.declaration = declaration;
|
|
480
|
+
}
|
|
481
|
+
visitNode(node) {
|
|
482
|
+
if (this.transformer.isReferenceTo(node, this.declaration))
|
|
483
|
+
return true;
|
|
484
|
+
if (node instanceof PropertyAccessExpression)
|
|
485
|
+
return this.visitNode(node.expression);
|
|
486
|
+
return node.forEachChild(this);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
function elideModifiers(transformer, modifiers) {
|
|
490
|
+
if (modifiers === undefined || modifiers.nodes.length === 0)
|
|
491
|
+
return modifiers;
|
|
492
|
+
const replacement = transformer.factory.createModifierList([]);
|
|
493
|
+
replacement.pos = modifiers.pos;
|
|
494
|
+
replacement.end = modifiers.end;
|
|
495
|
+
return replacement;
|
|
496
|
+
}
|
|
497
|
+
function isClassStaticBlockDeclarationOrStaticProperty(node) {
|
|
498
|
+
return (node.kind === 176 /* SyntaxKind.ClassStaticBlockDeclaration */ ||
|
|
499
|
+
(node.kind === 173 /* SyntaxKind.PropertyDeclaration */ && hasSyntacticModifier(node, 256 /* ModifierFlags.Static */)));
|
|
500
|
+
}
|
|
501
|
+
function getAllDecoratorsOfClass(node) {
|
|
502
|
+
const decorators = getDecorators(node);
|
|
503
|
+
const parameters = getDecoratorsOfParameters(getFirstConstructorWithBody(node));
|
|
504
|
+
if (decorators.length === 0 && parameters.length === 0)
|
|
505
|
+
return undefined;
|
|
506
|
+
return new AllDecorators(decorators, parameters);
|
|
507
|
+
}
|
|
508
|
+
function getAllDecoratorsOfClassElement(member, parent) {
|
|
509
|
+
switch (member.kind) {
|
|
510
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
511
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
512
|
+
return getAllDecoratorsOfAccessors(member, parent);
|
|
513
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
514
|
+
return getAllDecoratorsOfMethod(member);
|
|
515
|
+
case 173 /* SyntaxKind.PropertyDeclaration */: {
|
|
516
|
+
const decorators = getDecorators(member);
|
|
517
|
+
return decorators.length === 0 ? undefined : new AllDecorators(decorators, []);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
return undefined;
|
|
521
|
+
}
|
|
522
|
+
/** Decorators of an accessor pair apply once, on the first accessor that has them. */
|
|
523
|
+
function getAllDecoratorsOfAccessors(accessor, parent) {
|
|
524
|
+
if (getBody(accessor) === undefined)
|
|
525
|
+
return undefined;
|
|
526
|
+
const accessors = getAllAccessorDeclarations(getMembers(parent).nodes, accessor);
|
|
527
|
+
const first = accessors.firstWithDecorators();
|
|
528
|
+
if (first === undefined || accessor !== first)
|
|
529
|
+
return undefined;
|
|
530
|
+
const decorators = getDecorators(first);
|
|
531
|
+
const parameters = accessors.setAccessor !== undefined ? getDecoratorsOfParameters(accessors.setAccessor) : noParameters;
|
|
532
|
+
if (decorators.length === 0 && parameters.length === 0)
|
|
533
|
+
return undefined;
|
|
534
|
+
return new AllDecorators(decorators, parameters);
|
|
535
|
+
}
|
|
536
|
+
function getAllDecoratorsOfMethod(method) {
|
|
537
|
+
if (!(method instanceof MethodDeclaration) || method.body === undefined)
|
|
538
|
+
return undefined;
|
|
539
|
+
const decorators = getDecorators(method);
|
|
540
|
+
const parameters = getDecoratorsOfParameters(method);
|
|
541
|
+
if (decorators.length === 0 && parameters.length === 0)
|
|
542
|
+
return undefined;
|
|
543
|
+
return new AllDecorators(decorators, parameters);
|
|
544
|
+
}
|
|
545
|
+
const noParameters = [];
|
|
546
|
+
/** The decorators of each parameter after `this`, or an empty array if none are decorated. */
|
|
547
|
+
function getDecoratorsOfParameters(node) {
|
|
548
|
+
const result = [];
|
|
549
|
+
if (node === undefined)
|
|
550
|
+
return result;
|
|
551
|
+
const parameters = getParameters(node).nodes;
|
|
552
|
+
const offset = parameters.length > 0 && isThisParameter(parameters[0]) ? 1 : 0;
|
|
553
|
+
const count = parameters.length - offset;
|
|
554
|
+
for (let i = 0; i < count; i++) {
|
|
555
|
+
const parameter = parameters[i + offset];
|
|
556
|
+
if (result.length > 0 || hasDecorators(parameter)) {
|
|
557
|
+
if (result.length === 0)
|
|
558
|
+
for (let j = 0; j < count; j++)
|
|
559
|
+
result.push(undefined);
|
|
560
|
+
result[i] = getDecorators(parameter);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return result;
|
|
564
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Node } from '../ast.js';
|
|
2
|
+
import type { EmitContext } from '../printer/emit-context.js';
|
|
3
|
+
import { type SyntaxFacts } from './syntax-facts.js';
|
|
4
|
+
import { Transformer } from './transformer.js';
|
|
5
|
+
export declare class LogicalAssignmentTransformer extends Transformer {
|
|
6
|
+
readonly facts: SyntaxFacts;
|
|
7
|
+
constructor(context: EmitContext, facts: SyntaxFacts);
|
|
8
|
+
visit(node: Node): Node | undefined;
|
|
9
|
+
private visitLogicalAssignment;
|
|
10
|
+
/** `expression`, or a temporary to hold it when it can't be evaluated twice. */
|
|
11
|
+
private copiableObject;
|
|
12
|
+
/** `expression`, or its assignment to the temporary `copy` holding it. */
|
|
13
|
+
private assignedObject;
|
|
14
|
+
}
|