summaryrefslogtreecommitdiff
path: root/node_modules/@babel/preset-modules/src/plugins/transform-async-arrows-in-class
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
commitaa773172311dcada759dfbaac485f4bc6e00bc21 (patch)
treeca6d9a5eff3ab8f689f9acb4f0df791d9486813d /node_modules/@babel/preset-modules/src/plugins/transform-async-arrows-in-class
parentc5a5384e846f242e901e859fe600d695d8990a9a (diff)
added babel
Diffstat (limited to 'node_modules/@babel/preset-modules/src/plugins/transform-async-arrows-in-class')
-rw-r--r--node_modules/@babel/preset-modules/src/plugins/transform-async-arrows-in-class/index.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/node_modules/@babel/preset-modules/src/plugins/transform-async-arrows-in-class/index.js b/node_modules/@babel/preset-modules/src/plugins/transform-async-arrows-in-class/index.js
new file mode 100644
index 00000000..b0594777
--- /dev/null
+++ b/node_modules/@babel/preset-modules/src/plugins/transform-async-arrows-in-class/index.js
@@ -0,0 +1,35 @@
+/**
+ * Safari 10.3 had an issue where async arrow function expressions within any class method would throw.
+ * After an initial fix, any references to the instance via `this` within those methods would also throw.
+ * This is fixed by converting arrow functions in class methods into equivalent function expressions.
+ * @see https://bugs.webkit.org/show_bug.cgi?id=166879
+ *
+ * @example
+ * class X{ a(){ async () => {}; } } // throws
+ * class X{ a(){ async function() {}; } } // works
+ *
+ * @example
+ * class X{ a(){
+ * async () => this.a; // throws
+ * } }
+ * class X{ a(){
+ * var _this=this;
+ * async function() { return _this.a }; // works
+ * } }
+ */
+
+const OPTS = {
+ allowInsertArrow: false,
+ specCompliant: false,
+};
+
+export default ({ types: t }) => ({
+ name: "transform-async-arrows-in-class",
+ visitor: {
+ ArrowFunctionExpression(path) {
+ if (path.node.async && path.findParent(t.isClassMethod)) {
+ path.arrowFunctionToExpression(OPTS);
+ }
+ },
+ },
+});