import {Route, RouteParameters, RouteSegment} from './Route.ts' import Utility from '../../service/utility/Utility.ts' import {make} from '../../../../di/src/global.ts' export class ComplexRoute extends Route { public match(incoming: string): boolean { const base_parts = this.split(this.base) const incoming_parts = this.split(incoming) if ( base_parts.length !== incoming_parts.length ) return false return base_parts.every((base, idx) => { if ( base.startsWith(':') && base.length > 1 ) return true else if ( base === '*' ) return true return base.toLowerCase() === incoming_parts[idx].toLowerCase() }) } public build_parameters(incoming: string): RouteParameters { const utility = make(Utility) const params: RouteParameters = {} let current_wildcard: number = 1 this.zip(incoming).forEach((segment: RouteSegment) => { if ( segment.base.indexOf('*') >= 0 ) { params[`$${current_wildcard}`] = utility.infer(segment.match) current_wildcard += 1 } else if ( segment.base.startsWith(':') && segment.base.length > 1 ) { const name = segment.base.substr(1) params[name] = utility.infer(segment.match) } }) return params } }