diff --git a/gulp/mod.js b/gulp/mod.js index 3575a801..ad6cd4ae 100644 --- a/gulp/mod.js +++ b/gulp/mod.js @@ -1,3 +1,39 @@ -module.exports = function (source, map) { - return source + `\nexport const __$S__=(n,v)=>eval("(function(v){" + n + "=v})")(v)`; +const oneExport = exp => { + return `${exp}=v`; // No checks needed +}; + +const twoExports = (exp1, exp2) => { + return `n=="${exp1}"?${exp1}=v:${exp2}=v`; +}; + +const multiExports = exps => { + exps = exps.map(exp => `case "${exp}":${exp}=v;break;`); + + return `switch(n){${exps.toString().replaceAll(";,", ";")} }`; +}; + +const defineFnBody = source => { + const regex = /export (?:let|class) (?\w+)/g; + let names = [...source.matchAll(regex)].map(n => n.groups.name); + switch (names.length) { + case 0: + return false; + case 1: + return oneExport(names[0]); + case 2: + return twoExports(names[0], names[1]); + default: + return multiExports(names); + } +}; +/** + * + * @param {string} source + * @param {*} map + * @returns + */ +module.exports = function (source, map) { + const body = defineFnBody(source); + if (!body) return source; + return source + `\nexport const __$S__=(n,v)=>{${body}}`; };