UNPKG

pushinka

Version:

Pushinka: Transactional, Reactive, and Asynchronous State Management

122 lines 4.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var P_DECOR = Symbol("p.decor"); var P_BINDING = Symbol("p.binding"); var Utils = (function () { function Utils() { } Utils.get = function (obj, sym) { return obj[sym]; }; Utils.set = function (obj, sym, value) { Object.defineProperty(obj, sym, { value: value, configurable: false, enumerable: false }); return obj; }; Utils.decorate = function (target, decorator) { Object.defineProperty(target, P_DECOR, { value: decorator, configurable: false, enumerable: false }); }; Utils.acquireDecorationTable = function (target) { var result = Utils.get(target, P_DECOR); if (!target.hasOwnProperty(P_DECOR)) { result = Object.setPrototypeOf({}, result || {}); Utils.set(target, P_DECOR, result); } return result; }; Utils.decorationOf = function (target) { return Utils.get(target, P_DECOR); }; Utils.hookArrayItem = function (array, index) { var t = array[index]; var getter = function () { return t; }; var setter = function (value) { var a = array; if (Object.isFrozen(a)) { var binding = Utils.get(a, P_BINDING); a = a.slice(); binding.object[binding.prop] = a; } a[index] = value; }; var pd = Object.getOwnPropertyDescriptor(array, index); Object.defineProperty(array, index, { configurable: true, enumerable: pd ? pd.enumerable : true, get: getter, set: setter }); }; Utils.hookArrayMethod = function (array, method) { array[method.name] = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var a = array; if (Object.isFrozen(a)) { var binding = Utils.get(a, P_BINDING); a = a.slice(); binding.object[binding.prop] = a; } return method.call.apply(method, [a].concat(args)); }; }; Utils.freezeArray = function (arr, binding) { if (Utils.get(arr, P_BINDING)) throw new Error("E610: array cannot be referenced from multiple objects"); Utils.set(arr, P_BINDING, binding); for (var item in arr) Utils.hookArrayItem(arr, item); for (var _i = 0, _a = [arr.push, arr.pop, arr.shift, arr.sort, arr.splice, arr.unshift]; _i < _a.length; _i++) { var method = _a[_i]; Utils.hookArrayMethod(arr, method); } Object.freeze(arr); }; Utils.freezeSet = function (obj) { if (obj instanceof Set) { var pd = { configurable: false, enumerable: false, get: forbidden, set: forbidden }; Object.defineProperty(obj, "add", pd); Object.defineProperty(obj, "delete", pd); Object.defineProperty(obj, "clear", pd); Object.freeze(obj); } }; Utils.freezeMap = function (obj) { if (obj instanceof Map) { var pd = { configurable: false, enumerable: false, get: forbidden, set: forbidden }; Object.defineProperty(obj, "set", pd); Object.defineProperty(obj, "delete", pd); Object.defineProperty(obj, "clear", pd); Object.freeze(obj); } }; Utils.replicate = function (source, target) { for (var _i = 0, _a = Object.getOwnPropertyNames(source); _i < _a.length; _i++) { var prop = _a[_i]; Utils.replicateProp(source, target, prop); } for (var _b = 0, _c = Object.getOwnPropertySymbols(source); _b < _c.length; _b++) { var prop = _c[_b]; Utils.replicateProp(source, target, prop); } return target; }; Utils.replicateProp = function (source, target, prop) { var pd = Object.getOwnPropertyDescriptor(source, prop); if (pd) { pd.writable = true; Object.defineProperty(target, prop, pd); } }; return Utils; }()); exports.Utils = Utils; function forbidden() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } throw new Error("this method should never be called"); } exports.forbidden = forbidden; function rethrow(error) { throw error; } exports.rethrow = rethrow; //# sourceMappingURL=Utils.js.map