@evolis/evolis-library 1.0.7 → 1.1.1-b

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/README.md CHANGED
@@ -14,6 +14,7 @@ This module is divided into three sub-modules: `check`, `convert` and `functions
14
14
 
15
15
  ## check.js
16
16
  Import it into your script using:
17
+
17
18
  `import { check } from "@evolis/evolis-library";`
18
19
 
19
20
  Then use one of these functions:
@@ -75,6 +76,7 @@ Then use one of these functions:
75
76
 
76
77
  ## convert.js
77
78
  Import it into your script using:
79
+
78
80
  `import { convert } from "@evolis/evolis-library";`
79
81
 
80
82
  Then use one of these functions:
@@ -94,9 +96,12 @@ Then use one of these functions:
94
96
  - date: The value to convert
95
97
  - *return: A date formatted like "yyyy-MM-dd"*
96
98
  - **timeStrToDate(time: String, [format]: String)**
97
- - time: The date to convert
98
- - [format]: The format used for conversion (default: "hh:mm")
99
- - *return: A date object filled with the time string provided*
99
+ - time: The date to convert
100
+ - [format]: The format used for conversion (default: "hh:mm")
101
+ - *return: A date object filled with the time string provided*
102
+ - **secondsToReadable(seconds: Number)**
103
+ - seconds: Seconds to convert
104
+ - *return: The converted seconds and epoch*
100
105
  - **toDate(d: any)**
101
106
  - s: The thing to convert
102
107
  - *return: A date object, null/undefined if the provided value is null/undefined and NaN if it's not convertible.*
@@ -104,9 +109,10 @@ Then use one of these functions:
104
109
  - bytes: Bytes to convert
105
110
  - [decimals]: How many decimals (default: 2)
106
111
  - *return: The converted bytes size to the closest unit*
107
- -
112
+
108
113
  ## functions.js
109
114
  Import it into your script using:
115
+
110
116
  `import { functions } from "@evolis/evolis-library";`
111
117
 
112
118
  Then use one of these functions:
package/checkers.js CHANGED
@@ -150,6 +150,16 @@ function isDate(value) {
150
150
  return Object.prototype.toString.call(value) === "[object Date]" && !!value.getDate();
151
151
  }
152
152
 
153
+ /**
154
+ * @function isMySQLDate
155
+ *
156
+ * @param {any} value - The value to test
157
+ * @returns {boolean} Return true if the value is a string with the valid MySQL date format (yyyy-mm-dd)
158
+ */
159
+ function isMySQLDate(value) {
160
+ return isString(value) && !isBlankString(value) && /^\d{4}-\d{1,2}-\d{1,2}$/.test(value);
161
+ }
162
+
153
163
  /*****************************************************
154
164
  * Regex checkers
155
165
  *****************************************************/
@@ -226,7 +236,7 @@ export default {
226
236
  isString, isEmptyString, isBlankString, strInRange,
227
237
  isNumber, isFloat,
228
238
  isArray,
229
- isDate,
239
+ isDate, isMySQLDate,
230
240
  isEmail,
231
241
  isPasswordSafe
232
242
  };
package/converters.js CHANGED
@@ -107,6 +107,32 @@ function timeStrToDate(time, format = "hh:mm") {
107
107
  return now;
108
108
  }
109
109
 
110
+ /**
111
+ * @function secondsToReadable
112
+ *
113
+ * @param {number} seconds - Seconds to convert
114
+ * @returns {string} The converted seconds and epoch
115
+ *
116
+ * @example
117
+ * secondsToReadable(120) // return "2 minutes"
118
+ * secondsToReadable(3600) // return "1 heure"
119
+ */
120
+ function secondsToReadable(seconds) {
121
+ const epochs = { "années": 31536000, "mois": 2592000, "jours": 86400, "heures": 3600, "minutes": 60, "secondes": 1 };
122
+ const singular = { "années": "ans", "mois": "mois", "jours": "jour", "heures": "heure", "minutes": "minute", "secondes": "seconde" };
123
+ const epoch = Object.entries(epochs).filter(([, value]) => seconds >= value).shift();
124
+ const readable = {
125
+ epoch: epoch[0],
126
+ interval: Math.trunc(seconds / epoch[1])
127
+ };
128
+
129
+ if (readable.interval === 1) {
130
+ readable.epoch = singular[readable.epoch];
131
+ }
132
+
133
+ return `${readable.interval} ${readable.epoch}`;
134
+ }
135
+
110
136
  /**
111
137
  * @function toDate
112
138
  *
@@ -159,6 +185,6 @@ function bytesToReadable(bytes, decimals = 2) {
159
185
 
160
186
  export default {
161
187
  arrayToSerialComma,
162
- dateToString, dateToTimeString, dateToFieldString, timeStrToDate, toDate,
188
+ dateToString, dateToTimeString, dateToFieldString, timeStrToDate, secondsToReadable, toDate,
163
189
  bytesToReadable
164
190
  };
package/functions.js CHANGED
@@ -10,6 +10,50 @@ import checkers from "./checkers.js";
10
10
  * Functions
11
11
  *****************************************************/
12
12
 
13
+ /* ---- Array ----------------------------------- */
14
+ /**
15
+ * @function shuffle
16
+ *
17
+ * @param {Array<*>} array - The array to shuffle
18
+ * @returns {Array<*>} The shuffled array
19
+ *
20
+ * @example
21
+ * shuffle([1, 2, 3]) // return [2, 1, 3] or [3, 2, 1] or [1, 3, 2] or ...
22
+ */
23
+ function shuffle(array) {
24
+ let arr = [...array], length = array.length, element, cache;
25
+
26
+ while (length) {
27
+ element = Math.floor(Math.random() * length--);
28
+
29
+ cache = arr[length];
30
+ arr[length] = arr[element];
31
+ arr[element] = cache;
32
+ }
33
+
34
+ return arr;
35
+ }
36
+
37
+ /**
38
+ * @function deepEqual
39
+ *
40
+ * @param {Object} obj1 - First object
41
+ * @param {Object} obj2 - Second object
42
+ * @returns {Boolean} Are the two objects deeply equal ?
43
+ *
44
+ * @example
45
+ * deepEqual({id: 1, title: "skibidi wap-pa-pa"}, {title: "skibidi wap-pa-pa", id: 1}) // return true
46
+ * deepEqual({id: 7, title: "skibidi wap-pa-pa"}, {title: "skibidi woosh-oosh-oosh", id: 1}) // return false
47
+ */
48
+ function deepEqual(obj1, obj2) {
49
+ if (typeof obj1 === "object" && Object.keys(obj1).length > 0) {
50
+ return Object.keys(obj1).length === Object.keys(obj2).length &&
51
+ Object.keys(obj1).every(prop => deepEqual(obj1[prop], obj2[prop]));
52
+ } else {
53
+ return obj1 === obj2;
54
+ }
55
+ }
56
+
13
57
  /* ---- Date ------------------------------------ */
14
58
  /**
15
59
  * @function dayDifference
@@ -51,6 +95,4 @@ function padLeft(value, pad = "00") {
51
95
  * Export
52
96
  *****************************************************/
53
97
 
54
- export default {
55
- dayDifference, padLeft
56
- };
98
+ export default { shuffle, deepEqual, dayDifference, padLeft };
package/package.json CHANGED
@@ -1,28 +1,28 @@
1
- {
2
- "name": "@evolis/evolis-library",
3
- "version": "1.0.7",
4
- "description": "Dependencies used both in Evolis API and Evolis UI",
5
- "repository": {
6
- "type": "git",
7
- "url": "git+https://github.com/EmpireDemocratiqueDuPoulpe/evolis-library.git"
8
- },
9
- "main": "index.js",
10
- "type": "module",
11
- "scripts": {
12
- "test": "echo \"Error: no test specified\" && exit 1"
13
- },
14
- "keywords": [
15
- "evolis",
16
- "library"
17
- ],
18
- "author": "EmpireDemocratiqueDuPoulpe",
19
- "license": "MIT",
20
- "devDependencies": {
21
- "eslint": "^7.30.0"
22
- },
23
- "bugs": {
24
- "url": "https://github.com/EmpireDemocratiqueDuPoulpe/evolis-library/issues"
25
- },
26
- "homepage": "https://github.com/EmpireDemocratiqueDuPoulpe/evolis-library#readme",
27
- "dependencies": {}
28
- }
1
+ {
2
+ "name": "@evolis/evolis-library",
3
+ "version": "1.1.1b",
4
+ "description": "Dependencies used both in Evolis API and Evolis UI",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/EmpireDemocratiqueDuPoulpe/evolis-library.git"
8
+ },
9
+ "main": "index.js",
10
+ "type": "module",
11
+ "scripts": {
12
+ "test": "echo \"Error: no test specified\" && exit 1"
13
+ },
14
+ "keywords": [
15
+ "evolis",
16
+ "library"
17
+ ],
18
+ "author": "EmpireDemocratiqueDuPoulpe",
19
+ "license": "MIT",
20
+ "devDependencies": {
21
+ "eslint": "^7.30.0"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/EmpireDemocratiqueDuPoulpe/evolis-library/issues"
25
+ },
26
+ "homepage": "https://github.com/EmpireDemocratiqueDuPoulpe/evolis-library#readme",
27
+ "dependencies": {}
28
+ }