one-schema
Version:
one-schema object validator
109 lines (108 loc) • 4.9 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fvToJS = exports.createInstanceFromFV = void 0;
var FieldValidator_1 = __importStar(require("./FieldValidator"));
var validAttribute_1 = require("../utils/validAttribute");
var fvInstanceByType = {
"bool": new FieldValidator_1.default().bool(),
"string": new FieldValidator_1.default().string(),
"int32": new FieldValidator_1.default().int32(),
"float64": new FieldValidator_1.default().float64(),
"object": new FieldValidator_1.default().object(),
"array": new FieldValidator_1.default().array(),
};
var emptyValArgs = {
allowNaN: new FieldValidator_1.default().float64().allowNaN().settings.allowNaN,
required: new FieldValidator_1.default().float64().required().settings.required,
allowNull: new FieldValidator_1.default().string().allowNull().settings.allowNull,
primaryKey: new FieldValidator_1.default().int32().primaryKey().settings.primaryKey,
autoIncrement: new FieldValidator_1.default().int32().autoIncrement().settings.autoIncrement,
uuid: new FieldValidator_1.default().string().uuid().settings.uuid,
};
function createInstanceFromFVMain(fieldValidator) {
var base = new FieldValidator_1.default();
if (!fieldValidator.settings.type || FieldValidator_1.VALID_TYPES.indexOf(fieldValidator.settings.type) === -1) {
throw new Error("Invalid field validator type: " + fieldValidator.settings.type);
}
var root = base[fieldValidator.settings.type]();
Object.assign(root.settings, fieldValidator.settings);
var _a = root.settings, arrayOf = _a.arrayOf, schema = _a.schema;
if (arrayOf && arrayOf.settings) {
root.settings.arrayOf = createInstanceFromFVMain(arrayOf);
}
if (schema) {
var nSchema_1 = {};
Object.keys(schema).forEach(function (k) {
if (schema[k] && schema[k].settings) {
nSchema_1[k] = createInstanceFromFVMain(schema[k]);
}
});
root.settings.schema = nSchema_1;
}
return root;
}
function createInstanceFromFV(fieldValidator) {
return createInstanceFromFVMain(JSON.parse(JSON.stringify(fieldValidator)));
}
exports.createInstanceFromFV = createInstanceFromFV;
function generateFVSettingsJS(settingsK, k) {
if (emptyValArgs[k] === settingsK) {
return k + "()";
}
if (k === 'validator' && settingsK && typeof settingsK === 'object') {
if (typeof settingsK.id === 'string' && Object.keys(settingsK).length === 1) {
return k + "(" + JSON.stringify(settingsK.id) + ")";
}
}
return k + "(" + JSON.stringify(settingsK) + ")";
}
function fvToJS(fv) {
var parts = ['ons()'];
if (fv.settings.type === 'array' && fv.settings.arrayOf) {
parts.push("arrayOf(" + fvToJS(createInstanceFromFV(fv.settings.arrayOf)) + ")");
}
else if (fv.settings.type === 'object' && fv.settings.schema) {
var schema_1 = fv.settings.schema;
var schLines_1 = [];
Object.keys(schema_1).forEach(function (k) {
if (schema_1[k] && schema_1[k].settings) {
schLines_1.push((validAttribute_1.isValidAttrName(k) ? k : JSON.stringify(k)) + ": " + fvToJS(createInstanceFromFV(schema_1[k])));
}
});
parts.push("object({" + schLines_1.join(', ') + "})");
}
else {
parts.push(fv.settings.type + "()");
}
var fvSettings = fv.settings;
var fvInstance = (fvInstanceByType.hasOwnProperty(fvSettings.type) && typeof fvInstanceByType[fvSettings.type]) ? fvInstanceByType[fvSettings.type] : {};
Object.keys(fvSettings).forEach(function (k) {
if (k !== 'type' && k !== 'schema' && k !== 'arrayOf' && typeof fvSettings[k] !== 'undefined' && typeof fvInstance[k] === 'function') {
var str = generateFVSettingsJS(fvSettings[k], k);
if (parts.indexOf(str) === -1) {
parts.push(str);
}
}
});
return parts.join('.');
}
exports.fvToJS = fvToJS;