{"version":3,"sources":["jsdelivr-header.js","/npm/@nivuus/proxify@1.0.2/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACCA,MAAM,QACF,WAAA,CAAa,EAAiB,EAAK,GAC/B,MAAM,EAAO,KAEb,GAAI,QAAQ,QAAQ,GAChB,OAAO,EAOX,GALA,EAAK,QAAU,GACf,EAAK,OAAS,CAAC,EACf,EAAK,UAAY,GACjB,EAAK,MAAQ,MAAC,EAA6D,KAAO,EAAgB,YAAY,KAE1G,EAAQ,CACR,IAAI,EAAgB,CAChB,IAAK,EACL,OAAQ,GAEZ,EAAK,QAAQ,KAAK,EACtB,CAEA,EAAK,gBAAkB,GAAmB,CAAC,EAC3C,EAAK,MAAQ,GAEb,IAAK,MAAM,KAAO,EAAK,gBACnB,EAAiB,GAAQ,eAAe,EAAK,gBAAgB,GAAM,EAAK,GAG5E,IAAI,EAAU,IAAI,MAAM,EAAK,gBAAiB,CAC1C,IAAK,CAAC,EAAiB,IACF,WAAb,EACQ,GACG,EAAK,OAAO,GAEL,WAAb,EACE,IAAI,IACA,EAAK,UAAU,GAER,wBAAb,EACE,IAAI,IACA,EAAK,uBAAuB,GAErB,eAAb,EACE,CAAC,EAAQ,KACZ,EAAK,QAAQ,KAAK,CACd,SACA,OACF,EAEY,aAAb,EACE,EACW,aAAb,GAEF,EAAK,gBAAiB,GAEjC,IAAK,CAAC,EAAiB,EAAU,KACzB,QAAQ,QAAQ,IAChB,EAAM,WAAW,EAAM,GACvB,EAAK,gBAAiB,GAAa,GAGnC,EAAK,gBAAiB,GAAa,eAAe,EAAO,EAAU,GAEnE,MAAM,QAAQ,EAAK,kBAAiC,WAAb,GAE3C,EAAK,aAAa,EAAU,IADjB,GAIf,eAAgB,SAIpB,OAAO,CACX,CAEA,mBAAA,CAAoB,EAAK,GACrB,KAAK,gBAAkB,iBAAiB,KAAK,gBAAiB,EAAK,GAAO,CAAC,EAAK,KAC5E,IAAI,EAAW,CAAC,EAGhB,MAFmB,iBAAR,IACP,EAAW,IACR,IAAI,QAAQ,EAAU,EAAK,EAAO,IAGzC,KAAK,OAAQ,IACb,KAAK,OAAQ,GAAM,SAAS,IACxB,IACI,EAAS,EACb,CAAE,MAAO,GACL,QAAQ,MAAM,EAClB,KAER,KAAK,UAAU,SAAS,IACpB,IACI,EAAS,EAAK,EAClB,CAAE,MAAO,GACL,QAAQ,MAAM,EAClB,IAER,CAEA,MAAA,CAAO,EAAK,GACJ,GACK,KAAK,OAAQ,KACd,KAAK,OAAQ,GAAQ,IACzB,KAAK,OAAQ,GAAM,KAAK,IAGxB,KAAK,UAAU,KAAK,EAC5B,CAEA,YAAA,CAAa,EAAK,GACd,IAAI,EAAO,KAEX,KAAK,MAAM,SAAS,GAAa,EAAS,EAAK,KAC/C,KAAK,QAAQ,SAAS,IAClB,IAAI,EAEA,EADe,UAAf,EAAK,MACI,EAAO,IAAM,IAAM,EAAM,IAEzB,EAAO,IAAM,IAAM,EAC5B,EAAO,QACP,EAAO,OAAO,aAAa,EAAQ,EACvC,GAER,CAEA,MAAA,CAAO,GACH,KAAK,MAAM,KAAK,EACpB,EAOJ,SAAS,iBAAiB,EAAQ,EAAK,EAAO,GACvB,iBAAR,IACP,EAAM,EAAI,MAAM,kBAGpB,IAAI,EAAS,EAAI,QASjB,OARI,EAAI,QAAU,GACT,EAAQ,KACT,EAAQ,GAAW,EAAgB,EAAK,EAAO,WAEnD,EAAQ,GAAW,iBAAiB,EAAQ,GAAU,EAAK,EAAO,IAGlE,EAAQ,GAAW,EAChB,CACX,CAEA,SAAS,eAAe,EAAO,EAAK,GAChC,MAAqB,iBAAV,GAAuB,QAAQ,QAAQ,GAI3C,GAHH,QAAQ,IAAI,GACL,IAAI,QAAQ,EAAO,EAAK,GAGvC,CA3BA,QAAQ,QAAU,SAAiB,GAC/B,OAAO,GAA4B,iBAAX,KAAyB,EAAO,QAC5D,EA2BsB,oBAAX,SACP,OAAO,QAAU","file":"/npm/@nivuus/proxify@1.0.2/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@nivuus/proxify@1.0.2/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\n * Copyright 2020 Allanic.me ISC License License\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n * Created by Maxime Allanic <maxime@allanic.me> at 25/03/2020\n */\n\nclass Proxify {\n    constructor (objectToProxify, key, parent) {\n        const self = this;\n\n        if (Proxify.isProxy(objectToProxify))\n            return objectToProxify;\n\n        self.parents = [];\n        self._watch = {};\n        self._watchAny = [];\n        self._type = (objectToProxify === null || objectToProxify === undefined) ? null : objectToProxify.constructor.name;\n\n        if (parent) {\n            var defaultParent = {\n                key: key,\n                parent: parent\n            };\n            self.parents.push(defaultParent);\n        }\n\n        self.objectToProxify = objectToProxify || {};\n        self.onSet = [];\n\n        for (const key in self.objectToProxify) {\n            objectToProxify[ key ] = valueToProxify(self.objectToProxify[key], key, self);\n        }\n\n        var proxify = new Proxy(self.objectToProxify, {\n            get: (objectToProxify, property) => {\n                if (property === '$onSet')\n                    return (callback) => {\n                        return self.$onSet(callback);\n                    };\n                else if (property === '$watch')\n                    return (...args) => {\n                        return self.$watch(...args);\n                    };\n                else if (property === '$setWithoutDispatch')\n                    return (...args) => {\n                        return self.$setWithoutDispatch(...args);\n                    }\n                else if (property === '$addParent')\n                    return (parent, key) => {\n                        self.parents.push({\n                            parent,\n                            key\n                        });\n                    };\n                else if (property === '$handler')\n                    return self;\n                else if (property === '$isProxy')\n                    return true;\n                return self.objectToProxify[ property ];\n            },\n            set: (objectToProxify, property, value) => {\n                if (Proxify.isProxy(value)) {\n                    value.$addParent(self, property);\n                    self.objectToProxify[ property ] = value;\n                }\n                else\n                    self.objectToProxify[ property ] = valueToProxify(value, property, self);\n\n                if (Array.isArray(self.objectToProxify) && property === 'length')\n                    return true;\n                self.$dispatchSet(property, value);\n                return true;\n            },\n            deleteProperty: () => {\n\n            }\n        });\n        return proxify;\n    }\n\n    $setWithoutDispatch(key, value) {\n        this.objectToProxify = setFromKeyString(this.objectToProxify, key, value, (key, parent) => {\n            var subValue = {};\n            if (typeof key === 'number')\n                subValue = [];\n            return new Proxify(subValue, key, parent);\n        });\n\n        if (this._watch[ key ])\n            this._watch[ key ].forEach((callback) => {\n                try {\n                    callback(value)\n                } catch (e) {\n                    console.error(e);\n                }\n            });\n        this._watchAny.forEach((callback) => {\n            try {\n                callback(key, value)\n            } catch (e) {\n                console.error(e);\n            }\n        });\n    }\n\n    $watch(key, callback) {\n        if (callback) {\n            if (!this._watch[ key ])\n                this._watch[ key ] = [];\n            this._watch[ key ].push(callback);\n        }\n        else\n            this._watchAny.push(key);\n    }\n\n    $dispatchSet(key, value) {\n        var self = this;\n\n        this.onSet.forEach((callback) => callback(key, value));\n        this.parents.forEach((parent) => {\n            var subKey;\n            if (self._type === 'Array')\n                subKey = parent.key + '[' + key + ']';\n            else\n                subKey = parent.key + '.' + key;\n            if (parent.parent) {\n                parent.parent.$dispatchSet(subKey, value)\n            }\n        });\n    }\n\n    $onSet(callback) {\n        this.onSet.push(callback);\n    }\n}\n\nProxify.isProxy = function isProxy(object) {\n    return object && typeof object === 'object' && !!object.$isProxy;\n}\n\nfunction setFromKeyString(object, key, value, defaultNewValue) {\n    if (typeof key === 'string') {\n        key = key.match(/([^\\[\\.\\]]+)/g);\n    }\n\n    var subKey = key.shift();\n    if (key.length >= 1) {\n        if (!object[ subKey ])\n            object[ subKey ] = defaultNewValue(key, object.$handler);\n\n        object[ subKey ] = setFromKeyString(object[ subKey ], key, value, defaultNewValue);\n    }\n    else\n        object[ subKey ] = value;\n    return object;\n}\n\nfunction valueToProxify(value, key, parent) {\n    if (typeof value === 'object' && !Proxify.isProxy(value)) {\n        console.log(value);\n        return new Proxify(value, key, parent);\n    }\n    return value;\n}\n\nif (typeof module !== 'undefined') {\n    module.exports = Proxify;\n}"]}