UNPKG

@leansdk/leanrc

Version:

LeanRC is a MVC framework for creating graceful applications

211 lines (195 loc) 9.09 kB
(function() { // This file is part of LeanRC. // LeanRC is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // LeanRC is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // You should have received a copy of the GNU Lesser General Public License // along with LeanRC. If not, see <https://www.gnu.org/licenses/>. // NOTE: от этого класса можно унаследовать отдельный класс с кастомным определением схемы и использовать его внутри объявления атрибутов рекорда module.exports = function(Module) { var ArrayTransform, ComplexArrayTransform, FuncG, MaybeG, RecordInterface, SubsetG, TupleG, _, inflect, moment; ({ FuncG, MaybeG, TupleG, SubsetG, RecordInterface, ArrayTransform, Utils: {_, inflect, moment} } = Module.prototype); return ComplexArrayTransform = (function() { class ComplexArrayTransform extends ArrayTransform {}; ComplexArrayTransform.inheritProtected(); ComplexArrayTransform.module(Module); ComplexArrayTransform.public(ComplexArrayTransform.static({ parseRecordName: FuncG(String, TupleG(String, String)) }, { default: function(asName) { var vsModuleName, vsRecordName; if (/.*[:][:].*/.test(asName)) { [vsModuleName, vsRecordName] = asName.split('::'); } else { [vsModuleName, vsRecordName] = [this.moduleName(), inflect.camelize(inflect.underscore(inflect.singularize(asName)))]; } if (!/(Record$)|(Migration$)/.test(vsRecordName)) { vsRecordName += 'Record'; } return [vsModuleName, vsRecordName]; } })); ComplexArrayTransform.public(ComplexArrayTransform.static({ findRecordByName: FuncG(String, SubsetG(RecordInterface)) }, { default: function(asName) { var ref, vsModuleName, vsRecordName; [vsModuleName, vsRecordName] = this.parseRecordName(asName); return ((ref = this.Module.NS) != null ? ref : this.Module.prototype)[vsRecordName]; } })); ComplexArrayTransform.public(ComplexArrayTransform.static(ComplexArrayTransform.async({ normalize: FuncG([MaybeG(Array)], Array) }, { default: function*(serialized) { var RecordClass, item, result; if (serialized == null) { return []; } result = (yield* (function*() { var i, len, results; results = []; for (i = 0, len = serialized.length; i < len; i++) { item = serialized[i]; switch (false) { case !(_.isString(item) && moment(item, moment.ISO_8601).isValid()): results.push(Module.prototype.DateTransform.normalizeSync(item)); break; case !_.isString(item): results.push(Module.prototype.StringTransform.normalizeSync(item)); break; case !_.isNumber(item): results.push(Module.prototype.NumberTransform.normalizeSync(item)); break; case !_.isBoolean(item): results.push(Module.prototype.BooleanTransform.normalizeSync(item)); break; case !(_.isPlainObject(item) && /.{2,}[:][:].{2,}/.test(item.type)): RecordClass = this.findRecordByName(item.type); // NOTE: в правильном использовании вторым аргументом должна передаваться ссылка на коллекцию, то тут мы не можем ее получить // а так как рекорды в этом случае используются ТОЛЬКО для оформления структуры и хранения данных внутри родительского рекорда, то коллекции физически просто нет. results.push((yield RecordClass.normalize(item))); break; case !_.isPlainObject(item): results.push((yield Module.prototype.ComplexObjectTransform.normalize(item))); break; case !_.isArray(item): results.push((yield Module.prototype.ComplexArrayTransform.normalize(item))); break; default: results.push(Module.prototype.Transform.normalizeSync(item)); } } return results; }).call(this)); return result; } }))); ComplexArrayTransform.public(ComplexArrayTransform.static(ComplexArrayTransform.async({ serialize: FuncG([MaybeG(Array)], Array) }, { default: function*(deserialized) { var RecordClass, item, result; if (deserialized == null) { return []; } result = (yield* (function*() { var i, len, results; results = []; for (i = 0, len = deserialized.length; i < len; i++) { item = deserialized[i]; switch (false) { case !_.isString(item): results.push(Module.prototype.StringTransform.serializeSync(item)); break; case !_.isNumber(item): results.push(Module.prototype.NumberTransform.serializeSync(item)); break; case !_.isBoolean(item): results.push(Module.prototype.BooleanTransform.serializeSync(item)); break; case !_.isDate(item): results.push(Module.prototype.DateTransform.serializeSync(item)); break; case !(_.isObject(item) && /.{2,}[:][:].{2,}/.test(item.type)): RecordClass = this.findRecordByName(item.type); results.push((yield RecordClass.serialize(item))); break; case !_.isPlainObject(item): results.push((yield Module.prototype.ComplexObjectTransform.serialize(item))); break; case !_.isArray(item): results.push((yield Module.prototype.ComplexArrayTransform.serialize(item))); break; default: results.push(Module.prototype.Transform.serializeSync(item)); } } return results; }).call(this)); return result; } }))); ComplexArrayTransform.public(ComplexArrayTransform.static({ objectize: FuncG([MaybeG(Array)], Array) }, { default: function(deserialized) { var RecordClass, item, result; if (deserialized == null) { return []; } result = (function() { var i, len, results; results = []; for (i = 0, len = deserialized.length; i < len; i++) { item = deserialized[i]; switch (false) { case !_.isString(item): results.push(Module.prototype.StringTransform.objectize(item)); break; case !_.isNumber(item): results.push(Module.prototype.NumberTransform.objectize(item)); break; case !_.isBoolean(item): results.push(Module.prototype.BooleanTransform.objectize(item)); break; case !_.isDate(item): results.push(Module.prototype.DateTransform.objectize(item)); break; case !(_.isObject(item) && /.{2,}[:][:].{2,}/.test(item.type)): RecordClass = this.findRecordByName(item.type); results.push(RecordClass.objectize(item)); break; case !_.isPlainObject(item): results.push(Module.prototype.ComplexObjectTransform.objectize(item)); break; case !_.isArray(item): results.push(Module.prototype.ComplexArrayTransform.objectize(item)); break; default: results.push(Module.prototype.Transform.objectize(item)); } } return results; }).call(this); return result; } })); ComplexArrayTransform.initialize(); return ComplexArrayTransform; }).call(this); }; }).call(this);