salix/loopback/common/methods/schema/model-info.js

83 lines
2.1 KiB
JavaScript
Raw Normal View History

2017-10-13 14:22:45 +00:00
2019-01-25 16:05:53 +00:00
module.exports = Self => {
Self.remoteMethod('modelInfo', {
description: 'Gets all models information',
accepts: [
{
arg: 'ctx',
type: 'Object',
http: {source: 'context'}
2017-10-13 14:22:45 +00:00
}
2019-01-25 16:05:53 +00:00
],
returns: {
type: 'Object',
root: true
},
http: {
path: `/modelInfo`,
verb: 'GET'
2017-10-13 14:22:45 +00:00
}
2019-01-25 16:05:53 +00:00
});
2017-10-13 14:22:45 +00:00
2019-01-25 16:05:53 +00:00
Self.modelInfo = async function(ctx) {
2017-10-13 14:22:45 +00:00
let json = {};
2019-01-25 16:05:53 +00:00
let models = Self.app.models;
2017-10-13 14:22:45 +00:00
for (let modelName in models) {
let model = models[modelName];
let validations = model.validations;
let jsonValidations = {};
for (let fieldName in validations) {
let jsonField = [];
for (let validation of validations[fieldName]) {
let options = validation.options;
2018-01-11 10:41:14 +00:00
if ((options && options.async) ||
2017-10-13 14:22:45 +00:00
(validation.validation == 'custom' && !validation.isExportable))
continue;
let validationCp = Object.assign({}, validation);
if (validationCp.message)
2019-01-25 16:05:53 +00:00
validationCp.message = ctx.req.__(validationCp.message);
jsonField.push(toJson(validationCp));
2017-10-13 14:22:45 +00:00
}
jsonValidations[fieldName] = jsonField;
}
json[modelName] = {
properties: model.definition.rawProperties,
validations: jsonValidations
};
}
2019-01-25 16:05:53 +00:00
return json;
};
function toJson(object) {
let json = {};
for (let prop in object) {
let value = object[prop];
switch (typeof value) {
case 'object':
if (value instanceof RegExp)
json[prop] = value.source;
break;
case 'function':
json[prop] = value.toString();
break;
default:
json[prop] = value;
}
}
return json;
}
2017-10-13 14:22:45 +00:00
};