lemon-model
Version:
Common shared model definitions for Lemon Micro-Service Platform
78 lines • 2.39 kB
JavaScript
;
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