UNPKG

mihawk

Version:

A tiny & simple mock server tool, support json,js,cjs,ts(typescript).

90 lines (89 loc) 4.05 kB
'use strict'; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createReadonlyProxy = exports.deepFreeze = exports.delNillProps = void 0; const color_cc_1 = __importDefault(require("color-cc")); function delNillProps(obj) { if (obj && typeof obj === 'object') { Object.entries(obj).forEach(([k, v]) => { if (v === null || v === undefined) { delete obj[k]; } }); } } exports.delNillProps = delNillProps; function deepFreeze(obj) { if (obj) { Object.freeze(obj); Object.getOwnPropertyNames(obj).forEach(prop => { const value = obj[prop]; if (value && typeof value === 'object' && !(value instanceof RegExp)) { deepFreeze(value); } }); } } exports.deepFreeze = deepFreeze; function createReadonlyProxy(obj, logFlag) { if (!obj) { return obj; } function _createProxy(target) { var _a; if (typeof target === 'object' && target !== null) { if (((_a = Array.isArray) === null || _a === void 0 ? void 0 : _a.call(Array, target)) || target instanceof Array) { return new Proxy(target, { get: function (target, prop, receiver) { if (typeof prop === 'symbol' || prop === 'length' || prop === 'constructor') { return Reflect.get(target, prop, receiver); } return _createProxy(Reflect.get(target, prop, receiver)); }, set: function (target, prop, value, receiver) { console.warn(logFlag, color_cc_1.default.warn(`Modifying array property "${String(prop)}" is not allowed!`)); return false; }, deleteProperty: function (target, prop) { console.warn(logFlag, color_cc_1.default.warn(`Deleting array property "${String(prop)}" is not allowed!`)); return false; }, apply: function (target, thisArg, argList) { const methodName = Reflect.get(this, 'key'); const forbiddenMethods = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse']; if (forbiddenMethods.includes(methodName)) { console.warn(logFlag, color_cc_1.default.warn(`Modifying the readonly array property is not allowed! Don't use method ${methodName}`)); return false; } return Reflect.apply(target, thisArg, argList); }, }); } else { return new Proxy(target, { get: function (target, prop, receiver) { if (!(prop in target)) { console.warn(logFlag, color_cc_1.default.yellow(`Property "${prop}" doesn't exist on the object!`)); } return _createProxy(Reflect.get(target, prop, receiver)); }, set: function (target, prop, value, receiver) { console.warn(logFlag, color_cc_1.default.warn(`Modifying the readonly property "${prop}" is not allowed!`)); return false; }, deleteProperty: function (target, prop) { console.warn(logFlag, color_cc_1.default.warn(`Deleting the readonly property "${prop}" is not allowed!`)); return false; }, }); } } else { return target; } } return _createProxy(obj); } exports.createReadonlyProxy = createReadonlyProxy;