fast-simon-sdk 1.6.8 → 1.6.9
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/lib/config.d.ts +25 -25
- package/lib/config.js +30 -30
- package/lib/index.d.ts +3 -3
- package/lib/index.js +72 -72
- package/lib/index.js.map +1 -1
- package/lib/models/autocomplete.d.ts +73 -73
- package/lib/models/autocomplete.js +2 -2
- package/lib/models/common.d.ts +267 -267
- package/lib/models/common.js +65 -65
- package/lib/models/common.js.map +1 -1
- package/lib/models/content.d.ts +37 -37
- package/lib/models/content.js +2 -2
- package/lib/models/events.d.ts +113 -113
- package/lib/models/events.js +2 -2
- package/lib/models/exports.d.ts +6 -6
- package/lib/models/exports.js +5 -5
- package/lib/models/fullTextSearch.d.ts +130 -130
- package/lib/models/fullTextSearch.js +17 -17
- package/lib/models/fullTextSearch.js.map +1 -1
- package/lib/models/lookAlikeProductRecommendation.d.ts +8 -8
- package/lib/models/lookAlikeProductRecommendation.js +2 -2
- package/lib/models/productsInventory.d.ts +10 -10
- package/lib/models/productsInventory.js +2 -2
- package/lib/models/related.d.ts +35 -35
- package/lib/models/related.js +2 -2
- package/lib/models/smartCollections.d.ts +94 -94
- package/lib/models/smartCollections.js +2 -2
- package/lib/models/visualDiscovery.d.ts +129 -129
- package/lib/models/visualDiscovery.js +30 -30
- package/lib/models/visualDiscovery.js.map +1 -1
- package/lib/sections/contentSearch/index.d.ts +7 -7
- package/lib/sections/contentSearch/index.js +44 -44
- package/lib/sections/contentSearch/index.js.map +1 -1
- package/lib/sections/enums/index.d.ts +47 -47
- package/lib/sections/enums/index.js +50 -50
- package/lib/sections/eventReporter/index.d.ts +10 -10
- package/lib/sections/eventReporter/index.js +628 -628
- package/lib/sections/eventReporter/index.js.map +1 -1
- package/lib/sections/eventReporter/utils.d.ts +9 -9
- package/lib/sections/eventReporter/utils.js +31 -31
- package/lib/sections/eventReporter/utils.js.map +1 -1
- package/lib/sections/fullTextSearch/index.d.ts +6 -6
- package/lib/sections/fullTextSearch/index.js +178 -178
- package/lib/sections/fullTextSearch/index.js.map +1 -1
- package/lib/sections/fullTextSearch/utils.d.ts +17 -17
- package/lib/sections/fullTextSearch/utils.js +185 -181
- package/lib/sections/fullTextSearch/utils.js.map +1 -1
- package/lib/sections/index.d.ts +3 -3
- package/lib/sections/index.js +432 -434
- package/lib/sections/index.js.map +1 -1
- package/lib/sections/initialization/index.d.ts +8 -8
- package/lib/sections/initialization/index.js +150 -150
- package/lib/sections/initialization/index.js.map +1 -1
- package/lib/sections/initialization/utils.d.ts +11 -11
- package/lib/sections/initialization/utils.js +200 -200
- package/lib/sections/initialization/utils.js.map +1 -1
- package/lib/sections/instantSearch/index.d.ts +6 -6
- package/lib/sections/instantSearch/index.js +66 -66
- package/lib/sections/instantSearch/index.js.map +1 -1
- package/lib/sections/instantSearch/utils.d.ts +21 -21
- package/lib/sections/instantSearch/utils.js +232 -232
- package/lib/sections/instantSearch/utils.js.map +1 -1
- package/lib/sections/landingPage/index.d.ts +6 -6
- package/lib/sections/landingPage/index.js +95 -95
- package/lib/sections/landingPage/index.js.map +1 -1
- package/lib/sections/landingPage/utils.d.ts +14 -14
- package/lib/sections/landingPage/utils.js +96 -96
- package/lib/sections/landingPage/utils.js.map +1 -1
- package/lib/sections/lookAlikeProductRecommendation/index.d.ts +6 -6
- package/lib/sections/lookAlikeProductRecommendation/index.js +23 -23
- package/lib/sections/recommendations/index.d.ts +10 -10
- package/lib/sections/recommendations/index.js +95 -95
- package/lib/sections/recommendations/index.js.map +1 -1
- package/lib/sections/recommendations/utils.d.ts +6 -6
- package/lib/sections/recommendations/utils.js +82 -82
- package/lib/sections/recommendations/utils.js.map +1 -1
- package/lib/sections/smartCollections/index.d.ts +6 -6
- package/lib/sections/smartCollections/index.js +169 -169
- package/lib/sections/smartCollections/index.js.map +1 -1
- package/lib/sections/smartCollections/utils.d.ts +41 -41
- package/lib/sections/smartCollections/utils.js +286 -281
- package/lib/sections/smartCollections/utils.js.map +1 -1
- package/lib/sections/visualDiscovery/index.d.ts +22 -22
- package/lib/sections/visualDiscovery/index.js +261 -265
- package/lib/sections/visualDiscovery/index.js.map +1 -1
- package/lib/services/autocomplete.d.ts +24 -24
- package/lib/services/autocomplete.js +50 -50
- package/lib/services/common.d.ts +35 -35
- package/lib/services/common.js +94 -94
- package/lib/services/content.d.ts +4 -4
- package/lib/services/content.js +25 -25
- package/lib/services/fullTextSearch.d.ts +4 -4
- package/lib/services/fullTextSearch.js +87 -87
- package/lib/services/fullTextSearch.js.map +1 -1
- package/lib/services/landingPage.d.ts +21 -21
- package/lib/services/landingPage.js +44 -44
- package/lib/services/lookAlikeProductRecommendation.d.ts +13 -13
- package/lib/services/lookAlikeProductRecommendation.js +23 -23
- package/lib/services/related.d.ts +48 -48
- package/lib/services/related.js +114 -114
- package/lib/services/related.js.map +1 -1
- package/lib/services/reporting.d.ts +80 -80
- package/lib/services/reporting.js +258 -258
- package/lib/services/reporting.js.map +1 -1
- package/lib/services/smartCollections.d.ts +5 -5
- package/lib/services/smartCollections.js +93 -93
- package/lib/services/smartCollections.js.map +1 -1
- package/lib/services/utils.d.ts +5 -5
- package/lib/services/utils.js +25 -25
- package/lib/services/utils.js.map +1 -1
- package/lib/services/visualDiscovery.d.ts +9 -9
- package/lib/services/visualDiscovery.js +166 -170
- package/lib/services/visualDiscovery.js.map +1 -1
- package/lib/utils/ABTesting.d.ts +2 -2
- package/lib/utils/ABTesting.js +27 -28
- package/lib/utils/ABTesting.js.map +1 -1
- package/lib/utils/API.d.ts +19 -19
- package/lib/utils/API.js +81 -81
- package/lib/utils/API.js.map +1 -1
- package/lib/utils/ArrayUtils.d.ts +2 -2
- package/lib/utils/ArrayUtils.js +16 -17
- package/lib/utils/ArrayUtils.js.map +1 -1
- package/lib/utils/bindingBoxes.d.ts +23 -23
- package/lib/utils/bindingBoxes.js +88 -89
- package/lib/utils/bindingBoxes.js.map +1 -1
- package/lib/utils/cookies.d.ts +13 -13
- package/lib/utils/cookies.js +50 -50
- package/lib/utils/debug.d.ts +4 -4
- package/lib/utils/debug.js +31 -31
- package/lib/utils/debug.js.map +1 -1
- package/lib/utils/duplicationsHandler.d.ts +19 -0
- package/lib/utils/duplicationsHandler.js +70 -0
- package/lib/utils/duplicationsHandler.js.map +1 -0
- package/lib/utils/filtersPersonalization.d.ts +3 -3
- package/lib/utils/filtersPersonalization.js +39 -39
- package/lib/utils/filtersPersonalization.js.map +1 -1
- package/lib/utils/image.d.ts +6 -6
- package/lib/utils/image.js +153 -153
- package/lib/utils/image.js.map +1 -1
- package/lib/utils/klaviyo.js +1 -1
- package/lib/utils/location.d.ts +1 -1
- package/lib/utils/location.js +11 -11
- package/lib/utils/location.js.map +1 -1
- package/lib/utils/mappingUtil.d.ts +4 -4
- package/lib/utils/mappingUtil.js +16 -16
- package/lib/utils/options.d.ts +23 -23
- package/lib/utils/options.js +16 -16
- package/lib/utils/personalization.d.ts +2 -2
- package/lib/utils/personalization.js +20 -20
- package/lib/utils/personalization.js.map +1 -1
- package/lib/utils/segments.d.ts +2 -2
- package/lib/utils/segments.js +19 -20
- package/lib/utils/segments.js.map +1 -1
- package/lib/utils/shopifyMarkets.d.ts +3 -3
- package/lib/utils/shopifyMarkets.js +12 -12
- package/lib/utils/sortUtil.d.ts +1 -1
- package/lib/utils/sortUtil.js +24 -24
- package/lib/utils/sortUtil.js.map +1 -1
- package/lib/utils/updateRecentSearches.d.ts +2 -2
- package/lib/utils/updateRecentSearches.js +56 -57
- package/lib/utils/updateRecentSearches.js.map +1 -1
- package/lib/utils/validation.d.ts +5 -5
- package/lib/utils/validation.js +46 -46
- package/lib/utils/validation.js.map +1 -1
- package/package.json +3 -2
package/lib/utils/debug.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.clearDebugSDK = exports.debugSDK = exports.isDebugCaching = exports.getDebugEndpoint = void 0;
|
|
4
|
-
var config_1 = require("../config");
|
|
5
|
-
var getDebugEndpoint = function () {
|
|
6
|
-
return localStorage.getItem(config_1.SDK_DEBUG_LS_LEY) || "";
|
|
7
|
-
};
|
|
8
|
-
exports.getDebugEndpoint = getDebugEndpoint;
|
|
9
|
-
var isDebugCaching = function () {
|
|
10
|
-
return Boolean(localStorage.getItem(config_1.SDK_NO_CACHING_LS_KEY));
|
|
11
|
-
};
|
|
12
|
-
exports.isDebugCaching = isDebugCaching;
|
|
13
|
-
var debugSDK = function (endpoint, disableCaching) {
|
|
14
|
-
if (endpoint) {
|
|
15
|
-
localStorage.setItem(config_1.SDK_DEBUG_LS_LEY, endpoint);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
localStorage.removeItem(config_1.SDK_DEBUG_LS_LEY);
|
|
19
|
-
}
|
|
20
|
-
if (disableCaching) {
|
|
21
|
-
localStorage.setItem(config_1.SDK_NO_CACHING_LS_KEY, "true");
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
localStorage.removeItem(config_1.SDK_NO_CACHING_LS_KEY);
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
exports.debugSDK = debugSDK;
|
|
28
|
-
var clearDebugSDK = function () {
|
|
29
|
-
(0, exports.debugSDK)("", false);
|
|
30
|
-
};
|
|
31
|
-
exports.clearDebugSDK = clearDebugSDK;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearDebugSDK = exports.debugSDK = exports.isDebugCaching = exports.getDebugEndpoint = void 0;
|
|
4
|
+
var config_1 = require("../config");
|
|
5
|
+
var getDebugEndpoint = function () {
|
|
6
|
+
return localStorage.getItem(config_1.SDK_DEBUG_LS_LEY) || "";
|
|
7
|
+
};
|
|
8
|
+
exports.getDebugEndpoint = getDebugEndpoint;
|
|
9
|
+
var isDebugCaching = function () {
|
|
10
|
+
return Boolean(localStorage.getItem(config_1.SDK_NO_CACHING_LS_KEY));
|
|
11
|
+
};
|
|
12
|
+
exports.isDebugCaching = isDebugCaching;
|
|
13
|
+
var debugSDK = function (endpoint, disableCaching) {
|
|
14
|
+
if (endpoint) {
|
|
15
|
+
localStorage.setItem(config_1.SDK_DEBUG_LS_LEY, endpoint);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
localStorage.removeItem(config_1.SDK_DEBUG_LS_LEY);
|
|
19
|
+
}
|
|
20
|
+
if (disableCaching) {
|
|
21
|
+
localStorage.setItem(config_1.SDK_NO_CACHING_LS_KEY, "true");
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
localStorage.removeItem(config_1.SDK_NO_CACHING_LS_KEY);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.debugSDK = debugSDK;
|
|
28
|
+
var clearDebugSDK = function () {
|
|
29
|
+
(0, exports.debugSDK)("", false);
|
|
30
|
+
};
|
|
31
|
+
exports.clearDebugSDK = clearDebugSDK;
|
|
32
32
|
//# sourceMappingURL=debug.js.map
|
package/lib/utils/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":";;;AAAA,oCAAkE;AAE3D,IAAM,gBAAgB,GAAG;IAC5B,OAAO,YAAY,CAAC,OAAO,CAAC,yBAAgB,CAAC,IAAI,EAAE,CAAC;AACxD,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B;AAEK,IAAM,cAAc,GAAG;IAC1B,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,8BAAqB,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEK,IAAM,QAAQ,GAAG,UAAC,QAAgB,EAAE,cAAwB;IAC/D,IAAI,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":";;;AAAA,oCAAkE;AAE3D,IAAM,gBAAgB,GAAG;IAC5B,OAAO,YAAY,CAAC,OAAO,CAAC,yBAAgB,CAAC,IAAI,EAAE,CAAC;AACxD,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B;AAEK,IAAM,cAAc,GAAG;IAC1B,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,8BAAqB,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEK,IAAM,QAAQ,GAAG,UAAC,QAAgB,EAAE,cAAwB;IAC/D,IAAI,QAAQ,EAAE,CAAC;QACX,YAAY,CAAC,OAAO,CAAC,yBAAgB,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,YAAY,CAAC,UAAU,CAAC,yBAAgB,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACjB,YAAY,CAAC,OAAO,CAAC,8BAAqB,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACJ,YAAY,CAAC,UAAU,CAAC,8BAAqB,CAAC,CAAC;IACnD,CAAC;AACL,CAAC,CAAC;AAZW,QAAA,QAAQ,YAYnB;AAEK,IAAM,aAAa,GAAG;IACzB,IAAA,gBAAQ,EAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { smartCollectionsResults } from "../models/smartCollections";
|
|
2
|
+
import { Product } from "../models/fullTextSearch";
|
|
3
|
+
import { FullTextResults } from "../models/common";
|
|
4
|
+
/**
|
|
5
|
+
* duplicationsHandler provides a method to filter out duplicate products across pages
|
|
6
|
+
* within the same query session. A session is uniquely identified by a composite key
|
|
7
|
+
* built from the query (or categoryID), sortBy, and narrow parameters.
|
|
8
|
+
*/
|
|
9
|
+
export declare const duplicationsHandler: {
|
|
10
|
+
/**
|
|
11
|
+
* Filter the list of products to remove duplicates across paginated responses.
|
|
12
|
+
* It uses a global history dictionary (stored on window) to track product IDs seen
|
|
13
|
+
* in each session and on each page.
|
|
14
|
+
*
|
|
15
|
+
* @param {FullTextResults | smartCollectionsResults} result - The result object containing the products.
|
|
16
|
+
* @returns {Product[] | undefined} - The filtered list of products, or undefined if no products are provided.
|
|
17
|
+
*/
|
|
18
|
+
getFilteredProducts(result: FullTextResults | smartCollectionsResults): Product[] | undefined;
|
|
19
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.duplicationsHandler = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* duplicationsHandler provides a method to filter out duplicate products across pages
|
|
6
|
+
* within the same query session. A session is uniquely identified by a composite key
|
|
7
|
+
* built from the query (or categoryID), sortBy, and narrow parameters.
|
|
8
|
+
*/
|
|
9
|
+
exports.duplicationsHandler = {
|
|
10
|
+
/**
|
|
11
|
+
* Filter the list of products to remove duplicates across paginated responses.
|
|
12
|
+
* It uses a global history dictionary (stored on window) to track product IDs seen
|
|
13
|
+
* in each session and on each page.
|
|
14
|
+
*
|
|
15
|
+
* @param {FullTextResults | smartCollectionsResults} result - The result object containing the products.
|
|
16
|
+
* @returns {Product[] | undefined} - The filtered list of products, or undefined if no products are provided.
|
|
17
|
+
*/
|
|
18
|
+
getFilteredProducts: function (result) {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
try {
|
|
21
|
+
// If the result does not contain any products, return undefined.
|
|
22
|
+
if ((result === null || result === void 0 ? void 0 : result.products) === undefined) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
// Retrieve the global history dictionary from the window object,
|
|
26
|
+
// or initialize an empty object if it doesn't exist.
|
|
27
|
+
var historyDict_1 = window.fastSimonSDKHistoryDict || {};
|
|
28
|
+
var newProductsResponse = result.products;
|
|
29
|
+
// Construct a composite key for the current session using the query (or categoryID),
|
|
30
|
+
// sortBy, and narrow parameters. This key is used to isolate the deduplication state
|
|
31
|
+
// for a specific query context.
|
|
32
|
+
var historyProductsKey_1 = "".concat((result === null || result === void 0 ? void 0 : result.query) || (result === null || result === void 0 ? void 0 : result.categoryID), "_").concat(result === null || result === void 0 ? void 0 : result.sortBy, "_").concat((result === null || result === void 0 ? void 0 : result.narrow) || '');
|
|
33
|
+
// If no history exists for this session key, we treat it as a new session.
|
|
34
|
+
// For a new session, we reset the entire historyDict.
|
|
35
|
+
if (!historyDict_1[historyProductsKey_1]) {
|
|
36
|
+
historyDict_1 = {};
|
|
37
|
+
historyDict_1[historyProductsKey_1] = {};
|
|
38
|
+
}
|
|
39
|
+
// Determine the page number from the result, defaulting to 1 if not specified.
|
|
40
|
+
var page_1 = result.page || 1;
|
|
41
|
+
// If this page has already been fetched previously, remove the existing history
|
|
42
|
+
// for that page to ensure that the current response is processed fresh.
|
|
43
|
+
if ((_a = historyDict_1[historyProductsKey_1]) === null || _a === void 0 ? void 0 : _a[page_1]) {
|
|
44
|
+
delete historyDict_1[historyProductsKey_1][page_1];
|
|
45
|
+
}
|
|
46
|
+
// Initialize history for the current page as an empty object.
|
|
47
|
+
historyDict_1[historyProductsKey_1][page_1] = {};
|
|
48
|
+
var previousPageProductsDict_1 = ((_b = historyDict_1[historyProductsKey_1]) === null || _b === void 0 ? void 0 : _b[page_1 - 1]) ? historyDict_1[historyProductsKey_1][page_1 - 1] : {};
|
|
49
|
+
var filteredProductsResponse_1 = [];
|
|
50
|
+
newProductsResponse.forEach(function (product) {
|
|
51
|
+
// Check if the product is marked as 'promotile' (i.e., should always be displayed)
|
|
52
|
+
// or if the product has not been seen in any page for the current session.
|
|
53
|
+
if ((product === null || product === void 0 ? void 0 : product.promotile) || !(previousPageProductsDict_1 === null || previousPageProductsDict_1 === void 0 ? void 0 : previousPageProductsDict_1[product.id])) {
|
|
54
|
+
// Record the product ID as seen on the current page and add the product to the filtered list.
|
|
55
|
+
historyDict_1[historyProductsKey_1][page_1][product.id] = true;
|
|
56
|
+
filteredProductsResponse_1.push(product);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
window.fastSimonSDKHistoryDict = historyDict_1;
|
|
60
|
+
if (filteredProductsResponse_1.length !== newProductsResponse.length) {
|
|
61
|
+
console.warn('Some products were filtered out due to duplications');
|
|
62
|
+
}
|
|
63
|
+
return (filteredProductsResponse_1 === null || filteredProductsResponse_1 === void 0 ? void 0 : filteredProductsResponse_1.length) ? filteredProductsResponse_1 : newProductsResponse;
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
return result === null || result === void 0 ? void 0 : result.products;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=duplicationsHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicationsHandler.js","sourceRoot":"","sources":["../../src/utils/duplicationsHandler.ts"],"names":[],"mappings":";;;AAIA;;;;GAIG;AAEU,QAAA,mBAAmB,GAAG;IAC/B;;;;;;;OAOG;IACH,mBAAmB,YAAC,MAAiD;;QACjE,IAAI,CAAC;YACD,iEAAiE;YACjE,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,MAAK,SAAS,EAAE,CAAC;gBACjC,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,iEAAiE;YACjE,qDAAqD;YACrD,IAAI,aAAW,GAAI,MAAc,CAAC,uBAAuB,IAAI,EAAE,CAAC;YAEhE,IAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC;YAE5C,qFAAqF;YACrF,qFAAqF;YACrF,gCAAgC;YAChC,IAAM,oBAAkB,GAAG,UAAG,CAAC,MAA0B,aAA1B,MAAM,uBAAN,MAAM,CAAsB,KAAK,MAAK,MAAkC,aAAlC,MAAM,uBAAN,MAAM,CAA8B,UAAU,CAAA,cAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,cAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,EAAE,CAAE,CAAC;YAEhK,2EAA2E;YAC3E,sDAAsD;YACtD,IAAI,CAAC,aAAW,CAAC,oBAAkB,CAAC,EAAE,CAAC;gBACnC,aAAW,GAAG,EAAE,CAAC;gBACjB,aAAW,CAAC,oBAAkB,CAAC,GAAG,EAAE,CAAC;YACzC,CAAC;YAED,+EAA+E;YAC/E,IAAM,MAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAE9B,gFAAgF;YAChF,wEAAwE;YACxE,IAAI,MAAA,aAAW,CAAC,oBAAkB,CAAC,0CAAG,MAAI,CAAC,EAAE,CAAC;gBAC1C,OAAO,aAAW,CAAC,oBAAkB,CAAC,CAAC,MAAI,CAAC,CAAC;YACjD,CAAC;YAED,8DAA8D;YAC9D,aAAW,CAAC,oBAAkB,CAAC,CAAC,MAAI,CAAC,GAAG,EAAE,CAAC;YAE3C,IAAM,0BAAwB,GAAG,CAAA,MAAA,aAAW,CAAC,oBAAkB,CAAC,0CAAG,MAAI,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,aAAW,CAAC,oBAAkB,CAAC,CAAC,MAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE9H,IAAM,0BAAwB,GAAc,EAAE,CAAC;YAC/C,mBAAmB,CAAC,OAAO,CAAC,UAAC,OAA4B;gBACrD,mFAAmF;gBACnF,2EAA2E;gBAC3E,IAAI,CAAC,OAA+B,aAA/B,OAAO,uBAAP,OAAO,CAA0B,SAAS,KAAI,CAAC,CAAA,0BAAwB,aAAxB,0BAAwB,uBAAxB,0BAAwB,CAAG,OAAO,CAAC,EAAE,CAAC,CAAA,EAAE,CAAC;oBACzF,8FAA8F;oBAC9F,aAAW,CAAC,oBAAkB,CAAC,CAAC,MAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;oBACzD,0BAAwB,CAAC,IAAI,CAAC,OAAmB,CAAC,CAAC;gBACvD,CAAC;YACL,CAAC,CAAC,CAAC;YAEF,MAAc,CAAC,uBAAuB,GAAG,aAAW,CAAC;YACtD,IAAI,0BAAwB,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,EAAE,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,CAAA,0BAAwB,aAAxB,0BAAwB,uBAAxB,0BAAwB,CAAE,MAAM,EAAC,CAAC,CAAC,0BAAwB,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC7F,CAAC;QAAC,OAAM,CAAC,EAAE,CAAC;YACR,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC;QAC5B,CAAC;IACL,CAAC;CACJ,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Narrow } from "../models/fullTextSearch";
|
|
2
|
-
export declare const handleFiltersPersonalization: (narrow?: Narrow[], isActive?: boolean) => void;
|
|
3
|
-
export declare const isFiltersPersonalization: (isNarrow: boolean, isActive?: boolean) => true | undefined;
|
|
1
|
+
import { Narrow } from "../models/fullTextSearch";
|
|
2
|
+
export declare const handleFiltersPersonalization: (narrow?: Narrow[], isActive?: boolean) => void;
|
|
3
|
+
export declare const isFiltersPersonalization: (isNarrow: boolean, isActive?: boolean) => true | undefined;
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isFiltersPersonalization = exports.handleFiltersPersonalization = void 0;
|
|
4
|
-
var LS_KEY = 'fast-simon-filters-personalization';
|
|
5
|
-
var LS_KEY_DEBUG = 'fast-simon-filters-personalization-debug';
|
|
6
|
-
var handleFiltersPersonalization = function (narrow, isActive) {
|
|
7
|
-
var _a;
|
|
8
|
-
if (!isActive && !localStorage.getItem(LS_KEY_DEBUG)) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
if (!narrow || narrow.length !== 1) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
var specificNarrow = narrow[0];
|
|
15
|
-
if (((_a = specificNarrow === null || specificNarrow === void 0 ? void 0 : specificNarrow[0]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== 'size') {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
var personalSizeFilter = specificNarrow[1];
|
|
19
|
-
localStorage.setItem(LS_KEY, JSON.stringify({
|
|
20
|
-
time: Date.now(),
|
|
21
|
-
personalSizeFilter: personalSizeFilter
|
|
22
|
-
}));
|
|
23
|
-
};
|
|
24
|
-
exports.handleFiltersPersonalization = handleFiltersPersonalization;
|
|
25
|
-
var isFiltersPersonalization = function (isNarrow, isActive) {
|
|
26
|
-
if (isNarrow || (!isActive && !localStorage.getItem(LS_KEY_DEBUG))) {
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
var personalizedFilterLS = localStorage.getItem(LS_KEY);
|
|
30
|
-
if (!personalizedFilterLS) {
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
var personalSizeFilter = JSON.parse(personalizedFilterLS);
|
|
34
|
-
if (Date.now() - personalSizeFilter.time > 1000 * 60 * 30) {
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
return true;
|
|
38
|
-
};
|
|
39
|
-
exports.isFiltersPersonalization = isFiltersPersonalization;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isFiltersPersonalization = exports.handleFiltersPersonalization = void 0;
|
|
4
|
+
var LS_KEY = 'fast-simon-filters-personalization';
|
|
5
|
+
var LS_KEY_DEBUG = 'fast-simon-filters-personalization-debug';
|
|
6
|
+
var handleFiltersPersonalization = function (narrow, isActive) {
|
|
7
|
+
var _a;
|
|
8
|
+
if (!isActive && !localStorage.getItem(LS_KEY_DEBUG)) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (!narrow || narrow.length !== 1) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
var specificNarrow = narrow[0];
|
|
15
|
+
if (((_a = specificNarrow === null || specificNarrow === void 0 ? void 0 : specificNarrow[0]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== 'size') {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
var personalSizeFilter = specificNarrow[1];
|
|
19
|
+
localStorage.setItem(LS_KEY, JSON.stringify({
|
|
20
|
+
time: Date.now(),
|
|
21
|
+
personalSizeFilter: personalSizeFilter
|
|
22
|
+
}));
|
|
23
|
+
};
|
|
24
|
+
exports.handleFiltersPersonalization = handleFiltersPersonalization;
|
|
25
|
+
var isFiltersPersonalization = function (isNarrow, isActive) {
|
|
26
|
+
if (isNarrow || (!isActive && !localStorage.getItem(LS_KEY_DEBUG))) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
var personalizedFilterLS = localStorage.getItem(LS_KEY);
|
|
30
|
+
if (!personalizedFilterLS) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
var personalSizeFilter = JSON.parse(personalizedFilterLS);
|
|
34
|
+
if (Date.now() - personalSizeFilter.time > 1000 * 60 * 30) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
};
|
|
39
|
+
exports.isFiltersPersonalization = isFiltersPersonalization;
|
|
40
40
|
//# sourceMappingURL=filtersPersonalization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filtersPersonalization.js","sourceRoot":"","sources":["../../src/utils/filtersPersonalization.ts"],"names":[],"mappings":";;;AAEA,IAAM,MAAM,GAAG,oCAAoC,CAAC;AACpD,IAAM,YAAY,GAAG,0CAA0C,CAAC;AAEzD,IAAM,4BAA4B,GAAG,UAAC,MAAiB,EAAE,QAAkB;;IAC9E,IAAG,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"filtersPersonalization.js","sourceRoot":"","sources":["../../src/utils/filtersPersonalization.ts"],"names":[],"mappings":";;;AAEA,IAAM,MAAM,GAAG,oCAAoC,CAAC;AACpD,IAAM,YAAY,GAAG,0CAA0C,CAAC;AAEzD,IAAM,4BAA4B,GAAG,UAAC,MAAiB,EAAE,QAAkB;;IAC9E,IAAG,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAClD,OAAO;IACX,CAAC;IACD,IAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;IACX,CAAC;IACD,IAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACjC,IAAG,CAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG,CAAC,CAAC,0CAAE,WAAW,EAAE,MAAK,MAAM,EAAE,CAAC;QAC/C,OAAO;IACX,CAAC;IACD,IAAI,kBAAkB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAE3C,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;QACxC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;QAChB,kBAAkB,EAAE,kBAAkB;KACzC,CAAC,CAAC,CAAC;AAER,CAAC,CAAA;AAlBY,QAAA,4BAA4B,gCAkBxC;AAGM,IAAM,wBAAwB,GAAG,UAAC,QAAiB,EAAE,QAAkB;IAC1E,IAAG,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAG,CAAC,oBAAoB,EAAE,CAAC;QACvB,OAAO,SAAS,CAAA;IACpB,CAAC;IACD,IAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAE5D,IAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;QACvD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAA;AAfY,QAAA,wBAAwB,4BAepC"}
|
package/lib/utils/image.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
interface ImageFile extends File {
|
|
2
|
-
size: number;
|
|
3
|
-
type: string;
|
|
4
|
-
}
|
|
5
|
-
export declare const compressAndConvertToBase64: (file: ImageFile, targetSizeKB: number) => Promise<string | null>;
|
|
6
|
-
export {};
|
|
1
|
+
interface ImageFile extends File {
|
|
2
|
+
size: number;
|
|
3
|
+
type: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const compressAndConvertToBase64: (file: ImageFile, targetSizeKB: number) => Promise<string | null>;
|
|
6
|
+
export {};
|
package/lib/utils/image.js
CHANGED
|
@@ -1,154 +1,154 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// TypeScript version of the compressImage function and its dependencies
|
|
3
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
13
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
14
|
-
return g =
|
|
15
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
16
|
-
function step(op) {
|
|
17
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
18
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
19
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
20
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
21
|
-
switch (op[0]) {
|
|
22
|
-
case 0: case 1: t = op; break;
|
|
23
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
24
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
25
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
26
|
-
default:
|
|
27
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
28
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
29
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
30
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
31
|
-
if (t[2]) _.ops.pop();
|
|
32
|
-
_.trys.pop(); continue;
|
|
33
|
-
}
|
|
34
|
-
op = body.call(thisArg, _);
|
|
35
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
36
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.compressAndConvertToBase64 = void 0;
|
|
41
|
-
var compressAndConvertToBase64 = function (file, targetSizeKB) { return __awaiter(void 0, void 0, void 0, function () {
|
|
42
|
-
var compressedImageSrc, error_1;
|
|
43
|
-
return __generator(this, function (_a) {
|
|
44
|
-
switch (_a.label) {
|
|
45
|
-
case 0:
|
|
46
|
-
_a.trys.push([0, 2, , 3]);
|
|
47
|
-
return [4 /*yield*/, compressImage(file, targetSizeKB)];
|
|
48
|
-
case 1:
|
|
49
|
-
compressedImageSrc = _a.sent();
|
|
50
|
-
return [2 /*return*/, compressedImageSrc.split(",")[1]]; // Extract Base64
|
|
51
|
-
case 2:
|
|
52
|
-
error_1 = _a.sent();
|
|
53
|
-
console.error("Error compressing image:", error_1);
|
|
54
|
-
alert("Failed to compress the image.");
|
|
55
|
-
return [2 /*return*/, null];
|
|
56
|
-
case 3: return [2 /*return*/];
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}); };
|
|
60
|
-
exports.compressAndConvertToBase64 = compressAndConvertToBase64;
|
|
61
|
-
function compressImage(imageFile, targetFileSizeKB) {
|
|
62
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
63
|
-
var imageSizeKB, dataUrl, low, middle, high, result, file, maxDeviation, maxIterations, img, canvas, context;
|
|
64
|
-
return __generator(this, function (_a) {
|
|
65
|
-
switch (_a.label) {
|
|
66
|
-
case 0:
|
|
67
|
-
imageSizeKB = imageFile.size / 1024;
|
|
68
|
-
return [4 /*yield*/, getImageDataAsUrl(imageFile)];
|
|
69
|
-
case 1:
|
|
70
|
-
dataUrl = _a.sent();
|
|
71
|
-
if (imageSizeKB <= targetFileSizeKB) {
|
|
72
|
-
return [2 /*return*/, dataUrl];
|
|
73
|
-
}
|
|
74
|
-
low = 0.0;
|
|
75
|
-
middle = 0.5;
|
|
76
|
-
high = 1.0;
|
|
77
|
-
result = dataUrl;
|
|
78
|
-
file = imageFile;
|
|
79
|
-
maxDeviation = 50;
|
|
80
|
-
maxIterations = 10;
|
|
81
|
-
_a.label = 2;
|
|
82
|
-
case 2:
|
|
83
|
-
if (!(Math.abs(file.size / 1024 - targetFileSizeKB) > maxDeviation && maxIterations-- > 0)) return [3 /*break*/, 5];
|
|
84
|
-
return [4 /*yield*/, loadImage(dataUrl)];
|
|
85
|
-
case 3:
|
|
86
|
-
img = _a.sent();
|
|
87
|
-
canvas = drawImageInCanvas(img);
|
|
88
|
-
context = canvas.getContext("2d");
|
|
89
|
-
if (!context) {
|
|
90
|
-
throw new Error("Failed to get 2D context from canvas.");
|
|
91
|
-
}
|
|
92
|
-
canvas.width = Math.round(img.width * middle);
|
|
93
|
-
canvas.height = Math.round(img.height * middle);
|
|
94
|
-
context.scale(canvas.width / img.width, canvas.height / img.height);
|
|
95
|
-
context.drawImage(img, 0, 0);
|
|
96
|
-
return [4 /*yield*/, readFileFromUrl(canvas.toDataURL(), "compressed", imageFile.type)];
|
|
97
|
-
case 4:
|
|
98
|
-
file = _a.sent();
|
|
99
|
-
if (file.size / 1024 < targetFileSizeKB - maxDeviation) {
|
|
100
|
-
low = middle;
|
|
101
|
-
}
|
|
102
|
-
else if (file.size / 1024 > targetFileSizeKB) {
|
|
103
|
-
high = middle;
|
|
104
|
-
}
|
|
105
|
-
middle = (low + high) / 2;
|
|
106
|
-
result = canvas.toDataURL();
|
|
107
|
-
return [3 /*break*/, 2];
|
|
108
|
-
case 5: return [2 /*return*/, result];
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
function getImageDataAsUrl(imageFile) {
|
|
114
|
-
return new Promise(function (resolve) {
|
|
115
|
-
var reader = new FileReader();
|
|
116
|
-
reader.onload = function (e) { var _a; return resolve((_a = e.target) === null || _a === void 0 ? void 0 : _a.result); };
|
|
117
|
-
reader.readAsDataURL(imageFile);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
function loadImage(imageSrc) {
|
|
121
|
-
return new Promise(function (resolve) {
|
|
122
|
-
var img = new Image();
|
|
123
|
-
img.onload = function () { return resolve(img); };
|
|
124
|
-
img.src = imageSrc;
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
function drawImageInCanvas(imageElement) {
|
|
128
|
-
var canvas = document.createElement("canvas");
|
|
129
|
-
canvas.width = imageElement.width;
|
|
130
|
-
canvas.height = imageElement.height;
|
|
131
|
-
var ctx = canvas.getContext("2d");
|
|
132
|
-
if (!ctx) {
|
|
133
|
-
throw new Error("Failed to get 2D context from canvas.");
|
|
134
|
-
}
|
|
135
|
-
ctx.drawImage(imageElement, 0, 0, imageElement.width, imageElement.height);
|
|
136
|
-
return canvas;
|
|
137
|
-
}
|
|
138
|
-
function readFileFromUrl(url, filename, mimeType) {
|
|
139
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
140
|
-
var res, arrBuff;
|
|
141
|
-
return __generator(this, function (_a) {
|
|
142
|
-
switch (_a.label) {
|
|
143
|
-
case 0: return [4 /*yield*/, fetch(url)];
|
|
144
|
-
case 1:
|
|
145
|
-
res = _a.sent();
|
|
146
|
-
return [4 /*yield*/, res.arrayBuffer()];
|
|
147
|
-
case 2:
|
|
148
|
-
arrBuff = _a.sent();
|
|
149
|
-
return [2 /*return*/, new File([arrBuff], filename, { type: mimeType })];
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
// TypeScript version of the compressImage function and its dependencies
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
13
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
14
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
15
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
16
|
+
function step(op) {
|
|
17
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
18
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
19
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
20
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
21
|
+
switch (op[0]) {
|
|
22
|
+
case 0: case 1: t = op; break;
|
|
23
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
24
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
25
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
26
|
+
default:
|
|
27
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
28
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
29
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
30
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
31
|
+
if (t[2]) _.ops.pop();
|
|
32
|
+
_.trys.pop(); continue;
|
|
33
|
+
}
|
|
34
|
+
op = body.call(thisArg, _);
|
|
35
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
36
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.compressAndConvertToBase64 = void 0;
|
|
41
|
+
var compressAndConvertToBase64 = function (file, targetSizeKB) { return __awaiter(void 0, void 0, void 0, function () {
|
|
42
|
+
var compressedImageSrc, error_1;
|
|
43
|
+
return __generator(this, function (_a) {
|
|
44
|
+
switch (_a.label) {
|
|
45
|
+
case 0:
|
|
46
|
+
_a.trys.push([0, 2, , 3]);
|
|
47
|
+
return [4 /*yield*/, compressImage(file, targetSizeKB)];
|
|
48
|
+
case 1:
|
|
49
|
+
compressedImageSrc = _a.sent();
|
|
50
|
+
return [2 /*return*/, compressedImageSrc.split(",")[1]]; // Extract Base64
|
|
51
|
+
case 2:
|
|
52
|
+
error_1 = _a.sent();
|
|
53
|
+
console.error("Error compressing image:", error_1);
|
|
54
|
+
alert("Failed to compress the image.");
|
|
55
|
+
return [2 /*return*/, null];
|
|
56
|
+
case 3: return [2 /*return*/];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}); };
|
|
60
|
+
exports.compressAndConvertToBase64 = compressAndConvertToBase64;
|
|
61
|
+
function compressImage(imageFile, targetFileSizeKB) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
63
|
+
var imageSizeKB, dataUrl, low, middle, high, result, file, maxDeviation, maxIterations, img, canvas, context;
|
|
64
|
+
return __generator(this, function (_a) {
|
|
65
|
+
switch (_a.label) {
|
|
66
|
+
case 0:
|
|
67
|
+
imageSizeKB = imageFile.size / 1024;
|
|
68
|
+
return [4 /*yield*/, getImageDataAsUrl(imageFile)];
|
|
69
|
+
case 1:
|
|
70
|
+
dataUrl = _a.sent();
|
|
71
|
+
if (imageSizeKB <= targetFileSizeKB) {
|
|
72
|
+
return [2 /*return*/, dataUrl];
|
|
73
|
+
}
|
|
74
|
+
low = 0.0;
|
|
75
|
+
middle = 0.5;
|
|
76
|
+
high = 1.0;
|
|
77
|
+
result = dataUrl;
|
|
78
|
+
file = imageFile;
|
|
79
|
+
maxDeviation = 50;
|
|
80
|
+
maxIterations = 10;
|
|
81
|
+
_a.label = 2;
|
|
82
|
+
case 2:
|
|
83
|
+
if (!(Math.abs(file.size / 1024 - targetFileSizeKB) > maxDeviation && maxIterations-- > 0)) return [3 /*break*/, 5];
|
|
84
|
+
return [4 /*yield*/, loadImage(dataUrl)];
|
|
85
|
+
case 3:
|
|
86
|
+
img = _a.sent();
|
|
87
|
+
canvas = drawImageInCanvas(img);
|
|
88
|
+
context = canvas.getContext("2d");
|
|
89
|
+
if (!context) {
|
|
90
|
+
throw new Error("Failed to get 2D context from canvas.");
|
|
91
|
+
}
|
|
92
|
+
canvas.width = Math.round(img.width * middle);
|
|
93
|
+
canvas.height = Math.round(img.height * middle);
|
|
94
|
+
context.scale(canvas.width / img.width, canvas.height / img.height);
|
|
95
|
+
context.drawImage(img, 0, 0);
|
|
96
|
+
return [4 /*yield*/, readFileFromUrl(canvas.toDataURL(), "compressed", imageFile.type)];
|
|
97
|
+
case 4:
|
|
98
|
+
file = _a.sent();
|
|
99
|
+
if (file.size / 1024 < targetFileSizeKB - maxDeviation) {
|
|
100
|
+
low = middle;
|
|
101
|
+
}
|
|
102
|
+
else if (file.size / 1024 > targetFileSizeKB) {
|
|
103
|
+
high = middle;
|
|
104
|
+
}
|
|
105
|
+
middle = (low + high) / 2;
|
|
106
|
+
result = canvas.toDataURL();
|
|
107
|
+
return [3 /*break*/, 2];
|
|
108
|
+
case 5: return [2 /*return*/, result];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function getImageDataAsUrl(imageFile) {
|
|
114
|
+
return new Promise(function (resolve) {
|
|
115
|
+
var reader = new FileReader();
|
|
116
|
+
reader.onload = function (e) { var _a; return resolve((_a = e.target) === null || _a === void 0 ? void 0 : _a.result); };
|
|
117
|
+
reader.readAsDataURL(imageFile);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function loadImage(imageSrc) {
|
|
121
|
+
return new Promise(function (resolve) {
|
|
122
|
+
var img = new Image();
|
|
123
|
+
img.onload = function () { return resolve(img); };
|
|
124
|
+
img.src = imageSrc;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
function drawImageInCanvas(imageElement) {
|
|
128
|
+
var canvas = document.createElement("canvas");
|
|
129
|
+
canvas.width = imageElement.width;
|
|
130
|
+
canvas.height = imageElement.height;
|
|
131
|
+
var ctx = canvas.getContext("2d");
|
|
132
|
+
if (!ctx) {
|
|
133
|
+
throw new Error("Failed to get 2D context from canvas.");
|
|
134
|
+
}
|
|
135
|
+
ctx.drawImage(imageElement, 0, 0, imageElement.width, imageElement.height);
|
|
136
|
+
return canvas;
|
|
137
|
+
}
|
|
138
|
+
function readFileFromUrl(url, filename, mimeType) {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
140
|
+
var res, arrBuff;
|
|
141
|
+
return __generator(this, function (_a) {
|
|
142
|
+
switch (_a.label) {
|
|
143
|
+
case 0: return [4 /*yield*/, fetch(url)];
|
|
144
|
+
case 1:
|
|
145
|
+
res = _a.sent();
|
|
146
|
+
return [4 /*yield*/, res.arrayBuffer()];
|
|
147
|
+
case 2:
|
|
148
|
+
arrBuff = _a.sent();
|
|
149
|
+
return [2 /*return*/, new File([arrBuff], filename, { type: mimeType })];
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
154
|
//# sourceMappingURL=image.js.map
|
package/lib/utils/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/utils/image.ts"],"names":[],"mappings":";AAAA,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQjE,IAAM,0BAA0B,GAAG,UAAO,IAAe,EAAE,YAAoB;;;;;;gBAEvD,qBAAM,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,EAAA;;gBAA5D,kBAAkB,GAAG,SAAuC;gBAClE,sBAAO,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,iBAAiB;;;gBAE1D,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,OAAK,CAAC,CAAC;gBACjD,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBACvC,sBAAO,IAAI,EAAC;;;;KAEf,CAAA;AATY,QAAA,0BAA0B,8BAStC;AAED,SAAe,aAAa,CAAC,SAAoB,EAAE,gBAAwB;;;;;;oBACnE,WAAW,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;oBAC1B,qBAAM,iBAAiB,CAAC,SAAS,CAAC,EAAA;;oBAA5C,OAAO,GAAG,SAAkC;oBAElD,IAAI,WAAW,IAAI,gBAAgB,EAAE;
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/utils/image.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/klaviyo.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
//# sourceMappingURL=klaviyo.js.map
|
package/lib/utils/location.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default function getUserLocation(uuid: string): string | null;
|
|
1
|
+
export default function getUserLocation(uuid: string): string | null;
|