From f8e55520fae72a36066191fc52cd17d389dc3235 Mon Sep 17 00:00:00 2001 From: MouseOfLight <MouseOfLight@gmail.com> Date: Thu, 31 Oct 2019 21:06:53 -0700 Subject: [PATCH] Updated standard V proxy to instead be a property that returns the object directly, unless a story proxy is defined for read-only and cheater. --- src/js/proxies.js | 52 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/src/js/proxies.js b/src/js/proxies.js index 194ea9f1954..3317bcab6d5 100644 --- a/src/js/proxies.js +++ b/src/js/proxies.js @@ -1,34 +1,58 @@ -window.StoryProxyWritable = new Proxy({}, { +window.createReadonlyProxy = function(target) { + if(target.__isReadonlyProxy) return target; + return new Proxy(target, { get:function(o, prop) { - return State.variables[prop]; + if(prop == '__isReadonlyProxy') return true; + return createReadonlyProxy(o[prop]); }, set:function(o, prop, value) { - State.variables[prop] = value; - return true; + return false; }, deleteProperty:function(o, prop) { - delete State.variables[prop]; - return true; + return false; } - }); -window.StoryProxyReadOnly = new Proxy({}, { + }) +}; +window.createCheatProxy = function(target) { + if(target.__isCheatProxy) return target; + return new Proxy(target, { get:function(o, prop) { - return State.variables[prop]; + if(prop == '__isCheatProxy') return true; + return createCheatProxy(o[prop]); }, set:function(o, prop, value) { - return false; + o[prop] = value; + State.variables.cheater = 1; + return true; }, deleteProperty:function(o, prop) { + delete o[prop]; + State.variables.cheater = 1; return false; } - }); -window.V = window.StoryProxyWritable; + }) +} +Object.defineProperty(window, "V", { + get: function() { + if(window.storyProxy != null) return window.storyProxy; + return State.variables; + } +}); window.runWithReadonlyProxy = function(callback) { - window.V = window.StoryProxyReadOnly; + window.storyProxy = createReadonlyProxy(State.variables); + try { + callback(); + } finally { + window.storyProxy = null; + } +} +window.runWithCheatProxy = function(callback) +{ + window.storyProxy = createCheatProxy(State.variables); try { callback(); } finally { - window.V = window.StoryProxyWritable; + window.storyProxy = null; } } -- GitLab