diff --git a/gulp/mod.js b/gulp/mod.js index 87912bb3..1eb1692a 100644 --- a/gulp/mod.js +++ b/gulp/mod.js @@ -1,3 +1,15 @@ +/** + * + * @param {string} source + * @param {*} map + * @returns + */ module.exports = function (source, map) { - return source + `\nexport let $s=(n,v)=>eval(n+"=v")`; + const regex = /export (?:let|class) (?\w+)/g; + // @ts-ignore + [...source.matchAll(regex)] + .map(n => n.groups.name) + .forEach(name => (source += `export const $S_${name}=(v)=>${name}=v;\n`)); + + return source; }; diff --git a/src/js/mods/modloader.js b/src/js/mods/modloader.js index 71a87131..e60156bf 100644 --- a/src/js/mods/modloader.js +++ b/src/js/mods/modloader.js @@ -79,7 +79,9 @@ export class ModLoader { return module[member]; }, set(v) { - module["$s"](member, v); + let fun = module["$S_" + member]; + if (!fun) throw new TypeError(`Assignment to constant shapez export "${member}"`); + fun(v); }, }); }