* Always returns a value greater than zero.
*
* @returns The host OS optimized maximum pool size.
+ * @internal
*/
export const availableParallelism = (): number => {
let availableParallelism = 1
// * @param retryNumber - The number of retries that have already been attempted
// * @param maxDelayRatio - The maximum ratio of the delay that can be randomized
// * @returns Delay in milliseconds
+// * @internal
// */
// export const exponentialDelay = (
// retryNumber = 0,
*
* @param dataSet - Data set.
* @returns The median of the given data set.
+ * @internal
*/
export const median = (dataSet: number[]): number => {
if (Array.isArray(dataSet) && dataSet.length === 0) {
* @param killBehavior - Which kind of kill behavior to detect.
* @param value - Any value.
* @returns `true` if `value` was strictly equals to `killBehavior`, otherwise `false`.
+ * @internal
*/
export const isKillBehavior = <KB extends KillBehavior>(
killBehavior: KB,
* @param measurementRequirements - The measurement statistics requirements.
* @param measurementValue - The measurement value.
* @param numberOfMeasurements - The number of measurements.
+ * @internal
*/
export const updateMeasurementStatistics = (
measurementStatistics: MeasurementStatistics,
}
}
}
+
+/**
+ * Executes a function once at a time.
+ *
+ * @param fn - The function to execute.
+ * @param context - The context to bind the function to.
+ * @returns The function to execute.
+ */
+export const once = (
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ fn: (...args: any[]) => void,
+ context: unknown
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+): ((...args: any[]) => void) => {
+ let called = false
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ return function (...args: any[]): void {
+ if (!called) {
+ called = true
+ fn.apply(context, args)
+ called = false
+ }
+ }
+}