UNPKG

one-schema

Version:
109 lines (108 loc) 4.9 kB
"use strict"; 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;