diff --git a/packages/nuedom/src/compiler/ast.js b/packages/nuedom/src/compiler/ast.js index 5596d013..c2263e31 100644 --- a/packages/nuedom/src/compiler/ast.js +++ b/packages/nuedom/src/compiler/ast.js @@ -97,8 +97,8 @@ function parseText(text, imports) { // foo() {} --> this.foo = function() { } export function convertFunctions(script) { return script.replace( - /^( *)(async\s+)?(\w+)\s*\(([^)]*)\)\s*{/gm, (_, indent, asy, name, args) => { - if (_.includes('function') || ['for', 'if'].includes(name)) return _ + /^(\s*)(async\s+)?(\w+)\s*\(([^)]*)\)\s*{/gm, (_, indent, asy, name, args) => { + if (_.includes('function') || ['for', 'while', 'if', 'switch'].includes(name)) return _ return `${indent}this.${name} = ${asy ? 'async ' : ''}function(${args.trim()}) {` } ) @@ -108,14 +108,14 @@ export function convertGetters(script) { return script // Handle multiline getters first .replace( - /^( *)get (\w+)\(\)\s*\{([\s\S]*?)\n\1\}/gm, + /^(\s*)get (\w+)\(\)\s*\{([\s\S]*?)\n\1\}/gm, (_, indent, name, body) => { return `${indent}Object.defineProperty(this, '${name}', { get() {${body}} })` } ) // Then handle single-line getters .replace( - /^( *)get (\w+)\(\)\s*\{([^}]*)\}/gm, + /^(\s*)get (\w+)\(\)\s*\{([^}]*)\}/gm, (_, indent, name, body) => { return `${indent}Object.defineProperty(this, '${name}', { get() {${body}} })` } diff --git a/packages/nuedom/src/compiler/compiler.js b/packages/nuedom/src/compiler/compiler.js index 7e22fe86..e17a9a39 100644 --- a/packages/nuedom/src/compiler/compiler.js +++ b/packages/nuedom/src/compiler/compiler.js @@ -27,7 +27,7 @@ const RE_FN = /(script|h_fn|fn):\s*(['"`])([^\2]*?)\2/g export function compileJS(js) { return js.replace(RE_FN, function(_, key, __, expr) { - return key == 'script' ? `${key}: function() { ${expr.trim().replaceAll('\\n', '\n')} \n\t\t}` + return key == 'script' ? `${key}: function() { ${expr.trim().replaceAll('\\n', '\n').replaceAll('\\r', '\r').replaceAll('\\t', '\t')} \n\t\t}` : `${key}: ${compileFn(expr, key[0] == 'h')}` }) }