UNPKG

lemon-model

Version:

Common shared model definitions for Lemon Micro-Service Platform

78 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbstractTransformer = void 0; /** * type: `AbstractTransformer` * - common base class of `Transformable` */ class AbstractTransformer { constructor() { /** * check in date: YYYY-MM-DD * * @param val string * @param field (optional) target field name to use */ this.asDate = (val, field = 'date') => { if (!val || typeof val !== 'string') return ''; const re = /^[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/; if (!re.test(val)) throw new Error(`.${field}[${val}] is invalid format - asDate()`); return val; }; /** * extract only the defined attribute. * ex) `{ a:1, b: undefined }` -> `{ a:1 }` */ this.onlyDefined = (N) => N && typeof N === 'object' ? Object.entries(N).reduce((N, [k, v]) => { if (v !== undefined) N[k] = v; return N; }, {}) : null; } /** * transform from model to view * * @see Transformable.modelAsView */ modelAsView(model, hasCores) { if (!model || typeof model !== 'object') return null; const view = { id: model.id, createdAt: model.createdAt, updatedAt: model.updatedAt, deletedAt: model.deletedAt, }; if (model.error) view.error = model.error; if (hasCores) { const $ = this.onlyDefined({ sid: model.sid, gid: model.gid, uid: model.uid, }); Object.assign(view, { $ }); } return this.onlyDefined(view); } /** * transform from body(req-body) to model * * @see Transformable.bodyToModel */ bodyToModel(body, isCreate) { var _a; if (!body || typeof body !== 'object') return null; const model = {}; if ((body === null || body === void 0 ? void 0 : body.id) !== undefined) model.id = `${(_a = body.id) !== null && _a !== void 0 ? _a : ''}`; return model; } } exports.AbstractTransformer = AbstractTransformer; //# sourceMappingURL=transformer.js.map