{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-leo/src/client/syntax.js"],"names":["babelDefault","jsx","doExpressions","bind","babel","additionalSyntaxPlugins","SyntaxChecker","checkForSyntaxErrors","editor","getSession","checkForSyntaxErrorsCodeMirror","Range","ace","require","doc","getDocument","src","getValue","setAnnotations","markers","getMarkers","i","clazz","removeMarker","result","transform","babelrc","plugins","presets","filename","undefined","sourceFileName","moduleIds","sourceMaps","compact","comments","code","ast","resolveModuleSource","e","session","addMarker","fromPoints","indexToPosition","pos","raisedAt","row","loc","line","column","text","message","type","clearGutter","getAllMarks","filter","ea","isSyntaxError","forEach","clear","syntaxPlugins","Promise","all","map","syntaxPlugin","System","import","m","default","errorMark","document","createElement","style","color","marginLeft","innerHTML","classList","add","setAttribute","setGutterMarker","marker","markText","ch","css","title"],"mappings":"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","file":"syntax.js","sourcesContent":["\n\nimport babelDefault from 'systemjs-babel-build';\nconst babel = babelDefault.babel;\n\nimport jsx from \"babel-plugin-syntax-jsx\";\nimport doExpressions from \"babel-plugin-syntax-do-expressions\";\nimport bind from \"babel-plugin-syntax-function-bind\";\nlet additionalSyntaxPlugins = [\n  jsx,\n  doExpressions,\n  bind\n];\n\nexport default class SyntaxChecker {\n  \n  static checkForSyntaxErrors(editor) {\n    if (!editor.getSession) {\n      // we assume we are a code mirror, what else should we be? #HACK\n      return this.checkForSyntaxErrorsCodeMirror(editor)\n    }\n    \n    var Range = ace.require('ace/range').Range;\n    var doc = editor.getSession().getDocument(); \n    var src = editor.getValue();\n    \n    // clear annotations\n    editor.getSession().setAnnotations([]);\n    \n    // clear markers\n    var markers = editor.getSession().getMarkers();\n    for(var i in markers) {\n        if (markers[i].clazz == \"marked\") {\n            editor.getSession().removeMarker(i);\n        }\n    }\n    \n    try {\n        var result = babel.transform(src, {\n          babelrc: false,\n          plugins: additionalSyntaxPlugins,\n          presets: [],\n          filename: undefined,\n          sourceFileName: undefined,\n          moduleIds: false,\n          sourceMaps: false,\n          compact: false,\n          comments: true,\n          code: true,\n          ast: true,\n          resolveModuleSource: undefined\n        })\n        var ast = result.ast;\n        return false;\n    } catch(e) {\n      editor.session.addMarker(Range.fromPoints(\n        doc.indexToPosition(e.pos),\n        doc.indexToPosition(e.raisedAt)), \"marked\", \"text\", false); \n      \n      editor.getSession().setAnnotations([{\n        row: e.loc.line - 1,\n        column: e.loc.column,\n        text: e.message,\n        type: \"error\"\n      }]);\n      \n      return true\n    }\n  }\n  \n  \n  static async checkForSyntaxErrorsCodeMirror(editor) {\n    var src = editor.getValue();\n    \n    editor.clearGutter(\"leftgutter\")\n    \n    \n    // clear markers\n    editor.getAllMarks()\n      .filter(ea => ea.isSyntaxError)\n      .forEach(ea => ea.clear())\n    \n    const syntaxPlugins = (await Promise.all([\n      'babel-plugin-syntax-jsx',\n      'babel-plugin-syntax-async-generators',\n      'babel-plugin-syntax-do-expressions',\n      'babel-plugin-syntax-function-bind'\n    ]\n      .map(syntaxPlugin => System.import(syntaxPlugin))))\n      .map(m => m.default);\n    try {\n        var result = babel.transform(src, {\n          babelrc: false,\n          plugins: syntaxPlugins,\n          presets: [],\n          filename: undefined,\n          sourceFileName: undefined,\n          moduleIds: false,\n          sourceMaps: false,\n          compact: false,\n          comments: true,\n          code: true,\n          ast: true,\n          resolveModuleSource: undefined\n        })\n        var ast = result.ast;\n        return false;\n    } catch(e) {      \n      var line = e.loc.line - 1;\n      var errorMark = document.createElement(\"div\")\n      errorMark.style.color = \"red\";\n      errorMark.style.marginLeft = \"5px\"\n      errorMark.innerHTML = \"<b>!</b>\"\n      errorMark.classList.add(\"errorMark\")\n      errorMark.setAttribute(\"title\", \"\" + e)\n      editor.setGutterMarker(line, \"leftgutter\", errorMark)\n      \n      var marker = editor.markText(\n        {line: line, ch: 0}, // e.loc.column\n        {line: line, ch: 100},\n        {\n          isSyntaxError: true,\n          css: \"background-color: rgba(255,0,0,0.3)\", \n          title: \"\" + e\n        }); \n      \n      // editor.getSession().setAnnotations([{\n      //   row: e.loc.line - 1,\n      //   column: e.loc.column,\n      //   text: e.message,\n      //   type: \"error\"\n      // }]);\n      \n      return true\n    }\n  }\n  \n  \n}"]}