From aa773172311dcada759dfbaac485f4bc6e00bc21 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sat, 14 Oct 2023 15:31:11 +0800 Subject: added babel --- .../transform-safari-block-shadowing/index.js | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 node_modules/@babel/preset-modules/src/plugins/transform-safari-block-shadowing/index.js (limited to 'node_modules/@babel/preset-modules/src/plugins/transform-safari-block-shadowing') diff --git a/node_modules/@babel/preset-modules/src/plugins/transform-safari-block-shadowing/index.js b/node_modules/@babel/preset-modules/src/plugins/transform-safari-block-shadowing/index.js new file mode 100644 index 00000000..f509c6b6 --- /dev/null +++ b/node_modules/@babel/preset-modules/src/plugins/transform-safari-block-shadowing/index.js @@ -0,0 +1,39 @@ +/** + * Fixes block-shadowed let/const bindings in Safari 10/11. + * https://kangax.github.io/compat-table/es6/#test-let_scope_shadow_resolution + */ +export default function({ types: t }) { + return { + name: "transform-safari-block-shadowing", + visitor: { + VariableDeclarator(path) { + // the issue only affects let and const bindings: + const kind = path.parent.kind; + if (kind !== "let" && kind !== "const") return; + + // ignore non-block-scoped bindings: + const block = path.scope.block; + if (t.isFunction(block) || t.isProgram(block)) return; + + const bindings = t.getOuterBindingIdentifiers(path.node.id); + for (const name of Object.keys(bindings)) { + let scope = path.scope; + + // ignore parent bindings (note: impossible due to let/const?) + if (!scope.hasOwnBinding(name)) continue; + + // check if shadowed within the nearest function/program boundary + while ((scope = scope.parent)) { + if (scope.hasOwnBinding(name)) { + path.scope.rename(name); + break; + } + if (t.isFunction(scope.block) || t.isProgram(scope.block)) { + break; + } + } + } + }, + }, + }; +} -- cgit v1.2.3