diff options
Diffstat (limited to 'node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/lib/index.js')
| -rw-r--r-- | node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/lib/index.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/lib/index.js b/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/lib/index.js new file mode 100644 index 00000000..071d9edf --- /dev/null +++ b/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/lib/index.js @@ -0,0 +1,66 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var helperPluginUtils = require('@babel/helper-plugin-utils'); +var pluginTransformOptionalChaining = require('@babel/plugin-transform-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 = []; + for (;;) { + if (optionalPath.isOptionalMemberExpression()) { + chains.push(optionalPath.node); + optionalPath = helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers(optionalPath.get("object")); + } else if (optionalPath.isOptionalCallExpression()) { + chains.push(optionalPath.node); + optionalPath = helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers(optionalPath.get("callee")); + } else { + break; + } + } + 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 => { + var _api$assumption, _api$assumption2; + api.assertVersion(7); + const noDocumentAll = (_api$assumption = api.assumption("noDocumentAll")) != null ? _api$assumption : false; + const pureGetters = (_api$assumption2 = api.assumption("pureGetters")) != null ? _api$assumption2 : false; + return { + name: "bugfix-v8-spread-parameters-in-optional-chaining", + visitor: { + "OptionalCallExpression|OptionalMemberExpression"(path) { + if (shouldTransform(path)) { + pluginTransformOptionalChaining.transform(path, { + noDocumentAll, + pureGetters + }); + } + } + } + }; +}); + +exports.default = index; +//# sourceMappingURL=index.js.map |
