@searchspring/snap-controller 0.63.5 → 0.64.0
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.
|
@@ -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,EAAa,MAAM,+BAA+B,CAAC;AAExE,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,EAGtB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,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;
|
|
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,EAAa,MAAM,+BAA+B,CAAC;AAExE,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,EAGtB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,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;IA2J3B,KAAK,EAAE,kBAAkB,CA+CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoN9B;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"}
|
|
@@ -151,16 +151,16 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
151
151
|
var params_1, err_1, stringyParams, prevStringyParams, searchProfile, meta, response, preventBackfill, dontBackfill, backfillRequests, backfillResponses, backfillResults, afterSearchProfile, err_2, afterStoreProfile, err_3, err_4;
|
|
152
152
|
var _a, _b;
|
|
153
153
|
var _this = this;
|
|
154
|
-
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m
|
|
155
|
-
return __generator(this, function (
|
|
156
|
-
switch (
|
|
154
|
+
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
155
|
+
return __generator(this, function (_o) {
|
|
156
|
+
switch (_o.label) {
|
|
157
157
|
case 0:
|
|
158
|
-
|
|
158
|
+
_o.trys.push([0, 22, 23, 24]);
|
|
159
159
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
160
160
|
return [4 /*yield*/, this.init()];
|
|
161
161
|
case 1:
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
_o.sent();
|
|
163
|
+
_o.label = 2;
|
|
164
164
|
case 2:
|
|
165
165
|
params_1 = this.params;
|
|
166
166
|
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)) {
|
|
@@ -168,18 +168,18 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
168
168
|
this.store.history.save(this.params.search.query.string);
|
|
169
169
|
}
|
|
170
170
|
this.store.loading = true;
|
|
171
|
-
|
|
171
|
+
_o.label = 3;
|
|
172
172
|
case 3:
|
|
173
|
-
|
|
173
|
+
_o.trys.push([3, 5, , 6]);
|
|
174
174
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
175
175
|
controller: this,
|
|
176
176
|
request: params_1,
|
|
177
177
|
})];
|
|
178
178
|
case 4:
|
|
179
|
-
|
|
179
|
+
_o.sent();
|
|
180
180
|
return [3 /*break*/, 6];
|
|
181
181
|
case 5:
|
|
182
|
-
err_1 =
|
|
182
|
+
err_1 = _o.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*/];
|
|
@@ -227,7 +227,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
227
227
|
});
|
|
228
228
|
return [4 /*yield*/, Promise.all(backfillRequests)];
|
|
229
229
|
case 7:
|
|
230
|
-
backfillResponses =
|
|
230
|
+
backfillResponses = _o.sent();
|
|
231
231
|
// backfillResponses are [meta, searchResponse][]
|
|
232
232
|
// set the meta and response to the first page of backfillResponses
|
|
233
233
|
meta = backfillResponses[0][0];
|
|
@@ -245,10 +245,10 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
245
245
|
case 8: return [4 /*yield*/, this.client.search(params_1)];
|
|
246
246
|
case 9:
|
|
247
247
|
// infinite with no backfills.
|
|
248
|
-
_a =
|
|
248
|
+
_a = _o.sent(), meta = _a[0], response = _a[1];
|
|
249
249
|
// append new results to previous results
|
|
250
250
|
response.results = __spreadArray(__spreadArray([], this.previousResults, true), (response.results || []), true);
|
|
251
|
-
|
|
251
|
+
_o.label = 10;
|
|
252
252
|
case 10: return [3 /*break*/, 13];
|
|
253
253
|
case 11:
|
|
254
254
|
// normal request for next page
|
|
@@ -256,8 +256,8 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
256
256
|
this.previousResults = [];
|
|
257
257
|
return [4 /*yield*/, this.client.search(params_1)];
|
|
258
258
|
case 12:
|
|
259
|
-
_b =
|
|
260
|
-
|
|
259
|
+
_b = _o.sent(), meta = _b[0], response = _b[1];
|
|
260
|
+
_o.label = 13;
|
|
261
261
|
case 13:
|
|
262
262
|
// MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
263
263
|
if (!response.meta) {
|
|
@@ -266,19 +266,19 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
266
266
|
searchProfile.stop();
|
|
267
267
|
this.log.profile(searchProfile);
|
|
268
268
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params_1 }).start();
|
|
269
|
-
|
|
269
|
+
_o.label = 14;
|
|
270
270
|
case 14:
|
|
271
|
-
|
|
271
|
+
_o.trys.push([14, 16, , 17]);
|
|
272
272
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
273
273
|
controller: this,
|
|
274
274
|
request: params_1,
|
|
275
275
|
response: response,
|
|
276
276
|
})];
|
|
277
277
|
case 15:
|
|
278
|
-
|
|
278
|
+
_o.sent();
|
|
279
279
|
return [3 /*break*/, 17];
|
|
280
280
|
case 16:
|
|
281
|
-
err_2 =
|
|
281
|
+
err_2 = _o.sent();
|
|
282
282
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
283
283
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
284
284
|
afterSearchProfile.stop();
|
|
@@ -292,26 +292,24 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
292
292
|
case 17:
|
|
293
293
|
afterSearchProfile.stop();
|
|
294
294
|
this.log.profile(afterSearchProfile);
|
|
295
|
-
// store previous results for infinite usage
|
|
296
|
-
|
|
297
|
-
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
298
|
-
}
|
|
295
|
+
// store previous results for infinite usage (need to alsways store in case switch to infinite after pagination)
|
|
296
|
+
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
299
297
|
// update the store
|
|
300
298
|
this.store.update(response);
|
|
301
299
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params_1 }).start();
|
|
302
|
-
|
|
300
|
+
_o.label = 18;
|
|
303
301
|
case 18:
|
|
304
|
-
|
|
302
|
+
_o.trys.push([18, 20, , 21]);
|
|
305
303
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
306
304
|
controller: this,
|
|
307
305
|
request: params_1,
|
|
308
306
|
response: response,
|
|
309
307
|
})];
|
|
310
308
|
case 19:
|
|
311
|
-
|
|
309
|
+
_o.sent();
|
|
312
310
|
return [3 /*break*/, 21];
|
|
313
311
|
case 20:
|
|
314
|
-
err_3 =
|
|
312
|
+
err_3 = _o.sent();
|
|
315
313
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
316
314
|
this.log.warn("'afterStore' middleware cancelled");
|
|
317
315
|
afterStoreProfile.stop();
|
|
@@ -327,7 +325,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
327
325
|
this.log.profile(afterStoreProfile);
|
|
328
326
|
return [3 /*break*/, 24];
|
|
329
327
|
case 22:
|
|
330
|
-
err_4 =
|
|
328
|
+
err_4 = _o.sent();
|
|
331
329
|
if (err_4) {
|
|
332
330
|
if (err_4.err && err_4.fetchDetails) {
|
|
333
331
|
switch (err_4.fetchDetails.status) {
|
|
@@ -399,6 +397,8 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
399
397
|
redirectURL = (_b = (_a = search.response) === null || _a === void 0 ? void 0 : _a.merchandising) === null || _b === void 0 ? void 0 : _b.redirect;
|
|
400
398
|
searchStore = search.controller.store;
|
|
401
399
|
if (redirectURL && ((_d = (_c = config === null || config === void 0 ? void 0 : config.settings) === null || _c === void 0 ? void 0 : _c.redirects) === null || _d === void 0 ? void 0 : _d.merchandising) && !((_f = (_e = search === null || search === void 0 ? void 0 : search.response) === null || _e === void 0 ? void 0 : _e.filters) === null || _f === void 0 ? void 0 : _f.length) && !searchStore.loaded) {
|
|
400
|
+
//set loaded to true to prevent infinite search/reloading from happening
|
|
401
|
+
searchStore.loaded = true;
|
|
402
402
|
window.location.replace(redirectURL);
|
|
403
403
|
return [2 /*return*/, false];
|
|
404
404
|
}
|
|
@@ -407,6 +407,8 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
407
407
|
((_m = (_l = search === null || search === void 0 ? void 0 : search.response) === null || _l === void 0 ? void 0 : _l.search) === null || _m === void 0 ? void 0 : _m.query) &&
|
|
408
408
|
((_p = (_o = search === null || search === void 0 ? void 0 : search.response) === null || _o === void 0 ? void 0 : _o.pagination) === null || _p === void 0 ? void 0 : _p.totalResults) === 1 &&
|
|
409
409
|
!(nonBackgroundFilters === null || nonBackgroundFilters === void 0 ? void 0 : nonBackgroundFilters.length)) {
|
|
410
|
+
//set loaded to true to prevent infinite search/reloading from happening
|
|
411
|
+
searchStore.loaded = true;
|
|
410
412
|
window.location.replace(search === null || search === void 0 ? void 0 : search.response.results[0].mappings.core.url);
|
|
411
413
|
return [2 /*return*/, false];
|
|
412
414
|
}
|
|
@@ -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,EAAa,MAAM,+BAA+B,CAAC;AAExE,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,EAGtB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,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;
|
|
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,EAAa,MAAM,+BAA+B,CAAC;AAExE,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,EAGtB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,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;IA2J3B,KAAK,EAAE,kBAAkB,CA+CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoN9B;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"}
|
|
@@ -186,10 +186,8 @@ export class SearchController extends AbstractController {
|
|
|
186
186
|
}
|
|
187
187
|
afterSearchProfile.stop();
|
|
188
188
|
this.log.profile(afterSearchProfile);
|
|
189
|
-
// store previous results for infinite usage
|
|
190
|
-
|
|
191
|
-
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
192
|
-
}
|
|
189
|
+
// store previous results for infinite usage (need to alsways store in case switch to infinite after pagination)
|
|
190
|
+
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
193
191
|
// update the store
|
|
194
192
|
this.store.update(response);
|
|
195
193
|
const afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
@@ -278,6 +276,8 @@ export class SearchController extends AbstractController {
|
|
|
278
276
|
const redirectURL = search.response?.merchandising?.redirect;
|
|
279
277
|
const searchStore = search.controller.store;
|
|
280
278
|
if (redirectURL && config?.settings?.redirects?.merchandising && !search?.response?.filters?.length && !searchStore.loaded) {
|
|
279
|
+
//set loaded to true to prevent infinite search/reloading from happening
|
|
280
|
+
searchStore.loaded = true;
|
|
281
281
|
window.location.replace(redirectURL);
|
|
282
282
|
return false;
|
|
283
283
|
}
|
|
@@ -286,6 +286,8 @@ export class SearchController extends AbstractController {
|
|
|
286
286
|
search?.response?.search?.query &&
|
|
287
287
|
search?.response?.pagination?.totalResults === 1 &&
|
|
288
288
|
!nonBackgroundFilters?.length) {
|
|
289
|
+
//set loaded to true to prevent infinite search/reloading from happening
|
|
290
|
+
searchStore.loaded = true;
|
|
289
291
|
window.location.replace(search?.response.results[0].mappings.core.url);
|
|
290
292
|
return false;
|
|
291
293
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@searchspring/snap-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.64.0",
|
|
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.64.0",
|
|
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.64.0",
|
|
29
|
+
"@searchspring/snap-event-manager": "^0.64.0",
|
|
30
|
+
"@searchspring/snap-logger": "^0.64.0",
|
|
31
|
+
"@searchspring/snap-profiler": "^0.64.0",
|
|
32
|
+
"@searchspring/snap-store-mobx": "^0.64.0",
|
|
33
|
+
"@searchspring/snap-tracker": "^0.64.0",
|
|
34
|
+
"@searchspring/snap-url-manager": "^0.64.0"
|
|
35
35
|
},
|
|
36
36
|
"sideEffects": false,
|
|
37
37
|
"files": [
|
|
38
38
|
"dist/**/*"
|
|
39
39
|
],
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "fc0fb9a2fe535b394a2f0d340a20b2b72ab84bff"
|
|
41
41
|
}
|