cg-utilities
Version:
This is a simple utility package
472 lines (471 loc) • 14.1 kB
JavaScript
import u from "currency.js";
function E(e, r) {
return Array.isArray(e) ? e.reduce((n, o) => u(n, {
precision: 4
}).add(o).value, 0) : r === void 0 ? e : u(e, {
precision: 4
}).add(r).value;
}
function S(e, r) {
if (Array.isArray(e)) {
let n = 0;
return e.forEach((o) => {
n ? n = u(n, {
precision: 4
}).subtract(o).value : n = o;
}), n;
}
return r === void 0 ? e : u(e, {
precision: 4
}).subtract(r).value;
}
function D(e, r) {
if (Array.isArray(e)) {
let n = 0;
return e.forEach((o) => {
n ? n = u(n, {
precision: 4
}).multiply(o).value : n = o;
}), n;
}
return r === void 0 ? e : u(e, {
precision: 4
}).multiply(r).value;
}
function T(e, r) {
if (Array.isArray(e)) {
let n = 0;
return e.forEach((o) => {
n ? n = u(n, {
precision: 4
}).divide(o).value : n = o;
}), n;
}
return r === void 0 ? e : u(e, {
precision: 4
}).divide(r).value;
}
const s = {
DELTA: 2654435769,
base64EncodeChars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),
base64DecodeChars: [
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
62,
-1,
-1,
-1,
63,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
-1,
-1,
-1,
-1,
-1,
-1,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
-1,
-1,
-1,
-1,
-1
],
btoa(e) {
let r, n, o, t, F, c, i;
for (n = o = 0, t = e.length, F = t % 3, t = t - F, c = t / 3 << 2, F > 0 && (c += 4), r = new Array(c); n < t; )
i = e.charCodeAt(n++) << 16 | e.charCodeAt(n++) << 8 | e.charCodeAt(n++), r[o++] = s.base64EncodeChars[i >> 18] + s.base64EncodeChars[i >> 12 & 63] + s.base64EncodeChars[i >> 6 & 63] + s.base64EncodeChars[i & 63];
return F === 1 ? (i = e.charCodeAt(n++), r[o++] = `${s.base64EncodeChars[i >> 2] + s.base64EncodeChars[(i & 3) << 4]}==`) : F === 2 && (i = e.charCodeAt(n++) << 8 | e.charCodeAt(n++), r[o++] = `${s.base64EncodeChars[i >> 10] + s.base64EncodeChars[i >> 4 & 63] + s.base64EncodeChars[(i & 15) << 2]}=`), r.join("");
},
atob(e) {
let r, n, o, t, F, c, i, a, l, h;
if (i = e.length, i % 4 !== 0 || /[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/\=]/.test(e))
return "";
for (e.charAt(i - 2) === "=" ? a = 1 : e.charAt(i - 1) === "=" ? a = 2 : a = 0, l = i, a > 0 && (l -= 4), l = (l >> 2) * 3 + a, h = new Array(l), F = c = 0; F < i && (r = s.base64DecodeChars[e.charCodeAt(F++)], !(r === -1 || (n = s.base64DecodeChars[e.charCodeAt(F++)], n === -1) || (h[c++] = String.fromCharCode(r << 2 | (n & 48) >> 4), o = s.base64DecodeChars[e.charCodeAt(F++)], o === -1) || (h[c++] = String.fromCharCode((n & 15) << 4 | (o & 60) >> 2), t = s.base64DecodeChars[e.charCodeAt(F++)], t === -1))); )
h[c++] = String.fromCharCode((o & 3) << 6 | t);
return h.join("");
},
toBinaryString(e, r) {
const n = e.length;
let o = n << 2;
if (r) {
const F = e[n - 1];
if (o -= 4, F < o - 3 || F > o)
return null;
o = F;
}
for (let F = 0; F < n; F++)
e[F] = String.fromCharCode(e[F] & 255, e[F] >>> 8 & 255, e[F] >>> 16 & 255, e[F] >>> 24 & 255);
const t = e.join("");
return r ? t.substring(0, o) : t;
},
toUint32Array(e, r) {
const n = e.length;
let o = n >> 2;
n & 3 && ++o;
let t;
r ? (t = new Array(o + 1), t[o] = n) : t = new Array(o);
for (let F = 0; F < n; ++F)
t[F >> 2] |= e.charCodeAt(F) << ((F & 3) << 3);
return t;
},
int32(e) {
return e & 4294967295;
},
mx(e, r, n, o, t, F) {
return (n >>> 5 ^ r << 2) + (r >>> 3 ^ n << 4) ^ (e ^ r) + (F[o & 3 ^ t] ^ n);
},
fixk(e) {
return e.length < 4 && (e.length = 4), e;
},
encryptUint32Array(e, r) {
const n = e.length, o = n - 1;
let t, F, c, i, a, l;
for (F = e[o], c = 0, l = Math.floor(6 + 52 / n) | 0; l > 0; --l) {
for (c = s.int32(c + s.DELTA), i = c >>> 2 & 3, a = 0; a < o; ++a)
t = e[a + 1], F = e[a] = s.int32(e[a] + s.mx(c, t, F, a, i, r));
t = e[0], F = e[o] = s.int32(e[o] + s.mx(c, t, F, o, i, r));
}
return e;
},
decryptUint32Array(e, r) {
const n = e.length, o = n - 1;
let t, F, c, i, a, l;
for (t = e[0], l = Math.floor(6 + 52 / n), c = s.int32(l * s.DELTA); c !== 0; c = s.int32(c - s.DELTA)) {
for (i = c >>> 2 & 3, a = o; a > 0; --a)
F = e[a - 1], t = e[a] = s.int32(e[a] - s.mx(c, t, F, a, i, r));
F = e[o], t = e[0] = s.int32(e[0] - s.mx(c, t, F, 0, i, r));
}
return e;
},
utf8Encode(e) {
if (/^[\x00-\x7F]*$/.test(e))
return e;
const r = [], n = e.length;
for (let o = 0, t = 0; o < n; ++o, ++t) {
const F = e.charCodeAt(o);
if (F < 128)
r[t] = e.charAt(o);
else if (F < 2048)
r[t] = String.fromCharCode(192 | F >> 6, 128 | F & 63);
else if (F < 55296 || F > 57343)
r[t] = String.fromCharCode(224 | F >> 12, 128 | F >> 6 & 63, 128 | F & 63);
else {
if (o + 1 < n) {
const c = e.charCodeAt(o + 1);
if (F < 56320 && c >= 56320 && c <= 57343) {
const i = ((F & 1023) << 10 | c & 1023) + 65536;
r[t] = String.fromCharCode(240 | i >> 18 & 63, 128 | i >> 12 & 63, 128 | i >> 6 & 63, 128 | i & 63), ++o;
continue;
}
}
throw new Error("Malformed string");
}
}
return r.join("");
},
utf8DecodeShortString(e, r) {
const n = new Array(r);
let o = 0, t = 0;
for (let F = e.length; o < r && t < F; o++) {
const c = e.charCodeAt(t++);
switch (c >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
n[o] = c;
break;
case 12:
case 13:
if (t < F)
n[o] = (c & 31) << 6 | e.charCodeAt(t++) & 63;
else
throw new Error("Unfinished UTF-8 octet sequence");
break;
case 14:
if (t + 1 < F)
n[o] = (c & 15) << 12 | (e.charCodeAt(t++) & 63) << 6 | e.charCodeAt(t++) & 63;
else
throw new Error("Unfinished UTF-8 octet sequence");
break;
case 15:
if (t + 2 < F) {
const i = ((c & 7) << 18 | (e.charCodeAt(t++) & 63) << 12 | (e.charCodeAt(t++) & 63) << 6 | e.charCodeAt(t++) & 63) - 65536;
if (i >= 0 && i <= 1048575)
n[o++] = i >> 10 & 1023 | 55296, n[o] = i & 1023 | 56320;
else
throw new Error(`Character outside valid Unicode range: 0x${i.toString(16)}`);
} else
throw new Error("Unfinished UTF-8 octet sequence");
break;
default:
throw new Error(`Bad UTF-8 encoding 0x${c.toString(16)}`);
}
}
return o < r && (n.length = o), String.fromCharCode.apply(String, n);
},
utf8DecodeLongString(e, r) {
const n = [], o = new Array(32768);
let t = 0, F = 0;
for (let c = e.length; t < r && F < c; t++) {
const i = e.charCodeAt(F++);
switch (i >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
o[t] = i;
break;
case 12:
case 13:
if (F < c)
o[t] = (i & 31) << 6 | e.charCodeAt(F++) & 63;
else
throw new Error("Unfinished UTF-8 octet sequence");
break;
case 14:
if (F + 1 < c)
o[t] = (i & 15) << 12 | (e.charCodeAt(F++) & 63) << 6 | e.charCodeAt(F++) & 63;
else
throw new Error("Unfinished UTF-8 octet sequence");
break;
case 15:
if (F + 2 < c) {
const a = ((i & 7) << 18 | (e.charCodeAt(F++) & 63) << 12 | (e.charCodeAt(F++) & 63) << 6 | e.charCodeAt(F++) & 63) - 65536;
if (a >= 0 && a <= 1048575)
o[t++] = a >> 10 & 1023 | 55296, o[t] = a & 1023 | 56320;
else
throw new Error(`Character outside valid Unicode range: 0x${a.toString(16)}`);
} else
throw new Error("Unfinished UTF-8 octet sequence");
break;
default:
throw new Error(`Bad UTF-8 encoding 0x${i.toString(16)}`);
}
if (t >= 32767 - 1) {
const a = t + 1;
o.length = a, n[n.length] = String.fromCharCode.apply(String, o), r -= a, t = -1;
}
}
return t > 0 && (o.length = t, n[n.length] = String.fromCharCode.apply(String, o)), n.join("");
},
utf8Decode(e, r) {
return (r == null || r < 0) && (r = e.length), r === 0 ? "" : /^[\x00-\x7F]*$/.test(e) || !/^[\x00-\xFF]*$/.test(e) ? r === e.length ? e : e.substr(0, r) : r < 32767 ? s.utf8DecodeShortString(e, r) : s.utf8DecodeLongString(e, r);
},
encrypt(e, r) {
return e == null || e.length === 0 ? e : (e = s.utf8Encode(e), r = s.utf8Encode(r), s.toBinaryString(s.encryptUint32Array(s.toUint32Array(e, !0), s.fixk(s.toUint32Array(r, !1))), !1));
},
decrypt(e, r) {
return e == null || e.length === 0 ? e : (r = s.utf8Encode(r), s.utf8Decode(s.toBinaryString(s.decryptUint32Array(s.toUint32Array(e, !1), s.fixk(s.toUint32Array(r, !1))), !0)));
}
};
function C(e, r) {
return s.btoa(s.encrypt(e, r));
}
function A(e, r) {
return e == null || e.length === 0 ? e : s.decrypt(s.atob(e), r);
}
function x(e = {}, r) {
const n = [];
for (const F in e) {
const c = e[F];
c != null && n.push(`${F}=${encodeURIComponent(c)}`);
}
const o = r.value;
r.showConsole && console.log("加密前", n.join("&"));
const t = C(n.join("&"), o);
return r.showConsole && console.log("加密后", t), t;
}
function U(e, r) {
const n = A(e, r.value);
return JSON.parse(n);
}
function d(e, r) {
let n, o, t, F, c, i, a, l;
for (n = e.length & 3, o = e.length - n, t = r, c = 3432918353, i = 461845907, l = 0; l < o; )
a = e.charCodeAt(l) & 255 | (e.charCodeAt(++l) & 255) << 8 | (e.charCodeAt(++l) & 255) << 16 | (e.charCodeAt(++l) & 255) << 24, ++l, a = (a & 65535) * c + (((a >>> 16) * c & 65535) << 16) & 4294967295, a = a << 15 | a >>> 17, a = (a & 65535) * i + (((a >>> 16) * i & 65535) << 16) & 4294967295, t ^= a, t = t << 13 | t >>> 19, F = (t & 65535) * 5 + (((t >>> 16) * 5 & 65535) << 16) & 4294967295, t = (F & 65535) + 27492 + (((F >>> 16) + 58964 & 65535) << 16);
switch (a = 0, n) {
case 3:
a ^= (e.charCodeAt(l + 2) & 255) << 16;
case 2:
a ^= (e.charCodeAt(l + 1) & 255) << 8;
case 1:
a ^= e.charCodeAt(l) & 255, a = (a & 65535) * c + (((a >>> 16) * c & 65535) << 16) & 4294967295, a = a << 15 | a >>> 17, a = (a & 65535) * i + (((a >>> 16) * i & 65535) << 16) & 4294967295, t ^= a;
}
return t ^= e.length, t ^= t >>> 16, t = (t & 65535) * 2246822507 + (((t >>> 16) * 2246822507 & 65535) << 16) & 4294967295, t ^= t >>> 13, t = (t & 65535) * 3266489909 + (((t >>> 16) * 3266489909 & 65535) << 16) & 4294967295, t ^= t >>> 16, t >>> 0;
}
function m(e, r, n, o, t) {
const F = o;
let c = "", i = "";
return e.toLocaleString() === "get" ? (c = n.lastIndexOf(".json") > -1 ? n : f(r) ? `/${n}&${f(r)}` : `/${n}`, c.includes("//") && (c = c.replace("//", "/")), i = t.value + F + c) : e.toLocaleString() === "post" && (c = `/${n}`, c.includes("//") && (c = c.replace("//", "/")), i = x(r, t) + t.value + F + c), i += "1.0.0", t.showConsole && (console.groupCollapsed(`🔑🔑签名参数--${n}🔑🔑`), console.log("nonce加密前的字符串", i), console.log(`nonce------- ${t.murmurhash_key || 36}`, d(i, t.murmurhash_key || 36)), console.groupEnd()), d(i, t.murmurhash_key || 36);
}
function f(e = {}) {
const r = [];
for (const n in e) {
const o = e[n];
o != null && r.push(`${n}=${o}`);
}
return r.join("&");
}
function p(e) {
const r = e || location.origin + "/date";
return new Promise((n) => {
const o = new XMLHttpRequest();
o.open("head", r, !0), o.send(null), o.timeout = 15e3, o.onreadystatechange = () => {
if (o.readyState === 4) {
const t = o.getResponseHeader("Date"), F = new Date(t), c = new Date().getTime(), i = F.getTime() - c, a = new Date(new Date().getTime() + i);
localStorage.setItem("__serverTime", a.toUTCString()), n(a.toUTCString());
}
};
});
}
function $(e) {
return new Promise((r) => {
const n = localStorage.getItem("__serverTime");
n ? r(n) : p(e).then((o) => {
r(o);
});
});
}
function y(e) {
if (e === void 0)
return {};
for (const r in e)
(e[r] === "" || e[r] === void 0 || e[r] === null) && delete e[r];
return e;
}
async function B(e, r) {
const n = new Date().getTime();
w(e);
const o = r["X-Ca-Timestamp"], t = m(e.method, y(e.data || e.params), e.url, o, r);
return e.headers["request-startTime"] = n, e.headers.d = r.d, e.headers.v = "1.0.0", e.headers.u = performance.now(), e.headers.lang = "zh-CN", e.headers["X-Ca-Timestamp"] = o, e.headers["X-Ca-Nonce"] = t, (e.method === "post" || e.method === "put") && (e.data = x(e.data, r)), {};
}
function w(e) {
return e.url.indexOf("?") === -1 ? e.url += "?r=" + new Date().getTime() : e.url += "&r=" + new Date().getTime(), e;
}
export {
E as add,
U as decryptQuery,
T as divide,
$ as getServerTime,
D as multiply,
p as setServerTime,
B as setXxetaConfig,
S as subtract
};