UNPKG

unmock-core

Version:

[![npm](https://img.shields.io/npm/v/unmock-core.svg)][npmjs] [![CircleCI](https://circleci.com/gh/unmock/unmock-js.svg?style=svg)](https://circleci.com/gh/unmock/unmock-js) [![codecov](https://codecov.io/gh/unmock/unmock-js/branch/dev/graph/badge.svg)](h

91 lines 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const interfaces_1 = require("../interfaces"); const chooseDeepestMissingParam = (errorList, initError) => errorList.reduce((err, cerr) => err === undefined || err.nestedLevel < cerr.nestedLevel ? cerr : err, initError); const validStatesForStateWithCode = (response, state, code) => { if (response === undefined || interfaces_1.isReference(response) || response.content === undefined) { return { error: { msg: `Can't find response for given status code '${code}'!`, nestedLevel: -1, }, }; } const stateMedia = getStateFromMedia(response.content, state); const error = chooseDeepestMissingParam(stateMedia.errors); return { responses: { [code]: stateMedia.responses }, error, }; }; const validStatesForStateWithoutCode = (operationResponses, state) => { const relevantResponses = {}; let err; for (const code of Object.keys(operationResponses)) { const { responses, error } = validStatesForStateWithCode(operationResponses[code], state, code); err = error === undefined ? err : chooseDeepestMissingParam([error], err); if (responses === undefined) { continue; } const resp = responses[code]; const filteredStateMedia = Object.keys(resp).reduce((acc, contentType) => Object.keys(resp[contentType]).length > 0 ? Object.assign(acc, { [contentType]: resp[contentType] }) : acc, {}); if (Object.keys(filteredStateMedia).length > 0) { relevantResponses[code] = filteredStateMedia; } } return Object.keys(relevantResponses).length > 0 ? { responses: relevantResponses } : { error: err }; }; exports.getValidStatesForOperationWithState = (operation, state) => { const resps = operation.responses; const code = state.top.$code; const { responses, error } = code !== undefined ? validStatesForStateWithCode(resps[String(code)], state, code) : validStatesForStateWithoutCode(resps, state); return { responses, error: error === undefined ? error : error.msg }; }; const getStateFromMedia = (contentRecord, state) => { const errors = []; const relevantResponses = {}; for (const contentType of Object.keys(contentRecord)) { const content = contentRecord[contentType]; if (content === undefined || content.schema === undefined) { errors.push({ msg: `No schema defined in '${JSON.stringify(content)}'!`, nestedLevel: -1, }); continue; } const spreadState = state.gen(content.schema); const missingParam = DFSVerifyNoneAreNull(spreadState); if (missingParam !== undefined) { errors.push(missingParam); } else { relevantResponses[contentType] = spreadState; } } return { responses: relevantResponses, errors }; }; const DFSVerifyNoneAreNull = (obj, nestedLevel = 0) => { for (const key of Object.keys(obj)) { if (obj[key] === null) { return { msg: `Can't find definition for '${key}', or its type is incorrect`, nestedLevel, }; } if (typeof obj[key] === "object") { return DFSVerifyNoneAreNull(obj[key], nestedLevel + 1); } } return undefined; }; //# sourceMappingURL=validator.js.map