validate-route-definition.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import {InvalidArgumentError} from '@e22m4u/js-format';
  2. /**
  3. * Validate route definition.
  4. *
  5. * @param {import('./route.js').RouteDefinition} routeDef
  6. */
  7. export function validateRouteDefinition(routeDef) {
  8. if (!routeDef || typeof routeDef !== 'object' || Array.isArray(routeDef)) {
  9. throw new InvalidArgumentError(
  10. 'Route definition must be an Object, but %v was given.',
  11. routeDef,
  12. );
  13. }
  14. if (!routeDef.method || typeof routeDef.method !== 'string') {
  15. throw new InvalidArgumentError(
  16. 'Option "method" must be a non-empty String, but %v was given.',
  17. routeDef.method,
  18. );
  19. }
  20. if (typeof routeDef.path !== 'string') {
  21. throw new InvalidArgumentError(
  22. 'Option "path" must be a String, but %v was given.',
  23. routeDef.path,
  24. );
  25. }
  26. if (typeof routeDef.handler !== 'function') {
  27. throw new InvalidArgumentError(
  28. 'Option "handler" must be a Function, but %v was given.',
  29. routeDef.handler,
  30. );
  31. }
  32. if (routeDef.meta !== undefined) {
  33. if (
  34. !routeDef.meta ||
  35. typeof routeDef.meta !== 'object' ||
  36. Array.isArray(routeDef.meta)
  37. ) {
  38. throw new InvalidArgumentError(
  39. 'Option "meta" must be an Object, but %v was given.',
  40. routeDef.meta,
  41. );
  42. }
  43. }
  44. }