topkat-utils 1.0.60 → 1.1.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/CHANGELOG.md +4 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/src/array-utils.d.ts +56 -0
- package/dist/src/array-utils.js +138 -0
- package/dist/src/array-utils.js.map +1 -0
- package/dist/src/date-utils.d.ts +100 -0
- package/dist/src/date-utils.js +357 -0
- package/dist/src/date-utils.js.map +1 -0
- package/dist/src/env-utils.d.ts +8 -0
- package/dist/src/env-utils.js +38 -0
- package/dist/src/env-utils.js.map +1 -0
- package/dist/src/error-utils.d.ts +8 -0
- package/dist/src/error-utils.js +99 -0
- package/dist/src/error-utils.js.map +1 -0
- package/dist/src/is-empty.d.ts +1 -0
- package/dist/src/is-empty.js +13 -0
- package/dist/src/is-empty.js.map +1 -0
- package/dist/src/is-object.d.ts +2 -0
- package/dist/src/is-object.js +7 -0
- package/dist/src/is-object.js.map +1 -0
- package/dist/src/isset.d.ts +1 -0
- package/dist/src/isset.js +8 -0
- package/dist/src/isset.js.map +1 -0
- package/dist/src/logger-utils.d.ts +76 -0
- package/dist/src/logger-utils.js +355 -0
- package/dist/src/logger-utils.js.map +1 -0
- package/dist/src/loop-utils.d.ts +37 -0
- package/dist/src/loop-utils.js +105 -0
- package/dist/src/loop-utils.js.map +1 -0
- package/dist/src/math-utils.d.ts +23 -0
- package/dist/src/math-utils.js +43 -0
- package/dist/src/math-utils.js.map +1 -0
- package/dist/src/mongo-utils.d.ts +11 -0
- package/dist/src/mongo-utils.js +49 -0
- package/dist/src/mongo-utils.js.map +1 -0
- package/dist/src/object-utils.d.ts +96 -0
- package/dist/src/object-utils.js +369 -0
- package/dist/src/object-utils.js.map +1 -0
- package/dist/src/private/config.d.ts +44 -0
- package/dist/src/private/config.js +55 -0
- package/dist/src/private/config.js.map +1 -0
- package/dist/src/private/error-handler.d.ts +10 -0
- package/dist/src/private/error-handler.js +18 -0
- package/dist/src/private/error-handler.js.map +1 -0
- package/dist/src/private/types.d.ts +4 -0
- package/dist/src/private/types.js +3 -0
- package/dist/src/private/types.js.map +1 -0
- package/dist/src/regexp-utils.d.ts +12 -0
- package/dist/src/regexp-utils.js +44 -0
- package/dist/src/regexp-utils.js.map +1 -0
- package/dist/src/remove-circular-json-stringify.d.ts +1 -0
- package/dist/src/remove-circular-json-stringify.js +20 -0
- package/dist/src/remove-circular-json-stringify.js.map +1 -0
- package/dist/src/string-utils.d.ts +77 -0
- package/dist/src/string-utils.js +209 -0
- package/dist/src/string-utils.js.map +1 -0
- package/dist/src/tests-utils.js +77 -0
- package/dist/src/tests-utils.js.map +1 -0
- package/dist/src/timer-utils.d.ts +16 -0
- package/dist/src/timer-utils.js +79 -0
- package/dist/src/timer-utils.js.map +1 -0
- package/dist/src/transaction-utils.d.ts +14 -0
- package/dist/src/transaction-utils.js +87 -0
- package/dist/src/transaction-utils.js.map +1 -0
- package/dist/src/validation-utils.d.ts +89 -0
- package/dist/src/validation-utils.js +192 -0
- package/dist/src/validation-utils.js.map +1 -0
- package/dist/src/wtf-utils.d.ts +7 -0
- package/dist/src/wtf-utils.js +83 -0
- package/dist/src/wtf-utils.js.map +1 -0
- package/index.ts +38 -0
- package/package.json +2 -2
- package/src/array-utils.ts +128 -0
- package/src/date-utils.ts +377 -0
- package/src/env-utils.ts +29 -0
- package/src/error-utils.ts +77 -0
- package/src/is-empty.ts +5 -0
- package/src/is-object.ts +3 -0
- package/src/isset.ts +3 -0
- package/src/logger-utils.ts +349 -0
- package/src/loop-utils.ts +101 -0
- package/src/math-utils.ts +38 -0
- package/src/mongo-utils.ts +38 -0
- package/src/object-utils.ts +356 -0
- package/src/private/config.ts +85 -0
- package/src/private/error-handler.ts +21 -0
- package/src/private/types.ts +6 -0
- package/src/regexp-utils.ts +37 -0
- package/src/remove-circular-json-stringify.ts +17 -0
- package/src/string-utils.ts +212 -0
- package/src/tests-utils.ts +70 -0
- package/src/timer-utils.ts +58 -0
- package/src/transaction-utils.ts +63 -0
- package/src/validation-utils.ts +253 -0
- package/src/wtf-utils.ts +88 -0
- package/tsconfig.json +11 -4
- package/utils.d.ts +0 -694
- package/utils.js +0 -2227
- package/utils.js.map +0 -1
- package/utils.ts +0 -2304
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.executeInDelayedLoop = exports.waitUntilTrue = exports.runAsync = exports.timeout = void 0;
|
|
13
|
+
//----------------------------------------
|
|
14
|
+
// TIMEOUT UTILS
|
|
15
|
+
//----------------------------------------
|
|
16
|
+
const logger_utils_1 = require("./logger-utils");
|
|
17
|
+
const error_handler_1 = require("./private/error-handler");
|
|
18
|
+
function timeout(ms, fn = () => { }) {
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () { return new Promise(res => setTimeout(res, ms)).then(fn); });
|
|
20
|
+
}
|
|
21
|
+
exports.timeout = timeout;
|
|
22
|
+
function runAsync(callback, milliseconds$ = 1) {
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () { return timeout(milliseconds$, callback); });
|
|
24
|
+
}
|
|
25
|
+
exports.runAsync = runAsync;
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param {Function} callback function that shall return ===true asynchronously
|
|
29
|
+
* @param {Number} timeoutSec default:10; general timeout in seconds
|
|
30
|
+
* @param {Boolean|String} errorAfterNSeconds default:true output an error in case of timeout, can be the displayed error message
|
|
31
|
+
* @param {*} cliOutput write a cli progress to show that a process is running
|
|
32
|
+
*/
|
|
33
|
+
function waitUntilTrue(callback, timeoutSec = 10, errorAfterNSeconds = true, cliOutput = true) {
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
let generalTimeout = true;
|
|
36
|
+
let step = 3;
|
|
37
|
+
const errMess = typeof errorAfterNSeconds === 'string' ? 'Timeout: ' + errorAfterNSeconds : 'Timeout for waitUntilTrue() callback';
|
|
38
|
+
if (timeoutSec)
|
|
39
|
+
setTimeout(() => generalTimeout = false, timeoutSec * 1000);
|
|
40
|
+
while (callback() !== true && generalTimeout) {
|
|
41
|
+
if (cliOutput)
|
|
42
|
+
(0, logger_utils_1.cliProgressBar)(step++);
|
|
43
|
+
yield timeout(300);
|
|
44
|
+
}
|
|
45
|
+
if (cliOutput)
|
|
46
|
+
process.stdout.write(`\n`);
|
|
47
|
+
if (!generalTimeout && errorAfterNSeconds)
|
|
48
|
+
throw new error_handler_1.dataValidationUtilErrorHandler(errMess, 500);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
exports.waitUntilTrue = waitUntilTrue;
|
|
52
|
+
const delayedLoopParams = [];
|
|
53
|
+
let isExecuting = false;
|
|
54
|
+
/** Allow to perform an action in a delayed loop, useful for example to avoid reaching limits on servers. This function can be securely called multiple times.
|
|
55
|
+
* @param {Function} callback
|
|
56
|
+
* @param {Number} time default: 500ms;
|
|
57
|
+
* @param {Function} errorCallback default: e => C.error(e)
|
|
58
|
+
*/
|
|
59
|
+
function executeInDelayedLoop(callback, time = 500, errorCallback = e => logger_utils_1.C.error(e)) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
delayedLoopParams.push([callback, time, errorCallback]);
|
|
62
|
+
if (isExecuting)
|
|
63
|
+
return;
|
|
64
|
+
isExecuting = true;
|
|
65
|
+
while (delayedLoopParams.length) {
|
|
66
|
+
const [callback, time, errorCallback] = delayedLoopParams.shift();
|
|
67
|
+
try {
|
|
68
|
+
yield callback();
|
|
69
|
+
yield timeout(time);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
errorCallback(err);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
isExecuting = false;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
exports.executeInDelayedLoop = executeInDelayedLoop;
|
|
79
|
+
//# sourceMappingURL=timer-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer-utils.js","sourceRoot":"","sources":["../../src/timer-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,0CAA0C;AAC1C,gBAAgB;AAChB,0CAA0C;AAC1C,iDAAkD;AAClD,2DAAwE;AAGxE,SAAsB,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;0DAAI,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;CAAA;AAA7G,0BAA6G;AAE7G,SAAsB,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,CAAC;0DAAI,OAAO,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA,CAAC,CAAC;CAAA;AAAvG,4BAAuG;AAEvG;;;;;;GAMG;AACH,SAAsB,aAAa,CAAC,QAAQ,EAAE,UAAU,GAAG,EAAE,EAAE,kBAAkB,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI;;QACtG,IAAI,cAAc,GAAG,IAAI,CAAA;QACzB,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,MAAM,OAAO,GAAG,OAAO,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,GAAG,kBAAkB,CAAC,CAAC,CAAC,sCAAsC,CAAA;QAElI,IAAI,UAAU;YAAE,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,GAAG,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC,CAAA;QAE3E,OAAO,QAAQ,EAAE,KAAK,IAAI,IAAI,cAAc,EAAE;YAC1C,IAAI,SAAS;gBAAE,IAAA,6BAAc,EAAC,IAAI,EAAE,CAAC,CAAA;YACrC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;SACrB;QACD,IAAI,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,CAAC,cAAc,IAAI,kBAAkB;YAAE,MAAM,IAAI,8CAA8B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACrG,CAAC;CAAA;AAbD,sCAaC;AAGD,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAC5B,IAAI,WAAW,GAAG,KAAK,CAAA;AAEvB;;;;GAIG;AACH,SAAsB,oBAAoB,CAAC,QAAQ,EAAE,IAAI,GAAG,GAAG,EAAE,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,gBAAC,CAAC,KAAK,CAAC,CAAC,CAAC;;QAC5F,iBAAiB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;QACvD,IAAI,WAAW;YAAE,OAAM;QACvB,WAAW,GAAG,IAAI,CAAA;QAClB,OAAO,iBAAiB,CAAC,MAAM,EAAE;YAC7B,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAA;YACjE,IAAI;gBACA,MAAM,QAAQ,EAAE,CAAA;gBAChB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;aACtB;YAAC,OAAO,GAAG,EAAE;gBACV,aAAa,CAAC,GAAG,CAAC,CAAA;aACrB;SACJ;QACD,WAAW,GAAG,KAAK,CAAA;IACvB,CAAC;CAAA;AAdD,oDAcC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Allow to perform async functions in a defined order
|
|
2
|
+
* This adds the callback to a queue and is resolved when ALL previous callbacks with same name are executed
|
|
3
|
+
* Use it like: await transaction('nameOfTheFlow', async () => { ...myFunction })
|
|
4
|
+
* @param {String|Function} name name for the actions that should never happen concurrently
|
|
5
|
+
* @param {Function} asyncCallback
|
|
6
|
+
* @param {Number} timeout default: 120000 (120s) will throw an error if transaction time is higher that this amount of ms
|
|
7
|
+
* @returns {Promise}
|
|
8
|
+
*/
|
|
9
|
+
export declare function transaction(name: any, asyncCallback: any, timeout?: number, doNotThrow?: boolean): Promise<unknown>;
|
|
10
|
+
export declare function removeItemFromQueue(name: any): Promise<void>;
|
|
11
|
+
/** Wait for a transaction to complete without creating a new transaction
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
export declare function waitForTransaction(transactionName: any, forceReleaseInSeconds?: number): Promise<void>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.waitForTransaction = exports.removeItemFromQueue = exports.transaction = void 0;
|
|
13
|
+
//----------------------------------------
|
|
14
|
+
// TRANSACTION
|
|
15
|
+
//----------------------------------------
|
|
16
|
+
const isset_1 = require("./isset");
|
|
17
|
+
const logger_utils_1 = require("./logger-utils");
|
|
18
|
+
const timer_utils_1 = require("./timer-utils");
|
|
19
|
+
const transactionRunning = { __default: false };
|
|
20
|
+
const queue = { __default: [] };
|
|
21
|
+
/** Allow to perform async functions in a defined order
|
|
22
|
+
* This adds the callback to a queue and is resolved when ALL previous callbacks with same name are executed
|
|
23
|
+
* Use it like: await transaction('nameOfTheFlow', async () => { ...myFunction })
|
|
24
|
+
* @param {String|Function} name name for the actions that should never happen concurrently
|
|
25
|
+
* @param {Function} asyncCallback
|
|
26
|
+
* @param {Number} timeout default: 120000 (120s) will throw an error if transaction time is higher that this amount of ms
|
|
27
|
+
* @returns {Promise}
|
|
28
|
+
*/
|
|
29
|
+
function transaction(name, asyncCallback, timeout = 120000, doNotThrow = false) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
if (typeof name === 'function') {
|
|
32
|
+
asyncCallback = name;
|
|
33
|
+
name = '__default';
|
|
34
|
+
}
|
|
35
|
+
if (!(0, isset_1.isset)(queue[name]))
|
|
36
|
+
queue[name] = [];
|
|
37
|
+
if (!(0, isset_1.isset)(transactionRunning[name]))
|
|
38
|
+
transactionRunning[name] = false;
|
|
39
|
+
return yield new Promise((resolve, reject) => {
|
|
40
|
+
if (doNotThrow)
|
|
41
|
+
reject = logger_utils_1.C.error;
|
|
42
|
+
queue[name].push(() => __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
try {
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
logger_utils_1.C.warning('Transaction Timout'); // in case not catched
|
|
46
|
+
reject(new Error('transactionTimeout'));
|
|
47
|
+
}, timeout);
|
|
48
|
+
const res = yield asyncCallback();
|
|
49
|
+
resolve(res);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
reject(err);
|
|
53
|
+
}
|
|
54
|
+
}));
|
|
55
|
+
removeItemFromQueue(name);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
exports.transaction = transaction;
|
|
60
|
+
function removeItemFromQueue(name) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
if (transactionRunning[name] === true)
|
|
63
|
+
return; // v
|
|
64
|
+
transactionRunning[name] = true; // A A /\
|
|
65
|
+
while (queue[name].length)
|
|
66
|
+
yield queue[name].shift()(); // II
|
|
67
|
+
transactionRunning[name] = false; // \==/_______II
|
|
68
|
+
});
|
|
69
|
+
} // l v_v_v _I
|
|
70
|
+
exports.removeItemFromQueue = removeItemFromQueue;
|
|
71
|
+
// 11 11
|
|
72
|
+
/** Wait for a transaction to complete without creating a new transaction
|
|
73
|
+
*
|
|
74
|
+
*/
|
|
75
|
+
function waitForTransaction(transactionName, forceReleaseInSeconds = 30) {
|
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
let brk = false;
|
|
78
|
+
setTimeout(() => brk = true, forceReleaseInSeconds * 1000);
|
|
79
|
+
while ((0, isset_1.isset)(transactionRunning[transactionName]) && transactionRunning[transactionName] === true) {
|
|
80
|
+
if (brk)
|
|
81
|
+
break;
|
|
82
|
+
yield (0, timer_utils_1.timeout)(15);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
exports.waitForTransaction = waitForTransaction;
|
|
87
|
+
//# sourceMappingURL=transaction-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-utils.js","sourceRoot":"","sources":["../../src/transaction-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAA0C;AAC1C,cAAc;AACd,0CAA0C;AAC1C,mCAA+B;AAC/B,iDAAkC;AAClC,+CAAuC;AAEvC,MAAM,kBAAkB,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;AAC/C,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAA;AAE/B;;;;;;;GAOG;AACH,SAAsB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM,EAAE,UAAU,GAAG,KAAK;;QACvF,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;YAC5B,aAAa,GAAG,IAAI,CAAA;YACpB,IAAI,GAAG,WAAW,CAAA;SACrB;QACD,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QACzC,IAAI,CAAC,IAAA,aAAK,EAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;QAEtE,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,UAAU;gBAAE,MAAM,GAAG,gBAAC,CAAC,KAAK,CAAA;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAS,EAAE;gBACxB,IAAI;oBACA,UAAU,CAAC,GAAG,EAAE;wBACZ,gBAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA,CAAC,sBAAsB;wBACtD,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;oBAC3C,CAAC,EAAE,OAAO,CAAC,CAAA;oBACX,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAA;oBACjC,OAAO,CAAC,GAAG,CAAC,CAAA;iBACf;gBAAC,OAAO,GAAG,EAAE;oBACV,MAAM,CAAC,GAAG,CAAC,CAAA;iBACd;YACL,CAAC,CAAA,CAAC,CAAA;YACF,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACN,CAAC;CAAA;AAxBD,kCAwBC;AAED,SAAsB,mBAAmB,CAAC,IAAI;;QAC1C,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAM,CAAC,WAAW;QACzD,kBAAkB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA,CAAC,8BAA8B;QAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;YAAE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAA,CAAC,OAAO;QAC9D,kBAAkB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA,CAAC,6BAA6B;IAClE,CAAC;CAAA,CAAC,iEAAiE;AALnE,kDAKC;AACD,iEAAiE;AAEjE;;GAEG;AACH,SAAsB,kBAAkB,CAAC,eAAe,EAAE,qBAAqB,GAAG,EAAE;;QAChF,IAAI,GAAG,GAAG,KAAK,CAAA;QACf,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAC,CAAA;QAC1D,OAAO,IAAA,aAAK,EAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,IAAI,kBAAkB,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YAC/F,IAAI,GAAG;gBAAE,MAAK;YACd,MAAM,IAAA,qBAAO,EAAC,EAAE,CAAC,CAAA;SACpB;IACL,CAAC;CAAA;AAPD,gDAOC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export declare type BaseTypes = 'objectId' | 'dateInt6' | 'dateInt' | 'dateInt8' | 'dateInt12' | 'time' | 'humanReadableTimestamp' | 'date' | 'dateObject' | 'array' | 'object' | 'buffer' | 'string' | 'function' | 'boolean' | 'number' | 'bigint' | 'year' | 'email' | 'any';
|
|
2
|
+
export declare function issetOr(...elms: any[]): boolean;
|
|
3
|
+
export declare function isEmptyOrNotSet(...elms: any[]): boolean;
|
|
4
|
+
export declare function isDateObject(variable: any): boolean;
|
|
5
|
+
/** Check all values are set */
|
|
6
|
+
export declare function checkAllObjectValuesAreEmpty(o: any): boolean;
|
|
7
|
+
/** Throw an error in case data passed is not a valid ctx */
|
|
8
|
+
export declare function checkCtxIntegrity(ctx: any): void;
|
|
9
|
+
/**
|
|
10
|
+
## VALIDATOR
|
|
11
|
+
|
|
12
|
+
@name validator
|
|
13
|
+
|
|
14
|
+
@description support multiple names, multiple values and multiple type check
|
|
15
|
+
@option if nameString ends by $ sign it is considered optional
|
|
16
|
+
|
|
17
|
+
@function validator([Objects])
|
|
18
|
+
@return {error|true/false|testMode} depend on mode (see prop mode)
|
|
19
|
+
@param {} mode normal (default) | test (TODO) | boolean
|
|
20
|
+
@param {} name 'myName' || [{myVar1: 'blah, myvar2: myvar2}], support multiple names / values
|
|
21
|
+
@param {} value myVar,
|
|
22
|
+
@param {string} myVar myVar, instead of name / value
|
|
23
|
+
@param {array} in ['blah', 'otherPossibleValue', true], equal ONE OF THESE values
|
|
24
|
+
@param {any} eq exactly equal to in, both support string or array of values
|
|
25
|
+
@param {any} neq not in, both support string or array of values
|
|
26
|
+
@param {number} lte 3, less than or equal
|
|
27
|
+
@param {number} gte 1, greater or equal
|
|
28
|
+
@param {number} lt 3, less than
|
|
29
|
+
@param {number} gt 1, greater
|
|
30
|
+
@param {string|string[]} type
|
|
31
|
+
* possibleTypes: object, number, string, boolean, array, date, dateInt8, dateInt12, dateInt6, time, objectId (mongo), humanReadableTimestamp, buffer
|
|
32
|
+
* Notes: multiples value is an OR, /!\ Array is type 'array' and not 'object' like in real JS /!\
|
|
33
|
+
@param {regExp} regexp /regexp/, test against regexp
|
|
34
|
+
@param {number} minLength for string, array or number length
|
|
35
|
+
@param {number} maxLength
|
|
36
|
+
@param {number} length
|
|
37
|
+
@param {boolean} optional default false
|
|
38
|
+
@param {boolean} emptyAllowed default false (to use if must be set but can be empty)
|
|
39
|
+
@param {boolean} mustNotBeSet this one must not be set
|
|
40
|
+
@param {any} includes check if array or string includes value (like js .includes())
|
|
41
|
+
|
|
42
|
+
@example
|
|
43
|
+
validator(
|
|
44
|
+
{ myNumber : 3, type: 'number', gte: 1, lte: 3 }, // use the name directly as a param
|
|
45
|
+
{ name: 'email', value: 'nameATsite.com', regexp: /[^\sAT]+AT[^\sAT]+\.[^\sAT]/},
|
|
46
|
+
{ name: [{'blahVar': blahVarValue, 'myOtherVar': myOtherVarValue}], type: 'string'} // multiple names for same check
|
|
47
|
+
)
|
|
48
|
+
----------------------------------------*/
|
|
49
|
+
export declare type ValidatorObject = {
|
|
50
|
+
name?: string;
|
|
51
|
+
value?: any;
|
|
52
|
+
type?: BaseTypes;
|
|
53
|
+
eq?: any;
|
|
54
|
+
neq?: any;
|
|
55
|
+
in?: any[];
|
|
56
|
+
lt?: number;
|
|
57
|
+
gt?: number;
|
|
58
|
+
lte?: number;
|
|
59
|
+
gte?: number;
|
|
60
|
+
length?: number;
|
|
61
|
+
minLength?: number;
|
|
62
|
+
maxLength?: number;
|
|
63
|
+
emptyAllowed?: boolean;
|
|
64
|
+
regexp?: RegExp;
|
|
65
|
+
mustNotBeSet?: boolean;
|
|
66
|
+
optional?: boolean;
|
|
67
|
+
isArray?: boolean;
|
|
68
|
+
[k: string]: any;
|
|
69
|
+
};
|
|
70
|
+
export declare function validator(...paramsToValidate: ValidatorObject[]): void;
|
|
71
|
+
export declare const restTestMini: {
|
|
72
|
+
throwOnErr: boolean;
|
|
73
|
+
reset(throwOnErr?: boolean): void;
|
|
74
|
+
newErr(err: any): void;
|
|
75
|
+
printStats(): void;
|
|
76
|
+
nbSuccess: number;
|
|
77
|
+
nbError: number;
|
|
78
|
+
lastErrors: any[];
|
|
79
|
+
};
|
|
80
|
+
export declare function assert(msg: string, value: any, validatorObject?: ValidatorObject | number | boolean | string): void;
|
|
81
|
+
/** Same as validator but return a boolean
|
|
82
|
+
* See {@link validator}
|
|
83
|
+
*/
|
|
84
|
+
export declare function isValid(...paramsToValidate: any[]): boolean;
|
|
85
|
+
/** Default types + custom types
|
|
86
|
+
* 'objectId','dateInt6','dateInt','dateInt8','dateInt12','time','humanReadableTimestamp','date','array','object','buffer','string','function','boolean','number','bigint',
|
|
87
|
+
*/
|
|
88
|
+
export declare function isType(value: any, type: BaseTypes): boolean;
|
|
89
|
+
export declare function validatorReturnErrArray(...paramsToValidate: ValidatorObject[]): [string?, number?, object?];
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validatorReturnErrArray = exports.isType = exports.isValid = exports.validator = exports.checkCtxIntegrity = exports.checkAllObjectValuesAreEmpty = exports.isDateObject = exports.isEmptyOrNotSet = exports.issetOr = void 0;
|
|
4
|
+
//----------------------------------------
|
|
5
|
+
// VALIDATION UTILS
|
|
6
|
+
//----------------------------------------
|
|
7
|
+
const error_handler_1 = require("./private/error-handler");
|
|
8
|
+
const isset_1 = require("./isset");
|
|
9
|
+
const date_utils_1 = require("./date-utils");
|
|
10
|
+
const array_utils_1 = require("./array-utils");
|
|
11
|
+
const config_1 = require("./private/config");
|
|
12
|
+
const is_empty_1 = require("./is-empty");
|
|
13
|
+
function issetOr(...elms) { return elms.some(elm => typeof elm !== 'undefined' && elm !== null); }
|
|
14
|
+
exports.issetOr = issetOr;
|
|
15
|
+
function isEmptyOrNotSet(...elms) { return elms.some(elm => !(0, isset_1.isset)(elm) || (0, is_empty_1.isEmpty)(elm)); }
|
|
16
|
+
exports.isEmptyOrNotSet = isEmptyOrNotSet;
|
|
17
|
+
function isDateObject(variable) { return variable instanceof Date; }
|
|
18
|
+
exports.isDateObject = isDateObject;
|
|
19
|
+
/** Check all values are set */
|
|
20
|
+
function checkAllObjectValuesAreEmpty(o) { return Object.values(o).every(value => !(0, isset_1.isset)(value)); }
|
|
21
|
+
exports.checkAllObjectValuesAreEmpty = checkAllObjectValuesAreEmpty;
|
|
22
|
+
/** Throw an error in case data passed is not a valid ctx */
|
|
23
|
+
function checkCtxIntegrity(ctx) {
|
|
24
|
+
if (!(0, isset_1.isset)(ctx) || !(0, isset_1.isset)(ctx.user))
|
|
25
|
+
throw new error_handler_1.dataValidationUtilErrorHandler('ctxNotSet', 500);
|
|
26
|
+
}
|
|
27
|
+
exports.checkCtxIntegrity = checkCtxIntegrity;
|
|
28
|
+
function validator(...paramsToValidate) {
|
|
29
|
+
const errArray = validatorReturnErrArray(...paramsToValidate);
|
|
30
|
+
if (errArray.length)
|
|
31
|
+
throw new error_handler_1.dataValidationUtilErrorHandler(...errArray);
|
|
32
|
+
}
|
|
33
|
+
exports.validator = validator;
|
|
34
|
+
/** Same as validator but return a boolean
|
|
35
|
+
* See {@link validator}
|
|
36
|
+
*/
|
|
37
|
+
function isValid(...paramsToValidate) {
|
|
38
|
+
const errArray = validatorReturnErrArray(...paramsToValidate);
|
|
39
|
+
return errArray.length ? false : true;
|
|
40
|
+
}
|
|
41
|
+
exports.isValid = isValid;
|
|
42
|
+
/** Default types + custom types
|
|
43
|
+
* 'objectId','dateInt6','dateInt','dateInt8','dateInt12','time','humanReadableTimestamp','date','array','object','buffer','string','function','boolean','number','bigint',
|
|
44
|
+
*/
|
|
45
|
+
function isType(value, type) { return isValid({ name: 'Is type check', value, type }); }
|
|
46
|
+
exports.isType = isType;
|
|
47
|
+
function validatorReturnErrArray(...paramsToValidate) {
|
|
48
|
+
let paramsFormatted = [];
|
|
49
|
+
// support for multiple names with multiple values for one rule. Eg: {name: [{startDate:'20180101'}, {endDate:'20180101'}], type: 'dateInt8'}
|
|
50
|
+
paramsToValidate.forEach(param => {
|
|
51
|
+
if (typeof param !== 'object' || Array.isArray(param))
|
|
52
|
+
throw new error_handler_1.dataValidationUtilErrorHandler(`wrongTypeForDataValidatorArgument`, 500, { origin: 'Generic validator', expected: 'object', actualType: Array.isArray(param) ? 'array' : typeof param });
|
|
53
|
+
// parse => name: {myVar1: 'blah, myvar2: myvar2}
|
|
54
|
+
if (typeof param.name === 'object' && !Array.isArray(param.name))
|
|
55
|
+
Object.keys(param.name).forEach(name => paramsFormatted.push(Object.assign({}, param, { name: name, value: param.name[name] })));
|
|
56
|
+
else
|
|
57
|
+
paramsFormatted.push(param);
|
|
58
|
+
});
|
|
59
|
+
for (const paramObj of paramsFormatted) {
|
|
60
|
+
let name = paramObj.name;
|
|
61
|
+
let value = paramObj.value;
|
|
62
|
+
let optional = paramObj.optional || false;
|
|
63
|
+
let emptyAllowed = optional || paramObj.emptyAllowed || false;
|
|
64
|
+
const errMess = (msg, extraInfos = {}, errCode = 422) => [msg, errCode, Object.assign({ origin: 'Generic validator', varName: name, gotValue: (0, isset_1.isset)(value) && (0, isset_1.isset)(value.data) && (0, isset_1.isset)(value.data.data) ? Object.assign(Object.assign({}, value), { data: 'Buffer' }) : value }, extraInfos)];
|
|
65
|
+
// accept syntax { 'myVar.var2': myVar.var2, ... }
|
|
66
|
+
if (!(0, isset_1.isset)(name)) {
|
|
67
|
+
name = Object.keys(paramObj).find(param => !['in', 'eq', 'lte', 'gte', 'name', 'value', 'type', 'regexp', 'minLength', 'maxLength', 'optional', 'emptyAllowed', 'mustNotBeSet', 'includes', 'length'].includes(param));
|
|
68
|
+
if ((0, isset_1.isset)(name))
|
|
69
|
+
value = paramObj[name]; // throw new dataValidationUtilErrorHandler('noNameProvidedForDataValidator', 500, { origin: 'Generic validator', });
|
|
70
|
+
}
|
|
71
|
+
// if nameString ends by $ sign it is optional
|
|
72
|
+
if ((0, isset_1.isset)(name) && /.*\$$/.test(name)) {
|
|
73
|
+
name = name.substr(0, name.length - 1);
|
|
74
|
+
optional = true;
|
|
75
|
+
}
|
|
76
|
+
// DEFINED AND NOT EMPTY
|
|
77
|
+
if (!(0, isset_1.isset)(value) && optional)
|
|
78
|
+
continue;
|
|
79
|
+
if ((0, isset_1.isset)(value) && paramObj.mustNotBeSet)
|
|
80
|
+
return errMess('variableMustNotBeSet');
|
|
81
|
+
if (paramObj.mustNotBeSet)
|
|
82
|
+
continue; // exit
|
|
83
|
+
if (!(0, isset_1.isset)(value))
|
|
84
|
+
return errMess('requiredVariableEmptyOrNotSet');
|
|
85
|
+
if (!emptyAllowed && value === '')
|
|
86
|
+
return errMess('requiredVariableEmpty');
|
|
87
|
+
const isArray = paramObj.isArray;
|
|
88
|
+
if (isArray && !Array.isArray(value))
|
|
89
|
+
return errMess('wrongTypeForVar', { expectedTypes: 'array', gotType: typeof value });
|
|
90
|
+
// TYPE
|
|
91
|
+
if ((0, isset_1.isset)(paramObj.type)) {
|
|
92
|
+
const types = (0, array_utils_1.asArray)(paramObj.type); // support for multiple type
|
|
93
|
+
const areSomeTypeValid = types.some(type => {
|
|
94
|
+
if (type.endsWith('[]')) {
|
|
95
|
+
if (!Array.isArray(value))
|
|
96
|
+
errMess('wrongTypeForVar', { expectedTypes: 'array', gotType: typeof value });
|
|
97
|
+
type = type.replace('[]', '');
|
|
98
|
+
}
|
|
99
|
+
const allTypes = [
|
|
100
|
+
'objectId',
|
|
101
|
+
'dateInt6',
|
|
102
|
+
'dateInt',
|
|
103
|
+
'dateInt8',
|
|
104
|
+
'dateInt12',
|
|
105
|
+
'time',
|
|
106
|
+
'humanReadableTimestamp',
|
|
107
|
+
'date',
|
|
108
|
+
'dateObject',
|
|
109
|
+
'array',
|
|
110
|
+
'object',
|
|
111
|
+
'buffer',
|
|
112
|
+
'string',
|
|
113
|
+
'function',
|
|
114
|
+
'boolean',
|
|
115
|
+
'number',
|
|
116
|
+
'bigint',
|
|
117
|
+
'year',
|
|
118
|
+
'any',
|
|
119
|
+
'email',
|
|
120
|
+
//...Object.keys(configFn().customTypes)
|
|
121
|
+
];
|
|
122
|
+
if (!allTypes.includes(type))
|
|
123
|
+
throw new error_handler_1.dataValidationUtilErrorHandler('typeDoNotExist', 500, { type });
|
|
124
|
+
const basicTypeCheck = {
|
|
125
|
+
objectId: val => /^[0-9a-fA-F-]{24,}$/.test(val),
|
|
126
|
+
dateInt6: val => (0, date_utils_1.isDateIntOrStringValid)(parseInt(val + '01'), true, 8),
|
|
127
|
+
dateInt: val => (0, date_utils_1.isDateIntOrStringValid)(val, true, 8),
|
|
128
|
+
dateInt8: val => (0, date_utils_1.isDateIntOrStringValid)(val, true, 8),
|
|
129
|
+
dateInt12: val => (0, date_utils_1.isDateIntOrStringValid)(val, true, 12),
|
|
130
|
+
time: val => /^\d\d:\d\d$/.test(val) && (0, date_utils_1.isTimeStringValid)(val),
|
|
131
|
+
humanReadableTimestamp: val => (val + '').length === 17,
|
|
132
|
+
date: val => (0, date_utils_1.isDateIsoOrObjectValid)(val, true),
|
|
133
|
+
dateObject: val => (0, date_utils_1.isDateIsoOrObjectValid)(val, true),
|
|
134
|
+
array: val => Array.isArray(val),
|
|
135
|
+
object: val => !Array.isArray(val) && val !== null && typeof val === type,
|
|
136
|
+
buffer: val => Buffer.isBuffer(val),
|
|
137
|
+
year: val => /^\d\d\d\d$/.test(val),
|
|
138
|
+
email: val => /^[^\s@]+@([^\s@.,]+\.)+[^\s@.,]+$/.test(val),
|
|
139
|
+
any: () => true,
|
|
140
|
+
};
|
|
141
|
+
return (0, isset_1.isset)(basicTypeCheck[type]) && basicTypeCheck[type](value) ||
|
|
142
|
+
typeof value === type && type !== 'object' || // for string, number, boolean...
|
|
143
|
+
(0, isset_1.isset)((0, config_1.configFn)().customTypes[type]) && (0, config_1.configFn)().customTypes[type].test(value);
|
|
144
|
+
});
|
|
145
|
+
if (!areSomeTypeValid)
|
|
146
|
+
return errMess(`wrongTypeForVar`, { expectedTypes: types.join(', '), gotType: Object.prototype.toString.call(value) });
|
|
147
|
+
}
|
|
148
|
+
// GREATER / LESS
|
|
149
|
+
if ((0, isset_1.isset)(paramObj.gte) && value < paramObj.gte)
|
|
150
|
+
return errMess(`valueShouldBeSuperiorOrEqualForVar`, { shouldBeSupOrEqTo: paramObj.gte });
|
|
151
|
+
if ((0, isset_1.isset)(paramObj.lte) && value > paramObj.lte)
|
|
152
|
+
return errMess(`valueShouldBeInferiorOrEqualForVar`, { shouldBeInfOrEqTo: paramObj.lte });
|
|
153
|
+
if ((0, isset_1.isset)(paramObj.gt) && value <= paramObj.gt)
|
|
154
|
+
return errMess(`valueShouldBeSuperiorForVar`, { shouldBeSupOrEqTo: paramObj.gt });
|
|
155
|
+
if ((0, isset_1.isset)(paramObj.lt) && value >= paramObj.lt)
|
|
156
|
+
return errMess(`valueShouldBeInferiorForVar`, { shouldBeInfOrEqTo: paramObj.lt });
|
|
157
|
+
// IN VALUES
|
|
158
|
+
if ((0, isset_1.isset)(paramObj.in)) {
|
|
159
|
+
const equals = Array.isArray(paramObj.in) ? paramObj.in : [paramObj.in];
|
|
160
|
+
if (!equals.some(equalVal => equalVal === value))
|
|
161
|
+
return errMess(`wrongValueForVar`, { supportedValues: JSON.stringify(equals) });
|
|
162
|
+
}
|
|
163
|
+
// EQUAL (exact copy of .in)
|
|
164
|
+
if (paramObj.hasOwnProperty('eq')) {
|
|
165
|
+
const equals = Array.isArray(paramObj.eq) ? paramObj.eq : [paramObj.eq];
|
|
166
|
+
if (!equals.some(equalVal => equalVal === value))
|
|
167
|
+
return errMess(`wrongValueForVar`, { supportedValues: equals.join(', '), });
|
|
168
|
+
}
|
|
169
|
+
// NOT EQUAL
|
|
170
|
+
if (paramObj.hasOwnProperty('neq')) {
|
|
171
|
+
const notEquals = Array.isArray(paramObj.neq) ? paramObj.neq : [paramObj.neq];
|
|
172
|
+
if (notEquals.some(equalVal => equalVal === value))
|
|
173
|
+
return errMess(`wrongValueForVar`, { NOTsupportedValues: notEquals.join(', ') });
|
|
174
|
+
}
|
|
175
|
+
// INCLUDES
|
|
176
|
+
if ((0, isset_1.isset)(paramObj.includes) && !value.includes(paramObj.includes))
|
|
177
|
+
return errMess(`wrongValueForVar`, { shouldIncludes: paramObj.includes });
|
|
178
|
+
// REGEXP
|
|
179
|
+
if ((0, isset_1.isset)(paramObj.regexp) && !paramObj.regexp.test(value))
|
|
180
|
+
return errMess(`wrongValueForVar`, { shouldMatchRegexp: paramObj.regexp.toString() });
|
|
181
|
+
// MIN / MAX LENGTH works for number length. Eg: 20180101.length == 8
|
|
182
|
+
if ((0, isset_1.isset)(paramObj.minLength) && paramObj.minLength > (typeof value == 'number' ? value + '' : value).length)
|
|
183
|
+
return errMess(`wrongLengthForVar`, { minLength: paramObj.minLength });
|
|
184
|
+
if ((0, isset_1.isset)(paramObj.maxLength) && paramObj.maxLength < (typeof value == 'number' ? value + '' : value).length)
|
|
185
|
+
return errMess(`wrongLengthForVar`, { maxLength: paramObj.maxLength });
|
|
186
|
+
if ((0, isset_1.isset)(paramObj.length) && paramObj.length !== (typeof value == 'number' ? value + '' : value).length)
|
|
187
|
+
return errMess(`wrongLengthForVar`, { length: paramObj.length });
|
|
188
|
+
}
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
exports.validatorReturnErrArray = validatorReturnErrArray;
|
|
192
|
+
//# sourceMappingURL=validation-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-utils.js","sourceRoot":"","sources":["../../src/validation-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function chineseProverb(): string;
|
|
2
|
+
export declare function randomEmoji(msg: any, length?: number): string;
|
|
3
|
+
/** STRING COMPRESSOR
|
|
4
|
+
* peut facilement être utilisé par uncomp directement (stock les metadonnées sur la comp)
|
|
5
|
+
*/
|
|
6
|
+
export declare function compAuto(str: any): any;
|
|
7
|
+
export declare function unComp(str: any): any;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//----------------------------------------
|
|
3
|
+
// WTF UTILS
|
|
4
|
+
//----------------------------------------
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.unComp = exports.compAuto = exports.randomEmoji = exports.chineseProverb = void 0;
|
|
7
|
+
const regexp_utils_1 = require("./regexp-utils");
|
|
8
|
+
const logger_utils_1 = require("./logger-utils");
|
|
9
|
+
const isset_1 = require("./isset");
|
|
10
|
+
function chineseProverb() {
|
|
11
|
+
// no spoil man
|
|
12
|
+
const str = 'Aécrçsçséçséènéopporùunçùyérçdçngéùhàédèngàrouséwçnd$Iù\'sébàùùàréùoébàéwçùhouùéèébookéùhènéùoébàlçàvàéèébookéànùçràly$Aélçùùlàéçmpèùçàncàéwçlléspoçlégràèùéplèns$Tèlkédoàsénoùécookérçcà$Aénààdlàéçsénoùéshèrpéèùéboùhéànds$Thàébàsùéùçmàéùoéplènùéèéùrààéwèsé20éyàèrséègo.éThàésàcondébàsùéùçmàéçséùodèy$Inéèégroupéofémènyéwords,éùhàràéçséboundéùoébàéèémçsùèkàésomàwhàràéçnéùhàm$Pèùçàncàéçséèébçùùàréplènù,ébuùéçùséfruçùéçséswààù$Twoégoodéùèlkàrséèràénoùéworùhéonàégoodélçsùànàr$Aéhundràdéno\'séèràélàsséègonçzçngéùhènéonàéçnsçncàràéyàs$Hàéwhoéchàèùséùhàéàèrùhéwçllébàéchàèùàdébyéùhàéàèrùh';
|
|
13
|
+
return ['é ', 'àe', 'èa', 'ùt', 'çi'].reduce((s, e) => s.replace(new RegExp(e[0], 'g'), e[1]), str).split('$')[Math.floor(Math.random() * 11)];
|
|
14
|
+
}
|
|
15
|
+
exports.chineseProverb = chineseProverb;
|
|
16
|
+
function randomEmoji(msg, length = 20) {
|
|
17
|
+
const o = `\u0298\u203f\u0298§\u0ca0\u005f\u0ca0§\u0028\uff61\u25d5\u203f\u25d5\uff61\u0029§\uff08\u3000\uff9f\u0414\uff9f\uff09§\u0028\u256c\u0020\u0ca0\u76ca\u0ca0\u0029§\u0ca0\u203f\u0ca0§\u0028\u0020\u0361\u00b0\u0020\u035c\u0296\u0020\u0361\u00b0\u0029§\u0ca5\u005f\u0ca5§\u0ca5\ufe4f\u0ca5§\u2299\ufe4f\u2299§\u00b0\u203f\u203f\u00b0§\u0028\u00b4\uff65\u005f\uff65\u0060\u0029§\u0c20\u005f\u0c20§\u0028\u2299\u005f\u25ce\u0029§\u30df\u25cf\ufe4f\u2609\u30df§\u0028\u0ca5\u2323\u0ca5\u0029§\u0028\u0e51\u2022\u0301\u0020\u2083\u0020\u2022\u0300\u0e51\u0029§\u25d4\u005f\u25d4§\u2665\u203f\u2665§\u0028\u0020\u02d8\u0020\u00b3\u02d8\u0029\u2665§\u0028\u0020\u02c7\u0df4\u02c7\u0020\u0029§\u0028\u0482\u25e1\u005f\u25e1\u0029§\u2940\u002e\u2940§\u0028\u2a7e\ufe4f\u2a7d\u0029§\u0028\u0020\u0c20\u0020\u035f\u0296\u0020\u0c20\u0029§\u0028\u0020\u0361\u0ca0\u0020\u0296\u032f\u0020\u0361\u0ca0\u0029§\u0028\u0020\u0ca0\u0020\u0296\u032f\u0020\u0ca0\u0029§\u2668\u005f\u2668§\u0028\u002e\u005f\u002e\u0029§\ub208\u005f\ub208§\u0028\u25e0\ufe4f\u25e0\u0029§\u25d6\u1d54\u1d25\u1d54\u25d7\u0020\u266a\u0020\u266b§\u007b\u2022\u0303\u005f\u2022\u0303\u007d§\u0028\u1d54\u1d25\u1d54\u0029§\u0028\u053e\u2038\u0020\u053e\u0029§\u00af\u005c\u005f\u0028\u30c4\u0029\u005f\u002f\u00af§\u00af\u005c\u0028\u00b0\u005f\u006f\u0029\u002f\u00af§\u00af\u005c\u005f\u0028\u2299\ufe3f\u2299\u0029\u005f\u002f\u00af§\u0505\u0028\u2256\u203f\u2256\u0505\u0029§\u10da\u0028\uff40\u30fc\u00b4\u10da\u0029§\u261c\u0028\u2312\u25bd\u2312\u0029\u261e§\u30fd\u0028\u00b4\u25bd\u0060\u0029\u002f§\u30fd\u0028\u00b4\u30fc\uff40\u0029\u30ce§\u1559\u0028\u21c0\u2038\u21bc\u2036\u0029\u1557§\u1566\u0028\u00f2\u005f\u00f3\u02c7\u0029\u1564§\u2282\u0028\u25c9\u203f\u25c9\u0029\u3064§\u0071\u0028\u2742\u203f\u2742\u0029\u0070§\u00bf\u24e7\u005f\u24e7\ufb8c§\u0028\u2299\u002e\u2609\u0029§\u0449\uff08\uff9f\u0414\uff9f\u0449\uff09§\u0669\u0028\u0e4f\u005f\u0e4f\u0029\u06f6§\u0074\u0028\u002d\u005f\u002d\u0074\u0029§\u0028\u3065\uffe3\u0020\u00b3\uffe3\u0029\u3065§\u0028\u3065\uff61\u25d5\u203f\u203f\u25d5\uff61\u0029\u3065§\u201c\u30fd\u0028\u00b4\u25bd\uff40\u0029\u30ce\u201d§\u250c\u0028\u3186\u3268\u3186\u0029\u0283§\u0028\u2283\uff61\u2022\u0301\u203f\u2022\u0300\uff61\u0029\u2283§\u0028\u3063\u02d8\u06a1\u02d8\u03c2\u0029§\u0028\u0e07\u30c4\u0029\u0e27§\u30fe\u0028\u002d\u005f\u002d\u0020\u0029\u309e§\u266a\u266a\u0020\u30fd\u0028\u02c7\u2200\u02c7\u0020\u0029\u309e§\u30fe\u0028\u00b4\u3007\u0060\u0029\uff89\u266a\u266a\u266a§\u0028\u3063\u2580\u00af\u2580\u0029\u3064§\u0028\u00b4\u0436\uff40\u03c2\u0029§\u0028\u00b0\u0020\u035c\u0296\u0361\u00b0\u0029\u256d\u2229\u256e§\u062d\u0028\u2022\u0300\u0436\u2022\u0301\u0029\u0e07\u0020\u2020§\u007e\u0028\u005e\u002d\u005e\u0029\u007e§\u005c\u0028\u1d54\u1d55\u1d54\u0029\u002f§\u10da\u0028\u2022\u0301\u2022\u0301\u10da\u0029§\u0028\u0e07\u2019\u0300\u002d\u2018\u0301\u0029\u0e07§\u0028\u2022\u0300\u1d17\u2022\u0301\u0029\u0648\u0020\u0311\u0311§\u005b\u00ac\u00ba\u002d\u00b0\u005d\u00ac§\u0028\u261e\uff9f\u30ee\uff9f\u0029\u261e§\u00bb\u2310\u0028\u0ca0\u06fe\u0ca0\u0029\u00ac\u0020\u00bb\u2019§\u0028\u3063\u2022\u0301\uff61\u2022\u0301\u0029\u266a\u266c§\u01aa\u0028\u0693\u05f2\u0029\u200e\u01aa\u200b\u200b§\u0295\u2022\u1d25\u2022\u0294§\u0295\u1d54\u1d25\u1d54\u0294§\u0295\u0020\u2022\u0060\u1d25\u2022\u00b4\u0294§\u0295\u0020\u2022\u0301\u0608\u2022\u0300\u0020\u208e§\u0028\u0060\uff65\u03c9\uff65\u00b4\u0029§\u1d52\u1d25\u1d52§\u0056\u2022\u1d25\u2022\u0056§\u0e05\u005e\u2022\ufecc\u2022\u005e\u0e05§\u0028\u0020\u0c20\u0d60\u0c20\u0020\u0029\uff89§\u0295\u0298\u0305\u035c\u0298\u0305\u0294§\u062d\u02da\u0bf0\u02da\u3065§\u0028\u256f\u00b0\u25a1\u00b0\uff09\u256f\ufe35\u0020\u253b\u2501\u253b§\u252c\u2500\u252c\ufeff\u0020\u30ce\u0028\u0020\u309c\u002d\u309c\u30ce\u0029§\u252c\u2500\u252c\u20f0\u0361\u2007\u0028\u1d54\u1d55\u1d54\u035c\u2007\u0029§\u253b\u2501\u253b\u0020\ufe35\u30fd\u0028\u0060\u0414\u00b4\u0029\uff89\ufe35\ufeff\u0020\u253b\u2501\u253b§\u0028\u30ce\u0ca0\u0020\u2229\u0ca0\u0029\u30ce\u5f61\u0028\u0020\u005c\u006f\u00b0\u006f\u0029\u005c§\uff08\u0020\u005e\u005f\u005e\uff09\u006f\u81ea\u81ea\u006f\uff08\u005e\u005f\u005e\u0020\uff09§\u0f3c\u2235\u0f3d§\u0f3c\u2368\u0f3d§\u0f3c\u2362\u0f3d§\u0f3c\u2364\u0f3d§\u30fd\u0f3c\u0020\u0ca0\u76ca\u0ca0\u0020\u0f3d\uff89§\u4e41\u0028\u0020\u25d4\u0020\u0c6a\u25d4\u0029\u300c§\u0028\u2229\uff40\u002d\u00b4\u0029\u2283\u2501\u2606\uff9f\u002e\u002a\uff65\uff61\uff9f`.split('§')[Math.floor(Math.random() * 100)];
|
|
18
|
+
return o.padEnd(length, ' ') + (msg ? '< ' + msg : '');
|
|
19
|
+
}
|
|
20
|
+
exports.randomEmoji = randomEmoji;
|
|
21
|
+
/** STRING COMPRESSOR
|
|
22
|
+
* peut facilement être utilisé par uncomp directement (stock les metadonnées sur la comp)
|
|
23
|
+
*/
|
|
24
|
+
function compAuto(str) {
|
|
25
|
+
const oldStrLength = str.length;
|
|
26
|
+
const utf8Chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ:;<=>%?@"#$&\'()*+,-./[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007f€\u0081‚ƒ„…†‡ˆ‰Š‹ŒŽ\u008f‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŹźŻżſƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƓƔƕƖƗƘƙƚƛƜƝƞƟ'.split('');
|
|
27
|
+
const unusedChars = utf8Chars.filter(c => !str.includes(c));
|
|
28
|
+
const charMap = [];
|
|
29
|
+
const mostFreqStr = str2 => {
|
|
30
|
+
const o = {};
|
|
31
|
+
// recherche la meilleure optim selon le nb de char
|
|
32
|
+
for (let strLength = 2; strLength < 16; strLength++) {
|
|
33
|
+
for (let i = 0; (0, isset_1.isset)(str2[i + strLength - 1]); i++) {
|
|
34
|
+
let s = '';
|
|
35
|
+
while (s.length < strLength)
|
|
36
|
+
s += str2[i + s.length];
|
|
37
|
+
o[s] = !(0, isset_1.isset)(o[s]) ? -2 : o[s] + strLength - 1; // nb of char economised (the first == -2 because this is space for mapping)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return Object.keys(o) // {'aa':12, 'ab':8}
|
|
41
|
+
.filter(subStr => o[subStr] > subStr.length + 2) // will not be comp if charEconomised != substr.length
|
|
42
|
+
.sort((a, b) => o[b] - o[a])[0];
|
|
43
|
+
};
|
|
44
|
+
// on trouve les [deepness] double char les plus représentés ['aa', 'bb'...]
|
|
45
|
+
// on les remplace le nb de [recursion], ce qui permet de remplacer des remplacements
|
|
46
|
+
let strLengthBefore;
|
|
47
|
+
while (strLengthBefore !== str.length && unusedChars.length > 0) {
|
|
48
|
+
strLengthBefore = str.length;
|
|
49
|
+
const toReplace = mostFreqStr(str);
|
|
50
|
+
if ((0, isset_1.isset)(toReplace)) {
|
|
51
|
+
const char = unusedChars.shift();
|
|
52
|
+
charMap.push({ char, replacement: toReplace }); // { ù: 'aa' }
|
|
53
|
+
str = str.replace(new RegExp((0, regexp_utils_1.escapeRegexp)(toReplace), 'g'), char);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
for (const { char, replacement } of charMap) {
|
|
57
|
+
// rrrr => rƠ4
|
|
58
|
+
const reg = replacement.length > 3 && replacement.split('').every((char2, i, a) => char2 == a[0]) ? `${replacement[0]}Ơ${replacement.length}` : replacement;
|
|
59
|
+
str = `${char}${reg}§` + str;
|
|
60
|
+
}
|
|
61
|
+
logger_utils_1.C.info(`COMP percentage: ${Math.round((str.length / oldStrLength) * 100)}% of its original size`);
|
|
62
|
+
return str;
|
|
63
|
+
}
|
|
64
|
+
exports.compAuto = compAuto;
|
|
65
|
+
function unComp(str) {
|
|
66
|
+
const charMap = [];
|
|
67
|
+
const map = str.split('§');
|
|
68
|
+
str = map.pop();
|
|
69
|
+
map.forEach(e => {
|
|
70
|
+
let char = e[0];
|
|
71
|
+
let replacement = e.substring(1, 999);
|
|
72
|
+
if (replacement.includes('Ơ')) {
|
|
73
|
+
const [char, nb] = replacement.split('Ơ');
|
|
74
|
+
replacement = char.repeat(nb);
|
|
75
|
+
}
|
|
76
|
+
charMap.push({ char, replacement });
|
|
77
|
+
});
|
|
78
|
+
charMap.forEach(({ char, replacement }) => str = str.replace(new RegExp((0, regexp_utils_1.escapeRegexp)(char), 'g'), replacement) // regexp excape
|
|
79
|
+
);
|
|
80
|
+
return str;
|
|
81
|
+
}
|
|
82
|
+
exports.unComp = unComp;
|
|
83
|
+
//# sourceMappingURL=wtf-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wtf-utils.js","sourceRoot":"","sources":["../../src/wtf-utils.ts"],"names":[],"mappings":"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"}
|