openapi-sampler
Version:
Tool for generation samples based on OpenAPI payload/response schema
50 lines (42 loc) • 1.4 kB
JavaScript
import { traverse, clearCache } from './traverse';
import { sampleArray, sampleBoolean, sampleNumber, sampleObject, sampleString } from './samplers/index';
import { XMLBuilder } from 'fast-xml-parser';
export var _samplers = {};
const defaults = {
skipReadOnly: false,
maxSampleDepth: 15,
};
function convertJsonToXml(obj, schema) {
if (!obj) {
throw new Error('Unknown format output for building XML.');
}
if (Array.isArray(obj) || Object.keys(obj).length > 1) {
obj = { [schema?.xml?.name || 'root']: obj }; // XML document must contain one root element
}
const builder = new XMLBuilder({
ignoreAttributes : false,
format: true,
attributeNamePrefix: '$',
textNodeName: '#text',
});
return builder.build(obj);
}
export function sample(schema, options, spec) {
let opts = Object.assign({}, defaults, options);
clearCache();
let result = traverse(schema, opts, spec).value;
if (opts?.format === 'xml') {
return convertJsonToXml(result, schema);
}
return result;
};
export function _registerSampler(type, sampler) {
_samplers[type] = sampler;
};
export { inferType } from './infer';
_registerSampler('array', sampleArray);
_registerSampler('boolean', sampleBoolean);
_registerSampler('integer', sampleNumber);
_registerSampler('number', sampleNumber);
_registerSampler('object', sampleObject);
_registerSampler('string', sampleString);