UNPKG

@wroud/navigation

Version:

A flexible, pattern-matching navigation system for JavaScript applications with built-in routing, browser integration, and navigation state management

56 lines 2.12 kB
import { isParameterSegment, isWildcardSegment, extractParamName, } from "./path-utils.js"; /** * Validates that all required parameters are present in the params object. * Throws descriptive errors for missing or invalid parameters. */ export function validateParameters(pattern, segments, params) { // Filter out empty segments and process only parameter segments segments .filter((segment) => segment && isParameterSegment(segment)) .forEach((segment) => { const paramName = extractParamName(segment); const value = params[paramName]; const isWildcard = isWildcardSegment(segment); if (!value) { if (isWildcard) { throw new Error(`Missing required wildcard parameter: ${paramName}`); } else { throw new Error(`Missing or invalid required parameter: ${paramName}`); } } if (!isWildcard && Array.isArray(value)) { throw new Error(`Missing or invalid required parameter: ${paramName}`); } }); } /** * Builds URL segments from a pattern and parameters */ export function buildUrlSegments(segments, params) { return segments.reduce((result, segment) => { // Skip empty segments if (!segment) return result; // Handle parameter segments if (isParameterSegment(segment)) { const paramName = extractParamName(segment); const value = params[paramName]; // Handle wildcard parameters (arrays) if (isWildcardSegment(segment) && Array.isArray(value)) { // Filter out undefined values and add valid items return [...result, ...value.filter((item) => item !== undefined)]; } // Simplify handling of single value parameters if (value !== undefined) { result.push(String(value)); } } else { // Static segment result.push(segment); } return result; }, []); } //# sourceMappingURL=parameter-utils.js.map