refactor: silence rollup warning
[poolifier.git] / src / utils.ts
index cc71491a2fbe9396a9f0411ad32a9438cf6f7d35..6f9d1226bb71210b020d987b32d169bbd593b5b8 100644 (file)
@@ -23,6 +23,7 @@ export const EMPTY_FUNCTION: () => void = Object.freeze(() => {
  */
 export const DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS: WorkerChoiceStrategyOptions =
   {
+    choiceRetries: 6,
     runTime: { median: false },
     waitTime: { median: false },
     elu: { median: false }
@@ -57,6 +58,22 @@ export const availableParallelism = (): number => {
   return availableParallelism
 }
 
+// /**
+//  * Computes the retry delay in milliseconds using an exponential back off algorithm.
+//  *
+//  * @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
+//  */
+// export const exponentialDelay = (
+//   retryNumber = 0,
+//   maxDelayRatio = 0.2
+// ): number => {
+//   const delay = Math.pow(2, retryNumber) * 100
+//   const randomSum = delay * maxDelayRatio * Math.random() // 0-(maxDelayRatio*100)% of the delay
+//   return delay + randomSum
+// }
+
 /**
  * Computes the median of the given data set.
  *
@@ -136,13 +153,13 @@ export const isAsyncFunction = (
  * @param measurementStatistics - The measurement statistics to update.
  * @param measurementRequirements - The measurement statistics requirements.
  * @param measurementValue - The measurement value.
- * @param tasksExecuted - The number of tasks executed.
+ * @param numberOfMeasurements - The number of measurements.
  */
 export const updateMeasurementStatistics = (
   measurementStatistics: MeasurementStatistics,
   measurementRequirements: MeasurementStatisticsRequirements,
   measurementValue: number,
-  tasksExecuted: number
+  numberOfMeasurements: number
 ): void => {
   if (measurementRequirements.aggregate) {
     measurementStatistics.aggregate =
@@ -155,9 +172,9 @@ export const updateMeasurementStatistics = (
       measurementValue,
       measurementStatistics.maximum ?? -Infinity
     )
-    if (measurementRequirements.average && tasksExecuted !== 0) {
+    if (measurementRequirements.average && numberOfMeasurements !== 0) {
       measurementStatistics.average =
-        measurementStatistics.aggregate / tasksExecuted
+        measurementStatistics.aggregate / numberOfMeasurements
     }
     if (measurementRequirements.median && measurementValue != null) {
       measurementStatistics.history.push(measurementValue)
@@ -165,3 +182,27 @@ export const updateMeasurementStatistics = (
     }
   }
 }
+
+/**
+ * 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
+    }
+  }
+}