UNPKG

@wroud/navigation

Version:

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

72 lines 2.58 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); const isMissing = value === undefined || value === null || value === ""; if (isMissing || (!isWildcard && Array.isArray(value))) { if (isWildcard) { throw new Error(`Missing required wildcard parameter: ${paramName}`); } else { 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 as strings return [ ...result, ...value .filter((item) => item !== undefined) .map((item) => String(item)), ]; } // Simplify handling of single value parameters if (value !== undefined) { result.push(String(value)); } } else { // Static segment result.push(segment); } return result; }, []); } /** * Convert a raw string value according to declared parameter type. */ export function convertParamValue(value, type) { switch (type) { case "number": return Number(value); case "boolean": return value === "true" || value === "1"; default: return value; } } //# sourceMappingURL=parameter-utils.js.map