UNPKG

json-schema-to-joi

Version:

Converts JSON schema to Joi typescript code

94 lines 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateArrayJoi = exports.resolveJoiArraySchema = void 0; const types_1 = require("./types"); const _ = require("lodash"); const resolve_1 = require("./resolve"); const generate_1 = require("./generate"); const any_1 = require("./any"); function resolveAsArray(schema, options) { if (_.isArray(schema)) { return schema.map((v) => { return resolve_1.resolveJSONSchema(v, options); }); } return [resolve_1.resolveJSONSchema(schema, options)]; } function resolveJoiArraySchema(schema, options) { const joiSchema = types_1.createJoiItem('array'); if (schema.items) { let itemsIsArray = false; if (_.isArray(schema.items)) { itemsIsArray = true; } const items = resolveAsArray(schema.items, options); if (itemsIsArray) { joiSchema.ordered = items; if (schema.additionalItems === true || schema.additionalItems === undefined) { joiSchema.items = [{ type: 'any' }]; } else if (schema.additionalItems !== false) { joiSchema.items = [resolve_1.resolveJSONSchema(schema.additionalItems, options)]; } } else { joiSchema.items = items; } } _.isNumber(schema.minItems) && (joiSchema.min = schema.minItems); _.isNumber(schema.maxItems) && (joiSchema.max = schema.maxItems); _.isBoolean(schema.uniqueItems) && (joiSchema.unique = schema.uniqueItems); any_1.resolveJoiAnyMeta(joiSchema, schema); return joiSchema; } exports.resolveJoiArraySchema = resolveJoiArraySchema; function generateArrayJoi(schema) { const content = generate_1.openJoi([ 200, 'array()' ]); if (schema.ordered) { content.push(...[ '.ordered', "(", ]); const items = schema.ordered; items.forEach((item, i) => { content.push(...generate_1.generateJoiStatement(item)); if (i !== items.length - 1) { content.push(...[ ",", ]); } }); content.push(...[ ")", ]); } if (schema.items) { content.push(...[ '.items', "(", ]); const items = schema.items; items.forEach((item, i) => { content.push(...generate_1.generateJoiStatement(item)); if (i !== items.length - 1) { content.push(","); } }); content.push(...[ ")", ]); } if (schema.min !== undefined) { content.push(`.min(${schema.min})`); } if (schema.max !== undefined) { content.push(`.max(${schema.max})`); } content.push(...any_1.generateAnyJoi(schema)); return generate_1.closeJoi(content); } exports.generateArrayJoi = generateArrayJoi; //# sourceMappingURL=array.js.map