@evolis/evolis-library 1.0.6 → 1.1.0
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/LICENSE +21 -0
 - package/README.md +130 -0
 - package/checkers.js +22 -11
 - package/converters.js +27 -1
 - package/functions.js +26 -4
 - package/package.json +28 -28
 
    
        package/LICENSE
    ADDED
    
    | 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            MIT License
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Copyright (c) 2021 Alexis Lecomte
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining a copy
         
     | 
| 
      
 6 
     | 
    
         
            +
            of this software and associated documentation files (the "Software"), to deal
         
     | 
| 
      
 7 
     | 
    
         
            +
            in the Software without restriction, including without limitation the rights
         
     | 
| 
      
 8 
     | 
    
         
            +
            to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         
     | 
| 
      
 9 
     | 
    
         
            +
            copies of the Software, and to permit persons to whom the Software is
         
     | 
| 
      
 10 
     | 
    
         
            +
            furnished to do so, subject to the following conditions:
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be included in all
         
     | 
| 
      
 13 
     | 
    
         
            +
            copies or substantial portions of the Software.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         
     | 
| 
      
 16 
     | 
    
         
            +
            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         
     | 
| 
      
 17 
     | 
    
         
            +
            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         
     | 
| 
      
 18 
     | 
    
         
            +
            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         
     | 
| 
      
 19 
     | 
    
         
            +
            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         
     | 
| 
      
 20 
     | 
    
         
            +
            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
         
     | 
| 
      
 21 
     | 
    
         
            +
            SOFTWARE.
         
     | 
    
        package/README.md
    ADDED
    
    | 
         @@ -0,0 +1,130 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Evolis Library
         
     | 
| 
      
 2 
     | 
    
         
            +
            A simple package that groups together frequently used functions in front-end and in back-end at Evolis.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            ## Note
         
     | 
| 
      
 5 
     | 
    
         
            +
            This package is marked as public and you can use it under the MIT license. But most of this stuff may be useless to you and you can probably find another good library that fits your needs.
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ## Install
         
     | 
