import {logger} from "../../service/logging/global.ts"; export type RouteParameters = { [key: string]: string } export type RouteSegment = { base: string, match: string | undefined } export type ZippedRouteSegments = RouteSegment[] export abstract class Route { constructor( protected base: string ) { } public abstract match(incoming: string): boolean public abstract build_parameters(incoming: string): RouteParameters public get route() { return this.base } public split(incoming: string) { return incoming.toLowerCase().split('/') } public zip(incoming: string) { const incoming_parts: string[] = this.split(incoming) const base_parts: string[] = this.split(this.base) const zipped_parts: ZippedRouteSegments = [] if ( incoming_parts.length !== base_parts.length ) { logger.warn(`Zipping routes with different part lengths! (Base: ${this.base}, Incoming: ${incoming}`) } base_parts.forEach((part, index) => { zipped_parts.push({ base: part, match: (index >= incoming_parts.length ? undefined : incoming_parts[index]), }) }) return zipped_parts } }