@koine/utils 2.0.0-beta.72 → 2.0.0-beta.73

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.
Files changed (169) hide show
  1. package/Defer.js +10 -0
  2. package/Emitter.js +19 -0
  3. package/accentSets.js +29 -0
  4. package/addOrReplaceAtIdx.js +14 -0
  5. package/areEqual.js +45 -0
  6. package/arrayFilterFalsy.js +1 -0
  7. package/arrayFindLastIndex.js +8 -0
  8. package/arrayOfAll.js +1 -0
  9. package/arraySum.js +1 -0
  10. package/arrayToLookup.js +4 -0
  11. package/arrayUniqueByProperties.js +1 -0
  12. package/buildUrlQueryString.js +20 -0
  13. package/capitalize.js +2 -0
  14. package/changeCaseCamel.js +18 -0
  15. package/changeCaseCapital.js +11 -0
  16. package/changeCaseConstant.js +7 -0
  17. package/changeCaseDot.js +2 -0
  18. package/changeCaseHelpers.d.ts +0 -5
  19. package/changeCaseHelpers.js +71 -0
  20. package/changeCaseKebab.js +2 -0
  21. package/changeCaseNone.js +7 -0
  22. package/changeCasePascal.js +10 -0
  23. package/changeCasePascalSnake.js +2 -0
  24. package/changeCasePath.js +2 -0
  25. package/changeCaseSentence.js +16 -0
  26. package/changeCaseSnake.js +2 -0
  27. package/changeCaseTrain.js +2 -0
  28. package/chunkByChunks.js +31 -0
  29. package/chunkBySize.js +7 -0
  30. package/clamp.js +1 -0
  31. package/clsx.js +39 -0
  32. package/convertRange.js +1 -0
  33. package/cookie.js +1 -0
  34. package/createPalette.js +11 -0
  35. package/debounce.js +17 -0
  36. package/debouncePromise.js +51 -0
  37. package/debounceRaf.js +12 -0
  38. package/decode.js +1 -0
  39. package/encode.js +1 -0
  40. package/ensureInt.js +1 -0
  41. package/env.js +1 -0
  42. package/errorToString.js +2 -0
  43. package/escapeRegExp.js +1 -0
  44. package/findDuplicatedIndexes.js +10 -0
  45. package/forin.js +5 -0
  46. package/gbToBytes.js +1 -0
  47. package/getEmptyArray.js +4 -0
  48. package/getKeys.js +1 -0
  49. package/getMediaQueryWidthResolvers.js +41 -0
  50. package/getMediaQueryWidthTailwindScreens.js +26 -0
  51. package/getNonce.js +2 -0
  52. package/getParamAmong.js +5 -0
  53. package/getParamAsInt.js +8 -0
  54. package/getParamAsString.js +2 -0
  55. package/getType.js +1 -0
  56. package/getUrlHashParams.js +8 -0
  57. package/getUrlHashPathname.js +1 -0
  58. package/getUrlPathnameParts.js +5 -0
  59. package/getUrlQueryParams.js +21 -0
  60. package/imgEmptyPixel.js +1 -0
  61. package/index.js +156 -0
  62. package/invariant.js +16 -0
  63. package/isAbsoluteUrl.js +2 -0
  64. package/isAnyObject.js +2 -0
  65. package/isArray.js +2 -0
  66. package/isBlob.js +2 -0
  67. package/isBoolean.js +2 -0
  68. package/isBrowser.js +1 -0
  69. package/isBrowserNow.js +2 -0
  70. package/isDate.js +2 -0
  71. package/isEmptyArray.js +2 -0
  72. package/isEmptyObject.js +2 -0
  73. package/isEmptyString.js +1 -0
  74. package/isError.js +2 -0
  75. package/isExternalUrl.js +10 -0
  76. package/isFile.js +2 -0
  77. package/isFloat.js +2 -0
  78. package/isFormData.js +2 -0
  79. package/isFullArray.js +2 -0
  80. package/isFullObject.js +2 -0
  81. package/isFullString.js +2 -0
  82. package/isFunction.js +1 -0
  83. package/isInt.js +2 -0
  84. package/isMap.js +2 -0
  85. package/isNaNValue.js +2 -0
  86. package/isNegativeNumber.js +2 -0
  87. package/isNull.js +2 -0
  88. package/isNullOrUndefined.js +4 -0
  89. package/isNumber.js +2 -0
  90. package/isNumericLiteral.js +1 -0
  91. package/isObject.js +2 -0
  92. package/isObjectLike.js +2 -0
  93. package/isObjectStringKeyed.js +2 -0
  94. package/isOneOf.js +7 -0
  95. package/isPlainObject.js +5 -0
  96. package/isPositiveNumber.js +2 -0
  97. package/isPrimitive.js +12 -0
  98. package/isPromise.js +2 -0
  99. package/isRegExp.js +2 -0
  100. package/isServer.js +2 -0
  101. package/isServerNow.js +2 -0
  102. package/isSet.js +2 -0
  103. package/isString.js +2 -0
  104. package/isSymbol.js +2 -0
  105. package/isType.js +12 -0
  106. package/isUndefined.js +2 -0
  107. package/isWeakMap.js +2 -0
  108. package/isWeakSet.js +2 -0
  109. package/kbToBytes.js +1 -0
  110. package/location.js +1 -0
  111. package/lowercase.js +1 -0
  112. package/mapListBy.js +4 -0
  113. package/matchSorter.js +238 -0
  114. package/mbToBytes.js +1 -0
  115. package/mergeObjects.js +28 -0
  116. package/mergeUrlQueryParams.js +13 -0
  117. package/moveSortableArrayItemByKey.js +8 -0
  118. package/noop.js +1 -0
  119. package/normaliseUrl.js +2 -0
  120. package/normaliseUrlPathname.js +2 -0
  121. package/objectFlat.js +16 -0
  122. package/objectFlip.js +4 -0
  123. package/objectMergeWithDefaults.js +20 -0
  124. package/objectOmit.js +7 -0
  125. package/objectPick.js +8 -0
  126. package/objectSort.js +1 -0
  127. package/objectSortByKeysMatching.js +2 -0
  128. package/objectToArray.js +1 -0
  129. package/package.json +1 -1
  130. package/parseCookie.js +32 -0
  131. package/parseURL.js +13 -0
  132. package/quaranteneProps.js +15 -0
  133. package/randomInt.js +1 -0
  134. package/randomKey.js +4 -0
  135. package/readCookie.js +33 -0
  136. package/removeAccents.js +9 -0
  137. package/removeCookie.js +9 -0
  138. package/removeDuplicates.js +1 -0
  139. package/removeDuplicatesByKey.js +12 -0
  140. package/removeDuplicatesComparing.js +6 -0
  141. package/removeIndexesFromArray.js +9 -0
  142. package/removeTrailingSlash.js +1 -0
  143. package/removeUrlQueryParams.js +13 -0
  144. package/render.js +112 -0
  145. package/round.js +3 -0
  146. package/roundTo.js +10 -0
  147. package/serializeCookie.js +68 -0
  148. package/setCookie.js +44 -0
  149. package/shuffle.js +16 -0
  150. package/slugify.js +10 -0
  151. package/split.js +1 -0
  152. package/splitReverse.js +1 -0
  153. package/swapMap.js +7 -0
  154. package/throttle.js +14 -0
  155. package/titleCase.js +3 -0
  156. package/toNumber.js +2 -0
  157. package/toRgba.js +7 -0
  158. package/transformToUrlPathname.js +4 -0
  159. package/truncate.js +5 -0
  160. package/tryUntil.js +14 -0
  161. package/types.js +1 -0
  162. package/uid.js +5 -0
  163. package/updateLinkParams.js +6 -0
  164. package/updateUrlQueryParams.js +10 -0
  165. package/uppercase.js +1 -0
  166. package/uuid.js +4 -0
  167. package/uuidNumeric.js +1 -0
  168. package/wait.js +1 -0
  169. package/without.js +1 -0
