summaryrefslogtreecommitdiff
path: root/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/lib/index.js
diff options
context:
space:
mode:
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.js66
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