{"version":3,"names":["detectUnsupportedNodes","path","filename","gainPrintableFullPath","fullPath","unshift","node","type","parentPath","map","nodeType","index","repeat","join","traverse","JSXMemberExpression","state","SyntaxError","loc","start","line","JSXEmptyExpression","JSXNamespacedName","_export","types","t","template","GENERATED_IMPORT_IDENTIFIER","Symbol","addCustomTemplate","file","name","declar","declarations","identifier","addNamed","nameHint","inherits","jsx","visitor","Program","opts","fileName","sourceLocation","buildSourceLocation","END_COLUMN","numericLiteral","end","column","END_LINE","START_COLUMN","START_LINE","expression","transformPath","programState","jSXAttributeToBuilder","getCallExpressionFor","functionName","additionalParameters","callExpression","stringLiteral","get","attributeValue","isJSXSpreadAttribute","value","isStringLiteral","isJSXExpressionContainer","isJSXElement","Error","jSXChildrenToBuilder","child","childSpec","isJSXText","isJSXSpreadChild","JSXElement","jSXAttributes","jSXChildren","newNode","replaceWith","CallExpression","__wrappedInMetaInformation__","isDomCreatingCall","callee","isMemberExpression","computed","object","property","isIdentifier","livelyCreate","documentCreateElement","setters","_babelPluginSyntaxJsx","default","_srcClientPreferencesJs","Preferences","_srcExternalBabelBabel7HelpersJs","execute"],"sources":["babel-plugin-jsx-lively.js"],"sourcesContent":["import jsx from \"babel-plugin-syntax-jsx\";\nimport Preferences from 'src/client/preferences.js';\n\nimport {addNamed} from 'src/external/babel/babel7-helpers.js';\n\n\nfunction detectUnsupportedNodes(path, filename) {\n  function gainPrintableFullPath(path) {\n    let fullPath = [];\n\n    while (path) {\n      fullPath.unshift(path.node.type);\n      path = path.parentPath;\n    }\n\n    return fullPath.map((nodeType, index) => '  '.repeat(index) + nodeType).join('\\n');\n  }\n\n  path.traverse({\n    /**\n     * No support for JSXMemberExpression yet. #TODO: what are the semantics outside of react for this?\n     * \n     * <foo.bar></foo.bar>\n     */\n    JSXMemberExpression(path, state) {\n      throw new SyntaxError(`JSXMemberExpression not yet supported.\n${gainPrintableFullPath(path)}`, filename, path.node.loc.start.line);\n    },\n    /**\n     * No support for JSXEmptyExpression yet. #TODO: where is this feature even useful?\n     * \n     * <div id={}></div>\n     * or\n     * <div>{}</div>\n     */\n    JSXEmptyExpression(path, state) {\n      throw new SyntaxError(`JSXEmptyExpression not yet supported.\n${gainPrintableFullPath(path)}`, filename);\n    },\n    /**\n     * No support for jSXNamespacedName yet.\n     * \n     * <div ns:attr=\"val\" />;\n     */\n    JSXNamespacedName(path, state) {\n      throw new SyntaxError(`jSXNamespacedName not yet supported.\n${gainPrintableFullPath(path)}`, filename, path.node.loc.start.line);\n    }\n  });\n}\n\n/**\n * Resources for JSX Syntax\n * JSX babel Preset: https://github.com/babel/babel/blob/master/packages/babel-preset-react/src/index.js\n * JSX spec draft: https://github.com/facebook/jsx\n * JSX Syntax definition in babel: https://github.com/babel/babel/blob/master/packages/babel-types/src/definitions/jsx.js#L10\n * Babel nodes list: https://babeljs.io/docs/core-packages/babel-types/#apij-sxidentifier\n */\nexport default function ({ types: t, template, traverse }) {\n  const GENERATED_IMPORT_IDENTIFIER = Symbol(\"generated import identifier\");\n\n  // #TODO: duplicate with aexpr transform -> extract it\n  function addCustomTemplate(file, name, path) {\n    let declar = file.declarations[name];\n    if (declar) return declar;\n\n    // file.addImport(\"reactive-jsx\", name, name);   \n    let identifier = file.declarations[name] = addNamed(path, name, \"reactive-jsx\", {nameHint: name});\n        \n    identifier[GENERATED_IMPORT_IDENTIFIER] = true;\n    \n    \n    return identifier;\n  }\n\n  return {\n    inherits: jsx,\n    visitor: {\n      Program(path, state) {\n        detectUnsupportedNodes(path, state && state.opts && state.opts.filename);\n        \n        const fileName = state && state.file && state.file.opts && state.file.opts.filename || 'no_file_given';\n        const sourceLocation = template(`({\n        file: '${fileName}',\n        end: {\n          column: END_COLUMN,\n          line: END_LINE\n        },\n        start: {\n          column: START_COLUMN,\n          line: START_LINE\n        }\n      })`);\n        function buildSourceLocation(node) {\n          return sourceLocation({\n            END_COLUMN: t.numericLiteral(node.loc.end.column),\n            END_LINE: t.numericLiteral(node.loc.end.line),\n            START_COLUMN: t.numericLiteral(node.loc.start.column),\n            START_LINE: t.numericLiteral(node.loc.start.line)\n          }).expression;\n        }\n\n        function transformPath(path, programState) {\n          function jSXAttributeToBuilder(path) {\n\n            function getCallExpressionFor(functionName, ...additionalParameters) {\n              return t.callExpression(addCustomTemplate(programState.file, functionName, path), // builder function\n              [t.stringLiteral(path.get(\"name\").node.name), // key\n              ...additionalParameters]);\n            }\n\n            let attributeValue = path.get(\"value\");\n            if (path.isJSXSpreadAttribute()) {\n              return t.callExpression(addCustomTemplate(programState.file, \"attributeSpread\", path), [path.get(\"argument\").node]);\n            } else if (!path.node.value) {\n              return getCallExpressionFor(\"attributeEmpty\");\n            } else if (attributeValue.isStringLiteral()) {\n              return getCallExpressionFor(\"attributeStringLiteral\", attributeValue.node);\n            } else if (attributeValue.isJSXExpressionContainer()) {\n              return getCallExpressionFor(\"attributeExpression\", attributeValue.node.expression);\n            } else if (attributeValue.isJSXElement()) {\n              // #TODO: what would that even mean?\n              throw new SyntaxError(`JSXElement as property value of JSXAttribute not yet supported.`);\n            }\n\n            throw new Error('unknown node type in JSXAttribute value ' + attributeValue.node.type);\n          }\n\n          function jSXChildrenToBuilder(child) {\n            function getCallExpressionFor(functionName, childSpec) {\n              return t.callExpression(addCustomTemplate(programState.file, functionName, path), // builder function\n              [childSpec]);\n            }\n\n            if (child.isJSXText()) {\n              return getCallExpressionFor(\"childText\", t.stringLiteral(child.node.value));\n            }\n            if (child.isJSXElement()) {\n              return getCallExpressionFor(\"childElement\", child.node);\n            }\n            if (child.isJSXExpressionContainer()) {\n              return getCallExpressionFor(\"childExpression\", child.get(\"expression\").node);\n            }\n            if (child.isJSXSpreadChild()) {\n              return getCallExpressionFor(\"childSpread\", child.get(\"expression\").node);\n              //throw new SyntaxError(`JSXSpreadChild as child of JSXElement not yet supported.`);\n            }\n            throw new Error('unknown node type in children of JSXElement ' + child.node.type);\n          }\n\n          path.traverse({\n            JSXElement(path, state) {\n              const jSXAttributes = path.get(\"openingElement\").get(\"attributes\");\n              const jSXChildren = path.get(\"children\");\n\n              let newNode = t.callExpression(addCustomTemplate(programState.file, \"element\", path), [t.stringLiteral(path.get(\"openingElement\").get(\"name\").node.name), t.callExpression(addCustomTemplate(programState.file, \"attributes\", path), jSXAttributes.map(jSXAttributeToBuilder)), t.callExpression(addCustomTemplate(programState.file, \"children\", path), jSXChildren.map(jSXChildrenToBuilder)), buildSourceLocation(path.node)]);\n\n              path.replaceWith(newNode);\n            },\n            CallExpression(path) {\n              if (path.node.__wrappedInMetaInformation__) {\n                return;\n              }\n              path.node.__wrappedInMetaInformation__ = true;\n\n              function isDomCreatingCall(path) {\n                const callee = path.get('callee');\n                if (!callee.isMemberExpression() || callee.node.computed) {\n                  return false;\n                }\n\n                const object = callee.get('object');\n                const property = callee.get('property');\n\n                if (!object.isIdentifier()) {\n                  return false;\n                }\n                if (!property.isIdentifier()) {\n                  return false;\n                }\n\n                const livelyCreate = object.node.name === 'lively' && property.node.name === 'create';\n                const documentCreateElement = object.node.name === 'document' && property.node.name === 'createElement';\n                return livelyCreate || documentCreateElement;\n              }\n\n              if (isDomCreatingCall(path)) {\n                path.replaceWith(t.callExpression(addCustomTemplate(programState.file, \"addSourceLocation\", path), [path.node, buildSourceLocation(path.node)]));\n              }\n            }\n          });\n\n          return path;\n        }\n\n        transformPath(path, state);\n      }\n    }\n  };\n}"],"mappings":"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"}