diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:31:11 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:31:11 +0800 |
| commit | aa773172311dcada759dfbaac485f4bc6e00bc21 (patch) | |
| tree | ca6d9a5eff3ab8f689f9acb4f0df791d9486813d /node_modules/@babel/preset-modules/lib/plugins/transform-safari-block-shadowing | |
| parent | c5a5384e846f242e901e859fe600d695d8990a9a (diff) | |
added babel
Diffstat (limited to 'node_modules/@babel/preset-modules/lib/plugins/transform-safari-block-shadowing')
| -rw-r--r-- | node_modules/@babel/preset-modules/lib/plugins/transform-safari-block-shadowing/index.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/node_modules/@babel/preset-modules/lib/plugins/transform-safari-block-shadowing/index.js b/node_modules/@babel/preset-modules/lib/plugins/transform-safari-block-shadowing/index.js new file mode 100644 index 00000000..932cb826 --- /dev/null +++ b/node_modules/@babel/preset-modules/lib/plugins/transform-safari-block-shadowing/index.js @@ -0,0 +1,47 @@ +"use strict"; + +exports.__esModule = true; +exports.default = _default; + +/** + * Fixes block-shadowed let/const bindings in Safari 10/11. + * https://kangax.github.io/compat-table/es6/#test-let_scope_shadow_resolution + */ +function _default({ + 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; + } + } + } + } + + } + }; +} + +module.exports = exports.default;
\ No newline at end of file |
