UNPKG

@spartacus/core

Version:

Spartacus - the core framework

90 lines 11.6 kB
import { Injectable } from '@angular/core'; import { mergeFields, parseFields } from '../utils/occ-fields'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; /** * Helper service for optimizing endpoint calls to occ backend */ export class OccFieldsService { constructor(http) { this.http = http; this.FIELDS_PARAM = 'fields'; } /** * Merge similar occ endpoints calls by merging fields parameter * * We assume that different scopes are defined by different fields parameters, * so we are grouping all requests with the same urls (except fields definition) * and merging into one request with fields that will satisfy all separate ones. * * @param models */ getOptimalUrlGroups(models) { const groupedByUrls = {}; for (const model of models) { const [urlPart, fields] = this.splitFields(model.url); if (!groupedByUrls[urlPart]) { groupedByUrls[urlPart] = {}; } model.fields = fields ? parseFields(fields) : {}; groupedByUrls[urlPart][model.scopedData.scope] = model; } const mergedUrls = {}; for (const [url, group] of Object.entries(groupedByUrls)) { const urlWithFields = this.getUrlWithFields(url, Object.values(group).map((lo) => lo.fields)); mergedUrls[urlWithFields] = group; } return mergedUrls; } /** * Extract fields parameter from occ endpoint url * * @param urlWithFields */ splitFields(urlWithFields) { const [url, params] = urlWithFields.split('?'); const paramsMap = {}; if (params) { params.split('&').forEach((param) => { const keyValue = param.split('='); paramsMap[keyValue[0]] = keyValue[1]; }); } const nonFieldsParams = Object.keys(paramsMap) .sort() .reduce((id, par) => { if (par !== this.FIELDS_PARAM) { id.push(paramsMap[par] ? `${par}=${paramsMap[par]}` : par); } return id; }, []); const nonFields = nonFieldsParams.join('&'); return [ nonFields ? `${url}?${nonFields}` : url, paramsMap[this.FIELDS_PARAM], ]; } /** * Combine url with field parameters * * @param url * @param fields */ getUrlWithFields(url, fields) { const mergedFields = mergeFields(fields); if (mergedFields) { url += url.includes('?') ? '&' : '?'; url += `${this.FIELDS_PARAM}=${mergedFields}`; } return url; } } OccFieldsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccFieldsService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); OccFieldsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccFieldsService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccFieldsService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NjLWZpZWxkcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvb2NjL3NlcnZpY2VzL29jYy1maWVsZHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQStCL0Q7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQXNCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFFNUIsaUJBQVksR0FBRyxRQUFRLENBQUM7SUFGTyxDQUFDO0lBSTFDOzs7Ozs7OztPQVFHO0lBQ0gsbUJBQW1CLENBQUMsTUFBMkI7UUFDN0MsTUFBTSxhQUFhLEdBQTBCLEVBQUUsQ0FBQztRQUNoRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQTBCLEVBQUU7WUFDOUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQixhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQzdCO1lBQ0QsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pELGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUN4RDtRQUVELE1BQU0sVUFBVSxHQUEwQixFQUFFLENBQUM7UUFDN0MsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDeEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUN6QyxHQUFHLEVBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FDNUMsQ0FBQztZQUNGLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDbkM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFdBQVcsQ0FBQyxhQUFxQjtRQUN2QyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXJCLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDbEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDM0MsSUFBSSxFQUFFO2FBQ04sTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2xCLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQzdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUQ7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVULE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUMsT0FBTztZQUNMLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDdkMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxNQUEyQjtRQUMvRCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekMsSUFBSSxZQUFZLEVBQUU7WUFDaEIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3JDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxFQUFFLENBQUM7U0FDL0M7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7OzZHQXRGVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlRmllbGRzLCBwYXJzZUZpZWxkcyB9IGZyb20gJy4uL3V0aWxzL29jYy1maWVsZHMnO1xuaW1wb3J0IHsgU2NvcGVkRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsL3Njb3BlZC1kYXRhJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVkRGF0YVdpdGhVcmwge1xuICAvKiogVXJsICh3aXRoIGZpZWxkcykgdG8gbG9hZCBzY29wZWQgZGF0YSAqL1xuICB1cmw/OiBzdHJpbmc7XG4gIC8qKiBzY29wZWQgZGF0YSBtb2RlbCAqL1xuICBzY29wZWREYXRhOiBTY29wZWREYXRhPGFueT47XG59XG5cbi8qKlxuICogSW50ZXJtZWRpYXRlIG1vZGVsIHRvIGFjY29tbW9kYXRlIGFsbCBkYXRhIG5lZWRlZCB0byBwZXJmb3JtIG9jYyBmaWVsZHMgb3B0aW1pemF0aW9uc1xuICogd3JhcHBpbmcgU2NvcGVkRGF0YSB3aXRoIHVybCBhbmQgZmllbGRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2NjRmllbGRzTW9kZWwgZXh0ZW5kcyBTY29wZWREYXRhV2l0aFVybCB7XG4gIC8qKiBleHRyYWN0ZWQgZmllbGRzIG9iamVjdCwgdXNlZCB0byBleHRyYWN0IGRhdGEgZnJvbSBicm9hZGVyIG1vZGVsICovXG4gIGZpZWxkcz86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBHcm91cGVkIHJlc3QgY2FsbHMgd2l0aCBvcHRpbWFsIHVybHNcbiAqXG4gKiBPbmUgdXJsIGdyb3VwcyBhbGwgc2NvcGVzIGl0IGNvdmVycyB3aXRoIHJlbGF0ZWQgb2NjRmllbGRzTW9kZWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2NjT3B0aW1pbWFsVXJsR3JvdXBzIHtcbiAgW29wdGltYWxVcmw6IHN0cmluZ106IHtcbiAgICBbc2NvcGU6IHN0cmluZ106IE9jY0ZpZWxkc01vZGVsO1xuICB9O1xufVxuXG4vKipcbiAqIEhlbHBlciBzZXJ2aWNlIGZvciBvcHRpbWl6aW5nIGVuZHBvaW50IGNhbGxzIHRvIG9jYyBiYWNrZW5kXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBPY2NGaWVsZHNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQpIHt9XG5cbiAgcHJvdGVjdGVkIEZJRUxEU19QQVJBTSA9ICdmaWVsZHMnO1xuXG4gIC8qKlxuICAgKiBNZXJnZSBzaW1pbGFyIG9jYyBlbmRwb2ludHMgY2FsbHMgYnkgbWVyZ2luZyBmaWVsZHMgcGFyYW1ldGVyXG4gICAqXG4gICAqIFdlIGFzc3VtZSB0aGF0IGRpZmZlcmVudCBzY29wZXMgYXJlIGRlZmluZWQgYnkgZGlmZmVyZW50IGZpZWxkcyBwYXJhbWV0ZXJzLFxuICAgKiBzbyB3ZSBhcmUgZ3JvdXBpbmcgYWxsIHJlcXVlc3RzIHdpdGggdGhlIHNhbWUgdXJscyAoZXhjZXB0IGZpZWxkcyBkZWZpbml0aW9uKVxuICAgKiBhbmQgbWVyZ2luZyBpbnRvIG9uZSByZXF1ZXN0IHdpdGggZmllbGRzIHRoYXQgd2lsbCBzYXRpc2Z5IGFsbCBzZXBhcmF0ZSBvbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxzXG4gICAqL1xuICBnZXRPcHRpbWFsVXJsR3JvdXBzKG1vZGVsczogU2NvcGVkRGF0YVdpdGhVcmxbXSk6IE9jY09wdGltaW1hbFVybEdyb3VwcyB7XG4gICAgY29uc3QgZ3JvdXBlZEJ5VXJsczogT2NjT3B0aW1pbWFsVXJsR3JvdXBzID0ge307XG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHMgYXMgT2NjRmllbGRzTW9kZWxbXSkge1xuICAgICAgY29uc3QgW3VybFBhcnQsIGZpZWxkc10gPSB0aGlzLnNwbGl0RmllbGRzKG1vZGVsLnVybCk7XG4gICAgICBpZiAoIWdyb3VwZWRCeVVybHNbdXJsUGFydF0pIHtcbiAgICAgICAgZ3JvdXBlZEJ5VXJsc1t1cmxQYXJ0XSA9IHt9O1xuICAgICAgfVxuICAgICAgbW9kZWwuZmllbGRzID0gZmllbGRzID8gcGFyc2VGaWVsZHMoZmllbGRzKSA6IHt9O1xuICAgICAgZ3JvdXBlZEJ5VXJsc1t1cmxQYXJ0XVttb2RlbC5zY29wZWREYXRhLnNjb3BlXSA9IG1vZGVsO1xuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlZFVybHM6IE9jY09wdGltaW1hbFVybEdyb3VwcyA9IHt9O1xuICAgIGZvciAoY29uc3QgW3VybCwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwZWRCeVVybHMpKSB7XG4gICAgICBjb25zdCB1cmxXaXRoRmllbGRzID0gdGhpcy5nZXRVcmxXaXRoRmllbGRzKFxuICAgICAgICB1cmwsXG4gICAgICAgIE9iamVjdC52YWx1ZXMoZ3JvdXApLm1hcCgobG8pID0+IGxvLmZpZWxkcylcbiAgICAgICk7XG4gICAgICBtZXJnZWRVcmxzW3VybFdpdGhGaWVsZHNdID0gZ3JvdXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBmaWVsZHMgcGFyYW1ldGVyIGZyb20gb2NjIGVuZHBvaW50IHVybFxuICAgKlxuICAgKiBAcGFyYW0gdXJsV2l0aEZpZWxkc1xuICAgKi9cbiAgcHJpdmF0ZSBzcGxpdEZpZWxkcyh1cmxXaXRoRmllbGRzOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICBjb25zdCBbdXJsLCBwYXJhbXNdID0gdXJsV2l0aEZpZWxkcy5zcGxpdCgnPycpO1xuXG4gICAgY29uc3QgcGFyYW1zTWFwID0ge307XG5cbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBwYXJhbXMuc3BsaXQoJyYnKS5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IHBhcmFtLnNwbGl0KCc9Jyk7XG4gICAgICAgIHBhcmFtc01hcFtrZXlWYWx1ZVswXV0gPSBrZXlWYWx1ZVsxXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5vbkZpZWxkc1BhcmFtcyA9IE9iamVjdC5rZXlzKHBhcmFtc01hcClcbiAgICAgIC5zb3J0KClcbiAgICAgIC5yZWR1Y2UoKGlkLCBwYXIpID0+IHtcbiAgICAgICAgaWYgKHBhciAhPT0gdGhpcy5GSUVMRFNfUEFSQU0pIHtcbiAgICAgICAgICBpZC5wdXNoKHBhcmFtc01hcFtwYXJdID8gYCR7cGFyfT0ke3BhcmFtc01hcFtwYXJdfWAgOiBwYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZDtcbiAgICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IG5vbkZpZWxkcyA9IG5vbkZpZWxkc1BhcmFtcy5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbm9uRmllbGRzID8gYCR7dXJsfT8ke25vbkZpZWxkc31gIDogdXJsLFxuICAgICAgcGFyYW1zTWFwW3RoaXMuRklFTERTX1BBUkFNXSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmUgdXJsIHdpdGggZmllbGQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBAcGFyYW0gdXJsXG4gICAqIEBwYXJhbSBmaWVsZHNcbiAgICovXG4gIHByaXZhdGUgZ2V0VXJsV2l0aEZpZWxkcyh1cmw6IHN0cmluZywgZmllbGRzOiAoc3RyaW5nIHwgb2JqZWN0KVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXJnZWRGaWVsZHMgPSBtZXJnZUZpZWxkcyhmaWVsZHMpO1xuXG4gICAgaWYgKG1lcmdlZEZpZWxkcykge1xuICAgICAgdXJsICs9IHVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xuICAgICAgdXJsICs9IGAke3RoaXMuRklFTERTX1BBUkFNfT0ke21lcmdlZEZpZWxkc31gO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG4gIH1cbn1cbiJdfQ==