/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ define(['underscore'], function (_) { 'use strict'; var baseUrls = [], sections = [], clientSideSections = [], sectionNames = [], canonize; /** * @param {String} url * @return {String} */ canonize = function (url) { var route = url; _.some(baseUrls, function (baseUrl) { route = url.replace(baseUrl, ''); return route !== url; }); return route.replace(/^\/?index.php\/?/, '').toLowerCase(); }; return { /** * Returns a list of sections which should be invalidated for given URL. * @param {String} url - URL which was requested. * @return {Object} - List of sections to invalidate. */ getAffectedSections: function (url) { var route = canonize(url), actions = _.find(sections, function (val, section) { var matched; // Covers the case where "*" works as a glob pattern. if (section.indexOf('*') >= 0) { section = section.replace(/\*/g, '[^/]+') + '$'; matched = route.match(section); return matched && matched[0] === route; } return route.indexOf(section) === 0; }); return _.union(_.toArray(actions), sections['*']); }, /** * Filters the list of given sections to the ones defined as client side. * @param {Object} allSections - List of sections to check. * @return {Object} - List of filtered sections. */ filterClientSideSections: function (allSections) { return _.difference(allSections, clientSideSections); }, /** * Tells if section is defined as client side. * @param {String} sectionName - Name of the section to check. * @return {Boolean} */ isClientSideSection: function (sectionName) { return _.contains(clientSideSections, sectionName); }, /** * Returns array of section names. * @returns {Array} */ getSectionNames: function () { return sectionNames; }, /** * @param {Object} options * @constructor */ 'Magento_Customer/js/section-config': function (options) { baseUrls = options.baseUrls; sections = options.sections; clientSideSections = options.clientSideSections; sectionNames = options.sectionNames; } }; });