1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- var helperPluginUtils = require('@babel/helper-plugin-utils');
- var pluginProposalOptionalChaining = require('@babel/plugin-proposal-optional-chaining');
- var helperSkipTransparentExpressionWrappers = require('@babel/helper-skip-transparent-expression-wrappers');
- var core = require('@babel/core');
- function matchAffectedArguments(argumentNodes) {
- const spreadIndex = argumentNodes.findIndex(node => core.types.isSpreadElement(node));
- return spreadIndex >= 0 && spreadIndex !== argumentNodes.length - 1;
- }
- function shouldTransform(path) {
- let optionalPath = path;
- const chains = [];
- while (optionalPath.isOptionalMemberExpression() || optionalPath.isOptionalCallExpression()) {
- const {
- node
- } = optionalPath;
- chains.push(node);
- if (optionalPath.isOptionalMemberExpression()) {
- optionalPath = helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers(optionalPath.get("object"));
- } else if (optionalPath.isOptionalCallExpression()) {
- optionalPath = helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers(optionalPath.get("callee"));
- }
- }
- for (let i = 0; i < chains.length; i++) {
- const node = chains[i];
- if (core.types.isOptionalCallExpression(node) && matchAffectedArguments(node.arguments)) {
- if (node.optional) {
- return true;
- }
- const callee = chains[i + 1];
- if (core.types.isOptionalMemberExpression(callee, {
- optional: true
- })) {
- return true;
- }
- }
- }
- return false;
- }
- var index = helperPluginUtils.declare(api => {
- api.assertVersion(7);
- const noDocumentAll = api.assumption("noDocumentAll");
- const pureGetters = api.assumption("pureGetters");
- return {
- name: "bugfix-v8-spread-parameters-in-optional-chaining",
- visitor: {
- "OptionalCallExpression|OptionalMemberExpression"(path) {
- if (shouldTransform(path)) {
- pluginProposalOptionalChaining.transform(path, {
- noDocumentAll,
- pureGetters
- });
- }
- }
- }
- };
- });
- exports.default = index;
- //# sourceMappingURL=index.js.map
|