package/render.js ADDED
@@ -0,0 +1,112 @@
1
+ let varname = "data";
2
+ let evaluate = /<%([\s\S]+?(\}?)+)%>/g;
3
+ let interpolate = /<%=([\s\S]+?)%>/g;
4
+ let conditional = /<%\?(\?)?\s*([\s\S]*?)\s*%>/g;
5
+ let iterate = /<%~\s*(?:%>|([\s\S]+?)\s*:\s*([\w$]+)\s*(?::\s*([\w$]+))?\s*%>)/g;
6
+ let use = /<%#([\s\S]+?)%>/g;
7
+ let useParams = /(^|[^\w$])def(?:\.|\[['"])([\w$.]+)(?:['"]\])?\s*:\s*([\w$.]+|"[^"]+"|'[^']+'|\{[^}]+\})/g;
8
+ let define = /<%##\s*([\w.$]+)\s*(:|=)([\s\S]+?)#%>/g;
9
+ let defineParams = /^\s*([\w$]+):([\s\S]+)/;
10
+ let start = "'+(";
11
+ let end = ")+'";
12
+ let skip = /$^/;
13
+ let resolveDefs = (block, def) => (typeof block === "string" ? block : block.toString())
14
+ .replace(define || skip, (_, code, assign, value) => {
15
+ if (code.indexOf("def.") === 0) {
16
+ code = code.substring(4);
17
+ }
18
+ if (!(code in def)) {
19
+ if (assign === ":") {
20
+ value.replace(defineParams, (_, param, v) => {
21
+ def[code] = { arg: param, text: v };
22
+ });
23
+ if (!(code in def))
24
+ def[code] = value;
25
+ }
26
+ else {
27
+ new Function("def", "def['" + code + "']=" + value)(def);
28
+ }
29
+ }
30
+ return "";
31
+ })
32
+ .replace(use || skip, (_, code) => {
33
+ code = code.replace(useParams, (_, s, d, param) => {
34
+ if (def[d] && def[d].arg && param) {
35
+ let rw = (d + ":" + param).replace(/'|\\/g, "_");
36
+ def.__exp = def.__exp || {};
37
+ def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2");
38
+ return s + "def.__exp['" + rw + "']";
39
+ }
40
+ return s;
41
+ });
42
+ let v = new Function("def", "return " + code)(def);
43
+ return v ? resolveDefs(v, def) : v;
44
+ });
45
+ let unescape = (code) => code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " ");
46
+ export let render = (tmpl, def) => {
47
+ let sid = 0;
48
+ let indv;
49
+ let str = use || define ? resolveDefs(tmpl, def || {}) : tmpl;
50
+ str = ("var X='" +
51
+ str
52
+ .replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, " ")
53
+ .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, "")
54
+ .replace(/'|\\/g, "\\$&")
55
+ .replace(interpolate || skip, (_, code) => start + unescape(code) + end)
56
+ .replace(conditional || skip, (_, elseCase, code) => elseCase
57
+ ? code
58
+ ? "';}else if(" + unescape(code) + "){X+='"
59
+ : "';}else{X+='"
60
+ : code
61
+ ? "';if(" + unescape(code) + "){X+='"
62
+ : "';}X+='")
63
+ .replace(iterate || skip, (_, arr, vName, iName) => {
64
+ if (!arr)
65
+ return "';} } X+='";
66
+ sid++;
67
+ indv = iName || "i" + sid;
68
+ arr = unescape(arr);
69
+ return ("';var arr" +
70
+ sid +
71
+ "=" +
72
+ arr +
73
+ ";if(arr" +
74
+ sid +
75
+ "){var " +
76
+ vName +
77
+ "," +
78
+ indv +
79
+ "=-1,l" +
80
+ sid +
81
+ "=arr" +
82
+ sid +
83
+ ".length-1;while(" +
84
+ indv +
85
+ "<l" +
86
+ sid +
87
+ "){" +
88
+ vName +
89
+ "=arr" +
90
+ sid +
91
+ "[" +
92
+ indv +
93
+ "+=1];X+='");
94
+ })
95
+ .replace(evaluate || skip, (_, code) => "';" + unescape(code) + "X+='") +
96
+ "';return X;")
97
+ .replace(/\n/g, "\\n")
98
+ .replace(/\t/g, "\\t")
99
+ .replace(/\r/g, "\\r")
100
+ .replace(/(\s|;|\}|^|\{)X\+='';/g, "$1")
101
+ .replace(/\+''/g, "");
102
+ try {
103
+ return new Function(varname, str);
104
+ }
105
+ catch (e) {
106
+ if (process.env["NODE_ENV"] === "development") {
107
+ console.log("Could not create a template function: " + str);
108
+ throw e;
109
+ }
110
+ }
111
+ return () => "";
112
+ };
package/round.js ADDED
@@ -0,0 +1,3 @@
1
+ export let round = (number, decimals, trailingZeroes) => decimals
2
+ ? parseFloat(number.toFixed(decimals).replace(trailingZeroes ? "" : /\.+0*$/, ""))
3
+ : parseInt(number + "", 10);
package/roundTo.js ADDED
@@ -0,0 +1,10 @@
1
+ export let roundTo = (num, decimals = 2) => {
2
+ if (isFinite(num) && !isNaN(num)) {
3
+ const multiplicator = Math.pow(10, decimals);
4
+ return Math.round(num * multiplicator) / multiplicator + "";
5
+ }
6
+ if (process.env["NODE_ENV"] === "development") {
7
+ console.warn("[@koine/utils] math:roundTo -> given not a finite number as first arg");
8
+ }
9
+ return "";
10
+ };
@@ -0,0 +1,68 @@
1
+ import { isNumber } from "./isNumber";
2
+ const fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
3
+ export let serializeCookie = (name, val, attributes = {}) => {
4
+ const { encode = encodeURIComponent, domain, path, httpOnly, secure, sameSite, } = attributes;
5
+ let { maxAge, expires } = attributes;
6
+ const value = encode(val);
7
+ if (process.env["NODE_ENV"] === "development") {
8
+ if (!fieldContentRegExp.test(name)) {
9
+ throw new TypeError("argument name is invalid");
10
+ }
11
+ if (typeof attributes.encode !== "function") {
12
+ throw new TypeError("option encode is invalid");
13
+ }
14
+ if (value && !fieldContentRegExp.test(value)) {
15
+ throw new TypeError("argument val is invalid");
16
+ }
17
+ }
18
+ let str = name + "=" + value;
19
+ if (null != maxAge) {
20
+ maxAge = maxAge - 0;
21
+ if (isNaN(maxAge) || !isFinite(maxAge)) {
22
+ throw new TypeError("option maxAge is invalid");
23
+ }
24
+ str += "; Max-Age=" + Math.floor(maxAge);
25
+ }
26
+ if (domain) {
27
+ if (process.env["NODE_ENV"] === "development") {
28
+ if (!fieldContentRegExp.test(domain)) {
29
+ throw new TypeError("option domain is invalid");
30
+ }
31
+ }
32
+ str += "; Domain=" + domain;
33
+ }
34
+ if (path) {
35
+ if (process.env["NODE_ENV"] === "development") {
36
+ if (!fieldContentRegExp.test(path)) {
37
+ throw new TypeError("option path is invalid");
38
+ }
39
+ }
40
+ str += "; Path=" + path;
41
+ }
42
+ if (expires) {
43
+ if (isNumber(expires)) {
44
+ expires = new Date(Date.now() + expires * 864e5);
45
+ }
46
+ str += "; Expires=" + expires.toUTCString();
47
+ }
48
+ if (httpOnly) {
49
+ str += "; HttpOnly";
50
+ }
51
+ if (secure) {
52
+ str += "; Secure";
53
+ }
54
+ if (sameSite) {
55
+ switch (sameSite.toLowerCase()) {
56
+ case "lax":
57
+ str += "; SameSite=Lax";
58
+ break;
59
+ case "strict":
60
+ str += "; SameSite=Strict";
61
+ break;
62
+ case "none":
63
+ str += "; SameSite=None";
64
+ break;
65
+ }
66
+ }
67
+ return str;
68
+ };
package/setCookie.js ADDED
@@ -0,0 +1,44 @@
1
+ import { defaultAttributesClient } from "./cookie";
2
+ import { isNumber } from "./isNumber";
3
+ import { isUndefined } from "./isUndefined";
4
+ let converterWrite = (value) => {
5
+ return encodeURIComponent(value).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g, decodeURIComponent);
6
+ };
7
+ export let setCookie = (name, value, attributes = {}) => {
8
+ let { expires, ...restAttrs } = attributes;
9
+ const cleanedAttrs = {
10
+ expires: "",
11
+ ...defaultAttributesClient,
12
+ ...restAttrs,
13
+ };
14
+ if (isUndefined(document)) {
15
+ if (process.env["NODE_ENV"] === "development") {
16
+ console.warn("[@koine/utils:setCookie] document is undefined");
17
+ }
18
+ return undefined;
19
+ }
20
+ if (isNumber(expires)) {
21
+ expires = new Date(Date.now() + expires * 864e5);
22
+ }
23
+ if (expires) {
24
+ cleanedAttrs.expires = expires.toUTCString();
25
+ }
26
+ name = encodeURIComponent(name)
27
+ .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)
28
+ .replace(/[()]/g, escape);
29
+ let stringifiedAttributes = "";
30
+ for (const name in attributes) {
31
+ const attrName = name;
32
+ if (!attributes[attrName]) {
33
+ continue;
34
+ }
35
+ stringifiedAttributes += "; " + attrName;
36
+ if (attributes[attrName] === true) {
37
+ continue;
38
+ }
39
+ stringifiedAttributes +=
40
+ "=" + String(attributes[attrName]).split(";")[0];
41
+ }
42
+ return (document.cookie =
43
+ name + "=" + converterWrite(value) + stringifiedAttributes);
44
+ };
package/shuffle.js ADDED
@@ -0,0 +1,16 @@
1
+ export let shuffle = (array) => {
2
+ const length = array == null ? 0 : array.length;
3
+ if (!length) {
4
+ return [];
5
+ }
6
+ let index = -1;
7
+ const lastIndex = length - 1;
8
+ const result = [...array];
9
+ while (++index < length) {
10
+ const rand = index + Math.floor(Math.random() * (lastIndex - index + 1));
11
+ const value = result[rand];
12
+ result[rand] = result[index];
13
+ result[index] = value;
14
+ }
15
+ return result;
16
+ };
package/slugify.js ADDED
@@ -0,0 +1,10 @@
1
+ import { accentsSets } from "./accentSets";
2
+ import { removeAccents } from "./removeAccents";
3
+ export let slugify = (text, separator = "-") => removeAccents(text.toString().toLowerCase().trim(), accentsSets.concat([["-", "[·/_,:;']"]]))
4
+ .replace(/\s+/g, "-")
5
+ .replace(/&/g, "-and-")
6
+ .replace(/[^\w-]+/g, "")
7
+ .replace(/--+/g, "-")
8
+ .replace(/^-+/, "")
9
+ .replace(/-+$/, "")
10
+ .replace(/-/g, separator);
package/split.js ADDED
@@ -0,0 +1 @@
1
+ export let split = (string, delimiter) => string.split(delimiter);
@@ -0,0 +1 @@
1
+ export let splitReverse = (string, delimiter) => string.split(delimiter).reverse();
package/swapMap.js ADDED
@@ -0,0 +1,7 @@
1
+ export let swapMap = (map = {}) => {
2
+ const output = {};
3
+ for (const key in map) {
4
+ output[map[key]] = key;
5
+ }
6
+ return output;
7
+ };
package/throttle.js ADDED
@@ -0,0 +1,14 @@
1
+ export let throttle = (fn, limit, context) => {
2
+ let wait;
3
+ return function (...args) {
4
+ context = context || this;
5
+ if (!wait) {
6
+ fn.apply(context, ...args);
7
+ wait = true;
8
+ return setTimeout(function () {
9
+ wait = false;
10
+ }, limit);
11
+ }
12
+ return;
13
+ };
14
+ };
package/titleCase.js ADDED
@@ -0,0 +1,3 @@
1
+ export let titleCase = (input) => input
2
+ ? input.replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase())
3
+ : "";
package/toNumber.js ADDED
@@ -0,0 +1,2 @@
1
+ import { isNumber } from "./isNumber";
2
+ export let toNumber = (input, fallback) => isNumber(input) ? input : input ? parseFloat(input) : fallback || 0;
package/toRgba.js ADDED
@@ -0,0 +1,7 @@
1
+ export let toRgba = (hex, alpha = 1) => {
2
+ const r = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
3
+ if (r) {
4
+ return `rgba(${parseInt(r[1], 16)},${parseInt(r[2], 16)},${parseInt(r[3], 16)},${alpha})`;
5
+ }
6
+ return "";
7
+ };
@@ -0,0 +1,4 @@
1
+ import { isString } from "./isString";
2
+ export let transformToUrlPathname = (toPathname) => isString(toPathname)
3
+ ? `/${encodeURIComponent(toPathname.replace(/\s/g, "-").toLowerCase())}`
4
+ : "";
package/truncate.js ADDED
@@ -0,0 +1,5 @@
1
+ export let truncate = (input, length) => input
2
+ ? input.length > length
3
+ ? input.substring(0, length) + "..."
4
+ : input
5
+ : "";
package/tryUntil.js ADDED
@@ -0,0 +1,14 @@
1
+ export let tryUntil = (test, timeout, interval, resolve, reject) => {
2
+ const timeWas = new Date();
3
+ const wait = setInterval(function () {
4
+ if (test()) {
5
+ clearInterval(wait);
6
+ resolve();
7
+ }
8
+ else if (new Date() - timeWas > timeout) {
9
+ clearInterval(wait);
10
+ if (reject)
11
+ reject();
12
+ }
13
+ }, interval);
14
+ };
package/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/uid.js ADDED
@@ -0,0 +1,5 @@
1
+ let lastId = 0;
2
+ export let uid = (prefix = "id") => {
3
+ lastId++;
4
+ return `${prefix}-${lastId}`;
5
+ };
@@ -0,0 +1,6 @@
1
+ import { updateUrlQueryParams } from "./updateUrlQueryParams";
2
+ export let updateLinkParams = ($anchor, newParams) => {
3
+ const href = updateUrlQueryParams($anchor.href, newParams);
4
+ $anchor.href = href;
5
+ return href;
6
+ };
@@ -0,0 +1,10 @@
1
+ import { buildUrlQueryString } from "./buildUrlQueryString";
2
+ import { getUrlQueryParams } from "./getUrlQueryParams";
3
+ import { mergeUrlQueryParams } from "./mergeUrlQueryParams";
4
+ export let updateUrlQueryParams = (url, newParams = {}) => {
5
+ const parts = url.split("?");
6
+ const allParams = parts[1]
7
+ ? mergeUrlQueryParams(getUrlQueryParams(url), newParams)
8
+ : newParams;
9
+ return parts[0] + buildUrlQueryString(allParams);
10
+ };
package/uppercase.js ADDED
@@ -0,0 +1 @@
1
+ export let uppercase = (str) => (str || "").toUpperCase();
package/uuid.js ADDED
@@ -0,0 +1,4 @@
1
+ export let uuid = () => "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
2
+ const r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8;
3
+ return v.toString(16);
4
+ });
package/uuidNumeric.js ADDED
@@ -0,0 +1 @@
1
+ export let uuidNumeric = () => new Date().valueOf();
package/wait.js ADDED
@@ -0,0 +1 @@
1
+ export let wait = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
package/without.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";