1
0
Fork 0
arangodb/js/apps/system/_api/foxx/APP/schemas.js

51 lines
1.4 KiB
JavaScript

'use strict';
const joi = require('joi');
const configTypes = require('@arangodb/foxx/manifest').configTypes;
exports.mount = joi.string().regex(/(?:\/[-_0-9a-z]+)+/i).required();
exports.flag = joi.alternatives().try(
joi.boolean(),
joi.number().integer().min(0).max(1)
).default(false);
exports.shortInfo = joi.object({
mount: exports.mount,
name: joi.string().optional(),
version: joi.string().optional(),
development: joi.boolean().default(false),
legacy: joi.boolean().default(false)
}).required();
exports.fullInfo = exports.shortInfo.keys({
path: joi.string().required(),
manifest: joi.object().required(),
options: joi.object().required()
});
exports.configs = joi.object().pattern(/.+/, joi.object({
value: joi.any().optional(),
default: joi.any().optional(),
type: joi.only(Object.keys(configTypes)).default('string'),
description: joi.string().optional(),
required: joi.boolean().default(true)
}).required()).required();
exports.deps = joi.object().pattern(/.+/, joi.object({
name: joi.string().default('*'),
version: joi.string().default('*'),
required: joi.boolean().default(true)
}).required()).required();
exports.service = joi.alternatives(
joi.object().type(Buffer).required(),
joi.object({
source: joi.alternatives(
joi.string(),
joi.object().type(Buffer)
).required(),
configuration: joi.object().optional(),
dependencies: joi.object().optional()
}).required()
);