UNPKG

@spartacus/storefront

Version:

Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.

40 lines 5.9 kB
import { isDevMode } from '@angular/core'; /** * Matches the pattern '[ ** / ] marker / :paramName' * * @param marker phrase that indicates the start of the match * @param paramName name of the parameter present after the marker * @param precedingParamName name of the parameter for every preceding url segment * i.e. `param` will result in `param0`, `param1`, ... */ export function getSuffixUrlMatcher({ marker, paramName, precedingParamName, }) { precedingParamName = precedingParamName || 'param'; const matcher = function suffixUrlMatcher(segments) { const markerIndex = findLastIndex(segments, ({ path }) => path === marker); const isMarkerLastSegment = markerIndex === segments.length - 1; if (markerIndex === -1 || isMarkerLastSegment) { return null; } const paramIndex = markerIndex + 1; const posParams = { [paramName]: segments[paramIndex], }; for (let i = 0; i < markerIndex; i++) { posParams[`${precedingParamName}${i}`] = segments[i]; } return { consumed: segments.slice(0, paramIndex + 1), posParams }; }; if (isDevMode()) { matcher['_suffixRouteConfig'] = { marker, paramName, precedingParamName }; // property added for easier debugging of routes } return matcher; } function findLastIndex(elements, predicate) { for (let index = elements.length - 1; index >= 0; index--) { if (predicate(elements[index])) { return index; } } return -1; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VmZml4LXVybC1tYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmVmcm9udGxpYi9jbXMtc3RydWN0dXJlL3JvdXRpbmcvc3VmZml4LXJvdXRlcy9zdWZmaXgtdXJsLW1hdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEVBQ2xDLE1BQU0sRUFDTixTQUFTLEVBQ1Qsa0JBQWtCLEdBS25CO0lBQ0Msa0JBQWtCLEdBQUcsa0JBQWtCLElBQUksT0FBTyxDQUFDO0lBQ25ELE1BQU0sT0FBTyxHQUFHLFNBQVMsZ0JBQWdCLENBQ3ZDLFFBQXNCO1FBRXRCLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDM0UsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLEtBQUssUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFaEUsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLElBQUksbUJBQW1CLEVBQUU7WUFDN0MsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sVUFBVSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQW1DO1lBQ2hELENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQztTQUNsQyxDQUFDO1FBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxTQUFTLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RDtRQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BFLENBQUMsQ0FBQztJQUVGLElBQUksU0FBUyxFQUFFLEVBQUU7UUFDZixPQUFPLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLGdEQUFnRDtLQUM1SDtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBSSxRQUFhLEVBQUUsU0FBNkI7SUFDcEUsS0FBSyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3pELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7S0FDRjtJQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVcmxNYXRjaFJlc3VsdCwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgcGF0dGVybiAnWyAqKiAvIF0gbWFya2VyIC8gOnBhcmFtTmFtZSdcbiAqXG4gKiBAcGFyYW0gbWFya2VyIHBocmFzZSB0aGF0IGluZGljYXRlcyB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoXG4gKiBAcGFyYW0gcGFyYW1OYW1lIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBwcmVzZW50IGFmdGVyIHRoZSBtYXJrZXJcbiAqIEBwYXJhbSBwcmVjZWRpbmdQYXJhbU5hbWUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGZvciBldmVyeSBwcmVjZWRpbmcgdXJsIHNlZ21lbnRcbiAqICAgICAgICBpLmUuIGBwYXJhbWAgd2lsbCByZXN1bHQgaW4gYHBhcmFtMGAsIGBwYXJhbTFgLCAuLi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN1ZmZpeFVybE1hdGNoZXIoe1xuICBtYXJrZXIsXG4gIHBhcmFtTmFtZSxcbiAgcHJlY2VkaW5nUGFyYW1OYW1lLFxufToge1xuICBtYXJrZXI6IHN0cmluZztcbiAgcGFyYW1OYW1lOiBzdHJpbmc7XG4gIHByZWNlZGluZ1BhcmFtTmFtZT86IHN0cmluZztcbn0pIHtcbiAgcHJlY2VkaW5nUGFyYW1OYW1lID0gcHJlY2VkaW5nUGFyYW1OYW1lIHx8ICdwYXJhbSc7XG4gIGNvbnN0IG1hdGNoZXIgPSBmdW5jdGlvbiBzdWZmaXhVcmxNYXRjaGVyKFxuICAgIHNlZ21lbnRzOiBVcmxTZWdtZW50W11cbiAgKTogVXJsTWF0Y2hSZXN1bHQgfCBudWxsIHtcbiAgICBjb25zdCBtYXJrZXJJbmRleCA9IGZpbmRMYXN0SW5kZXgoc2VnbWVudHMsICh7IHBhdGggfSkgPT4gcGF0aCA9PT0gbWFya2VyKTtcbiAgICBjb25zdCBpc01hcmtlckxhc3RTZWdtZW50ID0gbWFya2VySW5kZXggPT09IHNlZ21lbnRzLmxlbmd0aCAtIDE7XG5cbiAgICBpZiAobWFya2VySW5kZXggPT09IC0xIHx8IGlzTWFya2VyTGFzdFNlZ21lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtSW5kZXggPSBtYXJrZXJJbmRleCArIDE7XG4gICAgY29uc3QgcG9zUGFyYW1zOiB7IFtuYW1lOiBzdHJpbmddOiBVcmxTZWdtZW50IH0gPSB7XG4gICAgICBbcGFyYW1OYW1lXTogc2VnbWVudHNbcGFyYW1JbmRleF0sXG4gICAgfTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2VySW5kZXg7IGkrKykge1xuICAgICAgcG9zUGFyYW1zW2Ake3ByZWNlZGluZ1BhcmFtTmFtZX0ke2l9YF0gPSBzZWdtZW50c1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb25zdW1lZDogc2VnbWVudHMuc2xpY2UoMCwgcGFyYW1JbmRleCArIDEpLCBwb3NQYXJhbXMgfTtcbiAgfTtcblxuICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICBtYXRjaGVyWydfc3VmZml4Um91dGVDb25maWcnXSA9IHsgbWFya2VyLCBwYXJhbU5hbWUsIHByZWNlZGluZ1BhcmFtTmFtZSB9OyAvLyBwcm9wZXJ0eSBhZGRlZCBmb3IgZWFzaWVyIGRlYnVnZ2luZyBvZiByb3V0ZXNcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVyO1xufVxuXG5mdW5jdGlvbiBmaW5kTGFzdEluZGV4PFQ+KGVsZW1lbnRzOiBUW10sIHByZWRpY2F0ZTogKGVsOiBUKSA9PiBib29sZWFuKSB7XG4gIGZvciAobGV0IGluZGV4ID0gZWxlbWVudHMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGlmIChwcmVkaWNhdGUoZWxlbWVudHNbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG4iXX0=