@jeniex/utils 1.0.14 → 1.0.16
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/browser/index.cjs +51 -5
- package/browser/index.d.ts +25 -2
- package/browser/index.js +45 -5
- package/node/index.cjs +87 -3
- package/node/index.d.ts +33 -2
- package/node/index.js +79 -3
- package/package.json +1 -1
package/browser/index.cjs
CHANGED
|
@@ -1,17 +1,52 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
function noop() { }
|
|
4
|
+
function toString(object) {
|
|
5
|
+
return Object.prototype.toString.call(object);
|
|
6
|
+
}
|
|
7
|
+
|
|
3
8
|
function isString(object) {
|
|
4
9
|
return typeof object === 'string';
|
|
5
10
|
}
|
|
11
|
+
function isNumber(object) {
|
|
12
|
+
return typeof object === 'number';
|
|
13
|
+
}
|
|
14
|
+
function isBoolean(object) {
|
|
15
|
+
return typeof object === 'boolean';
|
|
16
|
+
}
|
|
17
|
+
function isObject(object) {
|
|
18
|
+
return toString(object) === '[object Object]';
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
21
|
+
function isFunction(object) {
|
|
22
|
+
return typeof object === 'function';
|
|
23
|
+
}
|
|
6
24
|
|
|
7
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Joins an array's items or do nothing if it is joined already.
|
|
27
|
+
*
|
|
28
|
+
* @category Array
|
|
29
|
+
*/
|
|
30
|
+
function join(object, separator = ',') {
|
|
8
31
|
if (isString(object)) {
|
|
9
32
|
return object;
|
|
10
33
|
}
|
|
11
34
|
return object.join(separator);
|
|
12
35
|
}
|
|
13
36
|
|
|
14
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Removes an item from an array by mutating it.
|
|
39
|
+
* @throws An error if the object to be removed does not exist inside the array.
|
|
40
|
+
*
|
|
41
|
+
* @category Array
|
|
42
|
+
*/
|
|
43
|
+
function remove(array, object) {
|
|
44
|
+
const index = array.indexOf(object);
|
|
45
|
+
if (index === -1) {
|
|
46
|
+
throw new Error('Provided value does not exist inside the array.');
|
|
47
|
+
}
|
|
48
|
+
array.splice(index, 1);
|
|
49
|
+
}
|
|
15
50
|
|
|
16
51
|
function asserted(object) {
|
|
17
52
|
if (object === null || object === undefined) {
|
|
@@ -32,6 +67,11 @@ function isNotNullish(object) {
|
|
|
32
67
|
return object !== null && object !== undefined;
|
|
33
68
|
}
|
|
34
69
|
|
|
70
|
+
/**
|
|
71
|
+
* A wrapper around `setTimeout`.
|
|
72
|
+
*
|
|
73
|
+
* @category Promise
|
|
74
|
+
*/
|
|
35
75
|
async function sleep(milliSeconds) {
|
|
36
76
|
return new Promise((resolve) => {
|
|
37
77
|
setTimeout(resolve, milliSeconds);
|
|
@@ -154,14 +194,14 @@ const fishX = {
|
|
|
154
194
|
};
|
|
155
195
|
|
|
156
196
|
function $(selectors, parent) {
|
|
157
|
-
const element = (parent ?? document).querySelector(
|
|
197
|
+
const element = (parent ?? document).querySelector(join(selectors));
|
|
158
198
|
if (element === null) {
|
|
159
199
|
throw new Error(`Couldn't find the element with the selector ${selectors}`);
|
|
160
200
|
}
|
|
161
201
|
return element;
|
|
162
202
|
}
|
|
163
203
|
function $$(selectors, parent) {
|
|
164
|
-
const elements = (parent ?? document).querySelectorAll(
|
|
204
|
+
const elements = (parent ?? document).querySelectorAll(join(selectors));
|
|
165
205
|
if (elements.length === 0) {
|
|
166
206
|
throw new Error(`Couldn't find any element with the selector ${selectors}`);
|
|
167
207
|
}
|
|
@@ -334,7 +374,6 @@ exports.addStyle = addStyle;
|
|
|
334
374
|
exports.alert = alert;
|
|
335
375
|
exports.asserted = asserted;
|
|
336
376
|
exports.confirm = confirm;
|
|
337
|
-
exports.ensureJoin = ensureJoin;
|
|
338
377
|
exports.fish = fish;
|
|
339
378
|
exports.fishResponse = fishResponse;
|
|
340
379
|
exports.fishX = fishX;
|
|
@@ -342,16 +381,23 @@ exports.fishXResponse = fishXResponse;
|
|
|
342
381
|
exports.getOptions = getOptions;
|
|
343
382
|
exports.getSearchParam = getSearchParam;
|
|
344
383
|
exports.imageLoad = imageLoad;
|
|
384
|
+
exports.isBoolean = isBoolean;
|
|
345
385
|
exports.isFalsy = isFalsy;
|
|
386
|
+
exports.isFunction = isFunction;
|
|
346
387
|
exports.isNotNullish = isNotNullish;
|
|
347
388
|
exports.isNullish = isNullish;
|
|
389
|
+
exports.isNumber = isNumber;
|
|
390
|
+
exports.isObject = isObject;
|
|
348
391
|
exports.isString = isString;
|
|
349
392
|
exports.isTruthy = isTruthy;
|
|
393
|
+
exports.join = join;
|
|
350
394
|
exports.logId = logId;
|
|
351
395
|
exports.noop = noop;
|
|
352
396
|
exports.pageLoad = pageLoad;
|
|
353
397
|
exports.prompt = prompt;
|
|
398
|
+
exports.remove = remove;
|
|
354
399
|
exports.scriptName = scriptName;
|
|
355
400
|
exports.setSearchParam = setSearchParam;
|
|
356
401
|
exports.sleep = sleep;
|
|
357
402
|
exports.tabURL = tabURL;
|
|
403
|
+
exports.toString = toString;
|
package/browser/index.d.ts
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Joins an array's items or do nothing if it is joined already.
|
|
3
|
+
*
|
|
4
|
+
* @category Array
|
|
5
|
+
*/
|
|
6
|
+
declare function join(object: string[] | string, separator?: string): string;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Removes an item from an array by mutating it.
|
|
10
|
+
* @throws An error if the object to be removed does not exist inside the array.
|
|
11
|
+
*
|
|
12
|
+
* @category Array
|
|
13
|
+
*/
|
|
14
|
+
declare function remove<T>(array: T[], object: T): void;
|
|
2
15
|
|
|
3
16
|
declare function noop(): void;
|
|
17
|
+
declare function toString(object: unknown): string;
|
|
4
18
|
|
|
5
19
|
declare function asserted<T>(object: T | null | undefined): T;
|
|
6
20
|
declare function isTruthy<T>(object: T): object is Exclude<T, '' | 0 | false | null | undefined>;
|
|
@@ -9,7 +23,16 @@ declare function isNullish(object: unknown): object is null | undefined;
|
|
|
9
23
|
declare function isNotNullish<T>(object: T): object is Exclude<T, null | undefined>;
|
|
10
24
|
|
|
11
25
|
declare function isString(object: unknown): object is string;
|
|
26
|
+
declare function isNumber(object: unknown): object is number;
|
|
27
|
+
declare function isBoolean(object: unknown): object is boolean;
|
|
28
|
+
declare function isObject(object: unknown): object is object;
|
|
29
|
+
declare function isFunction<T extends Function>(object: unknown): object is T;
|
|
12
30
|
|
|
31
|
+
/**
|
|
32
|
+
* A wrapper around `setTimeout`.
|
|
33
|
+
*
|
|
34
|
+
* @category Promise
|
|
35
|
+
*/
|
|
13
36
|
declare function sleep(milliSeconds: number): Promise<void>;
|
|
14
37
|
|
|
15
38
|
type Nullable<T> = T | null | undefined;
|
|
@@ -106,4 +129,4 @@ type Options = Record<string, FlagValue>;
|
|
|
106
129
|
|
|
107
130
|
declare function getOptions(flags: Flag[]): Promise<Options>;
|
|
108
131
|
|
|
109
|
-
export { $, $$, Flag, Fn, Nullable, addStyle, alert, asserted, confirm,
|
|
132
|
+
export { $, $$, Flag, Fn, Nullable, addStyle, alert, asserted, confirm, fish, fishResponse, fishX, fishXResponse, getOptions, getSearchParam, imageLoad, isBoolean, isFalsy, isFunction, isNotNullish, isNullish, isNumber, isObject, isString, isTruthy, join, logId, noop, pageLoad, prompt, remove, scriptName, setSearchParam, sleep, tabURL, toString };
|
package/browser/index.js
CHANGED
|
@@ -1,15 +1,50 @@
|
|
|
1
|
+
function noop() { }
|
|
2
|
+
function toString(object) {
|
|
3
|
+
return Object.prototype.toString.call(object);
|
|
4
|
+
}
|
|
5
|
+
|
|
1
6
|
function isString(object) {
|
|
2
7
|
return typeof object === 'string';
|
|
3
8
|
}
|
|
9
|
+
function isNumber(object) {
|
|
10
|
+
return typeof object === 'number';
|
|
11
|
+
}
|
|
12
|
+
function isBoolean(object) {
|
|
13
|
+
return typeof object === 'boolean';
|
|
14
|
+
}
|
|
15
|
+
function isObject(object) {
|
|
16
|
+
return toString(object) === '[object Object]';
|
|
17
|
+
}
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
19
|
+
function isFunction(object) {
|
|
20
|
+
return typeof object === 'function';
|
|
21
|
+
}
|
|
4
22
|
|
|
5
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Joins an array's items or do nothing if it is joined already.
|
|
25
|
+
*
|
|
26
|
+
* @category Array
|
|
27
|
+
*/
|
|
28
|
+
function join(object, separator = ',') {
|
|
6
29
|
if (isString(object)) {
|
|
7
30
|
return object;
|
|
8
31
|
}
|
|
9
32
|
return object.join(separator);
|
|
10
33
|
}
|
|
11
34
|
|
|
12
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Removes an item from an array by mutating it.
|
|
37
|
+
* @throws An error if the object to be removed does not exist inside the array.
|
|
38
|
+
*
|
|
39
|
+
* @category Array
|
|
40
|
+
*/
|
|
41
|
+
function remove(array, object) {
|
|
42
|
+
const index = array.indexOf(object);
|
|
43
|
+
if (index === -1) {
|
|
44
|
+
throw new Error('Provided value does not exist inside the array.');
|
|
45
|
+
}
|
|
46
|
+
array.splice(index, 1);
|
|
47
|
+
}
|
|
13
48
|
|
|
14
49
|
function asserted(object) {
|
|
15
50
|
if (object === null || object === undefined) {
|
|
@@ -30,6 +65,11 @@ function isNotNullish(object) {
|
|
|
30
65
|
return object !== null && object !== undefined;
|
|
31
66
|
}
|
|
32
67
|
|
|
68
|
+
/**
|
|
69
|
+
* A wrapper around `setTimeout`.
|
|
70
|
+
*
|
|
71
|
+
* @category Promise
|
|
72
|
+
*/
|
|
33
73
|
async function sleep(milliSeconds) {
|
|
34
74
|
return new Promise((resolve) => {
|
|
35
75
|
setTimeout(resolve, milliSeconds);
|
|
@@ -152,14 +192,14 @@ const fishX = {
|
|
|
152
192
|
};
|
|
153
193
|
|
|
154
194
|
function $(selectors, parent) {
|
|
155
|
-
const element = (parent ?? document).querySelector(
|
|
195
|
+
const element = (parent ?? document).querySelector(join(selectors));
|
|
156
196
|
if (element === null) {
|
|
157
197
|
throw new Error(`Couldn't find the element with the selector ${selectors}`);
|
|
158
198
|
}
|
|
159
199
|
return element;
|
|
160
200
|
}
|
|
161
201
|
function $$(selectors, parent) {
|
|
162
|
-
const elements = (parent ?? document).querySelectorAll(
|
|
202
|
+
const elements = (parent ?? document).querySelectorAll(join(selectors));
|
|
163
203
|
if (elements.length === 0) {
|
|
164
204
|
throw new Error(`Couldn't find any element with the selector ${selectors}`);
|
|
165
205
|
}
|
|
@@ -326,4 +366,4 @@ async function getOptions(flags) {
|
|
|
326
366
|
return options;
|
|
327
367
|
}
|
|
328
368
|
|
|
329
|
-
export { $, $$, addStyle, alert, asserted, confirm,
|
|
369
|
+
export { $, $$, addStyle, alert, asserted, confirm, fish, fishResponse, fishX, fishXResponse, getOptions, getSearchParam, imageLoad, isBoolean, isFalsy, isFunction, isNotNullish, isNullish, isNumber, isObject, isString, isTruthy, join, logId, noop, pageLoad, prompt, remove, scriptName, setSearchParam, sleep, tabURL, toString };
|
package/node/index.cjs
CHANGED
|
@@ -4,18 +4,53 @@ var fs = require('node:fs');
|
|
|
4
4
|
var fsp = require('node:fs/promises');
|
|
5
5
|
var path = require('node:path');
|
|
6
6
|
|
|
7
|
+
function noop() { }
|
|
8
|
+
function toString(object) {
|
|
9
|
+
return Object.prototype.toString.call(object);
|
|
10
|
+
}
|
|
11
|
+
|
|
7
12
|
function isString(object) {
|
|
8
13
|
return typeof object === 'string';
|
|
9
14
|
}
|
|
15
|
+
function isNumber(object) {
|
|
16
|
+
return typeof object === 'number';
|
|
17
|
+
}
|
|
18
|
+
function isBoolean(object) {
|
|
19
|
+
return typeof object === 'boolean';
|
|
20
|
+
}
|
|
21
|
+
function isObject(object) {
|
|
22
|
+
return toString(object) === '[object Object]';
|
|
23
|
+
}
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
25
|
+
function isFunction(object) {
|
|
26
|
+
return typeof object === 'function';
|
|
27
|
+
}
|
|
10
28
|
|
|
11
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Joins an array's items or do nothing if it is joined already.
|
|
31
|
+
*
|
|
32
|
+
* @category Array
|
|
33
|
+
*/
|
|
34
|
+
function join(object, separator = ',') {
|
|
12
35
|
if (isString(object)) {
|
|
13
36
|
return object;
|
|
14
37
|
}
|
|
15
38
|
return object.join(separator);
|
|
16
39
|
}
|
|
17
40
|
|
|
18
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Removes an item from an array by mutating it.
|
|
43
|
+
* @throws An error if the object to be removed does not exist inside the array.
|
|
44
|
+
*
|
|
45
|
+
* @category Array
|
|
46
|
+
*/
|
|
47
|
+
function remove(array, object) {
|
|
48
|
+
const index = array.indexOf(object);
|
|
49
|
+
if (index === -1) {
|
|
50
|
+
throw new Error('Provided value does not exist inside the array.');
|
|
51
|
+
}
|
|
52
|
+
array.splice(index, 1);
|
|
53
|
+
}
|
|
19
54
|
|
|
20
55
|
function asserted(object) {
|
|
21
56
|
if (object === null || object === undefined) {
|
|
@@ -36,6 +71,11 @@ function isNotNullish(object) {
|
|
|
36
71
|
return object !== null && object !== undefined;
|
|
37
72
|
}
|
|
38
73
|
|
|
74
|
+
/**
|
|
75
|
+
* A wrapper around `setTimeout`.
|
|
76
|
+
*
|
|
77
|
+
* @category Promise
|
|
78
|
+
*/
|
|
39
79
|
async function sleep(milliSeconds) {
|
|
40
80
|
return new Promise((resolve) => {
|
|
41
81
|
setTimeout(resolve, milliSeconds);
|
|
@@ -92,6 +132,28 @@ async function listFolders({ folderPath, getFullPath }) {
|
|
|
92
132
|
return folders;
|
|
93
133
|
}
|
|
94
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Get a list of folders that are present in the provided folder path.
|
|
137
|
+
* If the provided folder path does not exists, an error will be thrown.
|
|
138
|
+
*/
|
|
139
|
+
function listFoldersSync({ folderPath, getFullPath }) {
|
|
140
|
+
if (fs.existsSync(folderPath) === false) {
|
|
141
|
+
throw new Error('The provided folder path does not exist!');
|
|
142
|
+
}
|
|
143
|
+
const entries = fs.readdirSync(folderPath, {
|
|
144
|
+
withFileTypes: true,
|
|
145
|
+
});
|
|
146
|
+
const folders = entries
|
|
147
|
+
.filter((entry) => entry.isDirectory() === true)
|
|
148
|
+
.map((folderEntry) => {
|
|
149
|
+
if (getFullPath === true) {
|
|
150
|
+
return path.join(folderPath, folderEntry.name);
|
|
151
|
+
}
|
|
152
|
+
return folderEntry.name;
|
|
153
|
+
});
|
|
154
|
+
return folders;
|
|
155
|
+
}
|
|
156
|
+
|
|
95
157
|
async function removeFiles({ folderPath, filter }) {
|
|
96
158
|
const nestedFilePathPattern = `${path.resolve('./')}\\`;
|
|
97
159
|
if (!folderPath.startsWith(nestedFilePathPattern)) {
|
|
@@ -103,15 +165,37 @@ async function removeFiles({ folderPath, filter }) {
|
|
|
103
165
|
}
|
|
104
166
|
}
|
|
105
167
|
|
|
168
|
+
async function readJSON(filePath, withComments = false) {
|
|
169
|
+
const stringJSON = await fsp.readFile(filePath, 'utf-8');
|
|
170
|
+
if (withComments === true) {
|
|
171
|
+
try {
|
|
172
|
+
const { default: JSON5 } = await import('json5');
|
|
173
|
+
return JSON5.parse(stringJSON);
|
|
174
|
+
}
|
|
175
|
+
catch (exception) {
|
|
176
|
+
throw new Error(exception.message);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return JSON.parse(stringJSON);
|
|
180
|
+
}
|
|
181
|
+
|
|
106
182
|
exports.asserted = asserted;
|
|
107
|
-
exports.
|
|
183
|
+
exports.isBoolean = isBoolean;
|
|
108
184
|
exports.isFalsy = isFalsy;
|
|
185
|
+
exports.isFunction = isFunction;
|
|
109
186
|
exports.isNotNullish = isNotNullish;
|
|
110
187
|
exports.isNullish = isNullish;
|
|
188
|
+
exports.isNumber = isNumber;
|
|
189
|
+
exports.isObject = isObject;
|
|
111
190
|
exports.isString = isString;
|
|
112
191
|
exports.isTruthy = isTruthy;
|
|
192
|
+
exports.join = join;
|
|
113
193
|
exports.listFiles = listFiles;
|
|
114
194
|
exports.listFolders = listFolders;
|
|
195
|
+
exports.listFoldersSync = listFoldersSync;
|
|
115
196
|
exports.noop = noop;
|
|
197
|
+
exports.readJSON = readJSON;
|
|
198
|
+
exports.remove = remove;
|
|
116
199
|
exports.removeFiles = removeFiles;
|
|
117
200
|
exports.sleep = sleep;
|
|
201
|
+
exports.toString = toString;
|
package/node/index.d.ts
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Joins an array's items or do nothing if it is joined already.
|
|
3
|
+
*
|
|
4
|
+
* @category Array
|
|
5
|
+
*/
|
|
6
|
+
declare function join(object: string[] | string, separator?: string): string;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Removes an item from an array by mutating it.
|
|
10
|
+
* @throws An error if the object to be removed does not exist inside the array.
|
|
11
|
+
*
|
|
12
|
+
* @category Array
|
|
13
|
+
*/
|
|
14
|
+
declare function remove<T>(array: T[], object: T): void;
|
|
2
15
|
|
|
3
16
|
declare function noop(): void;
|
|
17
|
+
declare function toString(object: unknown): string;
|
|
4
18
|
|
|
5
19
|
declare function asserted<T>(object: T | null | undefined): T;
|
|
6
20
|
declare function isTruthy<T>(object: T): object is Exclude<T, '' | 0 | false | null | undefined>;
|
|
@@ -9,7 +23,16 @@ declare function isNullish(object: unknown): object is null | undefined;
|
|
|
9
23
|
declare function isNotNullish<T>(object: T): object is Exclude<T, null | undefined>;
|
|
10
24
|
|
|
11
25
|
declare function isString(object: unknown): object is string;
|
|
26
|
+
declare function isNumber(object: unknown): object is number;
|
|
27
|
+
declare function isBoolean(object: unknown): object is boolean;
|
|
28
|
+
declare function isObject(object: unknown): object is object;
|
|
29
|
+
declare function isFunction<T extends Function>(object: unknown): object is T;
|
|
12
30
|
|
|
31
|
+
/**
|
|
32
|
+
* A wrapper around `setTimeout`.
|
|
33
|
+
*
|
|
34
|
+
* @category Promise
|
|
35
|
+
*/
|
|
13
36
|
declare function sleep(milliSeconds: number): Promise<void>;
|
|
14
37
|
|
|
15
38
|
type Nullable<T> = T | null | undefined;
|
|
@@ -46,6 +69,14 @@ declare function listFiles({ folderPath, getFullPath, filter }: ListFilesOpt): P
|
|
|
46
69
|
*/
|
|
47
70
|
declare function listFolders({ folderPath, getFullPath }: ListFoldersOpt): Promise<string[]>;
|
|
48
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Get a list of folders that are present in the provided folder path.
|
|
74
|
+
* If the provided folder path does not exists, an error will be thrown.
|
|
75
|
+
*/
|
|
76
|
+
declare function listFoldersSync({ folderPath, getFullPath }: ListFoldersOpt): string[];
|
|
77
|
+
|
|
49
78
|
declare function removeFiles({ folderPath, filter }: RemoveFilesOpt): Promise<void>;
|
|
50
79
|
|
|
51
|
-
|
|
80
|
+
declare function readJSON<T = object>(filePath: string, withComments?: boolean): Promise<T>;
|
|
81
|
+
|
|
82
|
+
export { Fn, Nullable, asserted, isBoolean, isFalsy, isFunction, isNotNullish, isNullish, isNumber, isObject, isString, isTruthy, join, listFiles, listFolders, listFoldersSync, noop, readJSON, remove, removeFiles, sleep, toString };
|
package/node/index.js
CHANGED
|
@@ -2,18 +2,53 @@ import fs from 'node:fs';
|
|
|
2
2
|
import fsp from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
|
|
5
|
+
function noop() { }
|
|
6
|
+
function toString(object) {
|
|
7
|
+
return Object.prototype.toString.call(object);
|
|
8
|
+
}
|
|
9
|
+
|
|
5
10
|
function isString(object) {
|
|
6
11
|
return typeof object === 'string';
|
|
7
12
|
}
|
|
13
|
+
function isNumber(object) {
|
|
14
|
+
return typeof object === 'number';
|
|
15
|
+
}
|
|
16
|
+
function isBoolean(object) {
|
|
17
|
+
return typeof object === 'boolean';
|
|
18
|
+
}
|
|
19
|
+
function isObject(object) {
|
|
20
|
+
return toString(object) === '[object Object]';
|
|
21
|
+
}
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
23
|
+
function isFunction(object) {
|
|
24
|
+
return typeof object === 'function';
|
|
25
|
+
}
|
|
8
26
|
|
|
9
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Joins an array's items or do nothing if it is joined already.
|
|
29
|
+
*
|
|
30
|
+
* @category Array
|
|
31
|
+
*/
|
|
32
|
+
function join(object, separator = ',') {
|
|
10
33
|
if (isString(object)) {
|
|
11
34
|
return object;
|
|
12
35
|
}
|
|
13
36
|
return object.join(separator);
|
|
14
37
|
}
|
|
15
38
|
|
|
16
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Removes an item from an array by mutating it.
|
|
41
|
+
* @throws An error if the object to be removed does not exist inside the array.
|
|
42
|
+
*
|
|
43
|
+
* @category Array
|
|
44
|
+
*/
|
|
45
|
+
function remove(array, object) {
|
|
46
|
+
const index = array.indexOf(object);
|
|
47
|
+
if (index === -1) {
|
|
48
|
+
throw new Error('Provided value does not exist inside the array.');
|
|
49
|
+
}
|
|
50
|
+
array.splice(index, 1);
|
|
51
|
+
}
|
|
17
52
|
|
|
18
53
|
function asserted(object) {
|
|
19
54
|
if (object === null || object === undefined) {
|
|
@@ -34,6 +69,11 @@ function isNotNullish(object) {
|
|
|
34
69
|
return object !== null && object !== undefined;
|
|
35
70
|
}
|
|
36
71
|
|
|
72
|
+
/**
|
|
73
|
+
* A wrapper around `setTimeout`.
|
|
74
|
+
*
|
|
75
|
+
* @category Promise
|
|
76
|
+
*/
|
|
37
77
|
async function sleep(milliSeconds) {
|
|
38
78
|
return new Promise((resolve) => {
|
|
39
79
|
setTimeout(resolve, milliSeconds);
|
|
@@ -90,6 +130,28 @@ async function listFolders({ folderPath, getFullPath }) {
|
|
|
90
130
|
return folders;
|
|
91
131
|
}
|
|
92
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Get a list of folders that are present in the provided folder path.
|
|
135
|
+
* If the provided folder path does not exists, an error will be thrown.
|
|
136
|
+
*/
|
|
137
|
+
function listFoldersSync({ folderPath, getFullPath }) {
|
|
138
|
+
if (fs.existsSync(folderPath) === false) {
|
|
139
|
+
throw new Error('The provided folder path does not exist!');
|
|
140
|
+
}
|
|
141
|
+
const entries = fs.readdirSync(folderPath, {
|
|
142
|
+
withFileTypes: true,
|
|
143
|
+
});
|
|
144
|
+
const folders = entries
|
|
145
|
+
.filter((entry) => entry.isDirectory() === true)
|
|
146
|
+
.map((folderEntry) => {
|
|
147
|
+
if (getFullPath === true) {
|
|
148
|
+
return path.join(folderPath, folderEntry.name);
|
|
149
|
+
}
|
|
150
|
+
return folderEntry.name;
|
|
151
|
+
});
|
|
152
|
+
return folders;
|
|
153
|
+
}
|
|
154
|
+
|
|
93
155
|
async function removeFiles({ folderPath, filter }) {
|
|
94
156
|
const nestedFilePathPattern = `${path.resolve('./')}\\`;
|
|
95
157
|
if (!folderPath.startsWith(nestedFilePathPattern)) {
|
|
@@ -101,4 +163,18 @@ async function removeFiles({ folderPath, filter }) {
|
|
|
101
163
|
}
|
|
102
164
|
}
|
|
103
165
|
|
|
104
|
-
|
|
166
|
+
async function readJSON(filePath, withComments = false) {
|
|
167
|
+
const stringJSON = await fsp.readFile(filePath, 'utf-8');
|
|
168
|
+
if (withComments === true) {
|
|
169
|
+
try {
|
|
170
|
+
const { default: JSON5 } = await import('json5');
|
|
171
|
+
return JSON5.parse(stringJSON);
|
|
172
|
+
}
|
|
173
|
+
catch (exception) {
|
|
174
|
+
throw new Error(exception.message);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return JSON.parse(stringJSON);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export { asserted, isBoolean, isFalsy, isFunction, isNotNullish, isNullish, isNumber, isObject, isString, isTruthy, join, listFiles, listFolders, listFoldersSync, noop, readJSON, remove, removeFiles, sleep, toString };
|