{"version":3,"names":["types","t","getTempId","scope","id","path","getData","generateDeclaredUidIdentifier","setData","getStaticContext","bind","object","callee","isStatic","inferBindContext","staticContext","tempId","sequenceExpression","assignmentExpression","inherits","functionBindSyntax","visitor","CallExpression","node","isBindExpression","context","memberExpression","identifier","arguments","unshift","BindExpression","replaceWith","callExpression","setters","_babelPluginSyntaxFunctionBind","default","execute"],"sources":["babel-plugin-transform-function-bind.js"],"sourcesContent":["import functionBindSyntax from \"babel-plugin-syntax-function-bind\";\r\n\r\nexport default function ({ types: t }) {\r\n  function getTempId(scope) {\r\n    let id = scope.path.getData(\"functionBind\");\r\n    if (id) return id;\r\n\r\n    id = scope.generateDeclaredUidIdentifier(\"context\");\r\n    return scope.path.setData(\"functionBind\", id);\r\n  }\r\n\r\n  function getStaticContext(bind, scope) {\r\n    const object = bind.object || bind.callee.object;\r\n    return scope.isStatic(object) && object;\r\n  }\r\n\r\n  function inferBindContext(bind, scope) {\r\n    const staticContext = getStaticContext(bind, scope);\r\n    if (staticContext) return staticContext;\r\n\r\n    const tempId = getTempId(scope);\r\n    if (bind.object) {\r\n      bind.callee = t.sequenceExpression([\r\n        t.assignmentExpression(\"=\", tempId, bind.object),\r\n        bind.callee\r\n      ]);\r\n    } else {\r\n      bind.callee.object = t.assignmentExpression(\"=\", tempId, bind.callee.object);\r\n    }\r\n    return tempId;\r\n  }\r\n\r\n  return {\r\n    inherits: functionBindSyntax,\r\n\r\n    visitor: {\r\n      CallExpression({ node, scope }) {\r\n        const bind = node.callee;\r\n        if (!t.isBindExpression(bind)) return;\r\n\r\n        const context = inferBindContext(bind, scope);\r\n        node.callee = t.memberExpression(bind.callee, t.identifier(\"call\"));\r\n        node.arguments.unshift(context);\r\n      },\r\n\r\n      BindExpression(path) {\r\n        const { node, scope } = path;\r\n        const context = inferBindContext(node, scope);\r\n        path.replaceWith(t.callExpression(t.memberExpression(node.callee, t.identifier(\"bind\")), [context]));\r\n      }\r\n    }\r\n  };\r\n}\r\n"],"mappings":";;;;qBAEe,UAAU;IAAEA,KAAK,EAAEC;EAAE,CAAC,EAAE;IACrC,SAASC,SAASA,CAACC,KAAK,EAAE;MACxB,IAAIC,EAAE,GAAGD,KAAK,CAACE,IAAI,CAACC,OAAO,CAAC,cAAc,CAAC;MAC3C,IAAIF,EAAE,EAAE,OAAOA,EAAE;MAEjBA,EAAE,GAAGD,KAAK,CAACI,6BAA6B,CAAC,SAAS,CAAC;MACnD,OAAOJ,KAAK,CAACE,IAAI,CAACG,OAAO,CAAC,cAAc,EAAEJ,EAAE,CAAC;IAC/C;IAEA,SAASK,gBAAgBA,CAACC,IAAI,EAAEP,KAAK,EAAE;MACrC,MAAMQ,MAAM,GAAGD,IAAI,CAACC,MAAM,IAAID,IAAI,CAACE,MAAM,CAACD,MAAM;MAChD,OAAOR,KAAK,CAACU,QAAQ,CAACF,MAAM,CAAC,IAAIA,MAAM;IACzC;IAEA,SAASG,gBAAgBA,CAACJ,IAAI,EAAEP,KAAK,EAAE;MACrC,MAAMY,aAAa,GAAGN,gBAAgB,CAACC,IAAI,EAAEP,KAAK,CAAC;MACnD,IAAIY,aAAa,EAAE,OAAOA,aAAa;MAEvC,MAAMC,MAAM,GAAGd,SAAS,CAACC,KAAK,CAAC;MAC/B,IAAIO,IAAI,CAACC,MAAM,EAAE;QACfD,IAAI,CAACE,MAAM,GAAGX,CAAC,CAACgB,kBAAkB,CAAC,CACjChB,CAAC,CAACiB,oBAAoB,CAAC,GAAG,EAAEF,MAAM,EAAEN,IAAI,CAACC,MAAM,CAAC,EAChDD,IAAI,CAACE,MAAM,CACZ,CAAC;MACJ,CAAC,MAAM;QACLF,IAAI,CAACE,MAAM,CAACD,MAAM,GAAGV,CAAC,CAACiB,oBAAoB,CAAC,GAAG,EAAEF,MAAM,EAAEN,IAAI,CAACE,MAAM,CAACD,MAAM,CAAC;MAC9E;MACA,OAAOK,MAAM;IACf;IAEA,OAAO;MACLG,QAAQ,EAAEC,kBAAkB;MAE5BC,OAAO,EAAE;QACPC,cAAcA,CAAC;UAAEC,IAAI;UAAEpB;QAAM,CAAC,EAAE;UAC9B,MAAMO,IAAI,GAAGa,IAAI,CAACX,MAAM;UACxB,IAAI,CAACX,CAAC,CAACuB,gBAAgB,CAACd,IAAI,CAAC,EAAE;UAE/B,MAAMe,OAAO,GAAGX,gBAAgB,CAACJ,IAAI,EAAEP,KAAK,CAAC;UAC7CoB,IAAI,CAACX,MAAM,GAAGX,CAAC,CAACyB,gBAAgB,CAAChB,IAAI,CAACE,MAAM,EAAEX,CAAC,CAAC0B,UAAU,CAAC,MAAM,CAAC,CAAC;UACnEJ,IAAI,CAACK,SAAS,CAACC,OAAO,CAACJ,OAAO,CAAC;QACjC,CAAC;QAEDK,cAAcA,CAACzB,IAAI,EAAE;UACnB,MAAM;YAAEkB,IAAI;YAAEpB;UAAM,CAAC,GAAGE,IAAI;UAC5B,MAAMoB,OAAO,GAAGX,gBAAgB,CAACS,IAAI,EAAEpB,KAAK,CAAC;UAC7CE,IAAI,CAAC0B,WAAW,CAAC9B,CAAC,CAAC+B,cAAc,CAAC/B,CAAC,CAACyB,gBAAgB,CAACH,IAAI,CAACX,MAAM,EAAEX,CAAC,CAAC0B,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAACF,OAAO,CAAC,CAAC,CAAC;QACtG;MACF;IACF,CAAC;EACH,CAAC;EAAA;IAAAQ,OAAA,aAAAC,8BAAA;MApDMd,kBAAkB,GAAAc,8BAAA,CAAAC,OAAA;IAAA;IAAAC,OAAA,WAAAA,CAAA;EAAA;AAAA"}