UNPKG

fireorm

Version:
100 lines 3.67 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.arraysAreEqual = exports.serializeEntity = exports.extractAllGetters = void 0; var Decorators_1 = require("./Decorators"); /** * Extract getters and object in form of data properties * @param {T} Entity object * @returns {Object} with only data properties */ function extractAllGetters(obj) { var prototype = Object.getPrototypeOf(obj); var fromInstanceObj = Object.keys(obj); var fromInstance = Object.getOwnPropertyNames(obj); var fromPrototype = Object.getOwnPropertyNames(Object.getPrototypeOf(obj)); var keys = __spreadArray(__spreadArray(__spreadArray([], fromInstanceObj), fromInstance), fromPrototype); var getters = keys .map(function (key) { return Object.getOwnPropertyDescriptor(prototype, key); }) .map(function (descriptor, index) { if (descriptor && typeof descriptor.get === 'function') { return keys[index]; } else { return undefined; } }) .filter(function (d) { return d !== undefined; }); return getters.reduce(function (accumulator, currentValue) { if (typeof currentValue === 'string' && obj[currentValue]) { accumulator[currentValue] = obj[currentValue]; } return accumulator; }, {}); } exports.extractAllGetters = extractAllGetters; /** * Returns a serializable object from entity<T> * * @template T * @param {T} Entity object * @param {SubCollectionMetadata[]} subColMetadata Subcollection * metadata to remove runtime-created fields * @returns {Object} Serialiable object */ function serializeEntity(obj, subColMetadata) { var objectGetters = extractAllGetters(obj); var serializableObj = __assign(__assign({}, obj), objectGetters); subColMetadata.forEach(function (scm) { delete serializableObj[scm.propertyKey]; }); Object.entries(serializableObj).forEach(function (_a) { var propertyKey = _a[0], propertyValue = _a[1]; if (Reflect.getMetadata(Decorators_1.ignoreKey, obj, propertyKey) === true) { delete serializableObj[propertyKey]; } if (Reflect.getMetadata(Decorators_1.serializeKey, obj, propertyKey) !== undefined) { if (Array.isArray(propertyValue)) { serializableObj[propertyKey] = propertyValue.map(function (element) { return serializeEntity(element, []); }); } else { serializableObj[propertyKey] = serializeEntity(propertyValue, []); } } }); return serializableObj; } exports.serializeEntity = serializeEntity; /** * Returns true if arrays are equal * * @export * @param {Array<unknown>} arr1 * @param {Array<unknown>} arr2 * @returns {boolean} */ function arraysAreEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } return arr1.every(function (a, i) { return a === arr2[i]; }); } exports.arraysAreEqual = arraysAreEqual; //# sourceMappingURL=utils.js.map