| 
      
 8 
     | 
    
         
            +
            This is a  [Node.js](https://nodejs.org/en/)  module available through the  [npm registry](https://www.npmjs.com/). Installation is done using the  [`npm install`  command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            `$ npm install --save @evolis/evolis-library`
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 13 
     | 
    
         
            +
            This module is divided into three sub-modules: `check`, `convert` and `functions`.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ## check.js
         
     | 
| 
      
 16 
     | 
    
         
            +
            Import it into your script using:
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            `import { check } from "@evolis/evolis-library";`
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            Then use one of these functions:
         
     | 
| 
      
 21 
     | 
    
         
            +
            - **isDefined(value: any)**
         
     | 
| 
      
 22 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 23 
     | 
    
         
            +
            	- *return: true if the value is not undefined or null*
         
     | 
| 
      
 24 
     | 
    
         
            +
            - **atLeastOneOf(values: [any])**
         
     | 
| 
      
 25 
     | 
    
         
            +
            	- value: The values to test
         
     | 
| 
      
 26 
     | 
    
         
            +
            	- *return: true if at least one of the values is not undefined or null*
         
     | 
| 
      
 27 
     | 
    
         
            +
            - **isString(value: any)**
         
     | 
| 
      
 28 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 29 
     | 
    
         
            +
            	- *return: true if the value is a string*
         
     | 
| 
      
 30 
     | 
    
         
            +
            - **isEmptyString(value: any)**
         
     | 
| 
      
 31 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 32 
     | 
    
         
            +
            	- *return: true if the value is a string and if its empty*
         
     | 
| 
      
 33 
     | 
    
         
            +
            - **isBlankString(value: any)**
         
     | 
| 
      
 34 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 35 
     | 
    
         
            +
            	- *return: true if the value is a string and if its blank*
         
     | 
| 
      
 36 
     | 
    
         
            +
            - **strInRange(value: any|[any], [min]: Number, [max]: Number, [includeBounds]: Bool, [canBeNull]: Bool)**
         
     | 
| 
      
 37 
     | 
    
         
            +
            	- value: The value(s) to test
         
     | 
| 
      
 38 
     | 
    
         
            +
            	- [min]: Minimum string length (default: null)
         
     | 
| 
      
 39 
     | 
    
         
            +
            	- [max]: Maximum string length (default: null)
         
     | 
| 
      
 40 
     | 
    
         
            +
            	- [includeBounds]: Include the min and max bounds in the range (default: true)
         
     | 
| 
      
 41 
     | 
    
         
            +
            	- [canBeNull]: Authorize or not the string to be null or undefined (default: false)
         
     | 
| 
      
 42 
     | 
    
         
            +
            	- *return: true if the value is a string between min and max or if it's an undefined/null with canBeNull set at true*
         
     | 
| 
      
 43 
     | 
    
         
            +
            - **isNumber(value: any, [parse]: Bool)**
         
     | 
| 
      
 44 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 45 
     | 
    
         
            +
            	- [parse]: If set to true, the function will parse the value to find a integer (base 10) (default: true)
         
     | 
| 
      
 46 
     | 
    
         
            +
            	- *return: true if the value is a number*
         
     | 
| 
      
 47 
     | 
    
         
            +
            - **isFloat(value: any, [parse]: Bool)**
         
     | 
| 
      
 48 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 49 
     | 
    
         
            +
            	- [parse]: If set to true, the function will parse the value to find a float (default: true)
         
     | 
| 
      
 50 
     | 
    
         
            +
            	- *return: true if the value is a float*
         
     | 
| 
      
 51 
     | 
    
         
            +
            - **isArray(value: any)**
         
     | 
| 
      
 52 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 53 
     | 
    
         
            +
            	- *return: true if the value is an array*
         
     | 
| 
      
 54 
     | 
    
         
            +
            - **isDate(value: any)**
         
     | 
| 
      
 55 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 56 
     | 
    
         
            +
            	- *return: true if the value is a valid date*
         
     | 
| 
      
 57 
     | 
    
         
            +
            - **isEmail(value: any)**
         
     | 
| 
      
 58 
     | 
    
         
            +
            	- value: The value to test
         
     | 
| 
      
 59 
     | 
    
         
            +
            	- *return: true if the value is a string containing a valid email address*
         
     | 
| 
      
 60 
     | 
    
         
            +
            - **isPasswordSafe(value: any|[any])**
         
     | 
| 
      
 61 
     | 
    
         
            +
            	- value: The value(s) to test
         
     | 
| 
      
 62 
     | 
    
         
            +
            	- rules: Object with these properties:
         
     | 
| 
      
 63 
     | 
    
         
            +
            		 ```js
         
     | 
| 
      
 64 
     | 
    
         
            +
            		 {
         
     | 
| 
      
 65 
     | 
    
         
            +
            			 mustContain: {
         
     | 
| 
      
 66 
     | 
    
         
            +
            				 lowerCase: true|false (default: true),
         
     | 
| 
      
 67 
     | 
    
         
            +
            				 upperCase: true|false (default: true),
         
     | 
| 
      
 68 
     | 
    
         
            +
            				 digit: true|false (default: true),
         
     | 
| 
      
 69 
     | 
    
         
            +
            				 special: true|false (default: true),
         
     | 
| 
      
 70 
     | 
    
         
            +
            			 },
         
     | 
| 
      
 71 
     | 
    
         
            +
            			 minLength: Number (default: 8)
         
     | 
| 
      
 72 
     | 
    
         
            +
            		 }
         
     | 
| 
      
 73 
     | 
    
         
            +
            		 ```
         
     | 
| 
      
 74 
     | 
    
         
            +
            	- *return: true if the value is a safe password*
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            ## convert.js
         
     | 
| 
      
 78 
     | 
    
         
            +
            Import it into your script using:
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            `import { convert } from "@evolis/evolis-library";`
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            Then use one of these functions:
         
     | 
| 
      
 83 
     | 
    
         
            +
            - **arrayToSerialComma(array: Array)**
         
     | 
| 
      
 84 
     | 
    
         
            +
            	- array: The array to convert
         
     | 
| 
      
 85 
     | 
    
         
            +
            	- *return: A string formatted as a serial comma*
         
     | 
| 
      
 86 
     | 
    
         
            +
            - **dateToString(date: Date, [withTime]: Bool, [locale]: String)**
         
     | 
| 
      
 87 
     | 
    
         
            +
            	- date: The value to convert
         
     | 
| 
      
 88 
     | 
    
         
            +
            	- [withTime]: Include time in the result (default: true)
         
     | 
| 
      
 89 
     | 
    
         
            +
            	- [locale]: The locale used in the conversion. It may changed the returned string format (default: "fr-FR")
         
     | 
| 
      
 90 
     | 
    
         
            +
            	- *return: A date formatted like "dd/MM/yyyy [hh:mm:ss]"*
         
     | 
| 
      
 91 
     | 
    
         
            +
            - **dateToTimeString(date: Date, [locale]: String)**
         
     | 
| 
      
 92 
     | 
    
         
            +
            	- date: The date to convert
         
     | 
| 
      
 93 
     | 
    
         
            +
            	- [locale]: The locale used in the conversion. It may changed the returned string format (default: "fr-FR")
         
     | 
| 
      
 94 
     | 
    
         
            +
            	- *return: A date formatted like "hh:mm:ss"*
         
     | 
| 
      
 95 
     | 
    
         
            +
            - **dateToFieldString(date: Date)**
         
     | 
| 
      
 96 
     | 
    
         
            +
            	- date: The value to convert
         
     | 
| 
      
 97 
     | 
    
         
            +
            	- *return: A date formatted like "yyyy-MM-dd"*
         
     | 
| 
      
 98 
     | 
    
         
            +
            - **timeStrToDate(time: String, [format]: String)**
         
     | 
| 
      
 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*
         
     | 
| 
      
 105 
     | 
    
         
            +
            - **toDate(d: any)**
         
     | 
| 
      
 106 
     | 
    
         
            +
            	- s: The thing to convert
         
     | 
| 
      
 107 
     | 
    
         
            +
            	- *return: A date object, null/undefined if the provided value is null/undefined and NaN if it's not convertible.*
         
     | 
| 
      
 108 
     | 
    
         
            +
            - **bytesToReadable(bytes: Number, [decimals]: Number)**
         
     | 
| 
      
 109 
     | 
    
         
            +
            	- bytes: Bytes to convert
         
     | 
| 
      
 110 
     | 
    
         
            +
            	- [decimals]: How many decimals (default: 2)
         
     | 
| 
      
 111 
     | 
    
         
            +
            	- *return: The converted bytes size to the closest unit*
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            ## functions.js
         
     | 
| 
      
 114 
     | 
    
         
            +
            Import it into your script using:
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            `import { functions } from "@evolis/evolis-library";`
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
            Then use one of these functions:
         
     | 
| 
      
 119 
     | 
    
         
            +
            - **dayDifference(start: Date, end: Date)**
         
     | 
| 
      
 120 
     | 
    
         
            +
            	- start: Start date
         
     | 
| 
      
 121 
     | 
    
         
            +
            	- end: End date
         
     | 
| 
      
 122 
     | 
    
         
            +
            	- *return: How many days between these two dates*
         
     | 
| 
      
 123 
     | 
    
         
            +
            - **padLeft(value: any,  [pad]: String)**
         
     | 
| 
      
 124 
     | 
    
         
            +
            	- value: The value to pad
         
     | 
| 
      
 125 
     | 
    
         
            +
            	- [pad]: With what to pad (default: "00")
         
     | 
| 
      
 126 
     | 
    
         
            +
            	- *return: The padded string*
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            ## License
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            [MIT](https://github.com/EmpireDemocratiqueDuPoulpe/evolis-library/blob/main/LICENSE).
         
     | 
    
        package/checkers.js
    CHANGED
    
    | 
         @@ -81,7 +81,7 @@ function isBlankString(value) { 
     | 
|
| 
       81 
81 
     | 
    
         
             
             * @param {*|Array<*>} value - The value to test
         
     | 
| 
       82 
82 
     | 
    
         
             
             * @param {Number} min - The minimum length of the string (nullable)
         
     | 
| 
       83 
83 
     | 
    
         
             
             * @param {Number} max - The maximum length of the string (nullable)
         
     | 
| 
       84 
     | 
    
         
            -
             * @param {Boolean} [ 
     | 
| 
      
 84 
     | 
    
         
            +
             * @param {Boolean} [includeBounds=true] - Include the min and max bounds in the range
         
     | 
| 
       85 
85 
     | 
    
         
             
             * @param {Boolean} [canBeNull=false] - Authorize or not the string to be null or undefined
         
     | 
| 
       86 
86 
     | 
    
         
             
             * @returns {Boolean} Return true if the value is a string between min and max or if it's an undefined/null with canBeNull set at true.
         
     | 
| 
       87 
87 
     | 
    
         
             
             *
         
     | 
| 
         @@ -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 
     | 
    
         
             
             *****************************************************/
         
     | 
| 
         @@ -192,25 +202,26 @@ export const passwordRules = { 
     | 
|
| 
       192 
202 
     | 
    
         
             
            };
         
     | 
| 
       193 
203 
     | 
    
         | 
| 
       194 
204 
     | 
    
         
             
            /**
         
     | 
| 
       195 
     | 
    
         
            -
             * @function  
     | 
| 
       196 
     | 
    
         
            -
             *
         
     | 
| 
      
 205 
     | 
    
         
            +
             * @function isPasswordSafe
         
     | 
| 
       197 
206 
     | 
    
         
             
             *
         
     | 
| 
       198 
207 
     | 
    
         
             
             * @param {string|Array} password - One or multiple passwords
         
     | 
| 
       199 
208 
     | 
    
         
             
             * @param {PasswordRules} [rules] - An object that describe security rules to follow
         
     | 
| 
       200 
209 
     | 
    
         
             
             * @returns {boolean} Return true if the value is a safe password
         
     | 
| 
       201 
210 
     | 
    
         
             
             */
         
     | 
| 
       202 
     | 
    
         
            -
            function isPasswordSafe(password, rules 
     | 
| 
      
 211 
     | 
    
         
            +
            function isPasswordSafe(password, rules) {
         
     | 
| 
      
 212 
     | 
    
         
            +
            	const usedRules = rules ? { ...passwordRules, ...rules } : passwordRules;
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
       203 
214 
     | 
    
         
             
            	if (isArray(password)) {
         
     | 
| 
       204 
     | 
    
         
            -
            		return password.every(pwd => isPasswordSafe(pwd,  
     | 
| 
      
 215 
     | 
    
         
            +
            		return password.every(pwd => isPasswordSafe(pwd, usedRules));
         
     | 
| 
       205 
216 
     | 
    
         
             
            	}
         
     | 
| 
       206 
217 
     | 
    
         | 
| 
       207 
218 
     | 
    
         
             
            	let regex = "";
         
     | 
| 
       208 
219 
     | 
    
         | 
| 
       209 
     | 
    
         
            -
            	if ( 
     | 
| 
       210 
     | 
    
         
            -
            	if ( 
     | 
| 
       211 
     | 
    
         
            -
            	if ( 
     | 
| 
       212 
     | 
    
         
            -
            	if ( 
     | 
| 
       213 
     | 
    
         
            -
            	regex += `.{${ 
     | 
| 
      
 220 
     | 
    
         
            +
            	if (usedRules.mustContain.lowerCase) regex += "(?=.*[a-z])";
         
     | 
| 
      
 221 
     | 
    
         
            +
            	if (usedRules.mustContain.upperCase) regex += "(?=.*[A-Z])";
         
     | 
| 
      
 222 
     | 
    
         
            +
            	if (usedRules.mustContain.digit) regex += "(?=.*[0-9])";
         
     | 
| 
      
 223 
     | 
    
         
            +
            	if (usedRules.mustContain.special) regex += `(?=.*[\\"'!?@#$£%^&:;<>\\[\\]()\\\\\\-_+=*.])`;
         
     | 
| 
      
 224 
     | 
    
         
            +
            	regex += `.{${usedRules.minLength},}$`;
         
     | 
| 
       214 
225 
     | 
    
         | 
| 
       215 
226 
     | 
    
         
             
            	const strongPwd = new RegExp(regex);
         
     | 
| 
       216 
227 
     | 
    
         
             
            	return strongPwd.test(password);
         
     | 
| 
         @@ -225,7 +236,7 @@ export default { 
     | 
|
| 
       225 
236 
     | 
    
         
             
            	isString, isEmptyString, isBlankString, strInRange,
         
     | 
| 
       226 
237 
     | 
    
         
             
            	isNumber, isFloat,
         
     | 
| 
       227 
238 
     | 
    
         
             
            	isArray,
         
     | 
| 
       228 
     | 
    
         
            -
            	isDate,
         
     | 
| 
      
 239 
     | 
    
         
            +
            	isDate, isMySQLDate,
         
     | 
| 
       229 
240 
     | 
    
         
             
            	isEmail,
         
     | 
| 
       230 
241 
     | 
    
         
             
            	isPasswordSafe
         
     | 
| 
       231 
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,30 @@ 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 
     | 
    
         
            +
             
     | 
| 
       13 
37 
     | 
    
         
             
            /* ---- Date ------------------------------------ */
         
     | 
| 
       14 
38 
     | 
    
         
             
            /**
         
     | 
| 
       15 
39 
     | 
    
         
             
             * @function dayDifference
         
     | 
| 
         @@ -33,7 +57,7 @@ function dayDifference(start, end) { 
     | 
|
| 
       33 
57 
     | 
    
         
             
            /**
         
     | 
| 
       34 
58 
     | 
    
         
             
             * @function padLeft
         
     | 
| 
       35 
59 
     | 
    
         
             
             *
         
     | 
| 
       36 
     | 
    
         
            -
             * @param {*} value - The  
     | 
| 
      
 60 
     | 
    
         
            +
             * @param {*} value - The value to pad
         
     | 
| 
       37 
61 
     | 
    
         
             
             * @param {string} [pad="00"] - With what to pad
         
     | 
| 
       38 
62 
     | 
    
         
             
             * @returns {string} The padded string
         
     | 
| 
       39 
63 
     | 
    
         
             
             *
         
     | 
| 
         @@ -51,6 +75,4 @@ function padLeft(value, pad = "00") { 
     | 
|
| 
       51 
75 
     | 
    
         
             
             * Export
         
     | 
| 
       52 
76 
     | 
    
         
             
             *****************************************************/
         
     | 
| 
       53 
77 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
            export default {
         
     | 
| 
       55 
     | 
    
         
            -
            	dayDifference, padLeft
         
     | 
| 
       56 
     | 
    
         
            -
            };
         
     | 
| 
      
 78 
     | 
    
         
            +
            export default { shuffle, dayDifference, padLeft };
         
     | 
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,28 +1,28 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {
         
     | 
| 
       2 
     | 
    
         
            -
              "name": "@evolis/evolis-library",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "1.0 
     | 
| 
       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.0",
         
     | 
| 
      
 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 
     | 
    
         
            +
            }
         
     |