@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
JavaScript
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