topkat-utils 1.3.21 → 1.3.22
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/dist/src/loop-utils.d.ts +17 -1
- package/dist/src/loop-utils.js +25 -2
- package/dist/src/loop-utils.js.map +1 -1
- package/package.json +2 -2
- package/src/loop-utils.ts +27 -2
package/dist/src/loop-utils.d.ts
CHANGED
|
@@ -104,6 +104,22 @@ export declare function recursiveGenericFunctionSync(item: ObjectGeneric | any[]
|
|
|
104
104
|
* () => i++
|
|
105
105
|
* );
|
|
106
106
|
*/
|
|
107
|
-
export declare function safeWhile(conditionFn: () => boolean, callback: (i: number) => any, { nbRecursionMax }?: {
|
|
107
|
+
export declare function safeWhile(conditionFn: (i: number) => boolean, callback: (i: number) => any, { nbRecursionMax }?: {
|
|
108
108
|
nbRecursionMax?: number | undefined;
|
|
109
109
|
}): void;
|
|
110
|
+
/** A safer version of while loop that prevents infinite loops
|
|
111
|
+
* @param {Function} conditionFn Function that returns a boolean to determine if loop should continue
|
|
112
|
+
* @param {Function} callback Function to execute on each iteration
|
|
113
|
+
* @param {Object} options Configuration object
|
|
114
|
+
* @param {number} [options.nbRecursionMax=100] Maximum number of iterations before exiting to prevent infinite loops
|
|
115
|
+
* @example
|
|
116
|
+
* // Count up to 10
|
|
117
|
+
* let i = 0;
|
|
118
|
+
* safeWhile(
|
|
119
|
+
* () => i < 10,
|
|
120
|
+
* () => i++
|
|
121
|
+
* );
|
|
122
|
+
*/
|
|
123
|
+
export declare function safeWhileAsync(conditionFn: (i: number) => boolean, callback: (i: number) => Promise<any>, { nbRecursionMax }?: {
|
|
124
|
+
nbRecursionMax?: number | undefined;
|
|
125
|
+
}): Promise<void>;
|
package/dist/src/loop-utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.safeWhile = exports.recursiveGenericFunctionSync = exports.recursiveGenericFunction = exports.forIasync = exports.forI = void 0;
|
|
3
|
+
exports.safeWhileAsync = exports.safeWhile = exports.recursiveGenericFunctionSync = exports.recursiveGenericFunction = exports.forIasync = exports.forI = void 0;
|
|
4
4
|
const error_utils_1 = require("./error-utils");
|
|
5
5
|
const is_object_1 = require("./is-object");
|
|
6
6
|
/**
|
|
@@ -156,7 +156,7 @@ exports.recursiveGenericFunctionSync = recursiveGenericFunctionSync;
|
|
|
156
156
|
*/
|
|
157
157
|
function safeWhile(conditionFn, callback, { nbRecursionMax = 100 } = {}) {
|
|
158
158
|
let nbRecursion = 0;
|
|
159
|
-
while (conditionFn() && nbRecursion++ < nbRecursionMax) {
|
|
159
|
+
while (conditionFn(nbRecursion) && nbRecursion++ < nbRecursionMax) {
|
|
160
160
|
callback(nbRecursion);
|
|
161
161
|
// eslint-disable-next-line no-console
|
|
162
162
|
if (nbRecursion === nbRecursionMax - 1)
|
|
@@ -164,4 +164,27 @@ function safeWhile(conditionFn, callback, { nbRecursionMax = 100 } = {}) {
|
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
exports.safeWhile = safeWhile;
|
|
167
|
+
/** A safer version of while loop that prevents infinite loops
|
|
168
|
+
* @param {Function} conditionFn Function that returns a boolean to determine if loop should continue
|
|
169
|
+
* @param {Function} callback Function to execute on each iteration
|
|
170
|
+
* @param {Object} options Configuration object
|
|
171
|
+
* @param {number} [options.nbRecursionMax=100] Maximum number of iterations before exiting to prevent infinite loops
|
|
172
|
+
* @example
|
|
173
|
+
* // Count up to 10
|
|
174
|
+
* let i = 0;
|
|
175
|
+
* safeWhile(
|
|
176
|
+
* () => i < 10,
|
|
177
|
+
* () => i++
|
|
178
|
+
* );
|
|
179
|
+
*/
|
|
180
|
+
async function safeWhileAsync(conditionFn, callback, { nbRecursionMax = 100 } = {}) {
|
|
181
|
+
let nbRecursion = 0;
|
|
182
|
+
while (await conditionFn(nbRecursion) && nbRecursion++ < nbRecursionMax) {
|
|
183
|
+
await callback(nbRecursion);
|
|
184
|
+
// eslint-disable-next-line no-console
|
|
185
|
+
if (nbRecursion === nbRecursionMax - 1)
|
|
186
|
+
console.warn(`Too much recursion for while loop, exiting...`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
exports.safeWhileAsync = safeWhileAsync;
|
|
167
190
|
//# sourceMappingURL=loop-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-utils.js","sourceRoot":"","sources":["../../src/loop-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"loop-utils.js","sourceRoot":"","sources":["../../src/loop-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "topkat-utils",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.22",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"types": "index.ts",
|
|
6
6
|
"main": "dist",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"bump:minor": "yarn test:ci && yarn build && bump --minor",
|
|
56
56
|
"bump:patch": "yarn test:ci && yarn build && bump --patch",
|
|
57
57
|
"test": "jest --watchAll",
|
|
58
|
-
"test:ci": "jest --ci --runInBand --maxConcurrency=1 --silent"
|
|
58
|
+
"test:ci": "jest --ci --runInBand --maxConcurrency=1 --silent --no-watchman"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/jest": "^29.5.12",
|
package/src/loop-utils.ts
CHANGED
|
@@ -175,11 +175,36 @@ export function recursiveGenericFunctionSync(item: ObjectGeneric | any[], callba
|
|
|
175
175
|
* () => i++
|
|
176
176
|
* );
|
|
177
177
|
*/
|
|
178
|
-
export function safeWhile(conditionFn: () => boolean, callback: (i: number) => any, { nbRecursionMax = 100 } = {}) {
|
|
178
|
+
export function safeWhile(conditionFn: (i: number) => boolean, callback: (i: number) => any, { nbRecursionMax = 100 } = {}) {
|
|
179
179
|
let nbRecursion = 0
|
|
180
|
-
while (conditionFn() && nbRecursion++ < nbRecursionMax) {
|
|
180
|
+
while (conditionFn(nbRecursion) && nbRecursion++ < nbRecursionMax) {
|
|
181
181
|
callback(nbRecursion)
|
|
182
182
|
// eslint-disable-next-line no-console
|
|
183
183
|
if (nbRecursion === nbRecursionMax - 1) console.warn(`Too much recursion for while loop, exiting...`)
|
|
184
184
|
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
/** A safer version of while loop that prevents infinite loops
|
|
191
|
+
* @param {Function} conditionFn Function that returns a boolean to determine if loop should continue
|
|
192
|
+
* @param {Function} callback Function to execute on each iteration
|
|
193
|
+
* @param {Object} options Configuration object
|
|
194
|
+
* @param {number} [options.nbRecursionMax=100] Maximum number of iterations before exiting to prevent infinite loops
|
|
195
|
+
* @example
|
|
196
|
+
* // Count up to 10
|
|
197
|
+
* let i = 0;
|
|
198
|
+
* safeWhile(
|
|
199
|
+
* () => i < 10,
|
|
200
|
+
* () => i++
|
|
201
|
+
* );
|
|
202
|
+
*/
|
|
203
|
+
export async function safeWhileAsync(conditionFn: (i: number) => boolean, callback: (i: number) => Promise<any>, { nbRecursionMax = 100 } = {}) {
|
|
204
|
+
let nbRecursion = 0
|
|
205
|
+
while (await conditionFn(nbRecursion) && nbRecursion++ < nbRecursionMax) {
|
|
206
|
+
await callback(nbRecursion)
|
|
207
|
+
// eslint-disable-next-line no-console
|
|
208
|
+
if (nbRecursion === nbRecursionMax - 1) console.warn(`Too much recursion for while loop, exiting...`)
|
|
209
|
+
}
|
|
185
210
|
}
|