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