UNPKG

winnow

Version:

Apply sql-like filters to GeoJSON

50 lines (36 loc) 1.2 kB
const Joi = require('@hapi/joi') const featureSchema = Joi.object({ geometry: Joi.object().allow(null).optional(), attributes: Joi.object().optional(), properties: Joi.object().optional() }).or('attributes', 'properties').required().unknown() function normalizeQueryInput (input) { if (isFeatureCollection(input)) { return input.features } if (isFeatureArray(input)) { return input } if (isFeature(input)) { return [input] } throw new Error('Could not normalize query input to feature array') } function isFeatureCollection (input = {}) { const featureCollectionSchema = Joi.object({ features: Joi.array().required() }).unknown() const { error } = featureCollectionSchema.validate(input) if (!error && isFeatureArray(input.features)) return true } function isFeatureArray (input) { if (Array.isArray(input) && input.length === 0) return true const featureArraySchema = Joi.array().items(featureSchema).required() const { error } = featureArraySchema.validate(input) if (!error) return true } function isFeature (input) { const { error } = featureSchema.validate(input) if (!error) return true } module.exports = normalizeQueryInput