{"version":3,"sources":["webpack:///./node_modules/petrel/src/languages/JavaScriptAutoComplete.js"],"names":["JavaScriptAutoComplete","environment","super","this","defaultFunctions","functions","defaultVariables","variables","prependSource","disableAutoLoad","name","window","val","push","value","varRes","matchAll","params","split","map","a","trim","paramsLength","length","word","editor","searchWord","replaceAll","ret","analyseCode","key","KEYWORDS","toLowerCase","startsWith","text","type","replace","KEYWORDS_OWN_LOGIC","forEach","fn","join","cursorMove","FILE_EXTENSIONS"],"mappings":"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","file":"js/chunk-2d22fd8d.33ccf907.js","sourcesContent":["import AutoCompletion from \"../AutoCompletion.js\"\n\nexport default class JavaScriptAutoComplete extends AutoCompletion {\n\n constructor(environment = {}){\n super()\n this.defaultFunctions = environment.functions ? environment.functions : []\n this.defaultVariables = environment.variables ? environment.variables : []\n this.prependSource = environment.prependSource ? environment.prependSource+\"\\n\\n\" : ''\n\n if (!environment.disableAutoLoad){\n for (const name in window) {\n const val = window[name]\n if (typeof val == 'function'){\n // let matchParams = val.toString().match(/\\([^)]*\\)/)\n // matchParams = matchParams ? matchParams[0].substring(1).substring(0,matchParams[0].length-2) : null\n \n this.defaultFunctions.push({\n name: name,\n // paramsLength: val.length,\n // params: matchParams ? matchParams.split(\",\").map(a=>a.trim()) : []\n })\n } else\n this.defaultVariables.push(name)\n }\n }\n }\n\n analyseCode(value){\n const variables = [...this.defaultVariables]\n const functions = [...this.defaultFunctions]\n\n const val = this.prependSource+value\n for (const varRes of val.matchAll(/(^| |\\n)(const|let|var) (\\s*?)([A-Za-z0-9_$]*)(\\s*?)(=|;|\\n|$)/gm))\n variables.push(varRes[4])\n \n for (const varRes of val.matchAll(/(^|;(\\s*)?|\\n)(class) (\\s*?)([A-Za-z0-9_$]*)(\\s*?)(extends (\\s*?)[A-Za-z0-9]*)?(\\s*?)({|\\n|$)/gm))\n variables.push(varRes[5])\n\n for (const varRes of val.matchAll(/(^|;(\\s*)?|\\n)(function) (\\s*?)([A-Za-z0-9_$]*)(\\s*?)((\\s*?)(\\(([^(]*))\\))(\\s*?){/gm)){\n let params = varRes[10].split(\",\").map(a=>a.trim())\n if (params[0] == '')\n params = []\n functions.push({\n params: params,\n paramsLength: params.length,\n name: varRes[5]\n })\n }\n return {variables, functions}\n }\n\n autoComplete(word, editor){\n const searchWord = word.replaceAll(/\\(|{|;/g, \"\")\n \n const ret = []\n if (searchWord == \"\")\n return []\n\n const { variables, functions } = this.analyseCode(editor.value)\n\n \n for (const key of JavaScriptAutoComplete.KEYWORDS) {\n if (key.toLowerCase().startsWith(searchWord.toLowerCase()) && searchWord !== key){\n ret.push({\n text: key,\n type: 'KEYWORD',\n replace: ()=> key+\" \" \n })\n }\n }\n \n for (const key in JavaScriptAutoComplete.KEYWORDS_OWN_LOGIC) {\n if (key.toLowerCase().startsWith(searchWord.toLowerCase()) && searchWord !== key){\n ret.push({\n text: key,\n type: 'KEYWORD',\n replace: ()=> key,\n ...JavaScriptAutoComplete.KEYWORDS_OWN_LOGIC[key](key)\n })\n }\n }\n\n variables.forEach(key => {\n if (key.toLowerCase().startsWith(searchWord.toLowerCase()) && searchWord !== key){\n ret.push({\n text: key,\n type: 'VARIABLE',\n replace: ()=> key\n })\n }\n })\n functions.forEach(fn => {\n if (fn.name.toLowerCase().startsWith(searchWord.toLowerCase()) && searchWord !== fn.name){\n ret.push({\n text: fn.name,\n type: 'FUNCTION',\n replace: ()=> fn.name+\"(\"+(fn.paramsLength > 0 ? fn.params.join(\", \") : '')+\")\",\n cursorMove: fn.paramsLength > 0 ? -1 : 0\n })\n }\n })\n return ret\n }\n \n}\nJavaScriptAutoComplete.FILE_EXTENSIONS = [\"js\", \"mjs\"]\nJavaScriptAutoComplete.KEYWORDS_OWN_LOGIC = {\n 'function () {\\n \\n}': key=>({\n text: \"function\",\n cursorMove: -11,\n type: \"SHORTCUT\"\n }),\n 'if () {\\n \\n}': key=>({\n text: \"if\",\n replace: ()=>key,\n cursorMove: -10,\n type: \"SHORTCUT\"\n }),\n 'else if () {\\n \\n}': key=>({\n text: \"else if\",\n cursorMove: -10,\n type: \"SHORTCUT\"\n }),\n 'else {\\n \\n}': key=>({\n text: \"else\",\n cursorMove: -3,\n type: \"SHORTCUT\"\n }),\n 'console.log()': key=>({\n text: \"console.log(...)\",\n cursorMove: -1,\n type: \"SHORTCUT\"\n })\n}\n\nJavaScriptAutoComplete.KEYWORDS = [\"await\", \"break\", \"case\", \"catch\", \"class\", \"const\", \"continue\", \"debugger\", \"default\", \"delete\", \"do\", \"enum\", \"export\", \"extends\", \"false\", \"finally\", \"for\", \"implements\", \"import\", \"in\", \"instanceof\", \"interface\", \"let\", \"new\", \"null\", \"package\", \"private\", \"protected\", \"public\", \"return\", \"super\", \"switch\", \"static\", \"this\", \"throw\", \"try\", \"true\", \"typeof\", \"var\", \"void\", \"while\", \"with\", \"yield\"]"],"sourceRoot":""}