@opengis/fastify-table
Version:
core-plugins
33 lines (26 loc) • 1.09 kB
JavaScript
import isText from './typeguards/isText.js';
import isPath from './typeguards/isPath.js';
import isBuffer from './typeguards/isBuffer.js';
import isReadableStream from './typeguards/isReadableStream.js';
import isArray from './typeguards/isArray.js';
import convertHandlers from './handlers/index.js';
const getValidData = async ({ data, types }) => {
// chain of responsibility
const validators = [isReadableStream, isBuffer, isPath, isText, isArray];
const values = await Promise.all(
validators.map(async (func) => ({ name: func.name, bool: await func(data) })),
);
const isValid = !values.reduce((acc, { name, bool }) => {
let valid = false;
types.forEach((dataType) => {
if (name === dataType) valid = bool;
});
return acc && !valid;
}, true);
if (isValid) return data;
const [value] = values.filter(({ bool }) => bool === true);
if (!value) throw new Error('No support for this data type');
const handler = convertHandlers[value.name];
return handler({ data, types });
};
export default getValidData;