@searchspring/snap-controller 0.50.0 → 0.51.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Autocomplete/AutocompleteController.js +1 -1
- package/dist/cjs/Recommendation/RecommendationController.d.ts +1 -12
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.js +86 -124
- package/dist/esm/Autocomplete/AutocompleteController.js +1 -1
- package/dist/esm/Recommendation/RecommendationController.d.ts +1 -12
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.js +26 -65
- package/package.json +10 -10
|
@@ -3,6 +3,7 @@ import { BeaconEvent } from '@searchspring/snap-tracker';
|
|
|
3
3
|
import { AbstractController } from '../Abstract/AbstractController';
|
|
4
4
|
import { ControllerTypes } from '../types';
|
|
5
5
|
import type { RecommendationStore } from '@searchspring/snap-store-mobx';
|
|
6
|
+
import type { RecommendCombinedRequestModel } from '@searchspring/snap-client';
|
|
6
7
|
import type { RecommendationControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
7
8
|
declare type RecommendationTrackMethods = {
|
|
8
9
|
product: {
|
|
@@ -14,18 +15,6 @@ declare type RecommendationTrackMethods = {
|
|
|
14
15
|
impression: () => BeaconEvent | undefined;
|
|
15
16
|
render: (results?: Product[]) => BeaconEvent | undefined;
|
|
16
17
|
};
|
|
17
|
-
declare type RecommendCombinedRequestModel = {
|
|
18
|
-
tag: string;
|
|
19
|
-
siteId: string;
|
|
20
|
-
product?: string;
|
|
21
|
-
shopper?: string;
|
|
22
|
-
categories?: string[];
|
|
23
|
-
brands?: string[];
|
|
24
|
-
cart?: string[];
|
|
25
|
-
lastViewed?: string[];
|
|
26
|
-
test?: boolean;
|
|
27
|
-
branch?: string;
|
|
28
|
-
};
|
|
29
18
|
export declare class RecommendationController extends AbstractController {
|
|
30
19
|
type: ControllerTypes;
|
|
31
20
|
store: RecommendationStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,EAAE,WAAW,CAAC;YAAC,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC7E,CAKC;gBAGD,MAAM,EAAE,8BAA8B,EACtC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA8B3B,KAAK,EAAE,0BAA0B,CAiM5B;IAEL,IAAI,MAAM,IAAI,6BAA6B,CA2B1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAuH9B;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,aAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,eAAe,CAAwC;gBAG9D,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAgK3B,KAAK,EAAE,kBAAkB,CA8CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoM9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,GAAG,SAAS,CAgCvG"}
|
|
@@ -81,7 +81,6 @@ var AbstractController_1 = require("../Abstract/AbstractController");
|
|
|
81
81
|
var snap_store_mobx_1 = require("@searchspring/snap-store-mobx");
|
|
82
82
|
var getParams_1 = require("../utils/getParams");
|
|
83
83
|
var types_1 = require("../types");
|
|
84
|
-
var API_LIMIT = 500;
|
|
85
84
|
var defaultConfig = {
|
|
86
85
|
id: 'search',
|
|
87
86
|
globals: {},
|
|
@@ -148,38 +147,39 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
148
147
|
},
|
|
149
148
|
};
|
|
150
149
|
_this.search = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
151
|
-
var params, err_1, stringyParams, prevStringyParams, searchProfile,
|
|
152
|
-
var
|
|
153
|
-
var
|
|
154
|
-
|
|
155
|
-
|
|
150
|
+
var params, err_1, stringyParams, prevStringyParams, searchProfile, meta, response, preventBackfill, dontBackfill, backfillRequests, backfillResponses, backfillResults, afterSearchProfile, err_2, afterStoreProfile, err_3, err_4;
|
|
151
|
+
var _a, _b;
|
|
152
|
+
var _this = this;
|
|
153
|
+
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
154
|
+
return __generator(this, function (_p) {
|
|
155
|
+
switch (_p.label) {
|
|
156
156
|
case 0:
|
|
157
157
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
158
158
|
return [4 /*yield*/, this.init()];
|
|
159
159
|
case 1:
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
_p.sent();
|
|
161
|
+
_p.label = 2;
|
|
162
162
|
case 2:
|
|
163
163
|
params = this.params;
|
|
164
|
-
if (((
|
|
164
|
+
if (((_d = (_c = this.params.search) === null || _c === void 0 ? void 0 : _c.query) === null || _d === void 0 ? void 0 : _d.string) && ((_f = (_e = this.params.search) === null || _e === void 0 ? void 0 : _e.query) === null || _f === void 0 ? void 0 : _f.string.length)) {
|
|
165
165
|
// save it to the history store
|
|
166
166
|
this.store.history.save(this.params.search.query.string);
|
|
167
167
|
}
|
|
168
|
-
|
|
168
|
+
_p.label = 3;
|
|
169
169
|
case 3:
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
_p.trys.push([3, 23, , 24]);
|
|
171
|
+
_p.label = 4;
|
|
172
172
|
case 4:
|
|
173
|
-
|
|
173
|
+
_p.trys.push([4, 6, , 7]);
|
|
174
174
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
175
175
|
controller: this,
|
|
176
176
|
request: params,
|
|
177
177
|
})];
|
|
178
178
|
case 5:
|
|
179
|
-
|
|
179
|
+
_p.sent();
|
|
180
180
|
return [3 /*break*/, 7];
|
|
181
181
|
case 6:
|
|
182
|
-
err_1 =
|
|
182
|
+
err_1 = _p.sent();
|
|
183
183
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
184
184
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
185
185
|
return [2 /*return*/];
|
|
@@ -197,106 +197,75 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
197
197
|
return [2 /*return*/];
|
|
198
198
|
}
|
|
199
199
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
meta = {};
|
|
201
|
+
response = {};
|
|
202
|
+
if (!(((_g = this.config.settings) === null || _g === void 0 ? void 0 : _g.infinite) && ((_h = params.pagination) === null || _h === void 0 ? void 0 : _h.page) && params.pagination.page > 1)) return [3 /*break*/, 12];
|
|
203
|
+
preventBackfill = ((_j = this.config.settings.infinite) === null || _j === void 0 ? void 0 : _j.backfill) && !this.store.results.length && params.pagination.page > this.config.settings.infinite.backfill;
|
|
204
|
+
dontBackfill = !((_k = this.config.settings.infinite) === null || _k === void 0 ? void 0 : _k.backfill) && !this.store.results.length;
|
|
203
205
|
// if the page is higher than the backfill setting redirect back to page 1
|
|
204
206
|
if (preventBackfill || dontBackfill) {
|
|
205
207
|
this.storage.set('scrollMap', {});
|
|
206
208
|
this.urlManager.set('page', 1).go();
|
|
207
209
|
return [2 /*return*/];
|
|
208
210
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
meta_2 = _x.sent();
|
|
216
|
-
pageSize = (_p = meta_2.pagination) === null || _p === void 0 ? void 0 : _p.defaultPageSize;
|
|
217
|
-
_x.label = 9;
|
|
218
|
-
case 9:
|
|
219
|
-
// restricting pageSize to the limit
|
|
220
|
-
pageSize = pageSize > API_LIMIT ? API_LIMIT : pageSize;
|
|
221
|
-
pagesNeeded = ((_q = params.pagination) === null || _q === void 0 ? void 0 : _q.page) && ((_r = params.pagination) === null || _r === void 0 ? void 0 : _r.page) > ((_s = this.config.settings) === null || _s === void 0 ? void 0 : _s.infinite.backfill)
|
|
222
|
-
? (_t = this.config.settings) === null || _t === void 0 ? void 0 : _t.infinite.backfill
|
|
223
|
-
: (_u = params.pagination) === null || _u === void 0 ? void 0 : _u.page;
|
|
224
|
-
_a = backFillSize(pagesNeeded, pageSize), backFillPageSize = _a.size, backFillPages = _a.pages;
|
|
225
|
-
for (i = 1; i <= backFillPages; i++) {
|
|
226
|
-
backfillParams = (0, deepmerge_1.default)(__assign({}, params), { pagination: { pageSize: backFillPageSize, page: i } });
|
|
227
|
-
backfills.push(this.client.search(backfillParams));
|
|
228
|
-
}
|
|
229
|
-
_x.label = 10;
|
|
230
|
-
case 10:
|
|
231
|
-
if (!(backfills && backfills.length)) return [3 /*break*/, 12];
|
|
232
|
-
backfillResults_1 = [];
|
|
233
|
-
return [4 /*yield*/, Promise.all(backfills)];
|
|
234
|
-
case 11:
|
|
235
|
-
backfillResponses = _x.sent();
|
|
236
|
-
backfillResponses.map(function (_a) {
|
|
237
|
-
var metaBackfill = _a[0], responseBackfill = _a[1];
|
|
238
|
-
if (!meta_1) {
|
|
239
|
-
meta_1 = metaBackfill;
|
|
240
|
-
}
|
|
241
|
-
if (!response_1) {
|
|
242
|
-
response_1 = responseBackfill;
|
|
243
|
-
}
|
|
244
|
-
// push results to array
|
|
245
|
-
if (responseBackfill.results) {
|
|
246
|
-
backfillResults_1.push.apply(backfillResults_1, responseBackfill.results);
|
|
247
|
-
}
|
|
211
|
+
if (!(((_l = this.config.settings) === null || _l === void 0 ? void 0 : _l.infinite.backfill) && !this.previousResults.length)) return [3 /*break*/, 9];
|
|
212
|
+
backfillRequests = Array(params.pagination.page)
|
|
213
|
+
.fill('backfill')
|
|
214
|
+
.map(function (v, i) {
|
|
215
|
+
var backfillParams = (0, deepmerge_1.default)(__assign({}, params), { pagination: { page: i + 1 } });
|
|
216
|
+
return _this.client.search(backfillParams);
|
|
248
217
|
});
|
|
218
|
+
return [4 /*yield*/, Promise.all(backfillRequests)];
|
|
219
|
+
case 8:
|
|
220
|
+
backfillResponses = _p.sent();
|
|
221
|
+
// backfillResponses are [meta, searchResponse][]
|
|
222
|
+
// set the meta and response to the first page of backfillResponses
|
|
223
|
+
meta = backfillResponses[0][0];
|
|
224
|
+
response = backfillResponses[0][1];
|
|
225
|
+
backfillResults = backfillResponses.reduce(function (results, response) {
|
|
226
|
+
// response is [meta, searchResponse]
|
|
227
|
+
return results.concat.apply(results, response[1].results);
|
|
228
|
+
}, []);
|
|
249
229
|
// overwrite pagination params to expected state
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
response_1.pagination.page = (_v = params.pagination) === null || _v === void 0 ? void 0 : _v.page;
|
|
230
|
+
response.pagination.totalPages = Math.ceil(response.pagination.totalResults / response.pagination.pageSize);
|
|
231
|
+
response.pagination.page = (_m = params.pagination) === null || _m === void 0 ? void 0 : _m.page;
|
|
253
232
|
// set the response results with results from backfill responses
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
233
|
+
response.results = backfillResults;
|
|
234
|
+
return [3 /*break*/, 11];
|
|
235
|
+
case 9: return [4 /*yield*/, this.client.search(params)];
|
|
236
|
+
case 10:
|
|
237
|
+
// infinite with no backfills.
|
|
238
|
+
_a = _p.sent(), meta = _a[0], response = _a[1];
|
|
239
|
+
// append new results to previous results
|
|
240
|
+
response.results = __spreadArray(__spreadArray([], this.previousResults, true), (response.results || []), true);
|
|
241
|
+
_p.label = 11;
|
|
242
|
+
case 11: return [3 /*break*/, 14];
|
|
260
243
|
case 12: return [4 /*yield*/, this.client.search(params)];
|
|
261
244
|
case 13:
|
|
262
|
-
//
|
|
263
|
-
_b =
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
245
|
+
// standard request (not using infinite scroll)
|
|
246
|
+
_b = _p.sent(), meta = _b[0], response = _b[1];
|
|
247
|
+
_p.label = 14;
|
|
248
|
+
case 14:
|
|
249
|
+
// MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
250
|
+
if (!response.meta) {
|
|
251
|
+
response.meta = meta;
|
|
268
252
|
}
|
|
269
|
-
//append new results to previous results
|
|
270
|
-
response_1.results = __spreadArray(__spreadArray([], this.previousResults, true), (response_1.results || []), true);
|
|
271
|
-
_x.label = 14;
|
|
272
|
-
case 14: return [3 /*break*/, 17];
|
|
273
|
-
case 15: return [4 /*yield*/, this.client.search(params)];
|
|
274
|
-
case 16:
|
|
275
|
-
//standard.
|
|
276
|
-
_c = _x.sent(), meta_1 = _c[0], response_1 = _c[1];
|
|
277
|
-
// @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
278
|
-
if (!response_1.meta) {
|
|
279
|
-
// @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
280
|
-
response_1.meta = meta_1;
|
|
281
|
-
}
|
|
282
|
-
_x.label = 17;
|
|
283
|
-
case 17:
|
|
284
253
|
searchProfile.stop();
|
|
285
254
|
this.log.profile(searchProfile);
|
|
286
255
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
|
|
287
|
-
|
|
288
|
-
case
|
|
289
|
-
|
|
256
|
+
_p.label = 15;
|
|
257
|
+
case 15:
|
|
258
|
+
_p.trys.push([15, 17, , 18]);
|
|
290
259
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
291
260
|
controller: this,
|
|
292
261
|
request: params,
|
|
293
|
-
response:
|
|
262
|
+
response: response,
|
|
294
263
|
})];
|
|
295
|
-
case
|
|
296
|
-
|
|
297
|
-
return [3 /*break*/,
|
|
298
|
-
case
|
|
299
|
-
err_2 =
|
|
264
|
+
case 16:
|
|
265
|
+
_p.sent();
|
|
266
|
+
return [3 /*break*/, 18];
|
|
267
|
+
case 17:
|
|
268
|
+
err_2 = _p.sent();
|
|
300
269
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
301
270
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
302
271
|
afterSearchProfile.stop();
|
|
@@ -306,30 +275,30 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
306
275
|
this.log.error("error in 'afterSearch' middleware");
|
|
307
276
|
throw err_2;
|
|
308
277
|
}
|
|
309
|
-
return [3 /*break*/,
|
|
310
|
-
case
|
|
278
|
+
return [3 /*break*/, 18];
|
|
279
|
+
case 18:
|
|
311
280
|
afterSearchProfile.stop();
|
|
312
281
|
this.log.profile(afterSearchProfile);
|
|
313
282
|
// store previous results for infinite usage
|
|
314
|
-
if ((
|
|
315
|
-
this.previousResults = JSON.parse(JSON.stringify(
|
|
283
|
+
if ((_o = this.config.settings) === null || _o === void 0 ? void 0 : _o.infinite) {
|
|
284
|
+
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
316
285
|
}
|
|
317
286
|
// update the store
|
|
318
|
-
this.store.update(
|
|
287
|
+
this.store.update(response);
|
|
319
288
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
320
|
-
|
|
321
|
-
case
|
|
322
|
-
|
|
289
|
+
_p.label = 19;
|
|
290
|
+
case 19:
|
|
291
|
+
_p.trys.push([19, 21, , 22]);
|
|
323
292
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
324
293
|
controller: this,
|
|
325
294
|
request: params,
|
|
326
|
-
response:
|
|
295
|
+
response: response,
|
|
327
296
|
})];
|
|
328
|
-
case
|
|
329
|
-
|
|
330
|
-
return [3 /*break*/,
|
|
331
|
-
case
|
|
332
|
-
err_3 =
|
|
297
|
+
case 20:
|
|
298
|
+
_p.sent();
|
|
299
|
+
return [3 /*break*/, 22];
|
|
300
|
+
case 21:
|
|
301
|
+
err_3 = _p.sent();
|
|
333
302
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
334
303
|
this.log.warn("'afterStore' middleware cancelled");
|
|
335
304
|
afterStoreProfile.stop();
|
|
@@ -339,13 +308,13 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
339
308
|
this.log.error("error in 'afterStore' middleware");
|
|
340
309
|
throw err_3;
|
|
341
310
|
}
|
|
342
|
-
return [3 /*break*/,
|
|
343
|
-
case
|
|
311
|
+
return [3 /*break*/, 22];
|
|
312
|
+
case 22:
|
|
344
313
|
afterStoreProfile.stop();
|
|
345
314
|
this.log.profile(afterStoreProfile);
|
|
346
|
-
return [3 /*break*/,
|
|
347
|
-
case
|
|
348
|
-
err_4 =
|
|
315
|
+
return [3 /*break*/, 24];
|
|
316
|
+
case 23:
|
|
317
|
+
err_4 = _p.sent();
|
|
349
318
|
if (err_4) {
|
|
350
319
|
if (err_4.err && err_4.fetchDetails) {
|
|
351
320
|
switch (err_4.fetchDetails.status) {
|
|
@@ -386,8 +355,8 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
386
355
|
}
|
|
387
356
|
this.store.loading = false;
|
|
388
357
|
}
|
|
389
|
-
return [3 /*break*/,
|
|
390
|
-
case
|
|
358
|
+
return [3 /*break*/, 24];
|
|
359
|
+
case 24: return [2 /*return*/];
|
|
391
360
|
}
|
|
392
361
|
});
|
|
393
362
|
}); };
|
|
@@ -670,10 +639,3 @@ function generateHrefSelector(element, href, levels) {
|
|
|
670
639
|
return;
|
|
671
640
|
}
|
|
672
641
|
exports.generateHrefSelector = generateHrefSelector;
|
|
673
|
-
function backFillSize(pages, pageSize) {
|
|
674
|
-
var totalResults = pages * pageSize;
|
|
675
|
-
var numPages = Math.ceil(totalResults / API_LIMIT);
|
|
676
|
-
while (totalResults % numPages)
|
|
677
|
-
numPages++;
|
|
678
|
-
return { size: totalResults / numPages, pages: numPages };
|
|
679
|
-
}
|
|
@@ -3,6 +3,7 @@ import { BeaconEvent } from '@searchspring/snap-tracker';
|
|
|
3
3
|
import { AbstractController } from '../Abstract/AbstractController';
|
|
4
4
|
import { ControllerTypes } from '../types';
|
|
5
5
|
import type { RecommendationStore } from '@searchspring/snap-store-mobx';
|
|
6
|
+
import type { RecommendCombinedRequestModel } from '@searchspring/snap-client';
|
|
6
7
|
import type { RecommendationControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
7
8
|
declare type RecommendationTrackMethods = {
|
|
8
9
|
product: {
|
|
@@ -14,18 +15,6 @@ declare type RecommendationTrackMethods = {
|
|
|
14
15
|
impression: () => BeaconEvent | undefined;
|
|
15
16
|
render: (results?: Product[]) => BeaconEvent | undefined;
|
|
16
17
|
};
|
|
17
|
-
declare type RecommendCombinedRequestModel = {
|
|
18
|
-
tag: string;
|
|
19
|
-
siteId: string;
|
|
20
|
-
product?: string;
|
|
21
|
-
shopper?: string;
|
|
22
|
-
categories?: string[];
|
|
23
|
-
brands?: string[];
|
|
24
|
-
cart?: string[];
|
|
25
|
-
lastViewed?: string[];
|
|
26
|
-
test?: boolean;
|
|
27
|
-
branch?: string;
|
|
28
|
-
};
|
|
29
18
|
export declare class RecommendationController extends AbstractController {
|
|
30
19
|
type: ControllerTypes;
|
|
31
20
|
store: RecommendationStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,EAAE,WAAW,CAAC;YAAC,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC7E,CAKC;gBAGD,MAAM,EAAE,8BAA8B,EACtC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA8B3B,KAAK,EAAE,0BAA0B,CAiM5B;IAEL,IAAI,MAAM,IAAI,6BAA6B,CA2B1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAuH9B;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,aAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,eAAe,CAAwC;gBAG9D,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAgK3B,KAAK,EAAE,kBAAkB,CA8CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoM9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,GAAG,SAAS,CAgCvG"}
|
|
@@ -4,7 +4,6 @@ import { AbstractController } from '../Abstract/AbstractController';
|
|
|
4
4
|
import { StorageStore, StorageType, ErrorType } from '@searchspring/snap-store-mobx';
|
|
5
5
|
import { getSearchParams } from '../utils/getParams';
|
|
6
6
|
import { ControllerTypes } from '../types';
|
|
7
|
-
const API_LIMIT = 500;
|
|
8
7
|
const defaultConfig = {
|
|
9
8
|
id: 'search',
|
|
10
9
|
globals: {},
|
|
@@ -98,10 +97,9 @@ export class SearchController extends AbstractController {
|
|
|
98
97
|
return;
|
|
99
98
|
}
|
|
100
99
|
const searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
101
|
-
let meta;
|
|
102
|
-
let response;
|
|
103
|
-
// infinite functionality
|
|
104
|
-
// if params.page > 1 and infinite setting exists we should append results
|
|
100
|
+
let meta = {};
|
|
101
|
+
let response = {};
|
|
102
|
+
// infinite scroll functionality (after page 1)
|
|
105
103
|
if (this.config.settings?.infinite && params.pagination?.page && params.pagination.page > 1) {
|
|
106
104
|
const preventBackfill = this.config.settings.infinite?.backfill && !this.store.results.length && params.pagination.page > this.config.settings.infinite.backfill;
|
|
107
105
|
const dontBackfill = !this.config.settings.infinite?.backfill && !this.store.results.length;
|
|
@@ -111,75 +109,45 @@ export class SearchController extends AbstractController {
|
|
|
111
109
|
this.urlManager.set('page', 1).go();
|
|
112
110
|
return;
|
|
113
111
|
}
|
|
114
|
-
|
|
115
|
-
let pageSize = params.pagination?.pageSize || this.store.pagination.pageSize || this.store.pagination.defaultPageSize;
|
|
116
|
-
// if no results fetch results...
|
|
112
|
+
// infinite backfill is enabled AND we have not yet fetched any results
|
|
117
113
|
if (this.config.settings?.infinite.backfill && !this.previousResults.length) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
pageSize = pageSize > API_LIMIT ? API_LIMIT : pageSize;
|
|
125
|
-
const pagesNeeded = params.pagination?.page && params.pagination?.page > this.config.settings?.infinite.backfill
|
|
126
|
-
? this.config.settings?.infinite.backfill
|
|
127
|
-
: params.pagination?.page;
|
|
128
|
-
// figure out how many pages of results to backfill and wait on all responses
|
|
129
|
-
const { size: backFillPageSize, pages: backFillPages } = backFillSize(pagesNeeded, pageSize);
|
|
130
|
-
for (let i = 1; i <= backFillPages; i++) {
|
|
131
|
-
const backfillParams = deepmerge({ ...params }, { pagination: { pageSize: backFillPageSize, page: i } });
|
|
132
|
-
backfills.push(this.client.search(backfillParams));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
// infinite backfill results
|
|
136
|
-
if (backfills && backfills.length) {
|
|
137
|
-
// array to hold all results from backfill responses
|
|
138
|
-
const backfillResults = [];
|
|
139
|
-
const backfillResponses = await Promise.all(backfills);
|
|
140
|
-
backfillResponses.map(([metaBackfill, responseBackfill]) => {
|
|
141
|
-
if (!meta) {
|
|
142
|
-
meta = metaBackfill;
|
|
143
|
-
}
|
|
144
|
-
if (!response) {
|
|
145
|
-
response = responseBackfill;
|
|
146
|
-
}
|
|
147
|
-
// push results to array
|
|
148
|
-
if (responseBackfill.results) {
|
|
149
|
-
backfillResults.push(...responseBackfill.results);
|
|
150
|
-
}
|
|
114
|
+
// create requests for all missing pages (using Arrray(page).fill() to populate an array to map)
|
|
115
|
+
const backfillRequests = Array(params.pagination.page)
|
|
116
|
+
.fill('backfill')
|
|
117
|
+
.map((v, i) => {
|
|
118
|
+
const backfillParams = deepmerge({ ...params }, { pagination: { page: i + 1 } });
|
|
119
|
+
return this.client.search(backfillParams);
|
|
151
120
|
});
|
|
121
|
+
const backfillResponses = await Promise.all(backfillRequests);
|
|
122
|
+
// backfillResponses are [meta, searchResponse][]
|
|
123
|
+
// set the meta and response to the first page of backfillResponses
|
|
124
|
+
meta = backfillResponses[0][0];
|
|
125
|
+
response = backfillResponses[0][1];
|
|
126
|
+
// accumulate results from all backfill responses
|
|
127
|
+
const backfillResults = backfillResponses.reduce((results, response) => {
|
|
128
|
+
// response is [meta, searchResponse]
|
|
129
|
+
return results.concat(...response[1].results);
|
|
130
|
+
}, []);
|
|
152
131
|
// overwrite pagination params to expected state
|
|
153
|
-
response.pagination.pageSize = pageSize;
|
|
154
132
|
response.pagination.totalPages = Math.ceil(response.pagination.totalResults / response.pagination.pageSize);
|
|
155
133
|
response.pagination.page = params.pagination?.page;
|
|
156
134
|
// set the response results with results from backfill responses
|
|
157
135
|
response.results = backfillResults;
|
|
158
|
-
if (!response.meta) {
|
|
159
|
-
// @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
160
|
-
response.meta = meta;
|
|
161
|
-
}
|
|
162
136
|
}
|
|
163
137
|
else {
|
|
164
138
|
// infinite with no backfills.
|
|
165
139
|
[meta, response] = await this.client.search(params);
|
|
166
|
-
//
|
|
167
|
-
if (!response.meta) {
|
|
168
|
-
// @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
169
|
-
response.meta = meta;
|
|
170
|
-
}
|
|
171
|
-
//append new results to previous results
|
|
140
|
+
// append new results to previous results
|
|
172
141
|
response.results = [...this.previousResults, ...(response.results || [])];
|
|
173
142
|
}
|
|
174
143
|
}
|
|
175
144
|
else {
|
|
176
|
-
//standard
|
|
145
|
+
// standard request (not using infinite scroll)
|
|
177
146
|
[meta, response] = await this.client.search(params);
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
147
|
+
}
|
|
148
|
+
// MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
149
|
+
if (!response.meta) {
|
|
150
|
+
response.meta = meta;
|
|
183
151
|
}
|
|
184
152
|
searchProfile.stop();
|
|
185
153
|
this.log.profile(searchProfile);
|
|
@@ -486,10 +454,3 @@ export function generateHrefSelector(element, href, levels = 7) {
|
|
|
486
454
|
}
|
|
487
455
|
return;
|
|
488
456
|
}
|
|
489
|
-
function backFillSize(pages, pageSize) {
|
|
490
|
-
const totalResults = pages * pageSize;
|
|
491
|
-
let numPages = Math.ceil(totalResults / API_LIMIT);
|
|
492
|
-
while (totalResults % numPages)
|
|
493
|
-
numPages++;
|
|
494
|
-
return { size: totalResults / numPages, pages: numPages };
|
|
495
|
-
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@searchspring/snap-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.51.1",
|
|
4
4
|
"description": "Snap Controllers",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -20,22 +20,22 @@
|
|
|
20
20
|
"test:watch": "jest --watch"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@searchspring/snap-toolbox": "^0.
|
|
23
|
+
"@searchspring/snap-toolbox": "^0.51.1",
|
|
24
24
|
"css.escape": "1.5.1",
|
|
25
25
|
"deepmerge": "4.3.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@searchspring/snap-client": "^0.
|
|
29
|
-
"@searchspring/snap-event-manager": "^0.
|
|
30
|
-
"@searchspring/snap-logger": "^0.
|
|
31
|
-
"@searchspring/snap-profiler": "^0.
|
|
32
|
-
"@searchspring/snap-store-mobx": "^0.
|
|
33
|
-
"@searchspring/snap-tracker": "^0.
|
|
34
|
-
"@searchspring/snap-url-manager": "^0.
|
|
28
|
+
"@searchspring/snap-client": "^0.51.1",
|
|
29
|
+
"@searchspring/snap-event-manager": "^0.51.1",
|
|
30
|
+
"@searchspring/snap-logger": "^0.51.1",
|
|
31
|
+
"@searchspring/snap-profiler": "^0.51.1",
|
|
32
|
+
"@searchspring/snap-store-mobx": "^0.51.1",
|
|
33
|
+
"@searchspring/snap-tracker": "^0.51.1",
|
|
34
|
+
"@searchspring/snap-url-manager": "^0.51.1"
|
|
35
35
|
},
|
|
36
36
|
"sideEffects": false,
|
|
37
37
|
"files": [
|
|
38
38
|
"dist/**/*"
|
|
39
39
|
],
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "b29a0939e6d456f90402b24aa6555ec243003a3a"
|
|
41
41
|
}
|