@selfcommunity/utils 0.2.0-alpha.0 → 0.2.0-alpha.2
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/cjs/index.d.ts +3 -2
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +4 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/utils/number.d.ts +6 -0
- package/lib/cjs/utils/number.d.ts.map +1 -0
- package/lib/cjs/utils/number.js +12 -0
- package/lib/cjs/utils/number.js.map +1 -0
- package/lib/cjs/utils/object.d.ts +5 -0
- package/lib/cjs/utils/object.d.ts.map +1 -1
- package/lib/cjs/utils/object.js +9 -1
- package/lib/cjs/utils/object.js.map +1 -1
- package/lib/esm/index.d.ts +3 -2
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +3 -2
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/utils/number.d.ts +6 -0
- package/lib/esm/utils/number.d.ts.map +1 -0
- package/lib/esm/utils/number.js +8 -0
- package/lib/esm/utils/number.js.map +1 -0
- package/lib/esm/utils/object.d.ts +5 -0
- package/lib/esm/utils/object.d.ts.map +1 -1
- package/lib/esm/utils/object.js +7 -0
- package/lib/esm/utils/object.js.map +1 -1
- package/lib/umd/utils.js +1 -1
- package/lib/umd/utils.js.map +1 -1
- package/package.json +2 -2
package/lib/cjs/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify } from './utils/string';
|
|
2
2
|
import { isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter } from './utils/url';
|
|
3
3
|
import { getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering } from './utils/window';
|
|
4
|
-
import { mergeDeep, isObject, objectWithoutProperties } from './utils/object';
|
|
4
|
+
import { mergeDeep, isObject, objectWithoutProperties, isFunc } from './utils/object';
|
|
5
|
+
import { isInteger } from './utils/number';
|
|
5
6
|
import { arraysEqual } from './utils/array';
|
|
6
7
|
import { loadVersionBrowser } from './utils/browser';
|
|
7
8
|
import LRUCache, { LruCache, LruCacheType, CacheStrategies } from './utils/cache';
|
|
@@ -11,5 +12,5 @@ import { resizeImage } from './utils/image';
|
|
|
11
12
|
/**
|
|
12
13
|
* Export all utilities
|
|
13
14
|
*/
|
|
14
|
-
export { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify, isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter, getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering, Logger, mergeDeep, isObject, objectWithoutProperties, arraysEqual, WSClient, WSClientType, WSClientPropTypes, loadVersionBrowser, LRUCache, LruCache, LruCacheType, CacheStrategies, resizeImage };
|
|
15
|
+
export { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify, isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter, getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering, Logger, mergeDeep, isObject, objectWithoutProperties, isFunc, isInteger, arraysEqual, WSClient, WSClientType, WSClientPropTypes, loadVersionBrowser, LRUCache, LruCache, LruCacheType, CacheStrategies, resizeImage };
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,2BAA2B,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACnH,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,2BAA2B,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACnH,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,QAAQ,EAAE,EAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAChF,OAAO,EAAC,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,EAAE,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C;;GAEG;AACH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,MAAM,EACN,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,MAAM,EACN,SAAS,EACT,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,WAAW,EACZ,CAAC"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.resizeImage = exports.CacheStrategies = exports.LruCache = exports.LRUCache = exports.loadVersionBrowser = exports.WSClient = exports.arraysEqual = exports.objectWithoutProperties = exports.isObject = exports.mergeDeep = exports.Logger = exports.isClientSideRendering = exports.getWindowHeight = exports.getWindowWidth = exports.getHighestSafeWindowContext = exports.updateQueryStringParameter = exports.getQueryStringParameter = exports.urlB64ToUint8Array = exports.appendURLSearchParams = exports.getDomain = exports.urlReplacer = exports.isValidUrls = exports.isValidUrl = exports.slugify = exports.random = exports.fallbackCopyTextToClipboard = exports.copyTextToClipboard = exports.camelCase = exports.stripHtml = exports.isString = exports.capitalize = void 0;
|
|
29
|
+
exports.resizeImage = exports.CacheStrategies = exports.LruCache = exports.LRUCache = exports.loadVersionBrowser = exports.WSClient = exports.arraysEqual = exports.isInteger = exports.isFunc = exports.objectWithoutProperties = exports.isObject = exports.mergeDeep = exports.Logger = exports.isClientSideRendering = exports.getWindowHeight = exports.getWindowWidth = exports.getHighestSafeWindowContext = exports.updateQueryStringParameter = exports.getQueryStringParameter = exports.urlB64ToUint8Array = exports.appendURLSearchParams = exports.getDomain = exports.urlReplacer = exports.isValidUrls = exports.isValidUrl = exports.slugify = exports.random = exports.fallbackCopyTextToClipboard = exports.copyTextToClipboard = exports.camelCase = exports.stripHtml = exports.isString = exports.capitalize = void 0;
|
|
30
30
|
const string_1 = require("./utils/string");
|
|
31
31
|
Object.defineProperty(exports, "capitalize", { enumerable: true, get: function () { return string_1.capitalize; } });
|
|
32
32
|
Object.defineProperty(exports, "isString", { enumerable: true, get: function () { return string_1.isString; } });
|
|
@@ -54,6 +54,9 @@ const object_1 = require("./utils/object");
|
|
|
54
54
|
Object.defineProperty(exports, "mergeDeep", { enumerable: true, get: function () { return object_1.mergeDeep; } });
|
|
55
55
|
Object.defineProperty(exports, "isObject", { enumerable: true, get: function () { return object_1.isObject; } });
|
|
56
56
|
Object.defineProperty(exports, "objectWithoutProperties", { enumerable: true, get: function () { return object_1.objectWithoutProperties; } });
|
|
57
|
+
Object.defineProperty(exports, "isFunc", { enumerable: true, get: function () { return object_1.isFunc; } });
|
|
58
|
+
const number_1 = require("./utils/number");
|
|
59
|
+
Object.defineProperty(exports, "isInteger", { enumerable: true, get: function () { return number_1.isInteger; } });
|
|
57
60
|
const array_1 = require("./utils/array");
|
|
58
61
|
Object.defineProperty(exports, "arraysEqual", { enumerable: true, get: function () { return array_1.arraysEqual; } });
|
|
59
62
|
const browser_1 = require("./utils/browser");
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6I;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6I;AAyB3I,2FAzBM,mBAAU,OAyBN;AACV,yFA1BkB,iBAAQ,OA0BlB;AACR,0FA3B4B,kBAAS,OA2B5B;AACT,0FA5BuC,kBAAS,OA4BvC;AACT,oGA7BkD,4BAAmB,OA6BlD;AACnB,4GA9BuE,oCAA2B,OA8BvE;AAC3B,uFA/BoG,eAAM,OA+BpG;AACN,wFAhC4G,gBAAO,OAgC5G;AA/BT,qCASqB;AAuBnB,2FA/BA,gBAAU,OA+BA;AACV,4FA/BA,iBAAW,OA+BA;AACX,4FA/BA,iBAAW,OA+BA;AACX,0FA/BA,eAAS,OA+BA;AACT,sGA/BA,2BAAqB,OA+BA;AACrB,mGA/BA,wBAAkB,OA+BA;AAClB,wGA/BA,6BAAuB,OA+BA;AACvB,2GA/BA,gCAA0B,OA+BA;AA7B5B,2CAAmH;AA8BjH,4GA9BM,oCAA2B,OA8BN;AAC3B,+FA/BmC,uBAAc,OA+BnC;AACd,gGAhCmD,wBAAe,OAgCnD;AACf,sGAjCoE,8BAAqB,OAiCpE;AAhCvB,2CAAoF;AAkClF,0FAlCM,kBAAS,OAkCN;AACT,yFAnCiB,iBAAQ,OAmCjB;AACR,wGApC2B,gCAAuB,OAoC3B;AACvB,uFArCoD,eAAM,OAqCpD;AApCR,2CAAyC;AAqCvC,0FArCM,kBAAS,OAqCN;AApCX,yCAA0C;AAqCxC,4FArCM,mBAAW,OAqCN;AApCb,6CAAmD;AAwCjD,mGAxCM,4BAAkB,OAwCN;AAvCpB,uDAAgF;AAwC9E,mBAxCK,eAAQ,CAwCL;AACR,yFAzCgB,gBAAQ,OAyChB;AAER,gGA3CwC,uBAAe,OA2CxC;AA1CjB,2CAAsC;AA4BpC,uFA5BM,eAAM,OA4BN;AA3BR,kEAA4E;AAkC1E,mBAlCK,mBAAQ,CAkCL;AAjCV,yCAA0C;AAyCxC,4FAzCM,mBAAW,OAyCN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../src/utils/number.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,KAAA,WAE1B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isInteger = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Check if v is an integer number
|
|
6
|
+
* @param v
|
|
7
|
+
*/
|
|
8
|
+
function isInteger(v) {
|
|
9
|
+
return !isNaN(v) && parseInt(String(Number(v))) == v && !isNaN(parseInt(String(v), 10));
|
|
10
|
+
}
|
|
11
|
+
exports.isInteger = isInteger;
|
|
12
|
+
//# sourceMappingURL=number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/utils/number.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,SAAgB,SAAS,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1F,CAAC;AAFD,8BAEC"}
|
|
@@ -16,4 +16,9 @@ export declare function mergeDeep(target: object, source: object): object;
|
|
|
16
16
|
* @param keys
|
|
17
17
|
*/
|
|
18
18
|
export declare function objectWithoutProperties<T>(obj: T | null, keys: string[]): T;
|
|
19
|
+
/**
|
|
20
|
+
* Check if v is a func
|
|
21
|
+
* @param v
|
|
22
|
+
*/
|
|
23
|
+
export declare function isFunc(v: any): boolean;
|
|
19
24
|
//# sourceMappingURL=object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../src/utils/object.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,KAAA,WAEzB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBhE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAQ3E"}
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../src/utils/object.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,KAAA,WAEzB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBhE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAQ3E;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,KAAA,WAEvB"}
|
package/lib/cjs/utils/object.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.objectWithoutProperties = exports.mergeDeep = exports.isObject = void 0;
|
|
3
|
+
exports.isFunc = exports.objectWithoutProperties = exports.mergeDeep = exports.isObject = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Check if v is an object
|
|
6
6
|
* @param v
|
|
@@ -50,4 +50,12 @@ function objectWithoutProperties(obj, keys) {
|
|
|
50
50
|
return target;
|
|
51
51
|
}
|
|
52
52
|
exports.objectWithoutProperties = objectWithoutProperties;
|
|
53
|
+
/**
|
|
54
|
+
* Check if v is a func
|
|
55
|
+
* @param v
|
|
56
|
+
*/
|
|
57
|
+
function isFunc(v) {
|
|
58
|
+
return typeof v === 'function';
|
|
59
|
+
}
|
|
60
|
+
exports.isFunc = isFunc;
|
|
53
61
|
//# sourceMappingURL=object.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/utils/object.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,SAAgB,QAAQ,CAAC,CAAC;IACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAClE,CAAC;AAFD,4BAEC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;oBACpB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;iBAC7C;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnD;aACF;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;aAC7C;QACH,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAhBD,8BAgBC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAI,GAAa,EAAE,IAAc;IACtE,IAAI,MAAM,GAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAS;QAC9B,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;YACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AARD,0DAQC"}
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/utils/object.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,SAAgB,QAAQ,CAAC,CAAC;IACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAClE,CAAC;AAFD,4BAEC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;oBACpB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;iBAC7C;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnD;aACF;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;aAC7C;QACH,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAhBD,8BAgBC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAI,GAAa,EAAE,IAAc;IACtE,IAAI,MAAM,GAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAS;QAC9B,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;YACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AARD,0DAQC;AAED;;;GAGG;AACH,SAAgB,MAAM,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC,KAAK,UAAU,CAAC;AACjC,CAAC;AAFD,wBAEC"}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify } from './utils/string';
|
|
2
2
|
import { isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter } from './utils/url';
|
|
3
3
|
import { getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering } from './utils/window';
|
|
4
|
-
import { mergeDeep, isObject, objectWithoutProperties } from './utils/object';
|
|
4
|
+
import { mergeDeep, isObject, objectWithoutProperties, isFunc } from './utils/object';
|
|
5
|
+
import { isInteger } from './utils/number';
|
|
5
6
|
import { arraysEqual } from './utils/array';
|
|
6
7
|
import { loadVersionBrowser } from './utils/browser';
|
|
7
8
|
import LRUCache, { LruCache, LruCacheType, CacheStrategies } from './utils/cache';
|
|
@@ -11,5 +12,5 @@ import { resizeImage } from './utils/image';
|
|
|
11
12
|
/**
|
|
12
13
|
* Export all utilities
|
|
13
14
|
*/
|
|
14
|
-
export { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify, isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter, getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering, Logger, mergeDeep, isObject, objectWithoutProperties, arraysEqual, WSClient, WSClientType, WSClientPropTypes, loadVersionBrowser, LRUCache, LruCache, LruCacheType, CacheStrategies, resizeImage };
|
|
15
|
+
export { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify, isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter, getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering, Logger, mergeDeep, isObject, objectWithoutProperties, isFunc, isInteger, arraysEqual, WSClient, WSClientType, WSClientPropTypes, loadVersionBrowser, LRUCache, LruCache, LruCacheType, CacheStrategies, resizeImage };
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,2BAA2B,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACnH,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,2BAA2B,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACnH,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,QAAQ,EAAE,EAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAChF,OAAO,EAAC,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,EAAE,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C;;GAEG;AACH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,MAAM,EACN,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,MAAM,EACN,SAAS,EACT,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,WAAW,EACZ,CAAC"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify } from './utils/string';
|
|
2
2
|
import { isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter } from './utils/url';
|
|
3
3
|
import { getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering } from './utils/window';
|
|
4
|
-
import { mergeDeep, isObject, objectWithoutProperties } from './utils/object';
|
|
4
|
+
import { mergeDeep, isObject, objectWithoutProperties, isFunc } from './utils/object';
|
|
5
|
+
import { isInteger } from './utils/number';
|
|
5
6
|
import { arraysEqual } from './utils/array';
|
|
6
7
|
import { loadVersionBrowser } from './utils/browser';
|
|
7
8
|
import LRUCache, { LruCache, CacheStrategies } from './utils/cache';
|
|
@@ -11,5 +12,5 @@ import { resizeImage } from './utils/image';
|
|
|
11
12
|
/**
|
|
12
13
|
* Export all utilities
|
|
13
14
|
*/
|
|
14
|
-
export { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify, isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter, getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering, Logger, mergeDeep, isObject, objectWithoutProperties, arraysEqual, WSClient, loadVersionBrowser, LRUCache, LruCache, CacheStrategies, resizeImage };
|
|
15
|
+
export { capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify, isValidUrl, isValidUrls, urlReplacer, getDomain, appendURLSearchParams, urlB64ToUint8Array, getQueryStringParameter, updateQueryStringParameter, getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering, Logger, mergeDeep, isObject, objectWithoutProperties, isFunc, isInteger, arraysEqual, WSClient, loadVersionBrowser, LRUCache, LruCache, CacheStrategies, resizeImage };
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,2BAA2B,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACnH,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,2BAA2B,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACnH,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,QAAQ,EAAE,EAAC,QAAQ,EAAgB,eAAe,EAAC,MAAM,eAAe,CAAC;AAChF,OAAO,EAAC,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAA2C,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C;;GAEG;AACH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,MAAM,EACN,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,MAAM,EACN,SAAS,EACT,WAAW,EACX,QAAQ,EAGR,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EAER,eAAe,EACf,WAAW,EACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../src/utils/number.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,KAAA,WAE1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/utils/number.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -16,4 +16,9 @@ export declare function mergeDeep(target: object, source: object): object;
|
|
|
16
16
|
* @param keys
|
|
17
17
|
*/
|
|
18
18
|
export declare function objectWithoutProperties<T>(obj: T | null, keys: string[]): T;
|
|
19
|
+
/**
|
|
20
|
+
* Check if v is a func
|
|
21
|
+
* @param v
|
|
22
|
+
*/
|
|
23
|
+
export declare function isFunc(v: any): boolean;
|
|
19
24
|
//# sourceMappingURL=object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../src/utils/object.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,KAAA,WAEzB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBhE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAQ3E"}
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../src/utils/object.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,KAAA,WAEzB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBhE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAQ3E;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,KAAA,WAEvB"}
|
package/lib/esm/utils/object.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/utils/object.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAC;IACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;oBACpB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;iBAC7C;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnD;aACF;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;aAC7C;QACH,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAI,GAAa,EAAE,IAAc;IACtE,IAAI,MAAM,GAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAS;QAC9B,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;YACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/utils/object.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAC;IACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;oBACpB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;iBAC7C;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnD;aACF;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;aAC7C;QACH,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAI,GAAa,EAAE,IAAc;IACtE,IAAI,MAAM,GAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAS;QAC9B,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;YACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC,KAAK,UAAU,CAAC;AACjC,CAAC"}
|
package/lib/umd/utils.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see utils.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SelfCommunityUtils=t():e.SelfCommunityUtils=t()}(self,(()=>(()=>{"use strict";var e={469:(e,t)=>{t.__esModule=!0,t.arraysEqual=void 0,t.arraysEqual=(e,t)=>{if(e===t)return!0;if(null==e||null==t)return!1;if(e.length!==t.length)return!1;for(let n=0;n<e.length;++n)if(e[n]!==t[n])return!1;return!0}},285:(e,t)=>{t.__esModule=!0,t.loadVersionBrowser=void 0,t.loadVersionBrowser=()=>{if("userAgentData"in navigator){const e=navigator.userAgentData;let t,n,r=null;for(let i=0;i<e.brands.length;i++){const s=e.brands[i].brand;if(n=e.brands[i].version,null!==s.match(/opera|chrome|edge|safari|firefox|msie|trident/i)){if(null===s.match(/chrome/i))return t=s.substr(s.indexOf(" ")+1),{name:t,version:n};r=n}}if(null!==r)return{name:"chrome",version:r}}let e,t=navigator.userAgent,n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(n[1])?(e=/\brv[ :]+(\d+)/g.exec(t)||[],{name:"IE",version:e[1]||""}):"Chrome"===n[1]&&(e=t.match(/\bOPR\/(\d+)/),null!=e)?{name:"Opera",version:e[1]}:(n=n[2]?[n[1],n[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(e=t.match(/version\/(\d+)/i))&&n.splice(1,1,e[1]),{name:n[0],version:n[1]})}},466:(e,t)=>{t.__esModule=!0,t.default=t.LruCache=t.CacheStrategies=void 0;class n{constructor(e=1e4){this.values=new Map,this.maxEntries=e,"undefined"!=typeof window&&(window.__viewSCCache=this.values)}get(e,t){let n;return this.values.has(e)?(n=this.values.get(e),this.values.delete(e),this.values.set(e,n)):t&&(n=t,this.values.set(e,n)),n}set(e,t){if(this.values.size>=this.maxEntries){const e=this.values.keys().next().value;this.values.delete(e)}this.values.set(e,t)}hasKey(e){return this.values.has(e)}delete(e){this.values.has(e)&&this.values.delete(e)}deleteKeys(e){e.forEach((e=>{this.values.has(e)&&this.values.delete(e)}))}deleteKeysWithPrefix(e){this.values.forEach(((t,n)=>{n.startsWith(e)&&this.values.delete(n)}))}clean(){this.values=new Map}evaluate(){console.log(this.values)}}let r;t.LruCache=n,t.CacheStrategies=r,function(e){e.CACHE_FIRST="Cache-first",e.NETWORK_ONLY="Network-only",e.STALE_WHILE_REVALIDATE="Stale-While-Revalidate"}(r||(t.CacheStrategies=r={}));var i=new n;t.default=i},858:(e,t)=>{t.__esModule=!0,t.resizeImage=void 0,t.resizeImage=e=>new Promise(((t,n)=>{const r=new FileReader;r.onload=e=>{let n=new Image;n.onload=function(e){let r=document.createElement("canvas"),i=1920,s=n.width,o=n.height;s>o?s>i&&(o*=i/s,s=i):o>i&&(s*=i/o,o=i),r.width=s,r.height=o,r.getContext("2d").drawImage(n,0,0,s,o),t((e=>{let t;t=e.split(",")[0].indexOf("base64")>=0?atob(e.split(",")[1]):unescape(e.split(",")[1]);let n=e.split(",")[0].split(":")[1].split(";")[0],r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return new Blob([r],{type:n})})(r.toDataURL("image/jpeg")))},n.src=e.target.result},r.onerror=n,r.readAsDataURL(e)}))},502:(e,t)=>{t.__esModule=!0,t.Logger=void 0,t.Logger=class{static info(e,t){console.info(`%c[${e}]`,"color:#008080",` ${t}`)}static warn(e,t){console.warn(`%c[${e}]`,"color:#008080",` ${t}`)}static error(e,t){console.error(`%c[${e}]`,"color:#008080",` ${t}`)}static log(e,t){console.log(`%c[${e}]`,"color:#008080",` ${t}`)}static debug(e,t){console.debug(`%c[${e}]`,"color:#008080",` ${t}`)}}},297:(e,t)=>{function n(e){return"object"==typeof e&&!Array.isArray(e)&&null!==e}t.__esModule=!0,t.isObject=n,t.mergeDeep=function e(t,r){let i=Object.assign({},t);return n(t)&&n(r)&&Object.keys(r).forEach((s=>{n(r[s])?s in t?i[s]=e(t[s],r[s]):Object.assign(i,{[s]:r[s]}):Object.assign(i,{[s]:r[s]})})),i},t.objectWithoutProperties=function(e,t){let n=e?Object.assign({},e):null;return t.forEach((function(e){n&&e in n&&delete n[e]})),n}},884:(e,t)=>{function n(e){let t=document.createElement("textarea");t.value=e,t.style.top="0",t.style.left="0",t.style.position="fixed",document.body.appendChild(t),t.focus(),t.select();try{return document.execCommand("copy"),document.body.removeChild(t),Promise.resolve()}catch(e){return document.body.removeChild(t),Promise.reject(e)}}t.__esModule=!0,t.camelCase=function(e){return e.toLowerCase().replace(/[-_]+/g," ").replace(/[^\w\s]/g,"").replace(/ (.)/g,(e=>e.toUpperCase())).replace(/ /g,"")},t.capitalize=function(e){let t="",n=e.split(" ");for(let e=0;e<n.length;e++)t+=n[e].substring(0,1).toUpperCase()+n[e].substring(1,n[e].length);return t},t.copyTextToClipboard=function(e){return navigator.clipboard?navigator.clipboard.writeText(e):n(e)},t.fallbackCopyTextToClipboard=n,t.isString=function(e){return"string"==typeof e||e instanceof String},t.random=function(){return(Math.random()+1).toString(36).substring(7)},t.slugify=function(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")},t.stripHtml=function(e){return e.replace(/<[^>]*>?/gm,"").trim()}},735:(e,t)=>{t.__esModule=!0,t.appendURLSearchParams=function(e,t){let n=e;if(t.length&&n){const e=Object.keys(t[0])[0];n+=(n.split("?")[1]?"&":"?")+`${e}=${t[0][e]}`,t.slice(1).map((e=>{const t=Object.keys(e)[0];n+=`&${t}=${e[t]}`}))}return n},t.urlReplacer=t.urlB64ToUint8Array=t.updateQueryStringParameter=t.isValidUrls=t.isValidUrl=t.getQueryStringParameter=t.getDomain=void 0,t.urlReplacer=e=>t=>function(e,t){const n=/\$\(([^)]+)?\)/g;let r=n.exec(e);for(;r;)e=e.replace(r[0],t[r[1]]),n.lastIndex=0,r=n.exec(e);return e}(e,t),t.getDomain=e=>{const t=e.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i);return t&&t[1]?t[1]:""};const n=e=>/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e);t.isValidUrl=n,t.isValidUrls=(e,t)=>e.trim().split(t).every(n),t.urlB64ToUint8Array=e=>{const t=(e+"=".repeat((4-e.length%4)%4)).replace(/-/g,"+").replace(/_/g,"/"),n=window.atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;++e)r[e]=n.charCodeAt(e);return r},t.getQueryStringParameter=(e,t)=>e&&t?new URL(e).searchParams.get(t):null,t.updateQueryStringParameter=(e,t,n)=>{if(e&&t&&n){let r=new RegExp("([?&])"+t+"=.*?(&|$)","i"),i=-1!==e.indexOf("?")?"&":"?";return e.match(r)?e.replace(r,"$1"+t+"="+n+"$2"):e+i+t+"="+n}return e}},507:(e,t)=>{t.__esModule=!0,t.default=void 0;class n{constructor(e){this._attempts=1,this._heartbeatInterval=null,this._missedHeartbeats=0,this.isValidOptions(e)&&(this._cfg=Object.assign({},{heartbeatMsg:null,debug:!1,mustReconnect:!0},e),this.connect())}static getInstance(e){return this._instance=this._instance||new n(e),this._instance}connect(){try{if(this._ws&&(this.isConnecting()||this.isConnected()))return void(this._cfg.debug&&console.info("Websocket is connecting or already connected."));"function"==typeof this._cfg.connecting&&this._cfg.connecting(),this._cfg.debug&&console.info(`Connecting to ${this._cfg.uri} ...`),this._ws=new WebSocket(this._cfg.uri,this._cfg.protocols),this._ws.onopen=this.onOpen.bind(this),this._ws.onmessage=this.onMessage.bind(this),this._ws.onerror=this.onError.bind(this),this._ws.onclose=this.onClose.bind(this),this._timer=null}catch(e){console.error(e),this.tryToReconnect()}}isValidOptions(e){let t=!1;return e?(e.uri||(console.error("Invalid WSClient Uri options."),t=!0),e&&e.connecting&&"function"!=typeof e.connecting&&(console.error("Invalid WSClient connecting options."),t=!0),e&&e.connected&&"function"!=typeof e.connected&&(console.error("Invalid WSClient connected options."),t=!0),e&&e.receiveMessage&&"function"!=typeof e.receiveMessage&&(console.error("Invalid WSClient receiveMessage options."),t=!0),e&&e.disconnected&&"function"!=typeof e.disconnected&&(console.error("Invalid WSClient connecting options."),t=!0),e&&e.heartbeatMsg&&"string"!=typeof e.heartbeatMsg&&(console.error("Invalid WSClient heartbeatMsg options."),t=!0),e&&e.debug&&"boolean"!=typeof e.debug&&(console.error("Invalid WSClient debug options."),t=!0),!t):(console.error("Invalid WSClient options."),t)}tryToReconnect(){if(this._cfg.mustReconnect&&!this._timer){this._cfg.debug&&console.info("Reconnecting...");let e=this.generateInterval(this._attempts);this._timer=setTimeout(this.reconnect.bind(this),e)}}reconnect(){this._attempts++,this.connect()}sendHeartbeat(){try{if(this._missedHeartbeats++,this._missedHeartbeats>3)throw new Error("Too many missed heartbeats.");this._ws.send(this._cfg.heartbeatMsg)}catch(e){clearInterval(this._heartbeatInterval),this._heartbeatInterval=null,this._cfg.debug&&console.warn(`Closing connection. Reason: ${e.message}`),this.isClosing()||this.isClosed()||this.close()}}onOpen(){this._cfg.debug&&console.info("Connected!"),this._attempts=1,this._cfg.heartbeatMsg&&null===this._heartbeatInterval&&(this._missedHeartbeats=0,this._heartbeatInterval=setInterval(this.sendHeartbeat.bind(this),5e3)),"function"==typeof this._cfg.connected&&this._cfg.connected()}onClose(e){this._cfg.debug&&console.info("Connection closed!"),"function"==typeof this._cfg.disconnected&&this._cfg.disconnected(e),this.tryToReconnect()}onError(e){this._cfg.debug&&console.error("Websocket connection is broken!"),this._cfg.debug&&console.error(e)}onMessage(e){if(this._cfg.heartbeatMsg&&e.data===this._cfg.heartbeatMsg)this._missedHeartbeats=0;else if("function"==typeof this._cfg.receiveMessage)return this._cfg.receiveMessage(e.data)}generateInterval(e){let t=1e3*(Math.pow(2,e)-1);return t>3e4&&(t=3e4),Math.random()*t}sendMessage(e){this._ws&&this._ws.send(e)}getState(){return this._ws&&this._ws.readyState}isConnecting(){return this._ws&&0===this._ws.readyState}isConnected(){return this._ws&&1===this._ws.readyState}isClosing(){return this._ws&&2===this._ws.readyState}isClosed(){return this._ws&&3===this._ws.readyState}close(){clearInterval(this._heartbeatInterval),this._cfg.mustReconnect=!1,this.isClosing()&&this.isClosed()||(this._ws.close(),this._cfg.debug&&console.error("Websocket closed."))}}t.default=n},474:(e,t,n)=>{t.__esModule=!0,t.getHighestSafeWindowContext=function e(t=n.g.window.self){return t===n.g.window.top||(()=>{try{return n.g.window.location.hostname!==n.g.window.parent.location.hostname}catch(e){return!0}})()?t:e(t.parent)},t.getWindowHeight=function(){return void 0!==n.g.window?n.g.window.innerHeight:0},t.getWindowWidth=function(){return void 0!==n.g.window?n.g.window.innerWidth:0},t.isClientSideRendering=function(){return"undefined"!=typeof window}}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,n),s.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var r={};return(()=>{var e=r;e.__esModule=!0;var t=n(884);e.capitalize=t.capitalize,e.isString=t.isString,e.stripHtml=t.stripHtml,e.camelCase=t.camelCase,e.copyTextToClipboard=t.copyTextToClipboard,e.fallbackCopyTextToClipboard=t.fallbackCopyTextToClipboard,e.random=t.random,e.slugify=t.slugify;var i=n(735);e.isValidUrl=i.isValidUrl,e.isValidUrls=i.isValidUrls,e.urlReplacer=i.urlReplacer,e.getDomain=i.getDomain,e.appendURLSearchParams=i.appendURLSearchParams,e.urlB64ToUint8Array=i.urlB64ToUint8Array,e.getQueryStringParameter=i.getQueryStringParameter,e.updateQueryStringParameter=i.updateQueryStringParameter;var s=n(474);e.getHighestSafeWindowContext=s.getHighestSafeWindowContext,e.getWindowWidth=s.getWindowWidth,e.getWindowHeight=s.getWindowHeight,e.isClientSideRendering=s.isClientSideRendering;var o=n(297);e.mergeDeep=o.mergeDeep,e.isObject=o.isObject,e.objectWithoutProperties=o.objectWithoutProperties;var a=n(469);e.arraysEqual=a.arraysEqual;var c=n(285);e.loadVersionBrowser=c.loadVersionBrowser;var l=f(n(466));e.LRUCache=l.default,e.LruCache=l.LruCache,e.LruCacheType=l.LruCacheType,e.CacheStrategies=l.CacheStrategies;var u=n(502);e.Logger=u.Logger;var d=f(n(507));e.WSClient=d.default,e.WSClientType=d.WSClientType,e.WSClientPropTypes=d.WSClientPropTypes;var h=n(858);function g(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(g=function(e){return e?n:t})(e)}function f(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=g(t);if(n&&n.has(e))return n.get(e);var r={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var o=i?Object.getOwnPropertyDescriptor(e,s):null;o&&(o.get||o.set)?Object.defineProperty(r,s,o):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}e.resizeImage=h.resizeImage})(),r})()));
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SelfCommunityUtils=t():e.SelfCommunityUtils=t()}(self,(()=>(()=>{"use strict";var e={469:(e,t)=>{t.__esModule=!0,t.arraysEqual=void 0,t.arraysEqual=(e,t)=>{if(e===t)return!0;if(null==e||null==t)return!1;if(e.length!==t.length)return!1;for(let n=0;n<e.length;++n)if(e[n]!==t[n])return!1;return!0}},285:(e,t)=>{t.__esModule=!0,t.loadVersionBrowser=void 0,t.loadVersionBrowser=()=>{if("userAgentData"in navigator){const e=navigator.userAgentData;let t,n,r=null;for(let i=0;i<e.brands.length;i++){const s=e.brands[i].brand;if(n=e.brands[i].version,null!==s.match(/opera|chrome|edge|safari|firefox|msie|trident/i)){if(null===s.match(/chrome/i))return t=s.substr(s.indexOf(" ")+1),{name:t,version:n};r=n}}if(null!==r)return{name:"chrome",version:r}}let e,t=navigator.userAgent,n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(n[1])?(e=/\brv[ :]+(\d+)/g.exec(t)||[],{name:"IE",version:e[1]||""}):"Chrome"===n[1]&&(e=t.match(/\bOPR\/(\d+)/),null!=e)?{name:"Opera",version:e[1]}:(n=n[2]?[n[1],n[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(e=t.match(/version\/(\d+)/i))&&n.splice(1,1,e[1]),{name:n[0],version:n[1]})}},466:(e,t)=>{t.__esModule=!0,t.default=t.LruCache=t.CacheStrategies=void 0;class n{constructor(e=1e4){this.values=new Map,this.maxEntries=e,"undefined"!=typeof window&&(window.__viewSCCache=this.values)}get(e,t){let n;return this.values.has(e)?(n=this.values.get(e),this.values.delete(e),this.values.set(e,n)):t&&(n=t,this.values.set(e,n)),n}set(e,t){if(this.values.size>=this.maxEntries){const e=this.values.keys().next().value;this.values.delete(e)}this.values.set(e,t)}hasKey(e){return this.values.has(e)}delete(e){this.values.has(e)&&this.values.delete(e)}deleteKeys(e){e.forEach((e=>{this.values.has(e)&&this.values.delete(e)}))}deleteKeysWithPrefix(e){this.values.forEach(((t,n)=>{n.startsWith(e)&&this.values.delete(n)}))}clean(){this.values=new Map}evaluate(){console.log(this.values)}}let r;t.LruCache=n,t.CacheStrategies=r,function(e){e.CACHE_FIRST="Cache-first",e.NETWORK_ONLY="Network-only",e.STALE_WHILE_REVALIDATE="Stale-While-Revalidate"}(r||(t.CacheStrategies=r={}));var i=new n;t.default=i},858:(e,t)=>{t.__esModule=!0,t.resizeImage=void 0,t.resizeImage=e=>new Promise(((t,n)=>{const r=new FileReader;r.onload=e=>{let n=new Image;n.onload=function(e){let r=document.createElement("canvas"),i=1920,s=n.width,o=n.height;s>o?s>i&&(o*=i/s,s=i):o>i&&(s*=i/o,o=i),r.width=s,r.height=o,r.getContext("2d").drawImage(n,0,0,s,o),t((e=>{let t;t=e.split(",")[0].indexOf("base64")>=0?atob(e.split(",")[1]):unescape(e.split(",")[1]);let n=e.split(",")[0].split(":")[1].split(";")[0],r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return new Blob([r],{type:n})})(r.toDataURL("image/jpeg")))},n.src=e.target.result},r.onerror=n,r.readAsDataURL(e)}))},502:(e,t)=>{t.__esModule=!0,t.Logger=void 0,t.Logger=class{static info(e,t){console.info(`%c[${e}]`,"color:#008080",` ${t}`)}static warn(e,t){console.warn(`%c[${e}]`,"color:#008080",` ${t}`)}static error(e,t){console.error(`%c[${e}]`,"color:#008080",` ${t}`)}static log(e,t){console.log(`%c[${e}]`,"color:#008080",` ${t}`)}static debug(e,t){console.debug(`%c[${e}]`,"color:#008080",` ${t}`)}}},597:(e,t)=>{t.__esModule=!0,t.isInteger=function(e){return!isNaN(e)&&parseInt(String(Number(e)))==e&&!isNaN(parseInt(String(e),10))}},297:(e,t)=>{function n(e){return"object"==typeof e&&!Array.isArray(e)&&null!==e}t.__esModule=!0,t.isFunc=function(e){return"function"==typeof e},t.isObject=n,t.mergeDeep=function e(t,r){let i=Object.assign({},t);return n(t)&&n(r)&&Object.keys(r).forEach((s=>{n(r[s])?s in t?i[s]=e(t[s],r[s]):Object.assign(i,{[s]:r[s]}):Object.assign(i,{[s]:r[s]})})),i},t.objectWithoutProperties=function(e,t){let n=e?Object.assign({},e):null;return t.forEach((function(e){n&&e in n&&delete n[e]})),n}},884:(e,t)=>{function n(e){let t=document.createElement("textarea");t.value=e,t.style.top="0",t.style.left="0",t.style.position="fixed",document.body.appendChild(t),t.focus(),t.select();try{return document.execCommand("copy"),document.body.removeChild(t),Promise.resolve()}catch(e){return document.body.removeChild(t),Promise.reject(e)}}t.__esModule=!0,t.camelCase=function(e){return e.toLowerCase().replace(/[-_]+/g," ").replace(/[^\w\s]/g,"").replace(/ (.)/g,(e=>e.toUpperCase())).replace(/ /g,"")},t.capitalize=function(e){let t="",n=e.split(" ");for(let e=0;e<n.length;e++)t+=n[e].substring(0,1).toUpperCase()+n[e].substring(1,n[e].length);return t},t.copyTextToClipboard=function(e){return navigator.clipboard?navigator.clipboard.writeText(e):n(e)},t.fallbackCopyTextToClipboard=n,t.isString=function(e){return"string"==typeof e||e instanceof String},t.random=function(){return(Math.random()+1).toString(36).substring(7)},t.slugify=function(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")},t.stripHtml=function(e){return e.replace(/<[^>]*>?/gm,"").trim()}},735:(e,t)=>{t.__esModule=!0,t.appendURLSearchParams=function(e,t){let n=e;if(t.length&&n){const e=Object.keys(t[0])[0];n+=(n.split("?")[1]?"&":"?")+`${e}=${t[0][e]}`,t.slice(1).map((e=>{const t=Object.keys(e)[0];n+=`&${t}=${e[t]}`}))}return n},t.urlReplacer=t.urlB64ToUint8Array=t.updateQueryStringParameter=t.isValidUrls=t.isValidUrl=t.getQueryStringParameter=t.getDomain=void 0,t.urlReplacer=e=>t=>function(e,t){const n=/\$\(([^)]+)?\)/g;let r=n.exec(e);for(;r;)e=e.replace(r[0],t[r[1]]),n.lastIndex=0,r=n.exec(e);return e}(e,t),t.getDomain=e=>{const t=e.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i);return t&&t[1]?t[1]:""};const n=e=>/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e);t.isValidUrl=n,t.isValidUrls=(e,t)=>e.trim().split(t).every(n),t.urlB64ToUint8Array=e=>{const t=(e+"=".repeat((4-e.length%4)%4)).replace(/-/g,"+").replace(/_/g,"/"),n=window.atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;++e)r[e]=n.charCodeAt(e);return r},t.getQueryStringParameter=(e,t)=>e&&t?new URL(e).searchParams.get(t):null,t.updateQueryStringParameter=(e,t,n)=>{if(e&&t&&n){let r=new RegExp("([?&])"+t+"=.*?(&|$)","i"),i=-1!==e.indexOf("?")?"&":"?";return e.match(r)?e.replace(r,"$1"+t+"="+n+"$2"):e+i+t+"="+n}return e}},507:(e,t)=>{t.__esModule=!0,t.default=void 0;class n{constructor(e){this._attempts=1,this._heartbeatInterval=null,this._missedHeartbeats=0,this.isValidOptions(e)&&(this._cfg=Object.assign({},{heartbeatMsg:null,debug:!1,mustReconnect:!0},e),this.connect())}static getInstance(e){return this._instance=this._instance||new n(e),this._instance}connect(){try{if(this._ws&&(this.isConnecting()||this.isConnected()))return void(this._cfg.debug&&console.info("Websocket is connecting or already connected."));"function"==typeof this._cfg.connecting&&this._cfg.connecting(),this._cfg.debug&&console.info(`Connecting to ${this._cfg.uri} ...`),this._ws=new WebSocket(this._cfg.uri,this._cfg.protocols),this._ws.onopen=this.onOpen.bind(this),this._ws.onmessage=this.onMessage.bind(this),this._ws.onerror=this.onError.bind(this),this._ws.onclose=this.onClose.bind(this),this._timer=null}catch(e){console.error(e),this.tryToReconnect()}}isValidOptions(e){let t=!1;return e?(e.uri||(console.error("Invalid WSClient Uri options."),t=!0),e&&e.connecting&&"function"!=typeof e.connecting&&(console.error("Invalid WSClient connecting options."),t=!0),e&&e.connected&&"function"!=typeof e.connected&&(console.error("Invalid WSClient connected options."),t=!0),e&&e.receiveMessage&&"function"!=typeof e.receiveMessage&&(console.error("Invalid WSClient receiveMessage options."),t=!0),e&&e.disconnected&&"function"!=typeof e.disconnected&&(console.error("Invalid WSClient connecting options."),t=!0),e&&e.heartbeatMsg&&"string"!=typeof e.heartbeatMsg&&(console.error("Invalid WSClient heartbeatMsg options."),t=!0),e&&e.debug&&"boolean"!=typeof e.debug&&(console.error("Invalid WSClient debug options."),t=!0),!t):(console.error("Invalid WSClient options."),t)}tryToReconnect(){if(this._cfg.mustReconnect&&!this._timer){this._cfg.debug&&console.info("Reconnecting...");let e=this.generateInterval(this._attempts);this._timer=setTimeout(this.reconnect.bind(this),e)}}reconnect(){this._attempts++,this.connect()}sendHeartbeat(){try{if(this._missedHeartbeats++,this._missedHeartbeats>3)throw new Error("Too many missed heartbeats.");this._ws.send(this._cfg.heartbeatMsg)}catch(e){clearInterval(this._heartbeatInterval),this._heartbeatInterval=null,this._cfg.debug&&console.warn(`Closing connection. Reason: ${e.message}`),this.isClosing()||this.isClosed()||this.close()}}onOpen(){this._cfg.debug&&console.info("Connected!"),this._attempts=1,this._cfg.heartbeatMsg&&null===this._heartbeatInterval&&(this._missedHeartbeats=0,this._heartbeatInterval=setInterval(this.sendHeartbeat.bind(this),5e3)),"function"==typeof this._cfg.connected&&this._cfg.connected()}onClose(e){this._cfg.debug&&console.info("Connection closed!"),"function"==typeof this._cfg.disconnected&&this._cfg.disconnected(e),this.tryToReconnect()}onError(e){this._cfg.debug&&console.error("Websocket connection is broken!"),this._cfg.debug&&console.error(e)}onMessage(e){if(this._cfg.heartbeatMsg&&e.data===this._cfg.heartbeatMsg)this._missedHeartbeats=0;else if("function"==typeof this._cfg.receiveMessage)return this._cfg.receiveMessage(e.data)}generateInterval(e){let t=1e3*(Math.pow(2,e)-1);return t>3e4&&(t=3e4),Math.random()*t}sendMessage(e){this._ws&&this._ws.send(e)}getState(){return this._ws&&this._ws.readyState}isConnecting(){return this._ws&&0===this._ws.readyState}isConnected(){return this._ws&&1===this._ws.readyState}isClosing(){return this._ws&&2===this._ws.readyState}isClosed(){return this._ws&&3===this._ws.readyState}close(){clearInterval(this._heartbeatInterval),this._cfg.mustReconnect=!1,this.isClosing()&&this.isClosed()||(this._ws.close(),this._cfg.debug&&console.error("Websocket closed."))}}t.default=n},474:(e,t,n)=>{t.__esModule=!0,t.getHighestSafeWindowContext=function e(t=n.g.window.self){return t===n.g.window.top||(()=>{try{return n.g.window.location.hostname!==n.g.window.parent.location.hostname}catch(e){return!0}})()?t:e(t.parent)},t.getWindowHeight=function(){return void 0!==n.g.window?n.g.window.innerHeight:0},t.getWindowWidth=function(){return void 0!==n.g.window?n.g.window.innerWidth:0},t.isClientSideRendering=function(){return"undefined"!=typeof window}}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,n),s.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var r={};return(()=>{var e=r;e.__esModule=!0;var t=n(884);e.capitalize=t.capitalize,e.isString=t.isString,e.stripHtml=t.stripHtml,e.camelCase=t.camelCase,e.copyTextToClipboard=t.copyTextToClipboard,e.fallbackCopyTextToClipboard=t.fallbackCopyTextToClipboard,e.random=t.random,e.slugify=t.slugify;var i=n(735);e.isValidUrl=i.isValidUrl,e.isValidUrls=i.isValidUrls,e.urlReplacer=i.urlReplacer,e.getDomain=i.getDomain,e.appendURLSearchParams=i.appendURLSearchParams,e.urlB64ToUint8Array=i.urlB64ToUint8Array,e.getQueryStringParameter=i.getQueryStringParameter,e.updateQueryStringParameter=i.updateQueryStringParameter;var s=n(474);e.getHighestSafeWindowContext=s.getHighestSafeWindowContext,e.getWindowWidth=s.getWindowWidth,e.getWindowHeight=s.getWindowHeight,e.isClientSideRendering=s.isClientSideRendering;var o=n(297);e.mergeDeep=o.mergeDeep,e.isObject=o.isObject,e.objectWithoutProperties=o.objectWithoutProperties,e.isFunc=o.isFunc;var a=n(597);e.isInteger=a.isInteger;var c=n(469);e.arraysEqual=c.arraysEqual;var l=n(285);e.loadVersionBrowser=l.loadVersionBrowser;var u=p(n(466));e.LRUCache=u.default,e.LruCache=u.LruCache,e.LruCacheType=u.LruCacheType,e.CacheStrategies=u.CacheStrategies;var d=n(502);e.Logger=d.Logger;var h=p(n(507));e.WSClient=h.default,e.WSClientType=h.WSClientType,e.WSClientPropTypes=h.WSClientPropTypes;var g=n(858);function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(f=function(e){return e?n:t})(e)}function p(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=f(t);if(n&&n.has(e))return n.get(e);var r={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var o=i?Object.getOwnPropertyDescriptor(e,s):null;o&&(o.get||o.set)?Object.defineProperty(r,s,o):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}e.resizeImage=g.resizeImage})(),r})()));
|
|
3
3
|
//# sourceMappingURL=utils.js.map
|
package/lib/umd/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","mappings":"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","sources":["webpack://SelfCommunityUtils/webpack/universalModuleDefinition","webpack://SelfCommunityUtils/./src/utils/array.ts","webpack://SelfCommunityUtils/./src/utils/browser.ts","webpack://SelfCommunityUtils/./src/utils/cache.ts","webpack://SelfCommunityUtils/./src/utils/image.ts","webpack://SelfCommunityUtils/./src/utils/logger.ts","webpack://SelfCommunityUtils/./src/utils/object.ts","webpack://SelfCommunityUtils/./src/utils/string.ts","webpack://SelfCommunityUtils/./src/utils/url.ts","webpack://SelfCommunityUtils/./src/utils/websocket.ts","webpack://SelfCommunityUtils/./src/utils/window.ts","webpack://SelfCommunityUtils/webpack/bootstrap","webpack://SelfCommunityUtils/webpack/runtime/global","webpack://SelfCommunityUtils/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SelfCommunityUtils\"] = factory();\n\telse\n\t\troot[\"SelfCommunityUtils\"] = factory();\n})(self, () => {\nreturn ","/**\n * Check if two arrays are equal\n * @param a\n * @param b\n * @return boolean\n */\nexport const arraysEqual = (a, b) => {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n\n // If you don't care about the order of the elements inside\n // the array, you should sort both arrays here.\n // Please note that calling sort on an array will modify that array.\n // you might want to clone your array first.\n\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n","/**\n * Get browser version to track on backend\n * @return {{name: string, version: null}|{name: string, version: string}|{name: *, version: *}|{name: string, version}}\n */\nexport const loadVersionBrowser = () => {\n if ('userAgentData' in navigator) {\n // navigator.userAgentData is not available in\n // Firefox and Safari\n const uaData: Array<any> = navigator['userAgentData'];\n // Outputs of navigator.userAgentData.brands[n].brand are e.g.\n // Chrome: 'Google Chrome'\n // Edge: 'Microsoft Edge'\n // Opera: 'Opera'\n let browsername;\n let browserversion;\n let chromeVersion = null;\n for (let i = 0; i < uaData['brands'].length; i++) {\n const brand = uaData['brands'][i].brand;\n browserversion = uaData['brands'][i].version;\n if (brand.match(/opera|chrome|edge|safari|firefox|msie|trident/i) !== null) {\n // If we have a chrome match, save the match, but try to find another match\n // E.g. Edge can also produce a false Chrome match.\n if (brand.match(/chrome/i) !== null) {\n chromeVersion = browserversion;\n }\n // If this is not a chrome match return immediately\n else {\n browsername = brand.substr(brand.indexOf(' ') + 1);\n return {\n name: browsername,\n version: browserversion,\n };\n }\n }\n }\n // No non-Chrome match was found. If we have a chrome match, return it.\n if (chromeVersion !== null) {\n return {\n name: 'chrome',\n version: chromeVersion,\n };\n }\n }\n // If no userAgentData is not present, or if no match via userAgentData was found,\n // try to extract the browser name and version from userAgent\n const userAgent = navigator.userAgent;\n let ua = userAgent;\n let tem;\n let M: any = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n if (/trident/i.test(M[1])) {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n return {name: 'IE', version: tem[1] || ''};\n }\n if (M[1] === 'Chrome') {\n tem = ua.match(/\\bOPR\\/(\\d+)/);\n if (tem != null) {\n return {name: 'Opera', version: tem[1]};\n }\n }\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) {\n M.splice(1, 1, tem[1]);\n }\n return {\n name: M[0],\n version: M[1],\n };\n};\n","/**\n * LruCache interface\n */\nexport interface LruCacheType<T> {\n get: (key: string, value?: T) => T;\n set: (key: string, value: T) => void;\n hasKey: (key: string) => boolean;\n delete: (key: string) => void;\n deleteKeys: (keys: string[]) => void;\n deleteKeysWithPrefix: (prefix: string) => void;\n clean: () => void;\n evaluate: () => void;\n}\n\n/**\n * LruCache\n */\nexport class LruCache<T> {\n private values: Map<string, T> = new Map<string, T>();\n private maxEntries;\n\n /**\n * Initialize Cache\n * @param maxEntries\n */\n constructor(maxEntries = 10000) {\n this.maxEntries = maxEntries;\n if (typeof window !== 'undefined') {\n window['__viewSCCache'] = this.values;\n }\n }\n\n /**\n * Get a key from the map store\n * @param key\n * @param value\n */\n public get(key: string, value?: T): T {\n const hasKey = this.values.has(key);\n let entry: T;\n if (hasKey) {\n // peek the entry, re-insert(updated if value) for LRU strategy\n entry = this.values.get(key);\n this.values.delete(key);\n this.values.set(key, entry);\n } else if (value) {\n // insert value if passed\n entry = value;\n this.values.set(key, entry);\n }\n return entry;\n }\n\n /**\n * Set a key in the store\n * @param key\n * @param value\n */\n public set(key: string, value: T): void {\n if (this.values.size >= this.maxEntries) {\n // least-recently used cache eviction strategy\n const keyToDelete = this.values.keys().next().value;\n this.values.delete(keyToDelete);\n }\n this.values.set(key, value);\n }\n\n /**\n * Check if key is in cache\n * @param key\n */\n public hasKey(key: string): boolean {\n return this.values.has(key);\n }\n\n /**\n * Delete a key in the store\n * @param key\n */\n public delete(key: string): void {\n const hasKey = this.values.has(key);\n if (hasKey) {\n this.values.delete(key);\n }\n }\n\n /**\n * Delete all entry with prefix keys\n * @param keys\n */\n public deleteKeys(keys: string[]): void {\n keys.forEach((k) => {\n const hasKey = this.values.has(k);\n if (hasKey) {\n this.values.delete(k);\n }\n });\n }\n\n /**\n * Delete all entry with prefix keys\n * @param prefix\n */\n public deleteKeysWithPrefix(prefix: string): void {\n this.values.forEach((v, k) => {\n if (k.startsWith(prefix)) {\n this.values.delete(k);\n }\n });\n }\n\n /**\n * Clean the store\n */\n public clean(): void {\n this.values = new Map<string, T>();\n }\n\n /**\n * Print the store in the console\n * Only for debug\n */\n public evaluate(): void {\n console.log(this.values);\n }\n}\n\n/**\n * Define the various types of caching strategies\n */\nexport enum CacheStrategies {\n CACHE_FIRST = 'Cache-first',\n NETWORK_ONLY = 'Network-only',\n STALE_WHILE_REVALIDATE = 'Stale-While-Revalidate'\n}\n\n/**\n * Export global cache\n */\nconst cache: LruCacheType<any> = new LruCache<any>();\nexport default cache;\n","const dataURItoBlob = (dataURI) => {\n // convert base64/URLEncoded data component to raw binary data held in a string\n let byteString;\n if (dataURI.split(',')[0].indexOf('base64') >= 0) byteString = atob(dataURI.split(',')[1]);\n else byteString = unescape(dataURI.split(',')[1]);\n // separate out the mime component\n let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n let ia = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], {type: mimeString});\n};\n\nconst resizeImage = (file) =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n let image = new Image();\n image.onload = function (imageEvent) {\n // Resize the image\n let canvas = document.createElement('canvas'),\n max_size = 1920,\n width = image.width,\n height = image.height;\n if (width > height) {\n if (width > max_size) {\n height *= max_size / width;\n width = max_size;\n }\n } else {\n if (height > max_size) {\n width *= max_size / height;\n height = max_size;\n }\n }\n canvas.width = width;\n canvas.height = height;\n canvas.getContext('2d').drawImage(image, 0, 0, width, height);\n resolve(dataURItoBlob(canvas.toDataURL('image/jpeg')));\n };\n image.src = event.target.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n\nexport {resizeImage};\n","/**\n * Emit styled message\n */\nexport class Logger {\n static info(scope, message) {\n console.info(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n\n static warn(scope, message) {\n console.warn(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n\n static error(scope, message) {\n console.error(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n\n static log(scope, message) {\n console.log(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n\n static debug(scope, message) {\n console.debug(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n}\n","/**\n * Check if v is an object\n * @param v\n */\nexport function isObject(v) {\n return typeof v === 'object' && !Array.isArray(v) && v !== null;\n}\n\n/**\n * Perfrom deep merge of two objects (not a shallow merge)\n * @param target\n * @param source\n * @return {*}\n */\nexport function mergeDeep(target: object, source: object): object {\n let output = Object.assign({}, target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, {[key]: source[key]});\n } else {\n output[key] = mergeDeep(target[key], source[key]);\n }\n } else {\n Object.assign(output, {[key]: source[key]});\n }\n });\n }\n return output;\n}\n\n/**\n * Get an object without keys\n * @param obj\n * @param keys\n */\nexport function objectWithoutProperties<T>(obj: T | null, keys: string[]): T {\n let target: T = obj ? Object.assign({}, obj) : null;\n keys.forEach(function (i: string) {\n if (target && i in target) {\n delete target[i];\n }\n });\n return target;\n}\n","/**\n * Check if v is a string\n * @param v\n */\nexport function isString(v) {\n return typeof v === 'string' || v instanceof String;\n}\n\n/**\n * Capitalize a string\n * @param str\n */\nexport function capitalize(str: string): string {\n let strVal = '';\n let strArr: string[] = str.split(' ');\n for (let chr = 0; chr < strArr.length; chr++) {\n strVal += strArr[chr].substring(0, 1).toUpperCase() + strArr[chr].substring(1, strArr[chr].length);\n }\n return strVal;\n}\n\n/**\n * CamelCase a string\n * @param str\n */\nexport function camelCase(str: string): string {\n // Lower cases the string\n return (\n str\n .toLowerCase()\n // Replaces any - or _ characters with a space\n .replace(/[-_]+/g, ' ')\n // Removes any non alphanumeric characters\n .replace(/[^\\w\\s]/g, '')\n // Uppercases the first character in each group immediately following a space\n // (delimited by spaces)\n .replace(/ (.)/g, ($1) => {\n return $1.toUpperCase();\n })\n // Removes spaces\n .replace(/ /g, '')\n );\n}\n\n/**\n * Stripe html tags from a string\n * @param str\n */\nexport function stripHtml(str: string): string {\n return str.replace(/<[^>]*>?/gm, '').trim();\n}\n\nexport function random() {\n return (Math.random() + 1).toString(36).substring(7);\n}\n\n/**\n * Fallback if navigator.clipboard doensn't exist\n * @param text\n * @returns {Promise<void>}\n */\nexport function fallbackCopyTextToClipboard(text) {\n let textArea = document.createElement('textarea');\n textArea.value = text;\n\n // Avoid scrolling to bottom\n textArea.style.top = '0';\n textArea.style.left = '0';\n textArea.style.position = 'fixed';\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n document.execCommand('copy');\n document.body.removeChild(textArea);\n return Promise.resolve();\n } catch (err) {\n document.body.removeChild(textArea);\n return Promise.reject(err);\n }\n}\n\n/**\n * Copy text to clipboard\n * @param text\n * @returns {Promise<void>}\n *\n * Ex.\n * copyTextToClipboard(text).then(\n * function () {\n * console.log('Async: Copying to clipboard was successful!');\n * },\n * function (err) {\n * console.error('Async: Could not copy text: ', err);\n * });\n */\nexport function copyTextToClipboard(text) {\n if (!navigator.clipboard) {\n return fallbackCopyTextToClipboard(text);\n }\n return navigator.clipboard.writeText(text);\n}\n\nexport function slugify(str) {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n","/**\n * Utility Url Replacer\n * @param path\n */\nexport const urlReplacer = (path: string) => {\n const replacer = function (tpl, data) {\n const re = /\\$\\(([^)]+)?\\)/g;\n let match = re.exec(tpl);\n while (match) {\n tpl = tpl.replace(match[0], data[match[1]]);\n re.lastIndex = 0;\n match = re.exec(tpl);\n }\n return tpl;\n };\n return (params: object) => replacer(path, params);\n};\n\n/**\n * Get domain\n * @param url\n */\nexport const getDomain = (url: string): string => {\n // eslint-disable-next-line no-useless-escape,@typescript-eslint/prefer-regexp-exec\n const matches = url.match(/^https?\\:\\/\\/([^\\/?#]+)(?:[\\/?#]|$)/i);\n if (matches && matches[1]) {\n return matches[1];\n }\n return '';\n};\n\n/**\n * Check a str is a valid url pattern\n * @param url\n */\nexport const isValidUrl = (url: string): boolean => {\n const regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/;\n return regexp.test(url);\n};\n\n/**\n * Check a str is a valid list of urls separated by delimiter\n * @param value\n * @param delimiter\n */\nexport const isValidUrls = (value: string, delimiter: string): boolean => {\n const urls = value.trim().split(delimiter);\n return urls.every(isValidUrl);\n};\n\n/**\n * Append params\n * @param baseUrl\n * @param queryParams\n */\nexport function appendURLSearchParams(baseUrl: string, queryParams: Record<string, string | number>[]) {\n let _url = baseUrl;\n if (queryParams.length && _url) {\n const key = Object.keys(queryParams[0])[0];\n _url += (_url.split('?')[1] ? '&' : '?') + `${key}=${queryParams[0][key]}`;\n queryParams.slice(1).map((p) => {\n const key = Object.keys(p)[0];\n _url += `&${key}=${p[key]}`;\n });\n }\n return _url;\n}\n\n/**\n * Take the application server's public key, which is Base64 URL-safe encoded,\n * and convert it to a UInt8Array, because this is the expected input of the subscribe()\n */\nexport const urlB64ToUint8Array = (base64String) => {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n};\n\n/**\n * Get a query string parameter\n */\nexport const getQueryStringParameter = (uri, key) => {\n if (uri && key) {\n let params = new URL(uri).searchParams;\n return params.get(key);\n }\n return null;\n};\n\n/**\n * Add or update a query string parameter\n */\nexport const updateQueryStringParameter = (uri, key, value) => {\n if (uri && key && value) {\n let re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');\n let separator = uri.indexOf('?') !== -1 ? '&' : '?';\n if (uri.match(re)) {\n return uri.replace(re, '$1' + key + '=' + value + '$2');\n } else {\n return uri + separator + key + '=' + value;\n }\n }\n return uri;\n};\n","/**\n * WSClientPropTypes interface\n */\nexport interface WSClientPropTypes {\n /**\n * The Websocket URI\n */\n uri: string;\n\n /**\n * The Websocket Protocols\n */\n protocols: string | string[];\n\n /**\n * String to identify the heartbeat message.\n */\n heartbeatMsg?: string;\n\n /**\n * Reconnect the websocket if close\n */\n mustReconnect?: boolean;\n\n /**\n * Callback called after the websocket is connected.\n */\n connected?: () => any;\n\n /**\n * Callback called when the websocket is connecting.\n */\n connecting?: () => any;\n\n /**\n * Callback called after the websocket is disconnected.\n */\n disconnected?: (evt) => any;\n\n /**\n * Callback called when a message is received from the websocket.\n */\n receiveMessage?: (data) => any;\n\n /**\n * Enable/disable debug\n */\n debug?: boolean;\n}\n\nexport interface WSClientType {\n /**\n * Send message\n * @param message\n */\n sendMessage: (message) => void;\n\n /**\n * Get current state\n */\n getState: () => string;\n\n /**\n * Get current connection state\n */\n isConnecting: () => boolean;\n\n /**\n * Check if ws is connected\n */\n isConnected: () => boolean;\n\n /**\n * Check if ws is closing connection\n */\n isClosing: () => boolean;\n\n /**\n * Return if ws is closed\n */\n isClosed: () => boolean;\n\n /**\n * Close the connection\n */\n close: () => void;\n}\n\n/**\n * WSClient: manage socket connection\n * @param options\n * @constructor\n */\nexport default class WSClient implements WSClientType {\n private static _instance;\n private _cfg;\n private _ws;\n private _timer;\n private _attempts = 1;\n private _heartbeatInterval = null;\n private _missedHeartbeats = 0;\n\n /**\n * Constructor\n * @param cfg\n */\n constructor(cfg: WSClientPropTypes) {\n if (!this.isValidOptions(cfg)) {\n return;\n }\n this._cfg = Object.assign({}, {heartbeatMsg: null, debug: false, mustReconnect: true}, cfg);\n this.connect();\n }\n\n /**\n * Get instance\n */\n public static getInstance(cfg): WSClient {\n this._instance = this._instance || new WSClient(cfg);\n return this._instance;\n }\n\n /**\n * Connect\n */\n connect() {\n try {\n if (this._ws && (this.isConnecting() || this.isConnected())) {\n // There is already a connection\n this._cfg.debug && console.info('Websocket is connecting or already connected.');\n return;\n }\n\n // Callback 'connecting' if exist\n typeof this._cfg.connecting === 'function' && this._cfg.connecting();\n this._cfg.debug && console.info(`Connecting to ${this._cfg.uri} ...`);\n\n // Open the connection\n this._ws = new WebSocket(this._cfg.uri, this._cfg.protocols);\n this._ws.onopen = this.onOpen.bind(this);\n this._ws.onmessage = this.onMessage.bind(this);\n this._ws.onerror = this.onError.bind(this);\n this._ws.onclose = this.onClose.bind(this);\n this._timer = null;\n } catch (err) {\n console.error(err);\n this.tryToReconnect();\n }\n }\n\n /**\n * Validate options\n * @param cfg\n */\n isValidOptions(cfg: WSClientPropTypes) {\n let _error = false;\n if (!cfg) {\n console.error('Invalid WSClient options.');\n return _error;\n }\n if (!cfg.uri) {\n console.error('Invalid WSClient Uri options.');\n _error = true;\n }\n if (cfg && cfg.connecting && !(typeof cfg.connecting === 'function')) {\n console.error('Invalid WSClient connecting options.');\n _error = true;\n }\n if (cfg && cfg.connected && !(typeof cfg.connected === 'function')) {\n console.error('Invalid WSClient connected options.');\n _error = true;\n }\n if (cfg && cfg.receiveMessage && !(typeof cfg.receiveMessage === 'function')) {\n console.error('Invalid WSClient receiveMessage options.');\n _error = true;\n }\n if (cfg && cfg.disconnected && !(typeof cfg.disconnected === 'function')) {\n console.error('Invalid WSClient connecting options.');\n _error = true;\n }\n if (cfg && cfg.heartbeatMsg && !(typeof cfg.heartbeatMsg === 'string')) {\n console.error('Invalid WSClient heartbeatMsg options.');\n _error = true;\n }\n if (cfg && cfg.debug && !(typeof cfg.debug === 'boolean')) {\n console.error('Invalid WSClient debug options.');\n _error = true;\n }\n return !_error;\n }\n\n /**\n * Try to reconnect if previous connection failed\n * Generate an interval, after that try to reconnect\n */\n tryToReconnect() {\n if (this._cfg.mustReconnect && !this._timer) {\n this._cfg.debug && console.info(`Reconnecting...`);\n let interval = this.generateInterval(this._attempts);\n this._timer = setTimeout(this.reconnect.bind(this), interval);\n }\n }\n\n /**\n * Reestablish the connection\n * Increase the number of attempts\n */\n reconnect() {\n this._attempts++;\n this.connect();\n }\n\n /**\n * Send heartbeat every 5 seconds\n * If missing more than 3 heartbeats close connection\n */\n sendHeartbeat() {\n try {\n this._missedHeartbeats++;\n if (this._missedHeartbeats > 3) throw new Error('Too many missed heartbeats.');\n this._ws.send(this._cfg.heartbeatMsg);\n } catch (e) {\n clearInterval(this._heartbeatInterval);\n this._heartbeatInterval = null;\n this._cfg.debug && console.warn(`Closing connection. Reason: ${e.message}`);\n if (!this.isClosing() && !this.isClosed()) {\n this.close();\n }\n }\n }\n\n /**\n * Established the new connection\n * Reset this._attempts counter\n */\n onOpen() {\n this._cfg.debug && console.info('Connected!');\n this._attempts = 1;\n if (this._cfg.heartbeatMsg && this._heartbeatInterval === null) {\n this._missedHeartbeats = 0;\n this._heartbeatInterval = setInterval(this.sendHeartbeat.bind(this), 5000);\n }\n typeof this._cfg.connected === 'function' && this._cfg.connected();\n }\n\n /**\n * Connection closed. Try to reconnect.\n * @param evt\n */\n onClose(evt) {\n this._cfg.debug && console.info('Connection closed!');\n typeof this._cfg.disconnected === 'function' && this._cfg.disconnected(evt);\n this.tryToReconnect();\n }\n\n /**\n * An error occured\n * @param evt\n */\n onError(evt) {\n this._cfg.debug && console.error('Websocket connection is broken!');\n this._cfg.debug && console.error(evt);\n }\n\n /**\n * A message has arrived.\n * If it is the heartbeat -> reset this._missedHeartbeats\n * If it is data pass data to the callback\n * @param evt\n */\n onMessage(evt) {\n if (this._cfg.heartbeatMsg && evt.data === this._cfg.heartbeatMsg) {\n // reset the counter for missed heartbeats\n this._missedHeartbeats = 0;\n } else if (typeof this._cfg.receiveMessage === 'function') {\n return this._cfg.receiveMessage(evt.data);\n }\n }\n\n /**\n * Generate an interval that is randomly between 0 and 2^k - 1, where k is\n * the number of connection attmpts, with a maximum interval of 30 seconds,\n * so it starts at 0 - 1 seconds and maxes out at 0 - 30 seconds\n */\n generateInterval(k) {\n let maxInterval = (Math.pow(2, k) - 1) * 1000;\n // If the generated interval is more than 30 seconds, truncate it down to 30 seconds.\n if (maxInterval > 30 * 1000) {\n maxInterval = 30 * 1000;\n }\n // generate the interval to a random number between 0 and the maxInterval determined from above\n return Math.random() * maxInterval;\n }\n\n /**\n * Send message\n * @param message\n */\n public sendMessage(message) {\n this._ws && this._ws.send(message);\n }\n\n /**\n * Get the ws state\n */\n public getState() {\n return this._ws && this._ws.readyState;\n }\n\n /**\n * Check if ws is in connecting state\n */\n public isConnecting() {\n return this._ws && this._ws.readyState === 0;\n }\n\n /**\n * Check if ws is connected\n */\n public isConnected() {\n return this._ws && this._ws.readyState === 1;\n }\n\n /**\n * Check if ws is in closing state\n */\n public isClosing() {\n return this._ws && this._ws.readyState === 2;\n }\n\n /**\n * Check if ws is closed\n */\n public isClosed() {\n return this._ws && this._ws.readyState === 3;\n }\n\n /**\n * Close the connection\n */\n public close() {\n clearInterval(this._heartbeatInterval);\n this._cfg.mustReconnect = false;\n if (!this.isClosing() || !this.isClosed()) {\n this._ws.close();\n this._cfg.debug && console.error('Websocket closed.');\n }\n }\n}\n","export function getWindowWidth() {\n return typeof global.window !== 'undefined' ? global.window.innerWidth : 0;\n}\n\nexport function getWindowHeight() {\n return typeof global.window !== 'undefined' ? global.window.innerHeight : 0;\n}\n\nconst isCrossOriginFrame = () => {\n try {\n return global.window.location.hostname !== global.window.parent.location.hostname;\n } catch (e) {\n return true;\n }\n};\n\n// Get the highest window context that isn't cross-origin\n// (When in an iframe)\nexport function getHighestSafeWindowContext(self = global.window.self) {\n // If we reached the top level, return self\n if (self === global.window.top) {\n return self;\n }\n\n // If parent is the same origin, we can move up one context\n // Reference: https://stackoverflow.com/a/21965342/1601953\n if (!isCrossOriginFrame()) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n return getHighestSafeWindowContext(self.parent);\n }\n\n // If a different origin, we consider the current level\n // as the top reachable one\n return self;\n}\n\nexport function isClientSideRendering() {\n return typeof window !== 'undefined';\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","import {capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify} from './utils/string';\nimport {\n isValidUrl,\n isValidUrls,\n urlReplacer,\n getDomain,\n appendURLSearchParams,\n urlB64ToUint8Array,\n getQueryStringParameter,\n updateQueryStringParameter\n} from './utils/url';\nimport {getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering} from './utils/window';\nimport {mergeDeep, isObject, objectWithoutProperties} from './utils/object';\nimport {arraysEqual} from './utils/array';\nimport {loadVersionBrowser} from './utils/browser';\nimport LRUCache, {LruCache, LruCacheType, CacheStrategies} from './utils/cache';\nimport {Logger} from './utils/logger';\nimport WSClient, {WSClientType, WSClientPropTypes} from './utils/websocket';\nimport {resizeImage} from './utils/image';\n\n/**\n * Export all utilities\n */\nexport {\n capitalize,\n isString,\n stripHtml,\n camelCase,\n copyTextToClipboard,\n fallbackCopyTextToClipboard,\n random,\n slugify,\n isValidUrl,\n isValidUrls,\n urlReplacer,\n getDomain,\n appendURLSearchParams,\n urlB64ToUint8Array,\n getQueryStringParameter,\n updateQueryStringParameter,\n getHighestSafeWindowContext,\n getWindowWidth,\n getWindowHeight,\n isClientSideRendering,\n Logger,\n mergeDeep,\n isObject,\n objectWithoutProperties,\n arraysEqual,\n WSClient,\n WSClientType,\n WSClientPropTypes,\n loadVersionBrowser,\n LRUCache,\n LruCache,\n LruCacheType,\n CacheStrategies,\n resizeImage\n};\n"],"names":["root","factory","exports","module","define","amd","self","a","b","length","i","navigator","uaData","browsername","browserversion","chromeVersion","brand","version","match","substr","indexOf","name","tem","ua","userAgent","M","test","exec","appName","appVersion","splice","LruCache","constructor","maxEntries","values","Map","this","window","get","key","value","entry","has","delete","set","size","keyToDelete","keys","next","hasKey","deleteKeys","forEach","k","deleteKeysWithPrefix","prefix","v","startsWith","clean","evaluate","console","log","CacheStrategies","file","Promise","resolve","reject","reader","FileReader","onload","event","image","Image","imageEvent","canvas","document","createElement","max_size","width","height","getContext","drawImage","dataURI","byteString","split","atob","unescape","mimeString","ia","Uint8Array","charCodeAt","Blob","type","dataURItoBlob","toDataURL","src","target","result","onerror","readAsDataURL","static","scope","message","info","warn","error","debug","isObject","Array","isArray","mergeDeep","source","output","Object","assign","obj","fallbackCopyTextToClipboard","text","textArea","style","top","left","position","body","appendChild","focus","select","execCommand","removeChild","err","str","toLowerCase","replace","$1","toUpperCase","strVal","strArr","chr","substring","clipboard","writeText","String","Math","random","toString","trim","baseUrl","queryParams","_url","slice","map","p","path","params","tpl","data","re","lastIndex","replacer","url","matches","isValidUrl","delimiter","every","base64String","base64","repeat","rawData","outputArray","uri","URL","searchParams","RegExp","separator","WSClient","cfg","_attempts","_heartbeatInterval","_missedHeartbeats","isValidOptions","_cfg","heartbeatMsg","mustReconnect","connect","_instance","_ws","isConnecting","isConnected","connecting","WebSocket","protocols","onopen","onOpen","bind","onmessage","onMessage","onError","onclose","onClose","_timer","tryToReconnect","_error","connected","receiveMessage","disconnected","interval","generateInterval","setTimeout","reconnect","sendHeartbeat","Error","send","e","clearInterval","isClosing","isClosed","close","setInterval","evt","maxInterval","pow","sendMessage","getState","readyState","getHighestSafeWindowContext","global","location","hostname","parent","isCrossOriginFrame","innerHeight","innerWidth","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","g","globalThis","Function"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"utils.js","mappings":"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","sources":["webpack://SelfCommunityUtils/webpack/universalModuleDefinition","webpack://SelfCommunityUtils/./src/utils/array.ts","webpack://SelfCommunityUtils/./src/utils/browser.ts","webpack://SelfCommunityUtils/./src/utils/cache.ts","webpack://SelfCommunityUtils/./src/utils/image.ts","webpack://SelfCommunityUtils/./src/utils/logger.ts","webpack://SelfCommunityUtils/./src/utils/number.ts","webpack://SelfCommunityUtils/./src/utils/object.ts","webpack://SelfCommunityUtils/./src/utils/string.ts","webpack://SelfCommunityUtils/./src/utils/url.ts","webpack://SelfCommunityUtils/./src/utils/websocket.ts","webpack://SelfCommunityUtils/./src/utils/window.ts","webpack://SelfCommunityUtils/webpack/bootstrap","webpack://SelfCommunityUtils/webpack/runtime/global","webpack://SelfCommunityUtils/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SelfCommunityUtils\"] = factory();\n\telse\n\t\troot[\"SelfCommunityUtils\"] = factory();\n})(self, () => {\nreturn ","/**\n * Check if two arrays are equal\n * @param a\n * @param b\n * @return boolean\n */\nexport const arraysEqual = (a, b) => {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n\n // If you don't care about the order of the elements inside\n // the array, you should sort both arrays here.\n // Please note that calling sort on an array will modify that array.\n // you might want to clone your array first.\n\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n","/**\n * Get browser version to track on backend\n * @return {{name: string, version: null}|{name: string, version: string}|{name: *, version: *}|{name: string, version}}\n */\nexport const loadVersionBrowser = () => {\n if ('userAgentData' in navigator) {\n // navigator.userAgentData is not available in\n // Firefox and Safari\n const uaData: Array<any> = navigator['userAgentData'];\n // Outputs of navigator.userAgentData.brands[n].brand are e.g.\n // Chrome: 'Google Chrome'\n // Edge: 'Microsoft Edge'\n // Opera: 'Opera'\n let browsername;\n let browserversion;\n let chromeVersion = null;\n for (let i = 0; i < uaData['brands'].length; i++) {\n const brand = uaData['brands'][i].brand;\n browserversion = uaData['brands'][i].version;\n if (brand.match(/opera|chrome|edge|safari|firefox|msie|trident/i) !== null) {\n // If we have a chrome match, save the match, but try to find another match\n // E.g. Edge can also produce a false Chrome match.\n if (brand.match(/chrome/i) !== null) {\n chromeVersion = browserversion;\n }\n // If this is not a chrome match return immediately\n else {\n browsername = brand.substr(brand.indexOf(' ') + 1);\n return {\n name: browsername,\n version: browserversion,\n };\n }\n }\n }\n // No non-Chrome match was found. If we have a chrome match, return it.\n if (chromeVersion !== null) {\n return {\n name: 'chrome',\n version: chromeVersion,\n };\n }\n }\n // If no userAgentData is not present, or if no match via userAgentData was found,\n // try to extract the browser name and version from userAgent\n const userAgent = navigator.userAgent;\n let ua = userAgent;\n let tem;\n let M: any = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n if (/trident/i.test(M[1])) {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n return {name: 'IE', version: tem[1] || ''};\n }\n if (M[1] === 'Chrome') {\n tem = ua.match(/\\bOPR\\/(\\d+)/);\n if (tem != null) {\n return {name: 'Opera', version: tem[1]};\n }\n }\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) {\n M.splice(1, 1, tem[1]);\n }\n return {\n name: M[0],\n version: M[1],\n };\n};\n","/**\n * LruCache interface\n */\nexport interface LruCacheType<T> {\n get: (key: string, value?: T) => T;\n set: (key: string, value: T) => void;\n hasKey: (key: string) => boolean;\n delete: (key: string) => void;\n deleteKeys: (keys: string[]) => void;\n deleteKeysWithPrefix: (prefix: string) => void;\n clean: () => void;\n evaluate: () => void;\n}\n\n/**\n * LruCache\n */\nexport class LruCache<T> {\n private values: Map<string, T> = new Map<string, T>();\n private maxEntries;\n\n /**\n * Initialize Cache\n * @param maxEntries\n */\n constructor(maxEntries = 10000) {\n this.maxEntries = maxEntries;\n if (typeof window !== 'undefined') {\n window['__viewSCCache'] = this.values;\n }\n }\n\n /**\n * Get a key from the map store\n * @param key\n * @param value\n */\n public get(key: string, value?: T): T {\n const hasKey = this.values.has(key);\n let entry: T;\n if (hasKey) {\n // peek the entry, re-insert(updated if value) for LRU strategy\n entry = this.values.get(key);\n this.values.delete(key);\n this.values.set(key, entry);\n } else if (value) {\n // insert value if passed\n entry = value;\n this.values.set(key, entry);\n }\n return entry;\n }\n\n /**\n * Set a key in the store\n * @param key\n * @param value\n */\n public set(key: string, value: T): void {\n if (this.values.size >= this.maxEntries) {\n // least-recently used cache eviction strategy\n const keyToDelete = this.values.keys().next().value;\n this.values.delete(keyToDelete);\n }\n this.values.set(key, value);\n }\n\n /**\n * Check if key is in cache\n * @param key\n */\n public hasKey(key: string): boolean {\n return this.values.has(key);\n }\n\n /**\n * Delete a key in the store\n * @param key\n */\n public delete(key: string): void {\n const hasKey = this.values.has(key);\n if (hasKey) {\n this.values.delete(key);\n }\n }\n\n /**\n * Delete all entry with prefix keys\n * @param keys\n */\n public deleteKeys(keys: string[]): void {\n keys.forEach((k) => {\n const hasKey = this.values.has(k);\n if (hasKey) {\n this.values.delete(k);\n }\n });\n }\n\n /**\n * Delete all entry with prefix keys\n * @param prefix\n */\n public deleteKeysWithPrefix(prefix: string): void {\n this.values.forEach((v, k) => {\n if (k.startsWith(prefix)) {\n this.values.delete(k);\n }\n });\n }\n\n /**\n * Clean the store\n */\n public clean(): void {\n this.values = new Map<string, T>();\n }\n\n /**\n * Print the store in the console\n * Only for debug\n */\n public evaluate(): void {\n console.log(this.values);\n }\n}\n\n/**\n * Define the various types of caching strategies\n */\nexport enum CacheStrategies {\n CACHE_FIRST = 'Cache-first',\n NETWORK_ONLY = 'Network-only',\n STALE_WHILE_REVALIDATE = 'Stale-While-Revalidate'\n}\n\n/**\n * Export global cache\n */\nconst cache: LruCacheType<any> = new LruCache<any>();\nexport default cache;\n","const dataURItoBlob = (dataURI) => {\n // convert base64/URLEncoded data component to raw binary data held in a string\n let byteString;\n if (dataURI.split(',')[0].indexOf('base64') >= 0) byteString = atob(dataURI.split(',')[1]);\n else byteString = unescape(dataURI.split(',')[1]);\n // separate out the mime component\n let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n let ia = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], {type: mimeString});\n};\n\nconst resizeImage = (file) =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n let image = new Image();\n image.onload = function (imageEvent) {\n // Resize the image\n let canvas = document.createElement('canvas'),\n max_size = 1920,\n width = image.width,\n height = image.height;\n if (width > height) {\n if (width > max_size) {\n height *= max_size / width;\n width = max_size;\n }\n } else {\n if (height > max_size) {\n width *= max_size / height;\n height = max_size;\n }\n }\n canvas.width = width;\n canvas.height = height;\n canvas.getContext('2d').drawImage(image, 0, 0, width, height);\n resolve(dataURItoBlob(canvas.toDataURL('image/jpeg')));\n };\n image.src = event.target.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n\nexport {resizeImage};\n","/**\n * Emit styled message\n */\nexport class Logger {\n static info(scope, message) {\n console.info(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n\n static warn(scope, message) {\n console.warn(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n\n static error(scope, message) {\n console.error(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n\n static log(scope, message) {\n console.log(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n\n static debug(scope, message) {\n console.debug(`%c[${scope}]`, 'color:#008080', ` ${message}`);\n }\n}\n","/**\n * Check if v is an integer number\n * @param v\n */\nexport function isInteger(v) {\n return !isNaN(v) && parseInt(String(Number(v))) == v && !isNaN(parseInt(String(v), 10));\n}\n","/**\n * Check if v is an object\n * @param v\n */\nexport function isObject(v) {\n return typeof v === 'object' && !Array.isArray(v) && v !== null;\n}\n\n/**\n * Perfrom deep merge of two objects (not a shallow merge)\n * @param target\n * @param source\n * @return {*}\n */\nexport function mergeDeep(target: object, source: object): object {\n let output = Object.assign({}, target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, {[key]: source[key]});\n } else {\n output[key] = mergeDeep(target[key], source[key]);\n }\n } else {\n Object.assign(output, {[key]: source[key]});\n }\n });\n }\n return output;\n}\n\n/**\n * Get an object without keys\n * @param obj\n * @param keys\n */\nexport function objectWithoutProperties<T>(obj: T | null, keys: string[]): T {\n let target: T = obj ? Object.assign({}, obj) : null;\n keys.forEach(function (i: string) {\n if (target && i in target) {\n delete target[i];\n }\n });\n return target;\n}\n\n/**\n * Check if v is a func\n * @param v\n */\nexport function isFunc(v) {\n return typeof v === 'function';\n}\n","/**\n * Check if v is a string\n * @param v\n */\nexport function isString(v) {\n return typeof v === 'string' || v instanceof String;\n}\n\n/**\n * Capitalize a string\n * @param str\n */\nexport function capitalize(str: string): string {\n let strVal = '';\n let strArr: string[] = str.split(' ');\n for (let chr = 0; chr < strArr.length; chr++) {\n strVal += strArr[chr].substring(0, 1).toUpperCase() + strArr[chr].substring(1, strArr[chr].length);\n }\n return strVal;\n}\n\n/**\n * CamelCase a string\n * @param str\n */\nexport function camelCase(str: string): string {\n // Lower cases the string\n return (\n str\n .toLowerCase()\n // Replaces any - or _ characters with a space\n .replace(/[-_]+/g, ' ')\n // Removes any non alphanumeric characters\n .replace(/[^\\w\\s]/g, '')\n // Uppercases the first character in each group immediately following a space\n // (delimited by spaces)\n .replace(/ (.)/g, ($1) => {\n return $1.toUpperCase();\n })\n // Removes spaces\n .replace(/ /g, '')\n );\n}\n\n/**\n * Stripe html tags from a string\n * @param str\n */\nexport function stripHtml(str: string): string {\n return str.replace(/<[^>]*>?/gm, '').trim();\n}\n\nexport function random() {\n return (Math.random() + 1).toString(36).substring(7);\n}\n\n/**\n * Fallback if navigator.clipboard doensn't exist\n * @param text\n * @returns {Promise<void>}\n */\nexport function fallbackCopyTextToClipboard(text) {\n let textArea = document.createElement('textarea');\n textArea.value = text;\n\n // Avoid scrolling to bottom\n textArea.style.top = '0';\n textArea.style.left = '0';\n textArea.style.position = 'fixed';\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n document.execCommand('copy');\n document.body.removeChild(textArea);\n return Promise.resolve();\n } catch (err) {\n document.body.removeChild(textArea);\n return Promise.reject(err);\n }\n}\n\n/**\n * Copy text to clipboard\n * @param text\n * @returns {Promise<void>}\n *\n * Ex.\n * copyTextToClipboard(text).then(\n * function () {\n * console.log('Async: Copying to clipboard was successful!');\n * },\n * function (err) {\n * console.error('Async: Could not copy text: ', err);\n * });\n */\nexport function copyTextToClipboard(text) {\n if (!navigator.clipboard) {\n return fallbackCopyTextToClipboard(text);\n }\n return navigator.clipboard.writeText(text);\n}\n\nexport function slugify(str) {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n","/**\n * Utility Url Replacer\n * @param path\n */\nexport const urlReplacer = (path: string) => {\n const replacer = function (tpl, data) {\n const re = /\\$\\(([^)]+)?\\)/g;\n let match = re.exec(tpl);\n while (match) {\n tpl = tpl.replace(match[0], data[match[1]]);\n re.lastIndex = 0;\n match = re.exec(tpl);\n }\n return tpl;\n };\n return (params: object) => replacer(path, params);\n};\n\n/**\n * Get domain\n * @param url\n */\nexport const getDomain = (url: string): string => {\n // eslint-disable-next-line no-useless-escape,@typescript-eslint/prefer-regexp-exec\n const matches = url.match(/^https?\\:\\/\\/([^\\/?#]+)(?:[\\/?#]|$)/i);\n if (matches && matches[1]) {\n return matches[1];\n }\n return '';\n};\n\n/**\n * Check a str is a valid url pattern\n * @param url\n */\nexport const isValidUrl = (url: string): boolean => {\n const regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/;\n return regexp.test(url);\n};\n\n/**\n * Check a str is a valid list of urls separated by delimiter\n * @param value\n * @param delimiter\n */\nexport const isValidUrls = (value: string, delimiter: string): boolean => {\n const urls = value.trim().split(delimiter);\n return urls.every(isValidUrl);\n};\n\n/**\n * Append params\n * @param baseUrl\n * @param queryParams\n */\nexport function appendURLSearchParams(baseUrl: string, queryParams: Record<string, string | number>[]) {\n let _url = baseUrl;\n if (queryParams.length && _url) {\n const key = Object.keys(queryParams[0])[0];\n _url += (_url.split('?')[1] ? '&' : '?') + `${key}=${queryParams[0][key]}`;\n queryParams.slice(1).map((p) => {\n const key = Object.keys(p)[0];\n _url += `&${key}=${p[key]}`;\n });\n }\n return _url;\n}\n\n/**\n * Take the application server's public key, which is Base64 URL-safe encoded,\n * and convert it to a UInt8Array, because this is the expected input of the subscribe()\n */\nexport const urlB64ToUint8Array = (base64String) => {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n};\n\n/**\n * Get a query string parameter\n */\nexport const getQueryStringParameter = (uri, key) => {\n if (uri && key) {\n let params = new URL(uri).searchParams;\n return params.get(key);\n }\n return null;\n};\n\n/**\n * Add or update a query string parameter\n */\nexport const updateQueryStringParameter = (uri, key, value) => {\n if (uri && key && value) {\n let re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');\n let separator = uri.indexOf('?') !== -1 ? '&' : '?';\n if (uri.match(re)) {\n return uri.replace(re, '$1' + key + '=' + value + '$2');\n } else {\n return uri + separator + key + '=' + value;\n }\n }\n return uri;\n};\n","/**\n * WSClientPropTypes interface\n */\nexport interface WSClientPropTypes {\n /**\n * The Websocket URI\n */\n uri: string;\n\n /**\n * The Websocket Protocols\n */\n protocols: string | string[];\n\n /**\n * String to identify the heartbeat message.\n */\n heartbeatMsg?: string;\n\n /**\n * Reconnect the websocket if close\n */\n mustReconnect?: boolean;\n\n /**\n * Callback called after the websocket is connected.\n */\n connected?: () => any;\n\n /**\n * Callback called when the websocket is connecting.\n */\n connecting?: () => any;\n\n /**\n * Callback called after the websocket is disconnected.\n */\n disconnected?: (evt) => any;\n\n /**\n * Callback called when a message is received from the websocket.\n */\n receiveMessage?: (data) => any;\n\n /**\n * Enable/disable debug\n */\n debug?: boolean;\n}\n\nexport interface WSClientType {\n /**\n * Send message\n * @param message\n */\n sendMessage: (message) => void;\n\n /**\n * Get current state\n */\n getState: () => string;\n\n /**\n * Get current connection state\n */\n isConnecting: () => boolean;\n\n /**\n * Check if ws is connected\n */\n isConnected: () => boolean;\n\n /**\n * Check if ws is closing connection\n */\n isClosing: () => boolean;\n\n /**\n * Return if ws is closed\n */\n isClosed: () => boolean;\n\n /**\n * Close the connection\n */\n close: () => void;\n}\n\n/**\n * WSClient: manage socket connection\n * @param options\n * @constructor\n */\nexport default class WSClient implements WSClientType {\n private static _instance;\n private _cfg;\n private _ws;\n private _timer;\n private _attempts = 1;\n private _heartbeatInterval = null;\n private _missedHeartbeats = 0;\n\n /**\n * Constructor\n * @param cfg\n */\n constructor(cfg: WSClientPropTypes) {\n if (!this.isValidOptions(cfg)) {\n return;\n }\n this._cfg = Object.assign({}, {heartbeatMsg: null, debug: false, mustReconnect: true}, cfg);\n this.connect();\n }\n\n /**\n * Get instance\n */\n public static getInstance(cfg): WSClient {\n this._instance = this._instance || new WSClient(cfg);\n return this._instance;\n }\n\n /**\n * Connect\n */\n connect() {\n try {\n if (this._ws && (this.isConnecting() || this.isConnected())) {\n // There is already a connection\n this._cfg.debug && console.info('Websocket is connecting or already connected.');\n return;\n }\n\n // Callback 'connecting' if exist\n typeof this._cfg.connecting === 'function' && this._cfg.connecting();\n this._cfg.debug && console.info(`Connecting to ${this._cfg.uri} ...`);\n\n // Open the connection\n this._ws = new WebSocket(this._cfg.uri, this._cfg.protocols);\n this._ws.onopen = this.onOpen.bind(this);\n this._ws.onmessage = this.onMessage.bind(this);\n this._ws.onerror = this.onError.bind(this);\n this._ws.onclose = this.onClose.bind(this);\n this._timer = null;\n } catch (err) {\n console.error(err);\n this.tryToReconnect();\n }\n }\n\n /**\n * Validate options\n * @param cfg\n */\n isValidOptions(cfg: WSClientPropTypes) {\n let _error = false;\n if (!cfg) {\n console.error('Invalid WSClient options.');\n return _error;\n }\n if (!cfg.uri) {\n console.error('Invalid WSClient Uri options.');\n _error = true;\n }\n if (cfg && cfg.connecting && !(typeof cfg.connecting === 'function')) {\n console.error('Invalid WSClient connecting options.');\n _error = true;\n }\n if (cfg && cfg.connected && !(typeof cfg.connected === 'function')) {\n console.error('Invalid WSClient connected options.');\n _error = true;\n }\n if (cfg && cfg.receiveMessage && !(typeof cfg.receiveMessage === 'function')) {\n console.error('Invalid WSClient receiveMessage options.');\n _error = true;\n }\n if (cfg && cfg.disconnected && !(typeof cfg.disconnected === 'function')) {\n console.error('Invalid WSClient connecting options.');\n _error = true;\n }\n if (cfg && cfg.heartbeatMsg && !(typeof cfg.heartbeatMsg === 'string')) {\n console.error('Invalid WSClient heartbeatMsg options.');\n _error = true;\n }\n if (cfg && cfg.debug && !(typeof cfg.debug === 'boolean')) {\n console.error('Invalid WSClient debug options.');\n _error = true;\n }\n return !_error;\n }\n\n /**\n * Try to reconnect if previous connection failed\n * Generate an interval, after that try to reconnect\n */\n tryToReconnect() {\n if (this._cfg.mustReconnect && !this._timer) {\n this._cfg.debug && console.info(`Reconnecting...`);\n let interval = this.generateInterval(this._attempts);\n this._timer = setTimeout(this.reconnect.bind(this), interval);\n }\n }\n\n /**\n * Reestablish the connection\n * Increase the number of attempts\n */\n reconnect() {\n this._attempts++;\n this.connect();\n }\n\n /**\n * Send heartbeat every 5 seconds\n * If missing more than 3 heartbeats close connection\n */\n sendHeartbeat() {\n try {\n this._missedHeartbeats++;\n if (this._missedHeartbeats > 3) throw new Error('Too many missed heartbeats.');\n this._ws.send(this._cfg.heartbeatMsg);\n } catch (e) {\n clearInterval(this._heartbeatInterval);\n this._heartbeatInterval = null;\n this._cfg.debug && console.warn(`Closing connection. Reason: ${e.message}`);\n if (!this.isClosing() && !this.isClosed()) {\n this.close();\n }\n }\n }\n\n /**\n * Established the new connection\n * Reset this._attempts counter\n */\n onOpen() {\n this._cfg.debug && console.info('Connected!');\n this._attempts = 1;\n if (this._cfg.heartbeatMsg && this._heartbeatInterval === null) {\n this._missedHeartbeats = 0;\n this._heartbeatInterval = setInterval(this.sendHeartbeat.bind(this), 5000);\n }\n typeof this._cfg.connected === 'function' && this._cfg.connected();\n }\n\n /**\n * Connection closed. Try to reconnect.\n * @param evt\n */\n onClose(evt) {\n this._cfg.debug && console.info('Connection closed!');\n typeof this._cfg.disconnected === 'function' && this._cfg.disconnected(evt);\n this.tryToReconnect();\n }\n\n /**\n * An error occured\n * @param evt\n */\n onError(evt) {\n this._cfg.debug && console.error('Websocket connection is broken!');\n this._cfg.debug && console.error(evt);\n }\n\n /**\n * A message has arrived.\n * If it is the heartbeat -> reset this._missedHeartbeats\n * If it is data pass data to the callback\n * @param evt\n */\n onMessage(evt) {\n if (this._cfg.heartbeatMsg && evt.data === this._cfg.heartbeatMsg) {\n // reset the counter for missed heartbeats\n this._missedHeartbeats = 0;\n } else if (typeof this._cfg.receiveMessage === 'function') {\n return this._cfg.receiveMessage(evt.data);\n }\n }\n\n /**\n * Generate an interval that is randomly between 0 and 2^k - 1, where k is\n * the number of connection attmpts, with a maximum interval of 30 seconds,\n * so it starts at 0 - 1 seconds and maxes out at 0 - 30 seconds\n */\n generateInterval(k) {\n let maxInterval = (Math.pow(2, k) - 1) * 1000;\n // If the generated interval is more than 30 seconds, truncate it down to 30 seconds.\n if (maxInterval > 30 * 1000) {\n maxInterval = 30 * 1000;\n }\n // generate the interval to a random number between 0 and the maxInterval determined from above\n return Math.random() * maxInterval;\n }\n\n /**\n * Send message\n * @param message\n */\n public sendMessage(message) {\n this._ws && this._ws.send(message);\n }\n\n /**\n * Get the ws state\n */\n public getState() {\n return this._ws && this._ws.readyState;\n }\n\n /**\n * Check if ws is in connecting state\n */\n public isConnecting() {\n return this._ws && this._ws.readyState === 0;\n }\n\n /**\n * Check if ws is connected\n */\n public isConnected() {\n return this._ws && this._ws.readyState === 1;\n }\n\n /**\n * Check if ws is in closing state\n */\n public isClosing() {\n return this._ws && this._ws.readyState === 2;\n }\n\n /**\n * Check if ws is closed\n */\n public isClosed() {\n return this._ws && this._ws.readyState === 3;\n }\n\n /**\n * Close the connection\n */\n public close() {\n clearInterval(this._heartbeatInterval);\n this._cfg.mustReconnect = false;\n if (!this.isClosing() || !this.isClosed()) {\n this._ws.close();\n this._cfg.debug && console.error('Websocket closed.');\n }\n }\n}\n","export function getWindowWidth() {\n return typeof global.window !== 'undefined' ? global.window.innerWidth : 0;\n}\n\nexport function getWindowHeight() {\n return typeof global.window !== 'undefined' ? global.window.innerHeight : 0;\n}\n\nconst isCrossOriginFrame = () => {\n try {\n return global.window.location.hostname !== global.window.parent.location.hostname;\n } catch (e) {\n return true;\n }\n};\n\n// Get the highest window context that isn't cross-origin\n// (When in an iframe)\nexport function getHighestSafeWindowContext(self = global.window.self) {\n // If we reached the top level, return self\n if (self === global.window.top) {\n return self;\n }\n\n // If parent is the same origin, we can move up one context\n // Reference: https://stackoverflow.com/a/21965342/1601953\n if (!isCrossOriginFrame()) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n return getHighestSafeWindowContext(self.parent);\n }\n\n // If a different origin, we consider the current level\n // as the top reachable one\n return self;\n}\n\nexport function isClientSideRendering() {\n return typeof window !== 'undefined';\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","import {capitalize, isString, stripHtml, camelCase, copyTextToClipboard, fallbackCopyTextToClipboard, random, slugify} from './utils/string';\nimport {\n isValidUrl,\n isValidUrls,\n urlReplacer,\n getDomain,\n appendURLSearchParams,\n urlB64ToUint8Array,\n getQueryStringParameter,\n updateQueryStringParameter\n} from './utils/url';\nimport {getHighestSafeWindowContext, getWindowWidth, getWindowHeight, isClientSideRendering} from './utils/window';\nimport {mergeDeep, isObject, objectWithoutProperties, isFunc} from './utils/object';\nimport {isInteger} from './utils/number';\nimport {arraysEqual} from './utils/array';\nimport {loadVersionBrowser} from './utils/browser';\nimport LRUCache, {LruCache, LruCacheType, CacheStrategies} from './utils/cache';\nimport {Logger} from './utils/logger';\nimport WSClient, {WSClientType, WSClientPropTypes} from './utils/websocket';\nimport {resizeImage} from './utils/image';\n\n/**\n * Export all utilities\n */\nexport {\n capitalize,\n isString,\n stripHtml,\n camelCase,\n copyTextToClipboard,\n fallbackCopyTextToClipboard,\n random,\n slugify,\n isValidUrl,\n isValidUrls,\n urlReplacer,\n getDomain,\n appendURLSearchParams,\n urlB64ToUint8Array,\n getQueryStringParameter,\n updateQueryStringParameter,\n getHighestSafeWindowContext,\n getWindowWidth,\n getWindowHeight,\n isClientSideRendering,\n Logger,\n mergeDeep,\n isObject,\n objectWithoutProperties,\n isFunc,\n isInteger,\n arraysEqual,\n WSClient,\n WSClientType,\n WSClientPropTypes,\n loadVersionBrowser,\n LRUCache,\n LruCache,\n LruCacheType,\n CacheStrategies,\n resizeImage\n};\n"],"names":["root","factory","exports","module","define","amd","self","a","b","length","i","navigator","uaData","browsername","browserversion","chromeVersion","brand","version","match","substr","indexOf","name","tem","ua","userAgent","M","test","exec","appName","appVersion","splice","LruCache","constructor","maxEntries","values","Map","this","window","get","key","value","entry","has","delete","set","size","keyToDelete","keys","next","hasKey","deleteKeys","forEach","k","deleteKeysWithPrefix","prefix","v","startsWith","clean","evaluate","console","log","CacheStrategies","file","Promise","resolve","reject","reader","FileReader","onload","event","image","Image","imageEvent","canvas","document","createElement","max_size","width","height","getContext","drawImage","dataURI","byteString","split","atob","unescape","mimeString","ia","Uint8Array","charCodeAt","Blob","type","dataURItoBlob","toDataURL","src","target","result","onerror","readAsDataURL","static","scope","message","info","warn","error","debug","isNaN","parseInt","String","Number","isObject","Array","isArray","mergeDeep","source","output","Object","assign","obj","fallbackCopyTextToClipboard","text","textArea","style","top","left","position","body","appendChild","focus","select","execCommand","removeChild","err","str","toLowerCase","replace","$1","toUpperCase","strVal","strArr","chr","substring","clipboard","writeText","Math","random","toString","trim","baseUrl","queryParams","_url","slice","map","p","path","params","tpl","data","re","lastIndex","replacer","url","matches","isValidUrl","delimiter","every","base64String","base64","repeat","rawData","outputArray","uri","URL","searchParams","RegExp","separator","WSClient","cfg","_attempts","_heartbeatInterval","_missedHeartbeats","isValidOptions","_cfg","heartbeatMsg","mustReconnect","connect","_instance","_ws","isConnecting","isConnected","connecting","WebSocket","protocols","onopen","onOpen","bind","onmessage","onMessage","onError","onclose","onClose","_timer","tryToReconnect","_error","connected","receiveMessage","disconnected","interval","generateInterval","setTimeout","reconnect","sendHeartbeat","Error","send","e","clearInterval","isClosing","isClosed","close","setInterval","evt","maxInterval","pow","sendMessage","getState","readyState","getHighestSafeWindowContext","global","location","hostname","parent","isCrossOriginFrame","innerHeight","innerWidth","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","g","globalThis","Function"],"sourceRoot":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@selfcommunity/utils",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "./lib/cjs/index.js",
|
|
@@ -100,5 +100,5 @@
|
|
|
100
100
|
"bugs": {
|
|
101
101
|
"url": "https://github.com/selfcommunity/community-js/issues"
|
|
102
102
|
},
|
|
103
|
-
"gitHead": "
|
|
103
|
+
"gitHead": "9b37d632d67eedea46397cc9d975ac5641b4c7c4"
|
|
104
104
|
}
|