UNPKG

3.05 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.formatDate = exports.DefaultLogFile = exports.defaults = exports.Is = exports.promiseQueue = exports.debounce = exports.sleep = exports.hashAny = exports.getType = void 0;
4const path_1 = require("path");
5let objUid = 0;
6let objUidMap = new WeakMap();
7/** @internal */
8function getType(key) {
9 const t = Object.prototype.toString.call(key);
10 return t.slice(8, -1).toLowerCase();
11}
12exports.getType = getType;
13/** @internal */
14function hashAny(key) {
15 switch (getType(key)) {
16 case 'undefined':
17 case 'null':
18 case 'boolean':
19 case 'number':
20 case 'regexp':
21 return key + '';
22 case 'date':
23 return '📅' + key.getTime();
24 case 'string':
25 return '📝' + key;
26 case 'array':
27 return '🔗' + key.map((k) => hashAny(k)).join('⁞');
28 case 'object':
29 return (key.constructor.name +
30 JSON.stringify(key, (k, v) => {
31 if (!k)
32 return v;
33 return hashAny(v);
34 }));
35 default:
36 let uid = objUidMap.get(key);
37 if (!uid) {
38 uid = ++objUid;
39 objUidMap.set(key, uid);
40 }
41 return '⭕️' + uid;
42 }
43}
44exports.hashAny = hashAny;
45exports.sleep = (ms) => {
46 return new Promise((res) => setTimeout(res, ms));
47};
48function debounce(cb, ms, getArgsKey = (args) => args.join('|')) {
49 let timerMap = new Map();
50 let newCb = (...args) => {
51 if (timerMap.size > 20) {
52 timerMap = new Map();
53 }
54 const key = getArgsKey(args);
55 let timer = timerMap.get(key);
56 timer && clearTimeout(timer);
57 timer = setTimeout(cb, ms, ...args);
58 timerMap.set(key, timer);
59 };
60 return newCb;
61}
62exports.debounce = debounce;
63function promiseQueue(cb) {
64 let promiseQueue = Promise.resolve(null);
65 return (...args) => {
66 promiseQueue = promiseQueue.then(() => cb(...args));
67 return promiseQueue;
68 };
69}
70exports.promiseQueue = promiseQueue;
71exports.Is = {
72 defed(v) {
73 return typeof v !== 'undefined' && v !== null;
74 },
75 str(v) {
76 return typeof v === 'string';
77 },
78 bool(v) {
79 return typeof v === 'boolean';
80 },
81 fn(v) {
82 return typeof v === 'function';
83 },
84 obj(v) {
85 return v && typeof v === 'object';
86 },
87 num(v) {
88 return typeof v === 'number';
89 },
90};
91function defaults(...args) {
92 let [val, ...defaultVals] = args;
93 if (exports.Is.defed(val))
94 return val;
95 if (defaultVals.length === 0) {
96 return val;
97 }
98 return defaults(...defaultVals);
99}
100exports.defaults = defaults;
101exports.DefaultLogFile = path_1.join(process.cwd(), 'foy.log');
102exports.formatDate = (d) => `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()} ${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}`;
103//# sourceMappingURL=utils.js.map
\No newline at end of file