{"version":3,"names":["DependencyGraph","__SystemJSRewritingHack","t","AEXPR_IDENTIFIER_NAME","leakingBindings","path","bindings","Set","traverse","ReferencedIdentifier","id","outerBinding","scope","getBinding","node","name","actualBinding","add","isAExpr","isCallExpression","isIdentifier","callee","hasBinding","_export","setters","_srcExternalBabelBabel7defaultJs","babelDefault","default","_utils","range","execute","_recorder_","_src_client_dependency_graph_graph_js","Object","defineProperty","get","set","thisIsVererySecretVariableName","enumerable","configurable","types","babel","programPath","capabilities","constructor","memberAssignments","Map","finishedEnrichment","enrich","getAexprAtCursor","location","aexprPath","CallExpression","loc","contains","skip","stop","getAllActiveExpressions","allAExpr","push","hasActiveExpressionsDirective","directives","some","value","ensureEnrichment","err","console","error","self","enter","extra","visited","returnVisited","Scopable","entries","forEach","_name","binding","referencePaths","extractMemberAssignments","enrichFunctionNodes","Expression","expr","collectExpressionInformation","MemberExpression","computed","parentPath","isAssignmentExpression","assignment","assignedValue","obj","objKey","property","entry","newMap","objEntry","Function|ArrowFunctionExpression|Program","callExpressions","objects","returns","objExpr","ReturnStatement","ret","has","call","results","resolvedObjects","isObjectExpression","objectExpression","constantViolations","item","isVariableDeclarator","val","isFunction","isConditionalExpression","resolvedCallees","func","body","isBlockStatement","returnStatement","flat","isMemberExpression","tmp","result","assignmentsOf","shadowedBindings","propertyEntry","memberDependencies","find","isObjectProperty","isObjectMethod","isFunctionDeclaration","isPattern","resolveDependenciesAtLocation","dep","dependencyGraph","dependencies","log","_resolveDependencies","resolveDependenciesForMember","memberName","deps","Function","key","resolveDependencies","AssignmentExpression","left","isThisExpression","object","UpdateExpression","argument","map","callExpression","isArrowFunctionExpression","size","members","member"],"sources":["graph.js"],"sourcesContent":["import babelDefault from 'src/external/babel/babel7default.js'\n\nimport { range } from 'utils';\nconst { types: t } = babelDefault.babel;\n\nexport class DependencyGraph {\n  \n\tget programPath() { return this.capabilities.programPath }\n\n\tconstructor(capabilities) {\n    this.capabilities = capabilities;\n\n\t\t//Stores globally a `map` of properties (`String`) to objectbindings of the objects, that have a property of that name. \n\t\tthis.memberAssignments = new Map();\n    this.finishedEnrichment = false;\n\t\tthis.enrich();\n\t}\n  \n  getAexprAtCursor(location) {\n    let aexprPath;\n    this.programPath.traverse({\n      CallExpression(path) {\n        if (!range(path.node.loc).contains(location)) {\n          path.skip();\n        } else if (isAExpr(path)) {\n          aexprPath = path;\n          path.stop();\n        }\n      }\n    });\n    return aexprPath;\n  }\n  \n  getAllActiveExpressions () {\n    if(!this.programPath) return [];\n    const allAExpr = [];\n    this.programPath.traverse({\n      CallExpression(path) {\n        if (isAExpr(path) ) {\n          allAExpr.push(path);\n        }\n      }\n    });    \n    return allAExpr;    \n  }\n\n  get hasActiveExpressionsDirective() {\n    if(!this.programPath) return false;\n    return this.programPath.node.directives.some(node => {\n      return node.value && node.value.value === \"enable aexpr\";\n    });\n  }\n\n  ensureEnrichment() {\n    if (this.finishedEnrichment) return true;\n    if (!this.programPath || !this.hasActiveExpressionsDirective) return false;\n    try {\n      this.enrich();\n    } catch (err) {\n      console.error(\"Unable to process source code\", err);\n      return false;\n    }\n    return true;\n  }\n\n\tenrich() {\n    if(!this.programPath) return;\n\t\tlet self = this;\n\t\tthis.programPath.traverse({\n\t\t\tenter(path) {\n\t\t\t\tpath.node.extra = {\n\t\t\t\t\t// this in necessary due to possible circles\n\t\t\t\t\t// this collects the correct dependencies\n\t\t\t\t\t// breaks as soon as a node is contained by more than one circle (but this turned out to be unlikely)\n\t\t\t\t\tvisited: 2,\n\t\t\t\t\t//same for return recursion\n\t\t\t\t\treturnVisited: 2\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\t// adds the corresponding binding to every identifier\n\t\tthis.programPath.traverse({\n\t\t\tScopable(path) {\n\t\t\t\tObject.entries(path.scope.bindings).forEach(([_name, binding]) => {\n\t\t\t\t\tbinding.referencePaths.forEach(path => {\n\t\t\t\t\t\tpath.node.extra.binding = binding;\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\tthis.extractMemberAssignments();\n    \n    this.enrichFunctionNodes();\n\n\t\tthis.programPath.traverse({\n\t\t\tExpression(expr) {\n\t\t\t\tself.collectExpressionInformation(expr);\n\t\t\t}\n\t\t});\n    this.finishedEnrichment = true;\n\t}\n  \n\t// Filters every memberassignment and registers it in `this.memberAssignments`\n  extractMemberAssignments(){\n    let self = this;\n    this.programPath.traverse({\n\t\t\tMemberExpression(expr) {\n\t\t\t\tif (expr.node.computed) return;\n\t\t\t\tif (!expr.parentPath.isAssignmentExpression()) return;\n        let assignment = self.assignedValue(expr.parentPath);\n\n\t\t\t\tlet obj = expr.get(\"object\");\n\t\t\t\tlet objKey = obj.node.extra.binding || 'misc';\n\t\t\t\tlet property = expr.get(\"property\").node.name;\n\n\t\t\t\tlet entry = self.memberAssignments.get(property);\n\t\t\t\tif (!entry) {\n\t\t\t\t\t// property unknown, adding new property and its accesses to the map\n\t\t\t\t\tlet newMap = new Map();\n\n\t\t\t\t\tnewMap.set(objKey, [assignment]);\n\t\t\t\t\tself.memberAssignments.set(property, newMap);\n\t\t\t\t} else {\n\t\t\t\t\tlet objEntry = entry.get(objKey);\n\t\t\t\t\tif (!objEntry) {\n\t\t\t\t\t\tobjEntry = [];\n\t\t\t\t\t\tentry.set(objKey, objEntry);\n\t\t\t\t\t}\n\t\t\t\t\tobjEntry.push(assignment);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n  }\n  \n  enrichFunctionNodes(){\n    // adds bindings definend outside of the current scope(e.g. Function) to the scope\n\t\tthis.programPath.traverse({\n\t\t\t'Function|ArrowFunctionExpression|Program'(path) {\n\t\t\t\tpath.node.extra.leakingBindings = leakingBindings(path);\n\t\t\t\tconst callExpressions = path.node.extra.callExpressions = [];\n\t\t\t\tconst objects = path.node.extra.objects = new Map();\n\t\t\t\tconst returns = path.node.extra.returns = [];\n\n\t\t\t\tpath.traverse({\n\t\t\t\t\tMemberExpression(expr) {\n\t\t\t\t\t\tif (expr.parentPath.isAssignmentExpression()) return;\n\t\t\t\t\t\tlet objExpr = expr.get(\"object\").node;\n\t\t\t\t\t\tlet property = expr.get(\"property\").node.name;\n\n\t\t\t\t\t\tlet entry = objects.get(objExpr);\n\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\tobjects.set(objExpr, new Set([property]));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tentry.add(property);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tpath.traverse({\n\t\t\t\t\tReturnStatement(ret) {\n\t\t\t\t\t\tif (ret.has(\"argument\")) {\n\t\t\t\t\t\t\treturns.push(ret.get(\"argument\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tCallExpression(call) {\n\t\t\t\t\t\tcallExpressions.push(call)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t});\n  }\n\n  /* Main recursion for enriching AST \n  *  Resolves Expression nodes and follows their children in order to find\n  *  - resolvedObjects - the {ObjExpression, [Bindings]} in which the expression may result\n  *  - resolvedCallees - the [Function] which callepressions may actually be\n  *  - results         - the [Function] which may be returned by an expression or Identifier\n  *\n  */\n\tcollectExpressionInformation(path) {\n\t\tif (path.node.extra.results) {\n\t\t\treturn path.node.extra.results\n\t\t}\n    \n\t\tif (path.node.extra.returnVisited <= 0) {\n      path.node.extra.resolvedObjects = [];\n      path.node.extra.results = [];\n\t\t\treturn [];\n\t\t}\n\n\t\tpath.node.extra.returnVisited -= 1;\n\n\t\tlet results = [];\n    let resolvedObjects = [];\n\n\t\tif (path.isObjectExpression()) {\n      resolvedObjects = [{objectExpression:path, bindings:new Set()}];\n\n\t\t} else if (path.isIdentifier()) {\n\t\t\tlet binding = path.node.extra.binding;\n\t\t\tif (binding) {\n\t\t\t\t[binding.path, ...binding.constantViolations].forEach(item => {\n\t\t\t\t\tthis.collectExpressionInformation(item);\n\t\t\t\t\tresults.push(item.node.extra.results);\n          item.node.extra.resolvedObjects.forEach(obj =>{\n            obj.bindings.add(binding);            \n            resolvedObjects.push(obj);            \n          })\n\t\t\t\t})\n\t\t\t}\n    \n    } else if (path.isAssignmentExpression() || path.isVariableDeclarator()) {\n          \n\t\t\tlet val = this.assignedValue(path);\n      if(val && val.node) {        \n        this.collectExpressionInformation(val);\n        results = val.node.extra.results;\n        resolvedObjects = val.node.extra.resolvedObjects;\n      }\n\n\t\t} else if (path.isFunction()) {\n\t\t\tresults = [path];\n\n\t\t} else if (path.isConditionalExpression()) {\n\t\t\t[path.get(\"consequent\"), path.get(\"alternate\")].forEach(expr => {\n\t\t\t\tthis.collectExpressionInformation(expr);\n\t\t\t\tresults.push(expr.node.extra.results);\n        resolvedObjects.push(expr.node.extra.resolvedObjects);\n\t\t\t})\n\n\t\t} else if (path.isCallExpression()) {\n\t\t\tconst callee = path.get(\"callee\");\n\t\t\tlet resolvedCallees = [];\n\t\t\tthis.collectExpressionInformation(callee);\n\t\t\tcallee.node.extra.results.forEach(func => {\n\t\t\t\tthis.collectExpressionInformation(func);\n\t\t\t\tconst body = func.get(\"body\");\n\t\t\t\tif (!body.isBlockStatement()) {\n\t\t\t\t\t// slim arrow function        \n\t\t\t\t\tthis.collectExpressionInformation(body);\n\t\t\t\t\tresults.push(body.node.extra.results);\n\t\t\t\t} else {\n\t\t\t\t\tfunc.node.extra.returns.forEach(returnStatement => {\n\t\t\t\t\t\tthis.collectExpressionInformation(returnStatement);\n\t\t\t\t\t\tresults.push(returnStatement.node.extra.results);\n            resolvedObjects.push(returnStatement.node.extra.resolvedObjects);\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t// hey we found a callee as well. \n\t\t\t\tresolvedCallees.push(func);\n\t\t\t})\n\t\t\tpath.node.extra.resolvedCallees = resolvedCallees.flat();\n\n\t\t} else if (path.isMemberExpression()) {\n\t\t\tconst objExpr = path.get(\"object\");\n\t\t\tthis.collectExpressionInformation(objExpr);\n\n\t\t\tlet tmp = objExpr.node.extra.resolvedObjects.flat();\n\t\t\ttmp.forEach(result => {\n\t\t\t\tthis.assignmentsOf(path.get(\"property\").node.name, result).forEach(assignment => {\n\t\t\t\t\tthis.collectExpressionInformation(assignment);\n\t\t\t\t\tresults.push(assignment.node.extra.results);\n          resolvedObjects.push(assignment.node.extra.resolvedObjects);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n    path.node.extra.resolvedObjects = resolvedObjects.flat();\n\t\tpath.node.extra.results = results.flat();\n\t}\n\n  // Returns for a given 'property' and {ObjExpression, [Binding]} all known assignments including the declaration\n\tassignmentsOf(property, obj) {\n    \n    let result = [];\n    this.shadowedBindings(obj.bindings).forEach(binding=>{\n    \n      let propertyEntry = this.memberAssignments.get(property) || new Map();\n      let memberDependencies = propertyEntry.get(\"misc\") || [];\n      memberDependencies.forEach(assignment => result.push(assignment));\n\n      let objEntry = propertyEntry.get(binding);\n      if (objEntry) {\n        objEntry.forEach(assignment => result.push(assignment))\n      }\n    });    \n    \n    // try to read as much from the given ObjectExpression as possible\n\n\t\tlet objExpr = obj.objectExpression; // the nodePath\n    if (objExpr && objExpr.isObjectExpression()){\n      let tmp = objExpr\n        .get(\"properties\")\n        .find(path => path.get(\"key\").node.name === property);\n      if(tmp) {\n        if (tmp.isObjectProperty()) {\n          result.push(tmp.get(\"value\"));\n        } else if (tmp.isObjectMethod()) {\n          result.push(tmp);\n        }\n      }\n    }\n\t\treturn result;\n\t}\n\n\tassignedValue(path) {\n\t\tif (path.isFunctionDeclaration()) return path;\n\t\tif (path.isAssignmentExpression()) return path.get(\"right\");\n\t\tif (path.isVariableDeclarator()) {\n\t\t\tconst id = path.get(\"id\");\n\t\t\tif (id.isPattern()) return; // #TODO\n\t\t\treturn path.get(\"init\");\n\t\t}\n\t\treturn;\n\t}\n  \n    /* returns all [binding] that the input [binding] may be assigned to.\n     * ATTENTION: this only works for object bindings, since literal values are copied in javascript\n     * `let a = 4; let b = a` `b` is not shadowed\n     *\n     *\n     * But if `a` is an object it is, so instead of using the actual binding `b`, we use every binding `b` resolves to (including `b`)\n     * \n     * //Where is b changed?\n     * let a = {x:1};\n     * let b = a; // a is shadowed binding\n     * a.x = 2; //<--!!!\n     * //b is equal to {x:2}\n     */\n  shadowedBindings(bindings) {\n    if(!bindings) return [];\n    \n    /* this should be stored in the members map or in an extra property. \n    * DOES NOT DETECT DEPENDENCIES THROUGH SIMPLE ASSIGNMENTS (a la `a = b`)\n    * do this with extra sweep as last enrichment step, when the new property in there\n    */\n    let result = bindings;\n    bindings.forEach(binding=>{\n      binding.path.node.extra.resolvedObjects.forEach(obj=>{\n        if(obj.bindings) {\n          obj.bindings.forEach(item => result.add(item));\n        }\n      })\n    });\n    \n    return result;\n  }\n\n  /* returns a [Node] of nodes where the active Expression on this location may be changed\n  * DOES NOT care for execution order of the code\n  * uses heuristics e.g. fixed recursion depth\n  */\n\tresolveDependenciesAtLocation(location) {\n\t\tlet node;\n\t\tlet dep;\n\t\tlet dependencyGraph = this;\n\t\tthis.programPath.traverse({\n\t\t\tCallExpression(path) {\n\t\t\t\tif (isAExpr(path) && range(path.node.loc).contains(location.node.loc)) {\n\t\t\t\t\tif (path.node.dependencies != null) {\n\t\t\t\t\t\tdep = path.node.dependencies;\n\t\t\t\t\t\tconsole.log(\"dependencies already collected: \", dep);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tpath.node.extra.dependencies = dependencyGraph._resolveDependencies(path.get(\"arguments\")[0]);\n\t\t\t\t\tnode = path.node;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (dep) {\n\t\t\treturn dep\n\t\t}\n\t\treturn node.extra.dependencies;\n\t}\n  \n  resolveDependenciesForMember(memberName) {\n\t\tlet deps = [];\n    const self = this;\n\t\tlet dependencyGraph = this;\n\t\tthis.programPath.traverse({\n\t\t\tFunction(path) {\n        if(!path.node.key || path.node.key.name !== memberName) return;\n        if (!path.node.extra.dependencies) {\n          path.node.extra.dependencies = dependencyGraph.resolveDependencies(path);\n        }\n        deps.push(...(path.node.extra.dependencies || []), path.get(\"key\"));\n\t\t\t},\n      AssignmentExpression(path) {\n        const left = path.node.left;\n        if(t.isMemberExpression(left), t.isThisExpression(left.object) && left.property.name === memberName) {\n          deps.push(path);\n        }\n      },\n      UpdateExpression(path) {\n        const argument = path.node.argument;\n        if(t.isMemberExpression(argument), t.isThisExpression(argument.object) && argument.property.name === memberName) {\n          deps.push(path);\n        }\n      }\n      //Todo: Array stuff??\n\t\t});\n\t\treturn deps;\n\t}\n  \n\tresolveDependencies(path) {\n\t\tconst self = this;\n\t\tif ((path.node.extra.visited -= 1) <= 0) {\n\t\t\treturn path.node.extra.dependencies || new Set();\n\t\t}\n\n\t\tif (path.node.extra.dependencies) {\n\t\t\t// the dependencies were already collected... just return them\n\t\t\treturn path.node.extra.dependencies\n\t\t}\n\n\t\tlet dependencies = new Set([...this.shadowedBindings(path.node.extra.leakingBindings)].map(binding => [...binding.constantViolations]).flat());\n\t\tpath.node.extra.callExpressions.forEach(callExpression => {\n\t\t\tcallExpression.node.extra.resolvedCallees.forEach(callee => {\n\t\t\t\tif (t.isFunction(callee)) {\n\t\t\t\t\tthis._resolveDependencies(callee).forEach(dep => dependencies.add(dep));\n\t\t\t\t}\n\n\t\t\t\tif (t.isAssignmentExpression(callee)) {\n\t\t\t\t\tconst value = this.assignedValue(callee);\n\t\t\t\t\tif (t.isFunction(value) || t.isArrowFunctionExpression(value)) {\n\t\t\t\t\t\tthis.resolveDependencies(value).forEach(dep => dependencies.add(dep));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (t.isVariableDeclarator(callee)) {\n\t\t\t\t\t//we should not end up here\n\t\t\t\t}\n\t\t\t})\n\t\t});\n\n\t\tif (path.node.extra.objects.size) {\n\t\t\tfor (const [objExpr, members] of path.node.extra.objects.entries()) {\n\t\t\t\tfor (const member of members) {\n            self.assignmentsOf(member, {bindings: new Set(objExpr.extra.binding ?[objExpr.extra.binding]:[])}).forEach(assignment => {\n\t\t\t\t\t\tdependencies.add(assignment)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tpath.node.extra.dependencies = dependencies;\n\t\treturn dependencies;\n\t}\n}\n/*MD\n# Helper\nMD*/\nconst AEXPR_IDENTIFIER_NAME = 'aexpr';\n\nfunction leakingBindings(path) {\n\tconst bindings = new Set;\n\tpath.traverse({\n\t\tReferencedIdentifier(id) {\n\t\t\tconst outerBinding = path.scope.getBinding(id.node.name);\n\t\t\tif (!outerBinding) return;\n\t\t\tconst actualBinding = id.scope.getBinding(id.node.name);\n\t\t\tif (outerBinding === actualBinding) {\n\t\t\t\tbindings.add(actualBinding);\n\t\t\t}\n\t\t}\n\t});\n\treturn bindings;\n}\n\nfunction isAExpr(path) {\n\treturn t.isCallExpression(path)\n\t\t&& t.isIdentifier(path.node.callee)\n\t\t&& path.node.callee.name === AEXPR_IDENTIFIER_NAME\n\t\t&& !path.scope.hasBinding(AEXPR_IDENTIFIER_NAME, true);\n}"],"mappings":"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"}