UNPKG

lemon-model

Version:

Common shared model definitions for Lemon Micro-Service Platform

95 lines 3.06 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 === undefined || N === null ? N : N && typeof N === 'object' ? Object.entries(N).reduce((N, [k, v]) => { if (v !== undefined) N[k] = v; return N; }, {}) : null; } /** * transform the cores data * @param cores the cores data to transform * @returns transformed cores data or null */ asCore(cores) { if (!cores || typeof cores !== 'object') return null; const ret = {}; if (cores.sid !== undefined) ret.sid = String(cores.sid); if (cores.gid !== undefined) ret.gid = String(cores.gid); if (cores.uid !== undefined) ret.uid = String(cores.uid); return this.onlyDefined(ret); } /** * transform from model to view * * @see Transformable.modelAsView */ modelAsView(model, hasCores) { var _a; if (!model || typeof model !== 'object') return null; const view = this.onlyDefined({ $: (_a = model === null || model === void 0 ? void 0 : model.$) !== null && _a !== void 0 ? _a : undefined, id: model.id, createdAt: model.createdAt, updatedAt: model.updatedAt, deletedAt: model.deletedAt, }); if (model.error) view.error = model.error; if (hasCores) { const $ = this.asCore(model); 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