{"version":3,"names":["babel","globalThis","systemActivity","types","t","template","transformFromAst","traverse","generateDatabindingCode","lhs","expression","path","node","lhsString","AEIdentifier","identifier","loc","arrowFunction","arrowFunctionExpression","start","end","dataBindingInformation","push","objectProperty","booleanLiteral","isMemberExpression","object","property","stringLiteral","name","AECall","callExpression","objectExpression","assignment","assignmentExpression","assignmentFunction","body","onChangeCall","memberExpression","isDatabinding","uniqueAEIdentifier","scope","generateUid","AEVariableDeclaration","variableDeclaration","variableDeclarator","registerMemberExpression","thisExpression","registerIfStatement","ifStatement","logicalExpression","expressionStatement","buildSignal","kind","lively","warn","replaceWith","declarations","map","varDecl","id","reverse","init","insertAfter","buildDatabinding","statements","lvalue","left","uniqueObjectIdentifier","objectAssignmentStatement","uniquePropertyIdentifier","computedProperty","computed","propertyAssignmentStatement","isIdentifier","right","get","getSource","blockStatement","visitor","Program","enter","ppath","state","LabeledStatement","label","isVariableDeclaration","isExpressionStatement","isAssignmentExpression","operator","error","setters","execute","__SystemJSRewritingHack","_recorder_","_src_client_reactive_babel_plugin_databindings_index_js"],"sources":["index.js"],"sourcesContent":["\n\nexport default function (babel) {\n  const { types: t, template, transformFromAst, traverse } = babel;\n\n  const generateDatabindingCode = (lhs, expression, path, node, lhsString) => {\n    const AEIdentifier = t.identifier(\"aexpr\");\n    // When registering the AE, we want to know the code that generated it, which is this entire LabeledStatement\n    AEIdentifier.loc = node.loc;\n    const arrowFunction = t.arrowFunctionExpression([], expression);\n    arrowFunction.loc = expression.loc;\n    arrowFunction.start = expression.start;\n    arrowFunction.end = expression.end;\n\n    let dataBindingInformation = [];\n    dataBindingInformation.push(t.objectProperty(t.identifier(\"isDataBinding\"), t.booleanLiteral(true)));\n    if (t.isMemberExpression(lhs)) {\n      dataBindingInformation.push(t.objectProperty(t.identifier(\"dataBindingContext\"), lhs.object));\n      dataBindingInformation.push(t.objectProperty(t.identifier(\"dataBindingIdentifier\"), lhs.property));\n    } else {\n      dataBindingInformation.push(t.objectProperty(t.identifier(\"dataBindingContext\"), t.stringLiteral(\"__localScopeObject__\")));\n      dataBindingInformation.push(t.objectProperty(t.identifier(\"dataBindingIdentifier\"), t.stringLiteral(lhs.name)));\n    }\n\n    const AECall = t.callExpression(AEIdentifier, [arrowFunction, t.objectExpression(dataBindingInformation)]);\n    const assignment = t.assignmentExpression(\"=\", lhs, t.identifier(\"value\"));\n    // Also add the location info for the assignment\n    assignment.loc = node.loc;\n    const assignmentFunction = t.arrowFunctionExpression([t.identifier(\"value\")], assignment);\n    assignmentFunction.start = node.body.start;\n    assignmentFunction.end = node.body.end;\n    const onChangeCall = t.callExpression(t.memberExpression(AECall, t.identifier(\"dataflow\")), [assignmentFunction]);\n    onChangeCall.isDatabinding = true;\n\n    const uniqueAEIdentifier = t.identifier(path.scope.generateUid(\"ae\"));\n    const AEVariableDeclaration = t.variableDeclaration(\"const\", [t.variableDeclarator(uniqueAEIdentifier, onChangeCall)]);\n\n    //Register the generated AE, if a registerDatabinding method exists\n    const registerMemberExpression = t.memberExpression(t.thisExpression(), t.identifier(\"registerDatabinding\"));\n    const registerIfStatement = t.ifStatement(t.logicalExpression(\"&&\", t.thisExpression(), registerMemberExpression), t.expressionStatement(t.callExpression(registerMemberExpression, [uniqueAEIdentifier, t.stringLiteral(lhsString)])));\n    return [registerIfStatement, AEVariableDeclaration];\n  };\n  \n  \n  const buildSignal = (path, node) => {\n    if (node.body.kind === \"const\") {\n      node.body.kind = \"let\";\n      lively.warn(\"Invalid const in databinding. Was automatically replaced with let\");\n    }\n\n    path.replaceWith(t.variableDeclaration(node.body.kind, node.body.declarations.map(varDecl => t.variableDeclarator(varDecl.id))));\n\n    for (const variableDeclaration of node.body.declarations.reverse()) {\n      const [registerIfStatement, AEVariableDeclaration] = generateDatabindingCode(variableDeclaration.id, variableDeclaration.init, path, node, variableDeclaration.id.name);\n\n      path.insertAfter(registerIfStatement);\n      path.insertAfter(AEVariableDeclaration);\n    }\n  }\n  \n  const buildDatabinding = (path, node) => {\n    const statements = [];\n    const expression = node.body.expression;\n    const lvalue = expression.left;\n    let lhs;\n    //There are only three lvalues\n    if (t.isMemberExpression(lvalue)) {\n      // object.property and object[\"property\"] are both memberExpressions. the latter is computed. \n      // object and property are both evaluated at the beginning and then stay constant.\n      const uniqueObjectIdentifier = t.identifier(path.scope.generateUid(\"object\"));\n      const objectAssignmentStatement = t.variableDeclaration(\"const\", [t.variableDeclarator(uniqueObjectIdentifier, lvalue.object)]);\n      statements.push(objectAssignmentStatement);\n\n      const uniquePropertyIdentifier = t.identifier(path.scope.generateUid(\"property\"));\n      const computedProperty = lvalue.computed ? lvalue.property : t.stringLiteral(lvalue.property.name);\n      const propertyAssignmentStatement = t.variableDeclaration(\"const\", [t.variableDeclarator(uniquePropertyIdentifier, computedProperty)]);\n      statements.push(propertyAssignmentStatement);\n\n      lhs = t.memberExpression(uniqueObjectIdentifier, uniquePropertyIdentifier, true);\n    } else if (t.isIdentifier(lvalue)) {\n      // local variable is also an lvalue. No evaluation required.\n      lhs = lvalue;\n    } else {\n      lively.warn(\"LHS of databinding assignment is not an lvalue. No databinding registered!\"); //This should not be valid code in the first place\n      path.replaceWith(expression);\n    }\n    const [registerIfStatement, AEVariableDeclaration] = generateDatabindingCode(lhs, expression.right, path, node, path.get(\"body.expression.left\").getSource());\n\n    statements.push(AEVariableDeclaration);\n    statements.push(registerIfStatement);\n    path.replaceWith(t.blockStatement(statements));\n  }\n\n  return {\n    name: \"data-binding\",\n    visitor: {\n      Program: {\n        enter(ppath, state) {\n          ppath.traverse({\n            LabeledStatement(path) {\n              const node = path.node;\n              if (node.label.name === \"always\") {\n                if (t.isVariableDeclaration(node.body)) {                  \n                  buildSignal(path, node);\n                } else if (t.isExpressionStatement(node.body) && t.isAssignmentExpression(node.body.expression, { operator: \"=\" })) {             \n                  buildDatabinding(path, node);                  \n                } else {\n                  lively.error(\"Unable to parse databinding\");\n                }\n              }\n              if (node.label.name === \"signal\") {\n                if (t.isVariableDeclaration(node.body)) {\n                  buildSignal(path, node);\n                } else if (t.isExpressionStatement(node.body) && t.isAssignmentExpression(node.body.expression, { operator: \"=\" })) {\n                  lively.warn(\"Use always: for databindings. Unlike Signals, they can also write to exising variables.\");\n                } else {\n                  lively.error(\"Unable to parse signal\");\n                }\n              }\n            }\n          });\n        }\n      }\n    }\n  };\n}"],"mappings":"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"}