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,626 @@
|
|
|
1
|
+
// Flattens destructuring into assignments or declarations of each target: for exported names
|
|
2
|
+
// that must be assigned through `exports.x` or `ns.x`, and for lowering object rest elements.
|
|
3
|
+
import { ArrayLiteralExpression, BinaryExpression, BindingElement, BindingPattern, ComputedPropertyName, ElementAccessExpression, Identifier, NumericLiteral, ObjectLiteralExpression, OmittedExpression, ParameterDeclaration, PropertyAssignment, ShorthandPropertyAssignment, SpreadAssignment, SpreadElement, StringLiteral, VariableDeclaration, getName, NoSubstitutionTemplateLiteral, BigIntLiteral, } from '../ast.js';
|
|
4
|
+
import { isAssignmentExpression, isDestructuringAssignment, isPropertyNameLiteral } from '../binder-utilities.js';
|
|
5
|
+
import { restHelper } from '../printer/helpers.js';
|
|
6
|
+
import { nodeIsSynthesized } from '../printer/utilities.js';
|
|
7
|
+
/** Creates the assignment of a flattened value to an identifier, such as `exports.x = value`. */
|
|
8
|
+
export class AssignmentFactory {
|
|
9
|
+
}
|
|
10
|
+
/** Flattens `node`, a destructuring assignment or variable declaration, into a comma expression. */
|
|
11
|
+
export function flattenDestructuringAssignment(visitor, node, needsValue, assignments) {
|
|
12
|
+
const flattener = new Flattener(visitor, undefined, false, true);
|
|
13
|
+
flattener.assignments = assignments;
|
|
14
|
+
return flattener.flattenAssignment(node, needsValue);
|
|
15
|
+
}
|
|
16
|
+
/** Flattens a destructuring assignment only as far as needed to lower its object rest elements. */
|
|
17
|
+
export function flattenObjectRestAssignment(visitor, facts, node, needsValue) {
|
|
18
|
+
return new Flattener(visitor, facts, false, true).flattenAssignment(node, needsValue);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Flattens the binding pattern of a variable declaration, parameter or binding element into
|
|
22
|
+
* variable declarations: a `VariableDeclaration`, a `SyntaxList` of them, or undefined. With
|
|
23
|
+
* `facts`, patterns are only decomposed as far as needed to lower object rest elements.
|
|
24
|
+
*/
|
|
25
|
+
export function flattenDestructuringBinding(visitor, facts, node, rval, hoistTempVariables, skipInitializer) {
|
|
26
|
+
return new Flattener(visitor, facts, true, hoistTempVariables).flattenBinding(node, rval, skipInitializer);
|
|
27
|
+
}
|
|
28
|
+
/** A declaration waiting for the expressions before it to be inlined into its value. */
|
|
29
|
+
class PendingDeclaration {
|
|
30
|
+
pendingExpressions;
|
|
31
|
+
name;
|
|
32
|
+
value;
|
|
33
|
+
pos;
|
|
34
|
+
end;
|
|
35
|
+
original;
|
|
36
|
+
constructor(name, value, pos, end, original) {
|
|
37
|
+
this.pendingExpressions = [];
|
|
38
|
+
this.name = name;
|
|
39
|
+
this.value = value;
|
|
40
|
+
this.pos = pos;
|
|
41
|
+
this.end = end;
|
|
42
|
+
this.original = original;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
class Flattener {
|
|
46
|
+
visitor;
|
|
47
|
+
/** Set to flatten only patterns with object rest elements. */
|
|
48
|
+
facts;
|
|
49
|
+
/** Emits variable declarations rather than assignments. */
|
|
50
|
+
binding;
|
|
51
|
+
hoistTempVariables;
|
|
52
|
+
assignments;
|
|
53
|
+
expressions;
|
|
54
|
+
declarations;
|
|
55
|
+
hasTransformedPriorElement;
|
|
56
|
+
constructor(visitor, facts, binding, hoistTempVariables) {
|
|
57
|
+
this.visitor = visitor;
|
|
58
|
+
this.facts = facts;
|
|
59
|
+
this.binding = binding;
|
|
60
|
+
this.hoistTempVariables = hoistTempVariables;
|
|
61
|
+
this.assignments = undefined;
|
|
62
|
+
this.expressions = [];
|
|
63
|
+
this.declarations = [];
|
|
64
|
+
this.hasTransformedPriorElement = false;
|
|
65
|
+
}
|
|
66
|
+
flattenAssignment(start, needsValue) {
|
|
67
|
+
const factory = this.visitor.factory;
|
|
68
|
+
let node = start;
|
|
69
|
+
let pos = node.pos;
|
|
70
|
+
let end = node.end;
|
|
71
|
+
let value = undefined;
|
|
72
|
+
if (node instanceof BinaryExpression && isDestructuringAssignment(node)) {
|
|
73
|
+
let assignment = node;
|
|
74
|
+
value = assignment.right;
|
|
75
|
+
while (isEmptyPattern(assignment.left)) {
|
|
76
|
+
const right = assignment.right;
|
|
77
|
+
if (right instanceof BinaryExpression && isDestructuringAssignment(right)) {
|
|
78
|
+
assignment = right;
|
|
79
|
+
node = right;
|
|
80
|
+
pos = right.pos;
|
|
81
|
+
end = right.end;
|
|
82
|
+
value = right.right;
|
|
83
|
+
}
|
|
84
|
+
else
|
|
85
|
+
return this.visitor.visitNode(right);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (value !== undefined) {
|
|
89
|
+
value = this.visitor.visitNode(value);
|
|
90
|
+
if ((value instanceof Identifier && elementAssignsToName(node, value.text)) ||
|
|
91
|
+
elementContainsNonLiteralComputedName(node))
|
|
92
|
+
value = this.ensureIdentifier(value, false, pos, end);
|
|
93
|
+
else if (needsValue)
|
|
94
|
+
value = this.ensureIdentifier(value, true, pos, end);
|
|
95
|
+
else if (nodeIsSynthesized(node)) {
|
|
96
|
+
pos = value.pos;
|
|
97
|
+
end = value.end;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
this.flattenElement(node, value, pos, end, node instanceof BinaryExpression && isDestructuringAssignment(node));
|
|
101
|
+
if (value !== undefined && needsValue) {
|
|
102
|
+
if (this.expressions.length === 0)
|
|
103
|
+
return value;
|
|
104
|
+
this.expressions.push(value);
|
|
105
|
+
}
|
|
106
|
+
const result = factory.inlineExpressions(this.expressions);
|
|
107
|
+
return result !== undefined ? result : factory.created(new OmittedExpression());
|
|
108
|
+
}
|
|
109
|
+
flattenBinding(start, rval, skipInitializer) {
|
|
110
|
+
const factory = this.visitor.factory;
|
|
111
|
+
let node = start;
|
|
112
|
+
if (node instanceof VariableDeclaration) {
|
|
113
|
+
let initializer = node.initializer;
|
|
114
|
+
if (initializer !== undefined &&
|
|
115
|
+
((initializer instanceof Identifier && elementAssignsToName(node, initializer.text)) ||
|
|
116
|
+
elementContainsNonLiteralComputedName(node))) {
|
|
117
|
+
initializer = this.ensureIdentifier(this.visitor.visitNode(initializer), false, initializer.pos, initializer.end);
|
|
118
|
+
node = factory.updateVariableDeclaration(node, node.name, undefined, undefined, initializer);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
this.flattenElement(node, rval, node.pos, node.end, skipInitializer);
|
|
122
|
+
if (this.expressions.length > 0) {
|
|
123
|
+
const temp = factory.createTempVariable(0);
|
|
124
|
+
if (this.hoistTempVariables) {
|
|
125
|
+
const value = factory.inlineExpressions(this.expressions);
|
|
126
|
+
this.expressions = [];
|
|
127
|
+
this.emitBinding(temp, value, -1, -1, undefined);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
this.visitor.context.addVariableDeclaration(temp);
|
|
131
|
+
const last = this.declarations[this.declarations.length - 1];
|
|
132
|
+
last.pendingExpressions.push(factory.createAssignment(temp, last.value));
|
|
133
|
+
for (let i = 0; i < this.expressions.length; i++)
|
|
134
|
+
last.pendingExpressions.push(this.expressions[i]);
|
|
135
|
+
last.value = temp;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const declarations = [];
|
|
139
|
+
for (let i = 0; i < this.declarations.length; i++) {
|
|
140
|
+
const pending = this.declarations[i];
|
|
141
|
+
let value = pending.value;
|
|
142
|
+
if (pending.pendingExpressions.length > 0) {
|
|
143
|
+
pending.pendingExpressions.push(pending.value);
|
|
144
|
+
value = factory.inlineExpressions(pending.pendingExpressions);
|
|
145
|
+
}
|
|
146
|
+
const declaration = factory.createVariableDeclaration(pending.name, undefined, undefined, value);
|
|
147
|
+
declaration.pos = pending.pos | 0;
|
|
148
|
+
declaration.end = pending.end | 0;
|
|
149
|
+
if (pending.original !== undefined)
|
|
150
|
+
this.visitor.context.setOriginal(declaration, pending.original);
|
|
151
|
+
declarations.push(declaration);
|
|
152
|
+
}
|
|
153
|
+
if (declarations.length === 0)
|
|
154
|
+
return undefined;
|
|
155
|
+
if (declarations.length === 1)
|
|
156
|
+
return declarations[0];
|
|
157
|
+
return factory.createSyntaxList(declarations);
|
|
158
|
+
}
|
|
159
|
+
emitBindingOrAssignment(target, value, pos, end, original) {
|
|
160
|
+
if (this.binding)
|
|
161
|
+
return this.emitBinding(target, value, pos, end, original);
|
|
162
|
+
return this.emitAssignment(target, value, pos, end, original);
|
|
163
|
+
}
|
|
164
|
+
emitAssignment(target, value, pos, end, original) {
|
|
165
|
+
let expression;
|
|
166
|
+
if (this.assignments !== undefined && target instanceof Identifier)
|
|
167
|
+
expression = this.assignments.createAssignment(target, value, pos, end);
|
|
168
|
+
else {
|
|
169
|
+
expression = this.visitor.factory.createAssignment(this.visitor.visitNode(target), value);
|
|
170
|
+
expression.pos = pos | 0;
|
|
171
|
+
expression.end = end | 0;
|
|
172
|
+
}
|
|
173
|
+
if (original !== undefined)
|
|
174
|
+
this.visitor.context.setOriginal(expression, original);
|
|
175
|
+
this.expressions.push(expression);
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
emitBinding(target, start, pos, end, original) {
|
|
179
|
+
let value = start;
|
|
180
|
+
if (this.expressions.length > 0) {
|
|
181
|
+
this.expressions.push(value);
|
|
182
|
+
value = this.visitor.factory.inlineExpressions(this.expressions);
|
|
183
|
+
this.expressions = [];
|
|
184
|
+
}
|
|
185
|
+
this.declarations.push(new PendingDeclaration(target, value, pos, end, original));
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
createPattern(object, elements) {
|
|
189
|
+
const factory = this.visitor.factory;
|
|
190
|
+
const list = factory.createNodeList(elements);
|
|
191
|
+
if (this.binding)
|
|
192
|
+
return factory.created(new BindingPattern(object ? 207 /* SyntaxKind.ObjectBindingPattern */ : 208 /* SyntaxKind.ArrayBindingPattern */, list));
|
|
193
|
+
if (object)
|
|
194
|
+
return factory.created(new ObjectLiteralExpression(list, false));
|
|
195
|
+
return factory.created(new ArrayLiteralExpression(list, false));
|
|
196
|
+
}
|
|
197
|
+
createArrayElement(expression) {
|
|
198
|
+
if (!this.binding)
|
|
199
|
+
return expression;
|
|
200
|
+
return this.visitor.factory.created(new BindingElement(undefined, undefined, expression, undefined));
|
|
201
|
+
}
|
|
202
|
+
ensureIdentifier(value, reuseIdentifierExpressions, pos, end) {
|
|
203
|
+
if (reuseIdentifierExpressions && value instanceof Identifier)
|
|
204
|
+
return value;
|
|
205
|
+
const factory = this.visitor.factory;
|
|
206
|
+
const temp = factory.createTempVariable(0);
|
|
207
|
+
if (this.hoistTempVariables) {
|
|
208
|
+
this.visitor.context.addVariableDeclaration(temp);
|
|
209
|
+
const assignment = factory.createAssignment(temp, value);
|
|
210
|
+
assignment.pos = pos | 0;
|
|
211
|
+
assignment.end = end | 0;
|
|
212
|
+
this.expressions.push(assignment);
|
|
213
|
+
}
|
|
214
|
+
else
|
|
215
|
+
this.emitBindingOrAssignment(temp, value, pos, end, undefined);
|
|
216
|
+
return temp;
|
|
217
|
+
}
|
|
218
|
+
createDefaultValueCheck(value, defaultValue, pos, end) {
|
|
219
|
+
const checked = this.ensureIdentifier(value, true, pos, end);
|
|
220
|
+
const factory = this.visitor.factory;
|
|
221
|
+
return factory.createConditionalExpression(factory.createTypeCheck(checked, 'undefined'), defaultValue, checked);
|
|
222
|
+
}
|
|
223
|
+
createPropertyAccess(value, propertyName) {
|
|
224
|
+
const factory = this.visitor.factory;
|
|
225
|
+
if (propertyName instanceof ComputedPropertyName) {
|
|
226
|
+
const argument = this.ensureIdentifier(this.visitor.visitNode(propertyName.expression), false, propertyName.pos, propertyName.end);
|
|
227
|
+
return factory.createElementAccessExpression(value, argument);
|
|
228
|
+
}
|
|
229
|
+
if (propertyName instanceof StringLiteral)
|
|
230
|
+
return factory.createElementAccessExpression(value, factory.createStringLiteral(propertyName.text, propertyName.tokenFlags));
|
|
231
|
+
if (propertyName instanceof NoSubstitutionTemplateLiteral)
|
|
232
|
+
return factory.createElementAccessExpression(value, factory.createStringLiteral(propertyName.text, 0 /* TokenFlags.None */));
|
|
233
|
+
if (propertyName instanceof NumericLiteral)
|
|
234
|
+
return factory.createElementAccessExpression(value, factory.createNumericLiteral(propertyName.text));
|
|
235
|
+
if (propertyName instanceof BigIntLiteral)
|
|
236
|
+
return factory.createElementAccessExpression(value, factory.created(new BigIntLiteral(propertyName.text, 0 /* TokenFlags.None */)));
|
|
237
|
+
return factory.createPropertyAccessExpression(value, factory.createIdentifier(propertyNameText(propertyName)));
|
|
238
|
+
}
|
|
239
|
+
flattenElement(element, start, pos, end, skipInitializer) {
|
|
240
|
+
const target = getTargetOfBindingOrAssignmentElement(element);
|
|
241
|
+
if (target === undefined)
|
|
242
|
+
return false;
|
|
243
|
+
let value = start;
|
|
244
|
+
if (!skipInitializer) {
|
|
245
|
+
const initializer = this.visitor.visitNode(getInitializerOfBindingOrAssignmentElement(element));
|
|
246
|
+
if (initializer !== undefined) {
|
|
247
|
+
if (value !== undefined) {
|
|
248
|
+
value = this.createDefaultValueCheck(value, initializer, pos, end);
|
|
249
|
+
if (!isSimpleCopiableExpression(initializer) && isPattern(target))
|
|
250
|
+
value = this.ensureIdentifier(value, true, pos, end);
|
|
251
|
+
}
|
|
252
|
+
else
|
|
253
|
+
value = initializer;
|
|
254
|
+
}
|
|
255
|
+
else if (value === undefined)
|
|
256
|
+
value = this.visitor.factory.createVoidZero();
|
|
257
|
+
}
|
|
258
|
+
if (target instanceof ObjectLiteralExpression || target.kind === 207 /* SyntaxKind.ObjectBindingPattern */)
|
|
259
|
+
return this.flattenObjectPattern(element, target, value, pos, end);
|
|
260
|
+
if (target instanceof ArrayLiteralExpression || target.kind === 208 /* SyntaxKind.ArrayBindingPattern */)
|
|
261
|
+
return this.flattenArrayPattern(element, target, value, pos, end);
|
|
262
|
+
return this.emitBindingOrAssignment(target, value, pos, end, element);
|
|
263
|
+
}
|
|
264
|
+
flattenObjectPattern(parent, pattern, start, pos, end) {
|
|
265
|
+
const elements = getElementsOfBindingOrAssignmentPattern(pattern);
|
|
266
|
+
const facts = this.facts;
|
|
267
|
+
let value = start;
|
|
268
|
+
if (elements.length !== 1)
|
|
269
|
+
value = this.ensureIdentifier(value, !isDeclarationBindingElement(parent) || elements.length !== 0, pos, end);
|
|
270
|
+
let bindingElements = [];
|
|
271
|
+
const computedTempVariables = [];
|
|
272
|
+
for (let i = 0; i < elements.length; i++) {
|
|
273
|
+
const element = elements[i];
|
|
274
|
+
if (getRestIndicatorOfBindingOrAssignmentElement(element) === undefined) {
|
|
275
|
+
const propertyName = tryGetPropertyNameOfBindingOrAssignmentElement(element);
|
|
276
|
+
if (facts !== undefined &&
|
|
277
|
+
!facts.hasRestOrSpread(element) &&
|
|
278
|
+
!facts.hasRestOrSpread(getTargetOfBindingOrAssignmentElement(element)) &&
|
|
279
|
+
!(propertyName instanceof ComputedPropertyName)) {
|
|
280
|
+
bindingElements.push(this.visitor.visitNode(element));
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
if (propertyName === undefined)
|
|
284
|
+
continue;
|
|
285
|
+
if (bindingElements.length > 0) {
|
|
286
|
+
this.emitBindingOrAssignment(this.createPattern(true, bindingElements), value, pos, end, pattern);
|
|
287
|
+
bindingElements = [];
|
|
288
|
+
}
|
|
289
|
+
const rhs = this.createPropertyAccess(value, propertyName);
|
|
290
|
+
if (propertyName instanceof ComputedPropertyName && rhs instanceof ElementAccessExpression)
|
|
291
|
+
computedTempVariables.push(rhs.argumentExpression);
|
|
292
|
+
this.flattenElement(element, rhs, element.pos, element.end, false);
|
|
293
|
+
}
|
|
294
|
+
else if (i === elements.length - 1) {
|
|
295
|
+
if (bindingElements.length > 0) {
|
|
296
|
+
this.emitBindingOrAssignment(this.createPattern(true, bindingElements), value, pos, end, pattern);
|
|
297
|
+
bindingElements = [];
|
|
298
|
+
}
|
|
299
|
+
const rhs = this.createRestHelper(value, elements, computedTempVariables, pattern.pos, pattern.end);
|
|
300
|
+
this.flattenElement(element, rhs, element.pos, element.end, false);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (bindingElements.length > 0)
|
|
304
|
+
this.emitBindingOrAssignment(this.createPattern(true, bindingElements), value, pos, end, pattern);
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
flattenArrayPattern(parent, pattern, start, pos, end) {
|
|
308
|
+
const factory = this.visitor.factory;
|
|
309
|
+
const facts = this.facts;
|
|
310
|
+
const elements = getElementsOfBindingOrAssignmentPattern(pattern);
|
|
311
|
+
let value = start;
|
|
312
|
+
let allOmitted = true;
|
|
313
|
+
for (const element of elements)
|
|
314
|
+
if (!(element instanceof OmittedExpression))
|
|
315
|
+
allOmitted = false;
|
|
316
|
+
if ((elements.length !== 1 && (facts === undefined || elements.length === 0)) || allOmitted)
|
|
317
|
+
value = this.ensureIdentifier(value, !isDeclarationBindingElement(parent) || elements.length !== 0, pos, end);
|
|
318
|
+
const bindingElements = [];
|
|
319
|
+
// Elements bound to temporaries in the pattern, flattened after it.
|
|
320
|
+
const restTemps = [];
|
|
321
|
+
const restElements = [];
|
|
322
|
+
for (let i = 0; i < elements.length; i++) {
|
|
323
|
+
const element = elements[i];
|
|
324
|
+
if (facts !== undefined) {
|
|
325
|
+
if (facts.hasObjectRestOrSpread(element) ||
|
|
326
|
+
(this.hasTransformedPriorElement && !isSimpleBindingOrAssignmentElement(element))) {
|
|
327
|
+
this.hasTransformedPriorElement = true;
|
|
328
|
+
const temp = factory.createTempVariable(0);
|
|
329
|
+
if (this.hoistTempVariables)
|
|
330
|
+
this.visitor.context.addVariableDeclaration(temp);
|
|
331
|
+
restTemps.push(temp);
|
|
332
|
+
restElements.push(element);
|
|
333
|
+
bindingElements.push(this.createArrayElement(temp));
|
|
334
|
+
}
|
|
335
|
+
else
|
|
336
|
+
bindingElements.push(element);
|
|
337
|
+
}
|
|
338
|
+
else if (element instanceof OmittedExpression)
|
|
339
|
+
continue;
|
|
340
|
+
else if (getRestIndicatorOfBindingOrAssignmentElement(element) === undefined) {
|
|
341
|
+
const rhs = factory.createElementAccessExpression(value, factory.createNumericLiteral(String(i)));
|
|
342
|
+
this.flattenElement(element, rhs, element.pos, element.end, false);
|
|
343
|
+
}
|
|
344
|
+
else if (i === elements.length - 1) {
|
|
345
|
+
const args = i === 0 ? [] : [factory.createNumericLiteral(String(i))];
|
|
346
|
+
const rhs = factory.createCallExpression(factory.createPropertyAccessExpression(value, factory.createIdentifier('slice')), args);
|
|
347
|
+
this.flattenElement(element, rhs, element.pos, element.end, false);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if (bindingElements.length > 0)
|
|
351
|
+
this.emitBindingOrAssignment(this.createPattern(false, bindingElements), value, pos, end, pattern);
|
|
352
|
+
for (let i = 0; i < restElements.length; i++) {
|
|
353
|
+
const element = restElements[i];
|
|
354
|
+
this.flattenElement(element, restTemps[i], element.pos, element.end, false);
|
|
355
|
+
}
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
/** `__rest(value, ["a", "b"])`, excluding the properties named before the rest element. */
|
|
359
|
+
createRestHelper(value, elements, computed, pos, end) {
|
|
360
|
+
const factory = this.visitor.factory;
|
|
361
|
+
this.visitor.context.requestEmitHelper(restHelper);
|
|
362
|
+
const names = [];
|
|
363
|
+
let computedOffset = 0;
|
|
364
|
+
for (let i = 0; i < elements.length - 1; i++) {
|
|
365
|
+
const propertyName = tryGetPropertyNameOfBindingOrAssignmentElement(elements[i]);
|
|
366
|
+
if (propertyName === undefined)
|
|
367
|
+
continue;
|
|
368
|
+
if (propertyName instanceof ComputedPropertyName) {
|
|
369
|
+
const temp = computed[computedOffset++];
|
|
370
|
+
names.push(factory.createConditionalExpression(factory.createTypeCheck(temp, 'symbol'), temp, factory.createBinaryExpression(temp, 39 /* SyntaxKind.PlusToken */, factory.createStringLiteral('', 0 /* TokenFlags.None */))));
|
|
371
|
+
}
|
|
372
|
+
else
|
|
373
|
+
names.push(factory.createStringLiteralFromNode(propertyName));
|
|
374
|
+
}
|
|
375
|
+
const array = factory.created(new ArrayLiteralExpression(factory.createNodeList(names), false));
|
|
376
|
+
array.pos = pos | 0;
|
|
377
|
+
array.end = end | 0;
|
|
378
|
+
return factory.createCallExpression(factory.createUnscopedHelperName('__rest'), [value, array]);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
function propertyNameText(node) {
|
|
382
|
+
if (node instanceof Identifier)
|
|
383
|
+
return node.text;
|
|
384
|
+
return '';
|
|
385
|
+
}
|
|
386
|
+
function isEmptyPattern(node) {
|
|
387
|
+
if (node instanceof ArrayLiteralExpression)
|
|
388
|
+
return node.elements.nodes.length === 0;
|
|
389
|
+
if (node instanceof ObjectLiteralExpression)
|
|
390
|
+
return node.properties.nodes.length === 0;
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
function isPattern(node) {
|
|
394
|
+
switch (node.kind) {
|
|
395
|
+
case 207 /* SyntaxKind.ObjectBindingPattern */:
|
|
396
|
+
case 208 /* SyntaxKind.ArrayBindingPattern */:
|
|
397
|
+
case 211 /* SyntaxKind.ObjectLiteralExpression */:
|
|
398
|
+
case 210 /* SyntaxKind.ArrayLiteralExpression */:
|
|
399
|
+
return true;
|
|
400
|
+
}
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
403
|
+
/** Strings, numbers, keywords and identifiers: copied rather than cached in a temporary. */
|
|
404
|
+
export function isSimpleCopiableExpression(node) {
|
|
405
|
+
switch (node.kind) {
|
|
406
|
+
case 10 /* SyntaxKind.StringLiteral */:
|
|
407
|
+
case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
|
|
408
|
+
case 8 /* SyntaxKind.NumericLiteral */:
|
|
409
|
+
case 79 /* SyntaxKind.Identifier */:
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
return node.kind >= 82 /* SyntaxKind.FirstKeyword */ && node.kind <= 166 /* SyntaxKind.LastKeyword */;
|
|
413
|
+
}
|
|
414
|
+
function isDeclarationBindingElement(node) {
|
|
415
|
+
return (node.kind === 261 /* SyntaxKind.VariableDeclaration */ ||
|
|
416
|
+
node.kind === 170 /* SyntaxKind.Parameter */ ||
|
|
417
|
+
node.kind === 209 /* SyntaxKind.BindingElement */);
|
|
418
|
+
}
|
|
419
|
+
/** Whether an element binds identifiers to literal property names with simple defaults. */
|
|
420
|
+
function isSimpleBindingOrAssignmentElement(element) {
|
|
421
|
+
const target = getTargetOfBindingOrAssignmentElement(element);
|
|
422
|
+
if (target === undefined || target instanceof OmittedExpression)
|
|
423
|
+
return true;
|
|
424
|
+
const propertyName = tryGetPropertyNameOfBindingOrAssignmentElement(element);
|
|
425
|
+
if (propertyName !== undefined && !isPropertyNameLiteral(propertyName))
|
|
426
|
+
return false;
|
|
427
|
+
const initializer = getInitializerOfBindingOrAssignmentElement(element);
|
|
428
|
+
if (initializer !== undefined && (initializer instanceof Identifier || !isSimpleCopiableExpression(initializer)))
|
|
429
|
+
return false;
|
|
430
|
+
if (isPattern(target)) {
|
|
431
|
+
const elements = getElementsOfBindingOrAssignmentPattern(target);
|
|
432
|
+
for (const child of elements)
|
|
433
|
+
if (!isSimpleBindingOrAssignmentElement(child))
|
|
434
|
+
return false;
|
|
435
|
+
return true;
|
|
436
|
+
}
|
|
437
|
+
return target instanceof Identifier;
|
|
438
|
+
}
|
|
439
|
+
export function getElementsOfBindingOrAssignmentPattern(node) {
|
|
440
|
+
if (node instanceof BindingPattern)
|
|
441
|
+
return node.elements.nodes;
|
|
442
|
+
if (node instanceof ArrayLiteralExpression)
|
|
443
|
+
return node.elements.nodes;
|
|
444
|
+
if (node instanceof ObjectLiteralExpression)
|
|
445
|
+
return node.properties.nodes;
|
|
446
|
+
return [];
|
|
447
|
+
}
|
|
448
|
+
export function getTargetOfBindingOrAssignmentElement(element) {
|
|
449
|
+
if (isDeclarationBindingElement(element))
|
|
450
|
+
return getName(element);
|
|
451
|
+
if (element instanceof PropertyAssignment)
|
|
452
|
+
return getTargetOfBindingOrAssignmentElement(element.initializer);
|
|
453
|
+
if (element instanceof ShorthandPropertyAssignment)
|
|
454
|
+
return element.name;
|
|
455
|
+
if (element instanceof SpreadAssignment)
|
|
456
|
+
return getTargetOfBindingOrAssignmentElement(element.expression);
|
|
457
|
+
if (element.kind === 175 /* SyntaxKind.MethodDeclaration */ || element.kind === 178 /* SyntaxKind.GetAccessor */)
|
|
458
|
+
return undefined;
|
|
459
|
+
if (element.kind === 179 /* SyntaxKind.SetAccessor */)
|
|
460
|
+
return undefined;
|
|
461
|
+
if (element instanceof BinaryExpression && isAssignmentExpression(element, true))
|
|
462
|
+
return getTargetOfBindingOrAssignmentElement(element.left);
|
|
463
|
+
if (element instanceof SpreadElement)
|
|
464
|
+
return getTargetOfBindingOrAssignmentElement(element.expression);
|
|
465
|
+
return element;
|
|
466
|
+
}
|
|
467
|
+
function getInitializerOfBindingOrAssignmentElement(element) {
|
|
468
|
+
if (element === undefined)
|
|
469
|
+
return undefined;
|
|
470
|
+
if (element instanceof VariableDeclaration)
|
|
471
|
+
return element.initializer;
|
|
472
|
+
if (element instanceof ParameterDeclaration)
|
|
473
|
+
return element.initializer;
|
|
474
|
+
if (element instanceof BindingElement)
|
|
475
|
+
return element.initializer;
|
|
476
|
+
if (element instanceof PropertyAssignment) {
|
|
477
|
+
const initializer = element.initializer;
|
|
478
|
+
return initializer instanceof BinaryExpression && isAssignmentExpression(initializer, true)
|
|
479
|
+
? initializer.right
|
|
480
|
+
: undefined;
|
|
481
|
+
}
|
|
482
|
+
if (element instanceof ShorthandPropertyAssignment)
|
|
483
|
+
return element.objectAssignmentInitializer;
|
|
484
|
+
if (element instanceof BinaryExpression && isAssignmentExpression(element, true))
|
|
485
|
+
return element.right;
|
|
486
|
+
if (element instanceof SpreadElement)
|
|
487
|
+
return getInitializerOfBindingOrAssignmentElement(element.expression);
|
|
488
|
+
return undefined;
|
|
489
|
+
}
|
|
490
|
+
function getRestIndicatorOfBindingOrAssignmentElement(element) {
|
|
491
|
+
if (element instanceof ParameterDeclaration)
|
|
492
|
+
return element.dotDotDotToken;
|
|
493
|
+
if (element instanceof BindingElement)
|
|
494
|
+
return element.dotDotDotToken;
|
|
495
|
+
if (element instanceof SpreadElement || element instanceof SpreadAssignment)
|
|
496
|
+
return element;
|
|
497
|
+
return undefined;
|
|
498
|
+
}
|
|
499
|
+
function tryGetPropertyNameOfBindingOrAssignmentElement(element) {
|
|
500
|
+
if (element instanceof BindingElement && element.propertyName !== undefined)
|
|
501
|
+
return literalComputedName(element.propertyName);
|
|
502
|
+
if (element instanceof PropertyAssignment)
|
|
503
|
+
return literalComputedName(element.name);
|
|
504
|
+
if (element instanceof SpreadAssignment)
|
|
505
|
+
return undefined;
|
|
506
|
+
const target = getTargetOfBindingOrAssignmentElement(element);
|
|
507
|
+
return target !== undefined && isPropertyName(target) ? target : undefined;
|
|
508
|
+
}
|
|
509
|
+
function literalComputedName(name) {
|
|
510
|
+
if (name instanceof ComputedPropertyName && isStringOrNumericLiteralLike(name.expression))
|
|
511
|
+
return name.expression;
|
|
512
|
+
return name;
|
|
513
|
+
}
|
|
514
|
+
function isStringOrNumericLiteralLike(node) {
|
|
515
|
+
return (node.kind === 10 /* SyntaxKind.StringLiteral */ ||
|
|
516
|
+
node.kind === 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */ ||
|
|
517
|
+
node.kind === 8 /* SyntaxKind.NumericLiteral */);
|
|
518
|
+
}
|
|
519
|
+
function isPropertyName(node) {
|
|
520
|
+
switch (node.kind) {
|
|
521
|
+
case 79 /* SyntaxKind.Identifier */:
|
|
522
|
+
case 80 /* SyntaxKind.PrivateIdentifier */:
|
|
523
|
+
case 10 /* SyntaxKind.StringLiteral */:
|
|
524
|
+
case 8 /* SyntaxKind.NumericLiteral */:
|
|
525
|
+
case 168 /* SyntaxKind.ComputedPropertyName */:
|
|
526
|
+
case 9 /* SyntaxKind.BigIntLiteral */:
|
|
527
|
+
return true;
|
|
528
|
+
}
|
|
529
|
+
return false;
|
|
530
|
+
}
|
|
531
|
+
function elementAssignsToName(element, name) {
|
|
532
|
+
const target = getTargetOfBindingOrAssignmentElement(element);
|
|
533
|
+
if (target === undefined)
|
|
534
|
+
return false;
|
|
535
|
+
if (isPattern(target)) {
|
|
536
|
+
const elements = getElementsOfBindingOrAssignmentPattern(target);
|
|
537
|
+
for (const child of elements)
|
|
538
|
+
if (elementAssignsToName(child, name))
|
|
539
|
+
return true;
|
|
540
|
+
return false;
|
|
541
|
+
}
|
|
542
|
+
return target instanceof Identifier && target.text === name;
|
|
543
|
+
}
|
|
544
|
+
function elementContainsNonLiteralComputedName(element) {
|
|
545
|
+
const propertyName = tryGetPropertyNameOfBindingOrAssignmentElement(element);
|
|
546
|
+
if (propertyName instanceof ComputedPropertyName && !isLiteralKind(propertyName.expression.kind))
|
|
547
|
+
return true;
|
|
548
|
+
const target = getTargetOfBindingOrAssignmentElement(element);
|
|
549
|
+
if (target === undefined || !isPattern(target))
|
|
550
|
+
return false;
|
|
551
|
+
const elements = getElementsOfBindingOrAssignmentPattern(target);
|
|
552
|
+
for (const child of elements)
|
|
553
|
+
if (elementContainsNonLiteralComputedName(child))
|
|
554
|
+
return true;
|
|
555
|
+
return false;
|
|
556
|
+
}
|
|
557
|
+
function isLiteralKind(kind) {
|
|
558
|
+
return kind >= 8 /* SyntaxKind.FirstLiteralToken */ && kind <= 14 /* SyntaxKind.LastLiteralToken */;
|
|
559
|
+
}
|
|
560
|
+
/** `pattern = initializer` for a variable declaration, with binding patterns as assignment patterns. */
|
|
561
|
+
export function convertVariableDeclarationToAssignment(visitor, node) {
|
|
562
|
+
const initializer = node.initializer;
|
|
563
|
+
if (initializer === undefined)
|
|
564
|
+
return undefined;
|
|
565
|
+
const context = visitor.context;
|
|
566
|
+
const assignment = visitor.factory.createAssignment(convertBindingNameToTarget(visitor, node.name), initializer);
|
|
567
|
+
context.setOriginal(assignment, node);
|
|
568
|
+
context.assignCommentAndSourceMapRanges(assignment, node);
|
|
569
|
+
return assignment;
|
|
570
|
+
}
|
|
571
|
+
/** A binding name as an assignment target, with binding patterns as assignment patterns. */
|
|
572
|
+
export function convertBindingNameToTarget(visitor, name) {
|
|
573
|
+
if (!(name instanceof BindingPattern))
|
|
574
|
+
return name;
|
|
575
|
+
const factory = visitor.factory;
|
|
576
|
+
const context = visitor.context;
|
|
577
|
+
const elements = name.elements.nodes;
|
|
578
|
+
const converted = [];
|
|
579
|
+
const object = name.kind === 207 /* SyntaxKind.ObjectBindingPattern */;
|
|
580
|
+
for (const element of elements) {
|
|
581
|
+
if (element instanceof BindingElement)
|
|
582
|
+
converted.push(object
|
|
583
|
+
? convertToObjectElement(visitor, element)
|
|
584
|
+
: convertToArrayElement(visitor, element));
|
|
585
|
+
}
|
|
586
|
+
const list = factory.createNodeList(converted);
|
|
587
|
+
list.pos = name.elements.pos;
|
|
588
|
+
list.end = name.elements.end;
|
|
589
|
+
const pattern = object
|
|
590
|
+
? factory.created(new ObjectLiteralExpression(list, false))
|
|
591
|
+
: factory.created(new ArrayLiteralExpression(list, false));
|
|
592
|
+
context.setOriginal(pattern, name);
|
|
593
|
+
context.assignCommentAndSourceMapRanges(pattern, name);
|
|
594
|
+
return pattern;
|
|
595
|
+
}
|
|
596
|
+
/** A created element converted from `element`, with its original and ranges. */
|
|
597
|
+
function converted(visitor, node, element) {
|
|
598
|
+
visitor.context.setOriginal(node, element);
|
|
599
|
+
visitor.context.assignCommentAndSourceMapRanges(node, element);
|
|
600
|
+
return node;
|
|
601
|
+
}
|
|
602
|
+
function convertToArrayElement(visitor, element) {
|
|
603
|
+
const factory = visitor.factory;
|
|
604
|
+
const name = element.name;
|
|
605
|
+
if (name === undefined)
|
|
606
|
+
return converted(visitor, factory.created(new OmittedExpression()), element);
|
|
607
|
+
if (element.dotDotDotToken !== undefined)
|
|
608
|
+
return converted(visitor, factory.created(new SpreadElement(name)), element);
|
|
609
|
+
const target = convertBindingNameToTarget(visitor, name);
|
|
610
|
+
if (element.initializer === undefined)
|
|
611
|
+
return target;
|
|
612
|
+
return converted(visitor, factory.createAssignment(target, element.initializer), element);
|
|
613
|
+
}
|
|
614
|
+
function convertToObjectElement(visitor, element) {
|
|
615
|
+
const factory = visitor.factory;
|
|
616
|
+
const name = element.name;
|
|
617
|
+
if (element.dotDotDotToken !== undefined)
|
|
618
|
+
return converted(visitor, factory.created(new SpreadAssignment(name)), element);
|
|
619
|
+
if (element.propertyName !== undefined) {
|
|
620
|
+
let target = convertBindingNameToTarget(visitor, name);
|
|
621
|
+
if (element.initializer !== undefined)
|
|
622
|
+
target = factory.createAssignment(target, element.initializer);
|
|
623
|
+
return converted(visitor, factory.createPropertyAssignment(element.propertyName, target), element);
|
|
624
|
+
}
|
|
625
|
+
return converted(visitor, factory.created(new ShorthandPropertyAssignment(undefined, name, undefined, undefined, element.initializer !== undefined ? factory.createToken(63 /* SyntaxKind.EqualsToken */) : undefined, element.initializer)), element);
|
|
626
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CompilerOptions } from '../options.js';
|
|
2
|
+
import type { EmitContext } from '../printer/emit-context.js';
|
|
3
|
+
import type { EmitResolver } from './emit-resolver.js';
|
|
4
|
+
import type { SyntaxFacts } from './syntax-facts.js';
|
|
5
|
+
import type { Transformer } from './transformer.js';
|
|
6
|
+
export declare function addDownlevelTransformers(transformers: Transformer[], context: EmitContext, options: CompilerOptions, facts: SyntaxFacts, resolver: EmitResolver): void;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ScriptTarget, getEmitScriptTarget, getUseDefineForClassFields } from '../options.js';
|
|
2
|
+
import { AsyncFunctions } from './async.js';
|
|
3
|
+
import { ClassFieldsTransformer } from './class-fields.js';
|
|
4
|
+
import { ESDecorators, shouldTransformESDecorators } from './es-decorators.js';
|
|
5
|
+
import { ExponentiationTransformer } from './exponentiation.js';
|
|
6
|
+
import { AsyncIteration } from './for-await.js';
|
|
7
|
+
import { LogicalAssignmentTransformer } from './logical-assignment.js';
|
|
8
|
+
import { NullishCoalescingTransformer } from './nullish-coalescing.js';
|
|
9
|
+
import { ObjectRestSpreadTransformer } from './object-rest-spread.js';
|
|
10
|
+
import { OptionalCatchTransformer } from './optional-catch.js';
|
|
11
|
+
import { OptionalChainTransformer } from './optional-chain.js';
|
|
12
|
+
import { TaggedTemplateTransformer } from './tagged-template.js';
|
|
13
|
+
import { UsingTransformer } from './using.js';
|
|
14
|
+
export function addDownlevelTransformers(transformers, context, options, facts, resolver) {
|
|
15
|
+
const target = getEmitScriptTarget(options);
|
|
16
|
+
// ES2022 and later: `using` declarations.
|
|
17
|
+
if (target < ScriptTarget.ESNext)
|
|
18
|
+
transformers.push(new UsingTransformer(context, facts));
|
|
19
|
+
// ESNext: decorators and class fields.
|
|
20
|
+
if (shouldTransformESDecorators(options))
|
|
21
|
+
transformers.push(new ESDecorators(context, facts));
|
|
22
|
+
if (!(target >= ScriptTarget.ESNext && getUseDefineForClassFields(options)))
|
|
23
|
+
transformers.push(new ClassFieldsTransformer(context, options, facts, resolver));
|
|
24
|
+
if (target >= ScriptTarget.ES2021)
|
|
25
|
+
return;
|
|
26
|
+
transformers.push(new LogicalAssignmentTransformer(context, facts));
|
|
27
|
+
if (target >= ScriptTarget.ES2020)
|
|
28
|
+
return;
|
|
29
|
+
transformers.push(new NullishCoalescingTransformer(context, facts));
|
|
30
|
+
transformers.push(new OptionalChainTransformer(context, facts));
|
|
31
|
+
if (target >= ScriptTarget.ES2019)
|
|
32
|
+
return;
|
|
33
|
+
transformers.push(new OptionalCatchTransformer(context, facts));
|
|
34
|
+
if (target >= ScriptTarget.ES2018)
|
|
35
|
+
return;
|
|
36
|
+
transformers.push(new ObjectRestSpreadTransformer(context, facts));
|
|
37
|
+
transformers.push(new AsyncIteration(context, facts));
|
|
38
|
+
transformers.push(new TaggedTemplateTransformer(context, facts));
|
|
39
|
+
if (target >= ScriptTarget.ES2017)
|
|
40
|
+
return;
|
|
41
|
+
transformers.push(new AsyncFunctions(context, facts));
|
|
42
|
+
if (target >= ScriptTarget.ES2016)
|
|
43
|
+
return;
|
|
44
|
+
transformers.push(new ExponentiationTransformer(context, facts));
|
|
45
|
+
}
|