@ringcentral-integration/utils 0.14.0 → 0.16.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.
- package/index.js +5 -0
- package/index.js.map +1 -1
- package/package.json +8 -6
- package/src/decorators/index.js +5 -0
- package/src/decorators/index.js.map +1 -1
- package/src/decorators/time.js +37 -35
- package/src/decorators/time.js.map +1 -1
- package/src/index.js +5 -0
- package/src/index.js.map +1 -1
- package/src/typeFunctions/OmitFunctions.js +7 -0
- package/src/typeFunctions/OmitFunctions.js.map +1 -0
- package/src/typeFunctions/PickFunctionKeys.js +7 -0
- package/src/typeFunctions/PickFunctionKeys.js.map +1 -0
- package/src/typeFunctions/PickFunctions.js +7 -0
- package/src/typeFunctions/PickFunctions.js.map +1 -0
- package/src/utils/MultiPartUTF8FormData.js +136 -154
- package/src/utils/MultiPartUTF8FormData.js.map +1 -1
- package/src/utils/base64Handler.js +38 -37
- package/src/utils/base64Handler.js.map +1 -1
- package/src/utils/cleanNumber.js +30 -0
- package/src/utils/cleanNumber.js.map +1 -0
- package/src/utils/createRepeatTrackingManager.js +241 -0
- package/src/utils/createRepeatTrackingManager.js.map +1 -0
- package/src/utils/createWithMemorizeByKey.js +156 -0
- package/src/utils/createWithMemorizeByKey.js.map +1 -0
- package/src/utils/detectDevice.js +38 -0
- package/src/utils/detectDevice.js.map +1 -0
- package/src/utils/downloadFile.js +47 -16
- package/src/utils/downloadFile.js.map +1 -1
- package/src/utils/empty.js +5 -7
- package/src/utils/empty.js.map +1 -1
- package/src/utils/fileHandler/constant.js +16 -5
- package/src/utils/fileHandler/constant.js.map +1 -1
- package/src/utils/fileHandler/fileHandler.js +16 -13
- package/src/utils/fileHandler/fileHandler.js.map +1 -1
- package/src/utils/fileHandler/index.js +5 -0
- package/src/utils/fileHandler/index.js.map +1 -1
- package/src/utils/fileUrlToBase64.js +91 -0
- package/src/utils/fileUrlToBase64.js.map +1 -0
- package/src/utils/format.js +2 -1
- package/src/utils/format.js.map +1 -1
- package/src/utils/getBlobURL.js +49 -0
- package/src/utils/getBlobURL.js.map +1 -0
- package/src/utils/getHostPath.js +31 -0
- package/src/utils/getHostPath.js.map +1 -0
- package/src/utils/getImagePositionColor.js +85 -0
- package/src/utils/getImagePositionColor.js.map +1 -0
- package/src/utils/getOsInfo.js +79 -0
- package/src/utils/getOsInfo.js.map +1 -0
- package/src/utils/getTiffInfo.js +116 -0
- package/src/utils/getTiffInfo.js.map +1 -0
- package/src/utils/getTranslateFn.js +60 -39
- package/src/utils/getTranslateFn.js.map +1 -1
- package/src/utils/index.js +175 -16
- package/src/utils/index.js.map +1 -1
- package/src/utils/invertObj.js +2 -1
- package/src/utils/invertObj.js.map +1 -1
- package/src/utils/isElectron.js +3 -3
- package/src/utils/isElectron.js.map +1 -1
- package/src/utils/isSafari.js +2 -0
- package/src/utils/isSafari.js.map +1 -1
- package/src/utils/loadImage.js +3 -2
- package/src/utils/loadImage.js.map +1 -1
- package/src/utils/maskSensitiveData.js +113 -0
- package/src/utils/maskSensitiveData.js.map +1 -0
- package/src/utils/normalizeUniversalLink.js +19 -0
- package/src/utils/normalizeUniversalLink.js.map +1 -0
- package/src/utils/polling.js +53 -49
- package/src/utils/polling.js.map +1 -1
- package/src/utils/rgbToHex.js +30 -0
- package/src/utils/rgbToHex.js.map +1 -0
- package/src/utils/sleep.js +5 -5
- package/src/utils/sleep.js.map +1 -1
- package/src/utils/sliceExecute.js +82 -0
- package/src/utils/sliceExecute.js.map +1 -0
- package/src/utils/stopEvent.js +4 -6
- package/src/utils/stopEvent.js.map +1 -1
- package/src/utils/stringHandler/index.js +5 -0
- package/src/utils/stringHandler/index.js.map +1 -1
- package/src/utils/stringHandler/isASCII.js +2 -0
- package/src/utils/stringHandler/isASCII.js.map +1 -1
- package/src/utils/toBoolean.js +21 -0
- package/src/utils/toBoolean.js.map +1 -0
- package/src/utils/waitUntil.js +33 -29
- package/src/utils/waitUntil.js.map +1 -1
- package/src/utils/waitUntilTo.js +71 -65
- package/src/utils/waitUntilTo.js.map +1 -1
- package/src/webpackPlugins/NoChunkChecker/NoChunkChecker.js +23 -20
- package/src/webpackPlugins/NoChunkChecker/NoChunkChecker.js.map +1 -1
- package/src/webpackPlugins/NoChunkChecker/index.js +5 -0
- package/src/webpackPlugins/NoChunkChecker/index.js.map +1 -1
- package/src/utils/blobHandler.js +0 -44
- package/src/utils/blobHandler.js.map +0 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.cleanNumber = cleanNumber;
|
|
8
|
+
require("core-js/modules/es.array.join.js");
|
|
9
|
+
require("core-js/modules/es.array.slice.js");
|
|
10
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
11
|
+
require("core-js/modules/es.string.replace.js");
|
|
12
|
+
require("core-js/modules/es.string.split.js");
|
|
13
|
+
// copy from ringcentral-js-widgets/ringcentral-integration/lib/cleanNumber/index.ts
|
|
14
|
+
// for GA usage
|
|
15
|
+
var cleanRegex = /[^\d*+#]/g;
|
|
16
|
+
var plusRegex = /\+/g;
|
|
17
|
+
var extensionDelimiter = /[*#]/g;
|
|
18
|
+
/**
|
|
19
|
+
* Remove any characters except numeric, #, *, and leading +. We only consider
|
|
20
|
+
* first occurrence of * or #. Things after subsequent * or # will be removed.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
function cleanNumber(phoneNumber) {
|
|
24
|
+
var keepPlus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
25
|
+
var cleaned = phoneNumber.replace(cleanRegex, '');
|
|
26
|
+
var hasPlus = cleaned[0] === '+';
|
|
27
|
+
var output = cleaned.replace(plusRegex, '').split(extensionDelimiter).slice(0, 2).join('*');
|
|
28
|
+
return hasPlus && keepPlus ? "+".concat(output) : output;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=cleanNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanNumber.js","names":["cleanRegex","plusRegex","extensionDelimiter","cleanNumber","phoneNumber","keepPlus","arguments","length","undefined","cleaned","replace","hasPlus","output","split","slice","join","concat"],"sources":["src/utils/cleanNumber.ts"],"sourcesContent":["// copy from ringcentral-js-widgets/ringcentral-integration/lib/cleanNumber/index.ts\n// for GA usage\nconst cleanRegex = /[^\\d*+#]/g;\nconst plusRegex = /\\+/g;\nconst extensionDelimiter = /[*#]/g;\n/**\n * Remove any characters except numeric, #, *, and leading +. We only consider\n * first occurrence of * or #. Things after subsequent * or # will be removed.\n */\n\nexport function cleanNumber(phoneNumber: string, keepPlus = true) {\n const cleaned = phoneNumber.replace(cleanRegex, '');\n const hasPlus = cleaned[0] === '+';\n const output = cleaned\n .replace(plusRegex, '')\n .split(extensionDelimiter)\n .slice(0, 2)\n .join('*');\n return hasPlus && keepPlus ? `+${output}` : output;\n}\n"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA,IAAMA,UAAU,GAAG,WAAW;AAC9B,IAAMC,SAAS,GAAG,KAAK;AACvB,IAAMC,kBAAkB,GAAG,OAAO;AAClC;AACA;AACA;AACA;;AAEO,SAASC,WAAWA,CAACC,WAAmB,EAAmB;EAAA,IAAjBC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EAC9D,IAAMG,OAAO,GAAGL,WAAW,CAACM,OAAO,CAACV,UAAU,EAAE,EAAE,CAAC;EACnD,IAAMW,OAAO,GAAGF,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;EAClC,IAAMG,MAAM,GAAGH,OAAO,CACnBC,OAAO,CAACT,SAAS,EAAE,EAAE,CAAC,CACtBY,KAAK,CAACX,kBAAkB,CAAC,CACzBY,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACXC,IAAI,CAAC,GAAG,CAAC;EACZ,OAAOJ,OAAO,IAAIN,QAAQ,OAAAW,MAAA,CAAOJ,MAAM,IAAKA,MAAM;AACpD","ignoreList":[]}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.symbol.js");
|
|
4
|
+
require("core-js/modules/es.symbol.description.js");
|
|
5
|
+
require("core-js/modules/es.symbol.iterator.js");
|
|
6
|
+
require("core-js/modules/es.array.is-array.js");
|
|
7
|
+
require("core-js/modules/es.array.slice.js");
|
|
8
|
+
require("core-js/modules/es.date.to-string.js");
|
|
9
|
+
require("core-js/modules/es.function.name.js");
|
|
10
|
+
require("core-js/modules/es.object.define-property.js");
|
|
11
|
+
require("core-js/modules/es.promise.js");
|
|
12
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
13
|
+
require("core-js/modules/es.regexp.to-string.js");
|
|
14
|
+
require("core-js/modules/es.string.repeat.js");
|
|
15
|
+
Object.defineProperty(exports, "__esModule", {
|
|
16
|
+
value: true
|
|
17
|
+
});
|
|
18
|
+
exports.createRepeatTrackingManager = void 0;
|
|
19
|
+
require("core-js/modules/es.array.filter.js");
|
|
20
|
+
require("core-js/modules/es.array.for-each.js");
|
|
21
|
+
require("core-js/modules/es.array.from.js");
|
|
22
|
+
require("core-js/modules/es.array.iterator.js");
|
|
23
|
+
require("core-js/modules/es.array.map.js");
|
|
24
|
+
require("core-js/modules/es.array.reduce.js");
|
|
25
|
+
require("core-js/modules/es.date.now.js");
|
|
26
|
+
require("core-js/modules/es.date.to-json.js");
|
|
27
|
+
require("core-js/modules/es.map.js");
|
|
28
|
+
require("core-js/modules/es.number.max-safe-integer.js");
|
|
29
|
+
require("core-js/modules/es.object.to-string.js");
|
|
30
|
+
require("core-js/modules/es.set.js");
|
|
31
|
+
require("core-js/modules/es.string.iterator.js");
|
|
32
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
33
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
34
|
+
var _chunk = _interopRequireDefault(require("lodash/chunk"));
|
|
35
|
+
var _rxjs = require("rxjs");
|
|
36
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
37
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
38
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
39
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
40
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
41
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
42
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
43
|
+
/**
|
|
44
|
+
* Creates a manager for repeat tracking of viewable items which linking.
|
|
45
|
+
*
|
|
46
|
+
* When the items be linked, will interval emit to the fromServerListener api that will provide you able to know what items still on the screen
|
|
47
|
+
*
|
|
48
|
+
* and the linked api trigger will have a throttle time to prevent the api be triggered too often
|
|
49
|
+
*
|
|
50
|
+
* @template T - Generic type extending Record<string, string> representing the data structure
|
|
51
|
+
*
|
|
52
|
+
* @param options - Configuration options object
|
|
53
|
+
* @param options.sendToServer - Function to send data to server
|
|
54
|
+
* @param options.ttl - Time-to-live duration in milliseconds for cache entries
|
|
55
|
+
* @param options.groupKey - Key used to group items
|
|
56
|
+
* @param options.itemKey - Key used to identify individual items
|
|
57
|
+
* @param options.maxBatchRequestCount - Maximum number of items per batch request (defaults to Number.MAX_SAFE_INTEGER)
|
|
58
|
+
* @param options.validate - Function to validate data items
|
|
59
|
+
*
|
|
60
|
+
* @returns An object containing methods to manage viewable items:
|
|
61
|
+
* - link: Adds a new item to be tracked
|
|
62
|
+
* - unlink: Removes an item from tracking
|
|
63
|
+
* - setListenerDataFromClient: Updates data for a specific client
|
|
64
|
+
* - fromClientListener: Creates an observable for client-side changes
|
|
65
|
+
* - fromServerListener: Creates an observable for server-side async event to fetch data and return the cache success list
|
|
66
|
+
* - clear: Resets all tracking data
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* const manager = createRepeatTrackingManager({
|
|
70
|
+
* sendToServer: async (data) => { ... },
|
|
71
|
+
* ttl: 30000,
|
|
72
|
+
* groupKey: 'accountId',
|
|
73
|
+
* itemKey: 'extensionId',
|
|
74
|
+
* validate: (data) => true
|
|
75
|
+
* });
|
|
76
|
+
*/
|
|
77
|
+
var createRepeatTrackingManager = exports.createRepeatTrackingManager = function createRepeatTrackingManager(_ref) {
|
|
78
|
+
var sendToServer = _ref.sendToServer,
|
|
79
|
+
ttl = _ref.ttl,
|
|
80
|
+
groupKey = _ref.groupKey,
|
|
81
|
+
itemKey = _ref.itemKey,
|
|
82
|
+
_ref$maxBatchRequestC = _ref.maxBatchRequestCount,
|
|
83
|
+
maxBatchRequestCount = _ref$maxBatchRequestC === void 0 ? Number.MAX_SAFE_INTEGER : _ref$maxBatchRequestC,
|
|
84
|
+
validate = _ref.validate;
|
|
85
|
+
var link$ = new _rxjs.Subject();
|
|
86
|
+
var unlink$ = new _rxjs.Subject();
|
|
87
|
+
var clientsLinkedItemsMap$ = new _rxjs.BehaviorSubject(new Map());
|
|
88
|
+
var isNever = ttl === 'never';
|
|
89
|
+
var cacheMap = new Map();
|
|
90
|
+
var fromClientListener = function fromClientListener() {
|
|
91
|
+
var everLinkedMap$ = link$.pipe((0, _rxjs.buffer)(
|
|
92
|
+
// when got first value, buffer 1s data to fetch all presence in once
|
|
93
|
+
link$.pipe((0, _rxjs.throttleTime)(1000, undefined, {
|
|
94
|
+
leading: false,
|
|
95
|
+
trailing: true
|
|
96
|
+
}))),
|
|
97
|
+
// accumulate all linked presence
|
|
98
|
+
(0, _rxjs.scan)(function (distinctMap, list) {
|
|
99
|
+
// distinct the list by accountId and extensionId
|
|
100
|
+
list.forEach(function (item) {
|
|
101
|
+
var groupValue = item[groupKey];
|
|
102
|
+
var itemValue = item[itemKey];
|
|
103
|
+
if (validate ? validate(item) : true) {
|
|
104
|
+
var _distinctMap$get;
|
|
105
|
+
var set = (_distinctMap$get = distinctMap.get(groupValue)) !== null && _distinctMap$get !== void 0 ? _distinctMap$get : new Set();
|
|
106
|
+
set.add(itemValue);
|
|
107
|
+
distinctMap.set(groupValue, set);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
return distinctMap;
|
|
111
|
+
}, new Map()));
|
|
112
|
+
var unlinkBuffer$ = unlink$.pipe((0, _rxjs.buffer)(unlink$.pipe(
|
|
113
|
+
// 5000ms throttle for more time is fine, can later remove subscribe
|
|
114
|
+
(0, _rxjs.throttleTime)(5000, undefined, {
|
|
115
|
+
leading: false,
|
|
116
|
+
trailing: true
|
|
117
|
+
}))), (0, _rxjs.startWith)(null));
|
|
118
|
+
return (0, _rxjs.combineLatest)([everLinkedMap$, unlinkBuffer$.pipe((0, _rxjs.take)(2),
|
|
119
|
+
// once emit, then restart the buffer, so will only use the buffer data once, then clear
|
|
120
|
+
(0, _rxjs.repeat)())]).pipe((0, _rxjs.map)(function (_ref2) {
|
|
121
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
122
|
+
everLinkedMap = _ref3[0],
|
|
123
|
+
unlinkList = _ref3[1];
|
|
124
|
+
if (unlinkList) {
|
|
125
|
+
unlinkList.forEach(function (item) {
|
|
126
|
+
var groupValue = item[groupKey];
|
|
127
|
+
var itemValue = item[itemKey];
|
|
128
|
+
var set = everLinkedMap.get(groupValue);
|
|
129
|
+
if (set) {
|
|
130
|
+
set["delete"](itemValue);
|
|
131
|
+
if (set.size === 0) {
|
|
132
|
+
everLinkedMap["delete"](groupValue);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return everLinkedMap;
|
|
138
|
+
}),
|
|
139
|
+
// convert to serializable list
|
|
140
|
+
(0, _rxjs.map)(function (distinctMap) {
|
|
141
|
+
var list = Array.from(distinctMap).map(function (_ref4) {
|
|
142
|
+
var _ref5 = _slicedToArray(_ref4, 2),
|
|
143
|
+
groupValue = _ref5[0],
|
|
144
|
+
items = _ref5[1];
|
|
145
|
+
var itemList = Array.from(items);
|
|
146
|
+
return [groupValue, itemList];
|
|
147
|
+
});
|
|
148
|
+
return list;
|
|
149
|
+
}),
|
|
150
|
+
// only emit when the list is changed
|
|
151
|
+
(0, _rxjs.distinctUntilChanged)(function (a, b) {
|
|
152
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
153
|
+
}), (0, _rxjs.switchMap)(function (data) {
|
|
154
|
+
return sendToServer(data);
|
|
155
|
+
}));
|
|
156
|
+
};
|
|
157
|
+
var fromServerListener = function fromServerListener(sendRequest) {
|
|
158
|
+
// the list from clients
|
|
159
|
+
return clientsLinkedItemsMap$.pipe(
|
|
160
|
+
// distinct the list by first key
|
|
161
|
+
(0, _rxjs.map)(function (linkedItems) {
|
|
162
|
+
var distinctMap = new Map();
|
|
163
|
+
linkedItems.forEach(function (child) {
|
|
164
|
+
child.forEach(function (val) {
|
|
165
|
+
var _distinctMap$get2;
|
|
166
|
+
var _val = _slicedToArray(val, 2),
|
|
167
|
+
groupValue = _val[0],
|
|
168
|
+
items = _val[1];
|
|
169
|
+
var set = (_distinctMap$get2 = distinctMap.get(groupValue)) !== null && _distinctMap$get2 !== void 0 ? _distinctMap$get2 : new Set();
|
|
170
|
+
items.forEach(function (id) {
|
|
171
|
+
return set.add(id);
|
|
172
|
+
});
|
|
173
|
+
distinctMap.set(groupValue, set);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
return Array.from(distinctMap.entries());
|
|
177
|
+
}),
|
|
178
|
+
// if the list is not empty, emit the expired presence list every ttl
|
|
179
|
+
(0, _rxjs.switchMap)(function (list) {
|
|
180
|
+
return list.length > 0 ? (0, _rxjs.of)(null).pipe((0, _rxjs.map)(function () {
|
|
181
|
+
return list.reduce(function (acc, _ref6) {
|
|
182
|
+
var _ref7 = _slicedToArray(_ref6, 2),
|
|
183
|
+
groupValue = _ref7[0],
|
|
184
|
+
itemSet = _ref7[1];
|
|
185
|
+
var validExtensionIds = Array.from(itemSet).filter(function (item) {
|
|
186
|
+
var prevTimestamp = cacheMap.get(item);
|
|
187
|
+
return isNever || !prevTimestamp || Date.now() - prevTimestamp >= ttl;
|
|
188
|
+
});
|
|
189
|
+
if (validExtensionIds.length > 0) {
|
|
190
|
+
if (validExtensionIds.length > maxBatchRequestCount) {
|
|
191
|
+
var splitItems = (0, _chunk["default"])(validExtensionIds, maxBatchRequestCount);
|
|
192
|
+
splitItems.forEach(function (splitItem) {
|
|
193
|
+
acc.push([groupValue, splitItem]);
|
|
194
|
+
});
|
|
195
|
+
} else {
|
|
196
|
+
acc.push([groupValue, validExtensionIds]);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return acc;
|
|
200
|
+
}, []);
|
|
201
|
+
}), (0, _rxjs.filter)(function (list) {
|
|
202
|
+
return list.length > 0;
|
|
203
|
+
}), (0, _rxjs.switchMap)(function (data) {
|
|
204
|
+
return sendRequest(data);
|
|
205
|
+
}), (0, _rxjs.tap)(function (cacheList) {
|
|
206
|
+
if (isNever) return;
|
|
207
|
+
// the minus 1ms to make sure the cache is expired in the next cycle
|
|
208
|
+
var successTime = Date.now() - 1;
|
|
209
|
+
cacheList.forEach(function (cacheItem) {
|
|
210
|
+
cacheMap.set(cacheItem, successTime);
|
|
211
|
+
});
|
|
212
|
+
}), isNever ? _rxjs.identity : (0, _rxjs.repeat)({
|
|
213
|
+
delay: ttl
|
|
214
|
+
})) : _rxjs.EMPTY;
|
|
215
|
+
}));
|
|
216
|
+
};
|
|
217
|
+
var clear = function clear() {
|
|
218
|
+
clientsLinkedItemsMap$.next(new Map());
|
|
219
|
+
cacheMap.clear();
|
|
220
|
+
};
|
|
221
|
+
return {
|
|
222
|
+
link: function link(data) {
|
|
223
|
+
link$.next(data);
|
|
224
|
+
},
|
|
225
|
+
unlink: function unlink(data) {
|
|
226
|
+
unlink$.next(data);
|
|
227
|
+
},
|
|
228
|
+
setListenerDataFromClient: function setListenerDataFromClient(clientId, data) {
|
|
229
|
+
var presenceMap = clientsLinkedItemsMap$.value;
|
|
230
|
+
presenceMap.set(clientId, data);
|
|
231
|
+
clientsLinkedItemsMap$.next(presenceMap);
|
|
232
|
+
},
|
|
233
|
+
fromClientListener: fromClientListener,
|
|
234
|
+
fromServerListener: fromServerListener,
|
|
235
|
+
clear: clear,
|
|
236
|
+
get clientsLinkedItemsMap() {
|
|
237
|
+
return clientsLinkedItemsMap$.value;
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
};
|
|
241
|
+
//# sourceMappingURL=createRepeatTrackingManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRepeatTrackingManager.js","names":["_chunk","_interopRequireDefault","require","_rxjs","e","__esModule","_slicedToArray","r","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","t","toString","call","slice","constructor","name","Array","from","test","length","n","l","Symbol","iterator","i","u","f","o","next","Object","done","push","value","isArray","createRepeatTrackingManager","exports","_ref","sendToServer","ttl","groupKey","itemKey","_ref$maxBatchRequestC","maxBatchRequestCount","Number","MAX_SAFE_INTEGER","validate","link$","Subject","unlink$","clientsLinkedItemsMap$","BehaviorSubject","Map","isNever","cacheMap","fromClientListener","everLinkedMap$","pipe","buffer","throttleTime","undefined","leading","trailing","scan","distinctMap","list","forEach","item","groupValue","itemValue","_distinctMap$get","set","get","Set","add","unlinkBuffer$","startWith","combineLatest","take","repeat","map","_ref2","_ref3","everLinkedMap","unlinkList","size","_ref4","_ref5","items","itemList","distinctUntilChanged","b","JSON","stringify","switchMap","data","fromServerListener","sendRequest","linkedItems","child","val","_distinctMap$get2","_val","id","entries","of","reduce","acc","_ref6","_ref7","itemSet","validExtensionIds","filter","prevTimestamp","Date","now","splitItems","chunk","splitItem","tap","cacheList","successTime","cacheItem","identity","delay","EMPTY","clear","link","unlink","setListenerDataFromClient","clientId","presenceMap","clientsLinkedItemsMap"],"sources":["src/utils/createRepeatTrackingManager.ts"],"sourcesContent":["import chunk from 'lodash/chunk';\nimport {\n BehaviorSubject,\n buffer,\n combineLatest,\n distinctUntilChanged,\n EMPTY,\n filter,\n identity,\n map,\n type Observable,\n of,\n repeat,\n scan,\n startWith,\n Subject,\n switchMap,\n take,\n tap,\n throttleTime,\n} from 'rxjs';\n\nexport type RepeatTrackingItems = readonly [string, string[]];\n\nexport type CreateRepeatTrackingManagerOptions<T extends Record<any, any>> = {\n ttl: number | 'never';\n groupKey: keyof T;\n itemKey: keyof T;\n sendToServer: (data: RepeatTrackingItems[]) => Promise<void>;\n validate?: (data: T) => boolean;\n maxBatchRequestCount?: number;\n};\n\n/**\n * Creates a manager for repeat tracking of viewable items which linking.\n *\n * When the items be linked, will interval emit to the fromServerListener api that will provide you able to know what items still on the screen\n *\n * and the linked api trigger will have a throttle time to prevent the api be triggered too often\n *\n * @template T - Generic type extending Record<string, string> representing the data structure\n *\n * @param options - Configuration options object\n * @param options.sendToServer - Function to send data to server\n * @param options.ttl - Time-to-live duration in milliseconds for cache entries\n * @param options.groupKey - Key used to group items\n * @param options.itemKey - Key used to identify individual items\n * @param options.maxBatchRequestCount - Maximum number of items per batch request (defaults to Number.MAX_SAFE_INTEGER)\n * @param options.validate - Function to validate data items\n *\n * @returns An object containing methods to manage viewable items:\n * - link: Adds a new item to be tracked\n * - unlink: Removes an item from tracking\n * - setListenerDataFromClient: Updates data for a specific client\n * - fromClientListener: Creates an observable for client-side changes\n * - fromServerListener: Creates an observable for server-side async event to fetch data and return the cache success list\n * - clear: Resets all tracking data\n *\n * @example\n * const manager = createRepeatTrackingManager({\n * sendToServer: async (data) => { ... },\n * ttl: 30000,\n * groupKey: 'accountId',\n * itemKey: 'extensionId',\n * validate: (data) => true\n * });\n */\nexport const createRepeatTrackingManager = <T extends Record<any, any>>({\n sendToServer,\n ttl,\n groupKey,\n itemKey,\n maxBatchRequestCount = Number.MAX_SAFE_INTEGER,\n validate,\n}: CreateRepeatTrackingManagerOptions<T>) => {\n const link$ = new Subject<T>();\n const unlink$ = new Subject<T>();\n const clientsLinkedItemsMap$ = new BehaviorSubject(\n new Map<string, RepeatTrackingItems[]>(),\n );\n const isNever = ttl === 'never';\n\n const cacheMap = new Map<string, number>();\n\n const fromClientListener = () => {\n const everLinkedMap$ = link$.pipe(\n buffer(\n // when got first value, buffer 1s data to fetch all presence in once\n link$.pipe(\n throttleTime(1000, undefined, {\n leading: false,\n trailing: true,\n }),\n ),\n ),\n // accumulate all linked presence\n scan((distinctMap, list) => {\n // distinct the list by accountId and extensionId\n list.forEach((item) => {\n const groupValue = item[groupKey];\n const itemValue = item[itemKey];\n\n if (validate ? validate(item) : true) {\n const set = distinctMap.get(groupValue) ?? new Set<string>();\n set.add(itemValue);\n distinctMap.set(groupValue, set);\n }\n });\n\n return distinctMap;\n }, new Map<string, Set<string>>()),\n );\n\n const unlinkBuffer$ = unlink$.pipe(\n buffer(\n unlink$.pipe(\n // 5000ms throttle for more time is fine, can later remove subscribe\n throttleTime(5000, undefined, {\n leading: false,\n trailing: true,\n }),\n ),\n ),\n startWith(null),\n );\n\n return combineLatest([\n everLinkedMap$,\n unlinkBuffer$.pipe(\n take(2),\n // once emit, then restart the buffer, so will only use the buffer data once, then clear\n repeat(),\n ),\n ]).pipe(\n map(([everLinkedMap, unlinkList]) => {\n if (unlinkList) {\n unlinkList.forEach((item) => {\n const groupValue = item[groupKey];\n const itemValue = item[itemKey];\n const set = everLinkedMap.get(groupValue);\n\n if (set) {\n set.delete(itemValue);\n\n if (set.size === 0) {\n everLinkedMap.delete(groupValue);\n }\n }\n });\n }\n\n return everLinkedMap;\n }),\n // convert to serializable list\n map((distinctMap) => {\n const list = Array.from(distinctMap).map(([groupValue, items]) => {\n const itemList = Array.from(items);\n\n return [groupValue, itemList] as const;\n });\n\n return list;\n }),\n // only emit when the list is changed\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n switchMap((data) => sendToServer(data)),\n );\n };\n\n const fromServerListener = (\n sendRequest: (\n data: [string, string[]][],\n ) => Promise<string[]> | Observable<string[]>,\n ) => {\n // the list from clients\n return clientsLinkedItemsMap$.pipe(\n // distinct the list by first key\n map((linkedItems) => {\n const distinctMap = new Map<string, Set<string>>();\n\n linkedItems.forEach((child) => {\n child.forEach((val) => {\n const [groupValue, items] = val;\n const set = distinctMap.get(groupValue) ?? new Set<string>();\n items.forEach((id) => set.add(id));\n distinctMap.set(groupValue, set);\n });\n });\n\n return Array.from(distinctMap.entries());\n }),\n // if the list is not empty, emit the expired presence list every ttl\n switchMap((list) => {\n return list.length > 0\n ? of(null).pipe(\n map(() =>\n list.reduce((acc, [groupValue, itemSet]) => {\n const validExtensionIds = Array.from(itemSet).filter(\n (item) => {\n const prevTimestamp = cacheMap.get(item);\n\n return (\n isNever ||\n !prevTimestamp ||\n Date.now() - prevTimestamp >= ttl\n );\n },\n );\n\n if (validExtensionIds.length > 0) {\n if (validExtensionIds.length > maxBatchRequestCount) {\n const splitItems = chunk(\n validExtensionIds,\n maxBatchRequestCount,\n );\n\n splitItems.forEach((splitItem) => {\n acc.push([groupValue, splitItem]);\n });\n } else {\n acc.push([groupValue, validExtensionIds]);\n }\n }\n return acc;\n }, [] as [string, string[]][]),\n ),\n filter((list) => list.length > 0),\n switchMap((data) => sendRequest(data)),\n tap((cacheList) => {\n if (isNever) return;\n // the minus 1ms to make sure the cache is expired in the next cycle\n const successTime = Date.now() - 1;\n\n cacheList.forEach((cacheItem) => {\n cacheMap.set(cacheItem, successTime);\n });\n }),\n isNever ? identity : repeat({ delay: ttl }),\n )\n : EMPTY;\n }),\n );\n };\n\n const clear = () => {\n clientsLinkedItemsMap$.next(new Map());\n cacheMap.clear();\n };\n\n return {\n link(data: T) {\n link$.next(data);\n },\n unlink(data: T) {\n unlink$.next(data);\n },\n setListenerDataFromClient: (\n clientId: string,\n data: RepeatTrackingItems[],\n ) => {\n const presenceMap = clientsLinkedItemsMap$.value;\n presenceMap.set(clientId, data);\n clientsLinkedItemsMap$.next(presenceMap);\n },\n fromClientListener,\n fromServerListener,\n clear,\n get clientsLinkedItemsMap() {\n return clientsLinkedItemsMap$.value;\n },\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.symbol.js");
|
|
4
|
+
require("core-js/modules/es.symbol.description.js");
|
|
5
|
+
require("core-js/modules/es.function.bind.js");
|
|
6
|
+
require("core-js/modules/es.object.create.js");
|
|
7
|
+
require("core-js/modules/es.object.get-prototype-of.js");
|
|
8
|
+
require("core-js/modules/es.object.set-prototype-of.js");
|
|
9
|
+
require("core-js/modules/es.promise.js");
|
|
10
|
+
Object.defineProperty(exports, "__esModule", {
|
|
11
|
+
value: true
|
|
12
|
+
});
|
|
13
|
+
exports.createWithMemorizeByKey = exports.createWithLocalCache = void 0;
|
|
14
|
+
require("core-js/modules/es.array.iterator.js");
|
|
15
|
+
require("core-js/modules/es.map.js");
|
|
16
|
+
require("core-js/modules/es.object.define-property.js");
|
|
17
|
+
require("core-js/modules/es.object.to-string.js");
|
|
18
|
+
require("core-js/modules/es.object.values.js");
|
|
19
|
+
require("core-js/modules/es.string.iterator.js");
|
|
20
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
21
|
+
var _memoize = _interopRequireDefault(require("lodash/memoize"));
|
|
22
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
23
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
24
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
25
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
26
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
27
|
+
/**
|
|
28
|
+
* use lodash memoize to cache the result of cb exec result
|
|
29
|
+
* and shared the promise with the same `cache key`
|
|
30
|
+
*/
|
|
31
|
+
var createWithMemorizeByKey = exports.createWithMemorizeByKey = function createWithMemorizeByKey() {
|
|
32
|
+
var withMemorizeByKey = (0, _memoize["default"])(function (cb, _cacheKey) {
|
|
33
|
+
return cb();
|
|
34
|
+
}, function (_, cacheKey) {
|
|
35
|
+
return cacheKey;
|
|
36
|
+
});
|
|
37
|
+
var toWithMemorizeByKey = withMemorizeByKey;
|
|
38
|
+
Object.defineProperty(withMemorizeByKey, 'value', {
|
|
39
|
+
get: function get() {
|
|
40
|
+
var _withMemorizeByKey$ca, _withMemorizeByKey$ca2, _withMemorizeByKey$ca3;
|
|
41
|
+
return (_withMemorizeByKey$ca = withMemorizeByKey.cache) === null || _withMemorizeByKey$ca === void 0 ? void 0 : (_withMemorizeByKey$ca2 = _withMemorizeByKey$ca.__data__) === null || _withMemorizeByKey$ca2 === void 0 ? void 0 : (_withMemorizeByKey$ca3 = _withMemorizeByKey$ca2.string) === null || _withMemorizeByKey$ca3 === void 0 ? void 0 : _withMemorizeByKey$ca3.__data__;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
Object.defineProperty(withMemorizeByKey, 'clear', {
|
|
45
|
+
writable: false,
|
|
46
|
+
value: function () {
|
|
47
|
+
var _value = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(cb) {
|
|
48
|
+
var _withMemorizeByKey$ca4, _withMemorizeByKey$ca5;
|
|
49
|
+
var cachedMap, _i, _Object$values, cache, _value2;
|
|
50
|
+
return _regenerator().w(function (_context) {
|
|
51
|
+
while (1) switch (_context.n) {
|
|
52
|
+
case 0:
|
|
53
|
+
cachedMap = toWithMemorizeByKey.value;
|
|
54
|
+
_i = 0, _Object$values = Object.values(cachedMap);
|
|
55
|
+
case 1:
|
|
56
|
+
if (!(_i < _Object$values.length)) {
|
|
57
|
+
_context.n = 4;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
cache = _Object$values[_i];
|
|
61
|
+
_context.n = 2;
|
|
62
|
+
return cache;
|
|
63
|
+
case 2:
|
|
64
|
+
_value2 = _context.v;
|
|
65
|
+
cb === null || cb === void 0 ? void 0 : cb(_value2);
|
|
66
|
+
case 3:
|
|
67
|
+
_i++;
|
|
68
|
+
_context.n = 1;
|
|
69
|
+
break;
|
|
70
|
+
case 4:
|
|
71
|
+
(_withMemorizeByKey$ca4 = (_withMemorizeByKey$ca5 = withMemorizeByKey.cache).clear) === null || _withMemorizeByKey$ca4 === void 0 ? void 0 : _withMemorizeByKey$ca4.call(_withMemorizeByKey$ca5);
|
|
72
|
+
case 5:
|
|
73
|
+
return _context.a(2);
|
|
74
|
+
}
|
|
75
|
+
}, _callee);
|
|
76
|
+
}));
|
|
77
|
+
function value(_x) {
|
|
78
|
+
return _value.apply(this, arguments);
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}()
|
|
82
|
+
});
|
|
83
|
+
return toWithMemorizeByKey;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* save the result of promise to local cache by cacheKey, and can get the result by cacheKey in sync way
|
|
88
|
+
*
|
|
89
|
+
* ```ts
|
|
90
|
+
* const withLocalCache = createWithLocalCache<string>();
|
|
91
|
+
*
|
|
92
|
+
* const fetchData = async () => {
|
|
93
|
+
* // Simulate an async operation
|
|
94
|
+
* return new Promise<string>((resolve) => {
|
|
95
|
+
* setTimeout(() => resolve('data'), 1000);
|
|
96
|
+
* });
|
|
97
|
+
* };
|
|
98
|
+
*
|
|
99
|
+
* const withLocalCache = createWithLocalCache<string>();
|
|
100
|
+
* const cacheKey = 'uniqueKey';
|
|
101
|
+
*
|
|
102
|
+
* // Fetch data and cache it
|
|
103
|
+
* const data = await withLocalCache(fetchData(), cacheKey);
|
|
104
|
+
* console.log(data); // Output: 'data'
|
|
105
|
+
*
|
|
106
|
+
* // Retrieve cached data synchronously
|
|
107
|
+
* const cachedData = withLocalCache.get(cacheKey);
|
|
108
|
+
* console.log(cachedData); // Output: 'data'
|
|
109
|
+
*
|
|
110
|
+
* // Clear the cache
|
|
111
|
+
* withLocalCache.clear();
|
|
112
|
+
* const clearedData = withLocalCache.get(cacheKey);
|
|
113
|
+
* console.log(clearedData); // Output: undefined
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
var createWithLocalCache = exports.createWithLocalCache = function createWithLocalCache() {
|
|
117
|
+
var localCache = new Map();
|
|
118
|
+
var withLocalCache = /*#__PURE__*/function () {
|
|
119
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(promise, _cacheKey) {
|
|
120
|
+
var result;
|
|
121
|
+
return _regenerator().w(function (_context2) {
|
|
122
|
+
while (1) switch (_context2.n) {
|
|
123
|
+
case 0:
|
|
124
|
+
_context2.n = 1;
|
|
125
|
+
return promise;
|
|
126
|
+
case 1:
|
|
127
|
+
result = _context2.v;
|
|
128
|
+
localCache.set(_cacheKey, result);
|
|
129
|
+
return _context2.a(2, result);
|
|
130
|
+
}
|
|
131
|
+
}, _callee2);
|
|
132
|
+
}));
|
|
133
|
+
return function withLocalCache(_x2, _x3) {
|
|
134
|
+
return _ref.apply(this, arguments);
|
|
135
|
+
};
|
|
136
|
+
}();
|
|
137
|
+
Object.defineProperty(withLocalCache, 'clear', {
|
|
138
|
+
writable: false,
|
|
139
|
+
value: function value() {
|
|
140
|
+
return localCache.clear();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
Object.defineProperty(withLocalCache, 'get', {
|
|
144
|
+
writable: false,
|
|
145
|
+
value: function value(cacheKey) {
|
|
146
|
+
return localCache.get(cacheKey);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
Object.defineProperty(withLocalCache, 'value', {
|
|
150
|
+
get: function get() {
|
|
151
|
+
return localCache;
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
return withLocalCache;
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=createWithMemorizeByKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWithMemorizeByKey.js","names":["_memoize","_interopRequireDefault","require","e","__esModule","_regenerator","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","createWithMemorizeByKey","exports","withMemorizeByKey","memoize","cb","_cacheKey","_","cacheKey","toWithMemorizeByKey","get","_withMemorizeByKey$ca","_withMemorizeByKey$ca2","_withMemorizeByKey$ca3","cache","__data__","string","_value","_callee","_withMemorizeByKey$ca4","_withMemorizeByKey$ca5","cachedMap","_i","_Object$values","_value2","_context","values","clear","_x","createWithLocalCache","localCache","Map","withLocalCache","_ref","_callee2","promise","result","_context2","set","_x2","_x3"],"sources":["src/utils/createWithMemorizeByKey.ts"],"sourcesContent":["import memoize from 'lodash/memoize';\n\n/**\n * use lodash memoize to cache the result of cb exec result\n * and shared the promise with the same `cache key`\n */\nexport const createWithMemorizeByKey = <T = string | null>() => {\n const withMemorizeByKey = memoize(\n (cb: () => Promise<T>, _cacheKey: string) => cb(),\n (_, cacheKey) => cacheKey,\n );\n\n const toWithMemorizeByKey = withMemorizeByKey as typeof withMemorizeByKey & {\n /**\n *\n * @returns clear cached state and promise\n */\n clear: (\n cb?: (\n /**\n * cached data callback before clear\n */\n data: T,\n ) => void,\n ) => void;\n /**\n * get the full cached map data\n */\n get value(): Record<string, T>;\n };\n\n Object.defineProperty(withMemorizeByKey, 'value', {\n get: () => (withMemorizeByKey.cache as any)?.__data__?.string?.__data__,\n });\n\n Object.defineProperty(withMemorizeByKey, 'clear', {\n writable: false,\n value: async (\n cb: (\n /**\n * cached data callback before clear\n */\n data: T,\n ) => void,\n ) => {\n const cachedMap = toWithMemorizeByKey.value;\n\n for (const cache of Object.values(cachedMap)) {\n const value = await cache;\n\n cb?.(value);\n }\n\n withMemorizeByKey.cache.clear?.();\n },\n });\n\n return toWithMemorizeByKey;\n};\n\n/**\n * save the result of promise to local cache by cacheKey, and can get the result by cacheKey in sync way\n *\n * ```ts\n * const withLocalCache = createWithLocalCache<string>();\n *\n * const fetchData = async () => {\n * // Simulate an async operation\n * return new Promise<string>((resolve) => {\n * setTimeout(() => resolve('data'), 1000);\n * });\n * };\n *\n * const withLocalCache = createWithLocalCache<string>();\n * const cacheKey = 'uniqueKey';\n *\n * // Fetch data and cache it\n * const data = await withLocalCache(fetchData(), cacheKey);\n * console.log(data); // Output: 'data'\n *\n * // Retrieve cached data synchronously\n * const cachedData = withLocalCache.get(cacheKey);\n * console.log(cachedData); // Output: 'data'\n *\n * // Clear the cache\n * withLocalCache.clear();\n * const clearedData = withLocalCache.get(cacheKey);\n * console.log(clearedData); // Output: undefined\n * ```\n */\nexport const createWithLocalCache = <T = string | null>() => {\n const localCache = new Map<string, T>();\n\n const withLocalCache = async (promise: Promise<T>, _cacheKey: string) => {\n const result = await promise;\n localCache.set(_cacheKey, result);\n return result;\n };\n\n Object.defineProperty(withLocalCache, 'clear', {\n writable: false,\n value: () => localCache.clear(),\n });\n\n Object.defineProperty(withLocalCache, 'get', {\n writable: false,\n value: (cacheKey: string) => localCache.get(cacheKey),\n });\n\n Object.defineProperty(withLocalCache, 'value', {\n get: () => localCache,\n });\n\n return withLocalCache as typeof withLocalCache & {\n /**\n *\n * @returns clear local cached state\n */\n clear: () => void;\n /**\n * get the cached result by cacheKey in sync way\n * @param cacheKey\n */\n get: (cacheKey: string) => T | undefined;\n /**\n * get the full cached map data\n */\n get value(): Map<string, T>;\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getOSType = getOSType;
|
|
8
|
+
exports.isMobile = void 0;
|
|
9
|
+
require("core-js/modules/es.array.index-of.js");
|
|
10
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
11
|
+
var isMobile = exports.isMobile = function isMobile() {
|
|
12
|
+
var userAgent = global.navigator.userAgent.toLowerCase();
|
|
13
|
+
var platform = global.navigator.platform;
|
|
14
|
+
// for new iOS device, it may return the value like MacIntel.
|
|
15
|
+
// We need to check it if there is a same value for M1 chip device.
|
|
16
|
+
var isIOS = /iPad|iPhone|iPod/.test(platform) || platform === 'MacIntel' && navigator.maxTouchPoints >= 1; // change '>' to '>=', convenient for dev on macbook
|
|
17
|
+
return /Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || isIOS;
|
|
18
|
+
};
|
|
19
|
+
var OSTypes = {
|
|
20
|
+
Windows: 'Windows',
|
|
21
|
+
MacOS: 'MacOS'
|
|
22
|
+
};
|
|
23
|
+
function getOSType() {
|
|
24
|
+
var OS = 'Windows';
|
|
25
|
+
if (global.navigator.userAgent.indexOf('Windows') !== -1) {
|
|
26
|
+
OS = 'Windows';
|
|
27
|
+
} else if (global.navigator.userAgent.indexOf('Mac') !== -1) {
|
|
28
|
+
OS = 'MacOS';
|
|
29
|
+
}
|
|
30
|
+
// WE DON'T SUPPORT THOSE FOR NOW
|
|
31
|
+
// else if (global.navigator.userAgent.indexOf('X11') !== -1) {
|
|
32
|
+
// OS = 'UNIX';
|
|
33
|
+
// } else if (global.navigator.userAgent.indexOf('Linux') !== -1) {
|
|
34
|
+
// OS = 'Linux';
|
|
35
|
+
// }
|
|
36
|
+
return OS;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=detectDevice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectDevice.js","names":["isMobile","exports","userAgent","global","navigator","toLowerCase","platform","isIOS","test","maxTouchPoints","OSTypes","Windows","MacOS","getOSType","OS","indexOf"],"sources":["src/utils/detectDevice.ts"],"sourcesContent":["export const isMobile = (): boolean => {\n const userAgent = global.navigator.userAgent.toLowerCase();\n const platform = global.navigator.platform;\n // for new iOS device, it may return the value like MacIntel.\n // We need to check it if there is a same value for M1 chip device.\n const isIOS =\n /iPad|iPhone|iPod/.test(platform) ||\n (platform === 'MacIntel' && navigator.maxTouchPoints >= 1); // change '>' to '>=', convenient for dev on macbook\n return (\n /Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || isIOS\n );\n};\n\nconst OSTypes = {\n Windows: 'Windows',\n MacOS: 'MacOS',\n};\n\nexport type OSType = keyof typeof OSTypes;\n\nexport function getOSType(): OSType {\n let OS: OSType = 'Windows';\n if (global.navigator.userAgent.indexOf('Windows') !== -1) {\n OS = 'Windows';\n } else if (global.navigator.userAgent.indexOf('Mac') !== -1) {\n OS = 'MacOS';\n }\n // WE DON'T SUPPORT THOSE FOR NOW\n // else if (global.navigator.userAgent.indexOf('X11') !== -1) {\n // OS = 'UNIX';\n // } else if (global.navigator.userAgent.indexOf('Linux') !== -1) {\n // OS = 'Linux';\n // }\n return OS;\n}\n"],"mappings":";;;;;;;;;;AAAO,IAAMA,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG,SAAXA,QAAQA,CAAA,EAAkB;EACrC,IAAME,SAAS,GAAGC,MAAM,CAACC,SAAS,CAACF,SAAS,CAACG,WAAW,CAAC,CAAC;EAC1D,IAAMC,QAAQ,GAAGH,MAAM,CAACC,SAAS,CAACE,QAAQ;EAC1C;EACA;EACA,IAAMC,KAAK,GACT,kBAAkB,CAACC,IAAI,CAACF,QAAQ,CAAC,IAChCA,QAAQ,KAAK,UAAU,IAAIF,SAAS,CAACK,cAAc,IAAI,CAAE,CAAC,CAAC;EAC9D,OACE,+CAA+C,CAACD,IAAI,CAACN,SAAS,CAAC,IAAIK,KAAK;AAE5E,CAAC;AAED,IAAMG,OAAO,GAAG;EACdC,OAAO,EAAE,SAAS;EAClBC,KAAK,EAAE;AACT,CAAC;AAIM,SAASC,SAASA,CAAA,EAAW;EAClC,IAAIC,EAAU,GAAG,SAAS;EAC1B,IAAIX,MAAM,CAACC,SAAS,CAACF,SAAS,CAACa,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;IACxDD,EAAE,GAAG,SAAS;EAChB,CAAC,MAAM,IAAIX,MAAM,CAACC,SAAS,CAACF,SAAS,CAACa,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;IAC3DD,EAAE,GAAG,OAAO;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAOA,EAAE;AACX","ignoreList":[]}
|