index.js.map 3.54 KB
Newer Older
Rosanny Sihombing's avatar
Rosanny Sihombing committed
1
{"version":3,"file":"index.js","sources":["../src/util.ts","../src/index.ts"],"sourcesContent":["import type { FunctionExpression } from \"@babel/types\";\nimport type { NodePath } from \"@babel/traverse\";\n\n/**\n * Check whether a function expression can be affected by\n * https://bugs.webkit.org/show_bug.cgi?id=220517\n * @param path The function expression NodePath\n * @returns the name of function id if it should be transformed, otherwise returns false\n */\nexport function shouldTransform(\n  path: NodePath<FunctionExpression>,\n): string | false {\n  const { node } = path;\n  const functionId = node.id;\n  if (!functionId) return false;\n\n  const name = functionId.name;\n  // On collision, `getOwnBinding` returns the param binding\n  // with the id binding be registered as constant violation\n  const paramNameBinding = path.scope.getOwnBinding(name);\n  if (paramNameBinding === undefined) {\n    // Case 1: the function id is injected by babel-helper-name-function, which\n    // assigns `NOT_LOCAL_BINDING` to the `functionId` and thus not registering id\n    // in scope tracking\n    // Case 2: the function id is injected by a third party plugin which does not update the\n    // scope info\n    return false;\n  }\n  if (paramNameBinding.kind !== \"param\") {\n    // the function id does not reproduce in params\n    return false;\n  }\n\n  if (paramNameBinding.identifier === paramNameBinding.path.node) {\n    // the param binding is a simple parameter\n    // e.g. (function a(a) {})\n    return false;\n  }\n\n  return name;\n}\n","import { declare } from \"@babel/helper-plugin-utils\";\nimport { shouldTransform } from \"./util\";\n\nexport default declare(api => {\n  api.assertVersion(\"^7.16.0\");\n\n  return {\n    name: \"plugin-bugfix-safari-id-destructuring-collision-in-function-expression\",\n\n    visitor: {\n      FunctionExpression(path) {\n        const name = shouldTransform(path);\n        if (name) {\n          // Now we have (function a([a]) {})\n          const { scope } = path;\n          // invariant: path.node.id is always an Identifier here\n          const newParamName = scope.generateUid(name);\n          scope.rename(name, newParamName);\n        }\n      },\n    },\n  };\n});\n"],"names":["shouldTransform","path","node","functionId","id","name","paramNameBinding","scope","getOwnBinding","undefined","kind","identifier","declare","api","assertVersion","visitor","FunctionExpression","newParamName","generateUid","rename"],"mappings":";;;;;;AASO,SAASA,eAAT,CACLC,IADK,EAEW;EAChB,MAAM;AAAEC,IAAAA,IAAAA;AAAF,GAAA,GAAWD,IAAjB,CAAA;AACA,EAAA,MAAME,UAAU,GAAGD,IAAI,CAACE,EAAxB,CAAA;AACA,EAAA,IAAI,CAACD,UAAL,EAAiB,OAAO,KAAP,CAAA;AAEjB,EAAA,MAAME,IAAI,GAAGF,UAAU,CAACE,IAAxB,CAAA;EAGA,MAAMC,gBAAgB,GAAGL,IAAI,CAACM,KAAL,CAAWC,aAAX,CAAyBH,IAAzB,CAAzB,CAAA;;EACA,IAAIC,gBAAgB,KAAKG,SAAzB,EAAoC;AAMlC,IAAA,OAAO,KAAP,CAAA;AACD,GAAA;;AACD,EAAA,IAAIH,gBAAgB,CAACI,IAAjB,KAA0B,OAA9B,EAAuC;AAErC,IAAA,OAAO,KAAP,CAAA;AACD,GAAA;;EAED,IAAIJ,gBAAgB,CAACK,UAAjB,KAAgCL,gBAAgB,CAACL,IAAjB,CAAsBC,IAA1D,EAAgE;AAG9D,IAAA,OAAO,KAAP,CAAA;AACD,GAAA;;AAED,EAAA,OAAOG,IAAP,CAAA;AACD;;ACrCD,YAAeO,yBAAO,CAACC,GAAG,IAAI;EAC5BA,GAAG,CAACC,aAAJ,CAAkB,SAAlB,CAAA,CAAA;EAEA,OAAO;AACLT,IAAAA,IAAI,EAAE,wEADD;AAGLU,IAAAA,OAAO,EAAE;MACPC,kBAAkB,CAACf,IAAD,EAAO;AACvB,QAAA,MAAMI,IAAI,GAAGL,eAAe,CAACC,IAAD,CAA5B,CAAA;;AACA,QAAA,IAAII,IAAJ,EAAU;UAER,MAAM;AAAEE,YAAAA,KAAAA;AAAF,WAAA,GAAYN,IAAlB,CAAA;AAEA,UAAA,MAAMgB,YAAY,GAAGV,KAAK,CAACW,WAAN,CAAkBb,IAAlB,CAArB,CAAA;AACAE,UAAAA,KAAK,CAACY,MAAN,CAAad,IAAb,EAAmBY,YAAnB,CAAA,CAAA;AACD,SAAA;AACF,OAAA;;AAVM,KAAA;GAHX,CAAA;AAgBD,CAnBqB,CAAtB;;;;"}