UNPKG

marklogic

Version:

The official MarkLogic Node.js client API.

103 lines (97 loc) 3.46 kB
/* * Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const Ajv = require('ajv'); const endpointDeclarationSchema = {'$schema': 'http://json-schema.org/draft-07/schema#', 'title': 'MarkLogic Endpoint Function Declaration', '$comment': 'SIMPLIFIED TO THE STABLE DECLARATIONS USED FOR CODE GENERATION', 'type': 'object', 'definitions': { 'desc': { 'type':'string', 'description':'Documentation about the property' }, 'datatype': { 'type':'string', 'description':'The type of the value', 'enum':[ 'boolean', 'date', 'dateTime', 'dayTimeDuration', 'decimal', 'double', 'float', 'int', 'long', 'string', 'time', 'unsignedInt', 'unsignedLong', 'array', 'object', 'binaryDocument', 'jsonDocument', 'textDocument', 'xmlDocument', 'session' ] }, 'nullable': { 'type':'boolean', 'description':'Whether a null value is allowed', 'default':false }, 'multiple': { 'type':'boolean', 'description':'Whether multiple values are allowed', 'default':false } // "$comment": "SIMPLIFIED BY DELETING doubleMeter, doubleLiteral, ulMeter, AND unsignedLongLiteral" }, 'propertyNames': { // "$comment": "MODIFIED TO ALLOW FOR PROPERTIES DELETED DURING SIMPLIFICATION OR ADDED IN LATER RELEASES", 'pattern': '^\\$?[A-Za-z_][\\w.-]*$' }, 'properties': { 'functionName': { 'type':'string', 'description':'The name of a database function provided by a service declared by service.json' }, 'endpoint': { 'type':'string', 'description':'The full path name of a standalone bulk IO endpoint' }, 'desc': {'$ref':'#/definitions/desc'}, 'params': { 'type':'array', 'description':'The parameters of the function', 'items': { 'type':'object', 'required': ['name', 'datatype'], 'propertyNames': { 'pattern': '^(\\$[A-Za-z_][\\w.-]*|name|desc|datatype|nullable|multiple)$' }, 'properties': { 'name': { 'type':'string', 'description':'The name of the function parameter' }, 'desc': {'$ref':'#/definitions/desc'}, 'datatype': {'$ref':'#/definitions/datatype'}, 'nullable': {'$ref':'#/definitions/nullable'}, 'multiple': {'$ref':'#/definitions/multiple'} } } }, 'return': { 'type':'object', 'description':'The return value of the function', 'required': ['datatype'], 'propertyNames': { 'pattern': '^(\\$[A-Za-z_][\\w.-]*|desc|datatype|nullable|multiple)$' }, 'properties': { 'desc': {'$ref':'#/definitions/desc'}, 'datatype': {'$ref':'#/definitions/datatype'}, 'nullable': {'$ref':'#/definitions/nullable'}, 'multiple': {'$ref':'#/definitions/multiple'} } } // "$comment": "SIMPLIFIED BY DELETING errorDetail AND monitoring" } }; const ajv = new Ajv({ allErrors: true, validateSchema: false // true }); const validateWithSchema = ajv.compile(endpointDeclarationSchema); function validate(endpointDeclaration) { const isValid = validateWithSchema(endpointDeclaration); const result = {isValid: isValid}; if (!isValid) { result.errors = validateWithSchema.errors; } return result; } module.exports = { validate: validate };