@vpmedia/simplify 1.3.0 → 1.5.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/CHANGES.md +4 -0
- package/README.md +1 -1
- package/eslint.config.js +6 -6
- package/package.json +13 -19
- package/src/index.js +2 -0
- package/src/util/delayPromise.js +6 -0
- package/src/util/fetchRetry.js +37 -0
- package/src/util/setObjValueByPath.js +4 -0
- package/types/index.d.ts +2 -0
- package/types/logging/Logger.d.ts +1 -1
- package/types/logging/Logger.d.ts.map +1 -1
- package/types/util/delayPromise.d.ts +2 -0
- package/types/util/delayPromise.d.ts.map +1 -0
- package/types/util/fetchRetry.d.ts +6 -0
- package/types/util/fetchRetry.d.ts.map +1 -0
- package/types/util/getObjValueByPath.d.ts.map +1 -1
- package/types/util/getURLParam.d.ts.map +1 -1
- package/types/util/setObjValueByPath.d.ts +1 -0
- package/types/util/setObjValueByPath.d.ts.map +1 -1
package/CHANGES.md
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @vpmedia/simplify
|
|
2
2
|
|
|
3
|
-
[](https://badge.fury.io/js/@vpmedia%2Fsimplify)
|
|
4
4
|
[](https://github.com/vpmedia/simplify/actions/workflows/ci.yml)
|
|
5
5
|
|
|
6
6
|
@vpmedia/simplify TBD
|
package/eslint.config.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import js from '@eslint/js';
|
|
2
|
-
import importPlugin from 'eslint-plugin-import';
|
|
2
|
+
// import importPlugin from 'eslint-plugin-import';
|
|
3
3
|
import jsdocPlugin from 'eslint-plugin-jsdoc';
|
|
4
4
|
import unicornPlugin from 'eslint-plugin-unicorn';
|
|
5
5
|
import globals from 'globals';
|
|
6
6
|
|
|
7
|
-
/** @type { import('eslint').Linter.
|
|
7
|
+
/** @type { import('eslint').Linter.Config[] } */
|
|
8
8
|
export default [
|
|
9
9
|
{
|
|
10
10
|
ignores: [
|
|
@@ -37,7 +37,7 @@ export default [
|
|
|
37
37
|
},
|
|
38
38
|
files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'],
|
|
39
39
|
plugins: {
|
|
40
|
-
import: importPlugin,
|
|
40
|
+
// import: importPlugin,
|
|
41
41
|
jsdoc: jsdocPlugin,
|
|
42
42
|
unicorn: unicornPlugin,
|
|
43
43
|
},
|
|
@@ -52,15 +52,15 @@ export default [
|
|
|
52
52
|
rules: {
|
|
53
53
|
...js.configs.recommended.rules,
|
|
54
54
|
...jsdocPlugin.configs['flat/recommended'].rules,
|
|
55
|
-
...importPlugin.configs.recommended.rules,
|
|
55
|
+
// ...importPlugin.configs.recommended.rules,
|
|
56
56
|
...unicornPlugin.configs['flat/recommended'].rules,
|
|
57
57
|
'unicorn/filename-case': 'off',
|
|
58
58
|
'unicorn/no-null': 'off',
|
|
59
59
|
'unicorn/prevent-abbreviations': 'off',
|
|
60
|
-
'no-unused-vars': '
|
|
60
|
+
'no-unused-vars': 'off',
|
|
61
61
|
'prefer-arrow-callback': 'error',
|
|
62
62
|
'prefer-template': 'error',
|
|
63
|
-
'import/extensions': ['warn', 'always'],
|
|
63
|
+
// 'import/extensions': ['warn', 'always'],
|
|
64
64
|
'jsdoc/require-jsdoc': [
|
|
65
65
|
'error',
|
|
66
66
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vpmedia/simplify",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "@vpmedia/simplify",
|
|
5
5
|
"author": "Andras Csizmadia <andras@vpmedia.hu> (www.vpmedia.hu)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -19,21 +19,19 @@
|
|
|
19
19
|
"types": "./types/index.d.ts",
|
|
20
20
|
"type": "module",
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@babel/preset-env": "^7.
|
|
23
|
-
"@eslint/js": "^
|
|
22
|
+
"@babel/preset-env": "^7.25.7",
|
|
23
|
+
"@eslint/js": "^9.10.0",
|
|
24
24
|
"@jest/globals": "^29.7.0",
|
|
25
|
-
"@types/jest": "^29.5.
|
|
26
|
-
"eslint": "^
|
|
27
|
-
"eslint-plugin-
|
|
28
|
-
"eslint-plugin-
|
|
29
|
-
"
|
|
30
|
-
"eslint-plugin-unicorn": "^52.0.0",
|
|
31
|
-
"globals": "^15.0.0",
|
|
25
|
+
"@types/jest": "^29.5.13",
|
|
26
|
+
"eslint": "^9.11.1",
|
|
27
|
+
"eslint-plugin-jsdoc": "^50.3.1",
|
|
28
|
+
"eslint-plugin-unicorn": "^55.0.0",
|
|
29
|
+
"globals": "^15.10.0",
|
|
32
30
|
"jest": "^29.7.0",
|
|
33
31
|
"jest-environment-jsdom": "^29.7.0",
|
|
34
|
-
"lefthook": "^1.
|
|
35
|
-
"prettier": "^3.
|
|
36
|
-
"typescript": "^5.
|
|
32
|
+
"lefthook": "^1.7.18",
|
|
33
|
+
"prettier": "^3.3.3",
|
|
34
|
+
"typescript": "^5.6.2"
|
|
37
35
|
},
|
|
38
36
|
"scripts": {
|
|
39
37
|
"test": "NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests",
|
|
@@ -44,12 +42,8 @@
|
|
|
44
42
|
"lefthook:uninstall": "lefthook uninstall"
|
|
45
43
|
},
|
|
46
44
|
"browserslist": [
|
|
47
|
-
">
|
|
45
|
+
"> 0.5%",
|
|
48
46
|
"not dead",
|
|
49
47
|
"not op_mini all"
|
|
50
|
-
]
|
|
51
|
-
"engines": {
|
|
52
|
-
"npm": ">=8.0.0",
|
|
53
|
-
"node": ">=18.0.0"
|
|
54
|
-
}
|
|
48
|
+
]
|
|
55
49
|
}
|
package/src/index.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
export { Logger } from './logging/Logger.js';
|
|
3
3
|
export { addLeadingZero } from './util/addLeadingZero.js';
|
|
4
4
|
export { capitalize } from './util/capitalize.js';
|
|
5
|
+
export { delayPromise } from './util/delayPromise.js';
|
|
6
|
+
export { fetchRetry } from './util/fetchRetry.js';
|
|
5
7
|
export { getObjValueByPath } from './util/getObjValueByPath.js';
|
|
6
8
|
export { getRandomInt } from './util/getRandomInt.js';
|
|
7
9
|
export { getURLParam } from './util/getURLParam.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a promise with delayed resolve.
|
|
3
|
+
* @param {number} delayMS - Promise resolve delay in milliseconds.
|
|
4
|
+
* @returns {Promise<void>} Delayed resolve promise.
|
|
5
|
+
*/
|
|
6
|
+
export const delayPromise = (delayMS) => new Promise((resolve) => setTimeout(resolve, delayMS));
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Logger } from '../logging/Logger.js';
|
|
2
|
+
import { delayPromise } from './delayPromise.js';
|
|
3
|
+
|
|
4
|
+
const logger = new Logger('fetchRetry');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Fetch with retry.
|
|
8
|
+
* @param {string | URL | Request} resource - Fetch URL.
|
|
9
|
+
* @param {RequestInit} [fetchOptions] - Fetch options.
|
|
10
|
+
* @param {{ delay?: number, numRetries?: number, isLog?: boolean}} [retryOptions] - Retry options.
|
|
11
|
+
* @returns {Promise<Response>} Fetch result.
|
|
12
|
+
*/
|
|
13
|
+
export const fetchRetry = async (resource, fetchOptions, retryOptions) => {
|
|
14
|
+
retryOptions = retryOptions ?? {};
|
|
15
|
+
retryOptions.delay = retryOptions.delay ?? 1000;
|
|
16
|
+
retryOptions.numRetries = retryOptions.numRetries ?? 3;
|
|
17
|
+
while (retryOptions.numRetries > 0) {
|
|
18
|
+
logger.info('Fetch request', { resource, fetchOptions, retryOptions });
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch(resource, fetchOptions);
|
|
21
|
+
if (!response.ok || retryOptions.numRetries > 3) {
|
|
22
|
+
logger.warn('Fetch response', response);
|
|
23
|
+
throw new Error(`Network error: ${response.status}`, { cause: response.status });
|
|
24
|
+
}
|
|
25
|
+
logger.info('Fetch response', response);
|
|
26
|
+
return response;
|
|
27
|
+
} catch (error) {
|
|
28
|
+
logger.error('Fetch error', error instanceof Error ? error : new Error(String(error)));
|
|
29
|
+
if (retryOptions.numRetries === 0) {
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
await delayPromise(retryOptions.delay);
|
|
33
|
+
retryOptions.numRetries -= 1;
|
|
34
|
+
retryOptions.delay *= 2;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @param {object} obj - TBD.
|
|
4
4
|
* @param {string} path - TBD.
|
|
5
5
|
* @param {*} value - TBD.
|
|
6
|
+
* @throws {SyntaxError} Error when illegal path value has been provided.
|
|
6
7
|
*/
|
|
7
8
|
export function setObjValueByPath(obj, path, value) {
|
|
8
9
|
if (!obj || !path) {
|
|
@@ -10,6 +11,9 @@ export function setObjValueByPath(obj, path, value) {
|
|
|
10
11
|
}
|
|
11
12
|
const keyParts = path.split('.');
|
|
12
13
|
const nextKey = keyParts[0];
|
|
14
|
+
if (nextKey === '__proto__') {
|
|
15
|
+
throw new SyntaxError('Security violation error. Cannot use "__proto__" as parameter.');
|
|
16
|
+
}
|
|
13
17
|
if (keyParts.length === 1) {
|
|
14
18
|
obj[nextKey] = value;
|
|
15
19
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { Logger } from "./logging/Logger.js";
|
|
2
2
|
export { addLeadingZero } from "./util/addLeadingZero.js";
|
|
3
3
|
export { capitalize } from "./util/capitalize.js";
|
|
4
|
+
export { delayPromise } from "./util/delayPromise.js";
|
|
5
|
+
export { fetchRetry } from "./util/fetchRetry.js";
|
|
4
6
|
export { getObjValueByPath } from "./util/getObjValueByPath.js";
|
|
5
7
|
export { getRandomInt } from "./util/getRandomInt.js";
|
|
6
8
|
export { getURLParam } from "./util/getURLParam.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/logging/Logger.js"],"names":[],"mappings":"AAGA,4BAA6B;AAC7B,2BAA4B;AAC5B,2BAA4B;AAC5B,4BAA6B;AAC7B,6BAA8B;AAE9B;IACE;;OAEG;IACH,yBAFU,CAAC,KAAK,KAAK,EAAE,CAEQ;IAE/B;;;OAGG;IACH,kBAFW,MAAM,EAShB;IANC,aAAgB;IAKhB,cAAkG;IAGpG;;;;OAIG;IACH,eAHW,MAAM,cACN,MAAM,QAYhB;IAED;;;;OAIG;IACH,cAHW,MAAM,cACN,MAAM,QAYhB;IAED;;;;OAIG;IACH,cAHW,MAAM,cACN,MAAM,QAYhB;IAED;;;;OAIG;IACH,eAHW,MAAM,cACN,MAAM,QAYhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,aACN,KAAK,QAWf;CACF"}
|
|
1
|
+
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/logging/Logger.js"],"names":[],"mappings":"AAGA,4BAA6B;AAC7B,2BAA4B;AAC5B,2BAA4B;AAC5B,4BAA6B;AAC7B,6BAA8B;AAE9B;IACE;;OAEG;IACH,yBAFU,CAAC,KAAK,KAAA,KAAK,EAAE,CAEQ;IAE/B;;;OAGG;IACH,kBAFW,MAAM,EAShB;IANC,aAAgB;IAKhB,cAAkG;IAGpG;;;;OAIG;IACH,eAHW,MAAM,cACN,MAAM,QAYhB;IAED;;;;OAIG;IACH,cAHW,MAAM,cACN,MAAM,QAYhB;IAED;;;;OAIG;IACH,cAHW,MAAM,cACN,MAAM,QAYhB;IAED;;;;OAIG;IACH,eAHW,MAAM,cACN,MAAM,QAYhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,aACN,KAAK,QAWf;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delayPromise.d.ts","sourceRoot":"","sources":["../../src/util/delayPromise.js"],"names":[],"mappings":"AAKO,sCAHI,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAEqE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchRetry.d.ts","sourceRoot":"","sources":["../../src/util/fetchRetry.js"],"names":[],"mappings":"AAYO,qCALI,MAAM,GAAG,GAAG,GAAG,OAAO,iBACtB,WAAW,iBACX;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,GACrD,OAAO,CAAC,QAAQ,CAAC,CA0B7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getObjValueByPath.d.ts","sourceRoot":"","sources":["../../src/util/getObjValueByPath.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,uCAJW,MAAM,QACN,MAAM,
|
|
1
|
+
{"version":3,"file":"getObjValueByPath.d.ts","sourceRoot":"","sources":["../../src/util/getObjValueByPath.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,uCAJW,MAAM,QACN,MAAM,GACJ,GAAC,CAYb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getURLParam.d.ts","sourceRoot":"","sources":["../../src/util/getURLParam.js"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,iCALW,MAAM,
|
|
1
|
+
{"version":3,"file":"getURLParam.d.ts","sourceRoot":"","sources":["../../src/util/getURLParam.js"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,iCALW,MAAM,iBACN,GAAC,eACD,OAAO,GACL,MAAM,CAWlB"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @param {object} obj - TBD.
|
|
4
4
|
* @param {string} path - TBD.
|
|
5
5
|
* @param {*} value - TBD.
|
|
6
|
+
* @throws {SyntaxError} Error when illegal path value has been provided.
|
|
6
7
|
*/
|
|
7
8
|
export function setObjValueByPath(obj: object, path: string, value: any): void;
|
|
8
9
|
//# sourceMappingURL=setObjValueByPath.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setObjValueByPath.d.ts","sourceRoot":"","sources":["../../src/util/setObjValueByPath.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"setObjValueByPath.d.ts","sourceRoot":"","sources":["../../src/util/setObjValueByPath.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,uCALW,MAAM,QACN,MAAM,SACN,GAAC,QAgBX"}
|