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.
Files changed (102) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/index.d.ts +34 -0
  3. package/dist/index.js +56 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/array-utils.d.ts +56 -0
  6. package/dist/src/array-utils.js +138 -0
  7. package/dist/src/array-utils.js.map +1 -0
  8. package/dist/src/date-utils.d.ts +100 -0
  9. package/dist/src/date-utils.js +357 -0
  10. package/dist/src/date-utils.js.map +1 -0
  11. package/dist/src/env-utils.d.ts +8 -0
  12. package/dist/src/env-utils.js +38 -0
  13. package/dist/src/env-utils.js.map +1 -0
  14. package/dist/src/error-utils.d.ts +8 -0
  15. package/dist/src/error-utils.js +99 -0
  16. package/dist/src/error-utils.js.map +1 -0
  17. package/dist/src/is-empty.d.ts +1 -0
  18. package/dist/src/is-empty.js +13 -0
  19. package/dist/src/is-empty.js.map +1 -0
  20. package/dist/src/is-object.d.ts +2 -0
  21. package/dist/src/is-object.js +7 -0
  22. package/dist/src/is-object.js.map +1 -0
  23. package/dist/src/isset.d.ts +1 -0
  24. package/dist/src/isset.js +8 -0
  25. package/dist/src/isset.js.map +1 -0
  26. package/dist/src/logger-utils.d.ts +76 -0
  27. package/dist/src/logger-utils.js +355 -0
  28. package/dist/src/logger-utils.js.map +1 -0
  29. package/dist/src/loop-utils.d.ts +37 -0
  30. package/dist/src/loop-utils.js +105 -0
  31. package/dist/src/loop-utils.js.map +1 -0
  32. package/dist/src/math-utils.d.ts +23 -0
  33. package/dist/src/math-utils.js +43 -0
  34. package/dist/src/math-utils.js.map +1 -0
  35. package/dist/src/mongo-utils.d.ts +11 -0
  36. package/dist/src/mongo-utils.js +49 -0
  37. package/dist/src/mongo-utils.js.map +1 -0
  38. package/dist/src/object-utils.d.ts +96 -0
  39. package/dist/src/object-utils.js +369 -0
  40. package/dist/src/object-utils.js.map +1 -0
  41. package/dist/src/private/config.d.ts +44 -0
  42. package/dist/src/private/config.js +55 -0
  43. package/dist/src/private/config.js.map +1 -0
  44. package/dist/src/private/error-handler.d.ts +10 -0
  45. package/dist/src/private/error-handler.js +18 -0
  46. package/dist/src/private/error-handler.js.map +1 -0
  47. package/dist/src/private/types.d.ts +4 -0
  48. package/dist/src/private/types.js +3 -0
  49. package/dist/src/private/types.js.map +1 -0
  50. package/dist/src/regexp-utils.d.ts +12 -0
  51. package/dist/src/regexp-utils.js +44 -0
  52. package/dist/src/regexp-utils.js.map +1 -0
  53. package/dist/src/remove-circular-json-stringify.d.ts +1 -0
  54. package/dist/src/remove-circular-json-stringify.js +20 -0
  55. package/dist/src/remove-circular-json-stringify.js.map +1 -0
  56. package/dist/src/string-utils.d.ts +77 -0
  57. package/dist/src/string-utils.js +209 -0
  58. package/dist/src/string-utils.js.map +1 -0
  59. package/dist/src/tests-utils.js +77 -0
  60. package/dist/src/tests-utils.js.map +1 -0
  61. package/dist/src/timer-utils.d.ts +16 -0
  62. package/dist/src/timer-utils.js +79 -0
  63. package/dist/src/timer-utils.js.map +1 -0
  64. package/dist/src/transaction-utils.d.ts +14 -0
  65. package/dist/src/transaction-utils.js +87 -0
  66. package/dist/src/transaction-utils.js.map +1 -0
  67. package/dist/src/validation-utils.d.ts +89 -0
  68. package/dist/src/validation-utils.js +192 -0
  69. package/dist/src/validation-utils.js.map +1 -0
  70. package/dist/src/wtf-utils.d.ts +7 -0
  71. package/dist/src/wtf-utils.js +83 -0
  72. package/dist/src/wtf-utils.js.map +1 -0
  73. package/index.ts +38 -0
  74. package/package.json +2 -2
  75. package/src/array-utils.ts +128 -0
  76. package/src/date-utils.ts +377 -0
  77. package/src/env-utils.ts +29 -0
  78. package/src/error-utils.ts +77 -0
  79. package/src/is-empty.ts +5 -0
  80. package/src/is-object.ts +3 -0
  81. package/src/isset.ts +3 -0
  82. package/src/logger-utils.ts +349 -0
  83. package/src/loop-utils.ts +101 -0
  84. package/src/math-utils.ts +38 -0
  85. package/src/mongo-utils.ts +38 -0
  86. package/src/object-utils.ts +356 -0
  87. package/src/private/config.ts +85 -0
  88. package/src/private/error-handler.ts +21 -0
  89. package/src/private/types.ts +6 -0
  90. package/src/regexp-utils.ts +37 -0
  91. package/src/remove-circular-json-stringify.ts +17 -0
  92. package/src/string-utils.ts +212 -0
  93. package/src/tests-utils.ts +70 -0
  94. package/src/timer-utils.ts +58 -0
  95. package/src/transaction-utils.ts +63 -0
  96. package/src/validation-utils.ts +253 -0
  97. package/src/wtf-utils.ts +88 -0
  98. package/tsconfig.json +11 -4
  99. package/utils.d.ts +0 -694
  100. package/utils.js +0 -2227
  101. package/utils.js.map +0 -1
  102. 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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"}