performance-helpers 1.0.0 → 1.0.1

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.
Files changed (287) hide show
  1. package/README.md +12 -2
  2. package/package.json +146 -1
  3. package/src/index.js +1 -0
  4. package/.eslintrc.cjs +0 -22
  5. package/.nojekyll +0 -0
  6. package/.prettierrc +0 -6
  7. package/CONTRIBUTING.md +0 -178
  8. package/assets/1_Caching.md +0 -4
  9. package/assets/2_Parallelizing.md +0 -18
  10. package/assets/3_Logging.md +0 -3
  11. package/assets/404.md +0 -3
  12. package/assets/4_Utils.md +0 -10
  13. package/assets/logo.png +0 -0
  14. package/assets/navigation.md +0 -10
  15. package/bench/README.md +0 -97
  16. package/bench/results.json +0 -94
  17. package/bench/results.md +0 -233
  18. package/bench/run.js +0 -2639
  19. package/bench/worker.js +0 -43
  20. package/docs/README.md +0 -38
  21. package/docs/docs-typedoc.json +0 -38714
  22. package/docs/helpers/constants/README.md +0 -34
  23. package/docs/helpers/constants/variables/DEFAULT_AUTOSCALE_BACKOFF_MAX_MULTIPLIER.md +0 -9
  24. package/docs/helpers/constants/variables/DEFAULT_AUTOSCALE_COOLDOWN_MS.md +0 -9
  25. package/docs/helpers/constants/variables/DEFAULT_AUTOSCALE_INTERVAL_MS.md +0 -9
  26. package/docs/helpers/constants/variables/DEFAULT_AUTOSCALE_MIN_INTERVAL_MS.md +0 -9
  27. package/docs/helpers/constants/variables/DEFAULT_BACKPRESSURE_QUEUE_CAPACITY.md +0 -9
  28. package/docs/helpers/constants/variables/DEFAULT_BACKPRESSURE_REFILL_INTERVAL_MS.md +0 -9
  29. package/docs/helpers/constants/variables/DEFAULT_BATCH_MAX_SIZE.md +0 -9
  30. package/docs/helpers/constants/variables/DEFAULT_CACHE_DEFAULT_TTL_MS.md +0 -9
  31. package/docs/helpers/constants/variables/DEFAULT_CACHE_MAX_POOL_SIZE.md +0 -9
  32. package/docs/helpers/constants/variables/DEFAULT_CACHE_MAX_WEIGHT_BYTES.md +0 -9
  33. package/docs/helpers/constants/variables/DEFAULT_HISTOGRAM_BUCKET_COUNT.md +0 -9
  34. package/docs/helpers/constants/variables/DEFAULT_HISTOGRAM_MAX_VALUE.md +0 -9
  35. package/docs/helpers/constants/variables/DEFAULT_MAX_CLEANUP_PER_TICK.md +0 -9
  36. package/docs/helpers/constants/variables/DEFAULT_QUEUE_CAPACITY.md +0 -9
  37. package/docs/helpers/constants/variables/DEFAULT_REAPER_MIN_INTERVAL_MS.md +0 -9
  38. package/docs/helpers/constants/variables/DEFAULT_REFILL_INTERVAL_MS.md +0 -9
  39. package/docs/helpers/constants/variables/DEFAULT_RETRY_BASE_DELAY_MS.md +0 -9
  40. package/docs/helpers/constants/variables/DEFAULT_RETRY_MAX_DELAY_MS.md +0 -9
  41. package/docs/helpers/constants/variables/DEFAULT_TIMEOUT_MS.md +0 -9
  42. package/docs/helpers/constants/variables/ENCODE_CACHE_LARGE_KEY_LENGTH.md +0 -9
  43. package/docs/helpers/constants/variables/MAX_DEEP_EQUAL_DEPTH.md +0 -9
  44. package/docs/helpers/constants/variables/MS_PER_MIN.md +0 -9
  45. package/docs/helpers/constants/variables/MS_PER_SEC.md +0 -9
  46. package/docs/helpers/constants/variables/default.md +0 -103
  47. package/docs/helpers/jsdoc-types/README.md +0 -33
  48. package/docs/helpers/jsdoc-types/interfaces/BufferDecoder.md +0 -23
  49. package/docs/helpers/jsdoc-types/interfaces/BufferEncoder.md +0 -23
  50. package/docs/helpers/jsdoc-types/interfaces/CacheNode.md +0 -43
  51. package/docs/helpers/jsdoc-types/interfaces/CommonPoolOptions.md +0 -31
  52. package/docs/helpers/jsdoc-types/interfaces/PendingResponseEntry.md +0 -51
  53. package/docs/helpers/jsdoc-types/interfaces/PostMessageOptions.md +0 -39
  54. package/docs/helpers/jsdoc-types/interfaces/PowerBatchOptions.md +0 -13
  55. package/docs/helpers/jsdoc-types/interfaces/PowerCacheOptions.md +0 -115
  56. package/docs/helpers/jsdoc-types/interfaces/PowerChunkingOptions.md +0 -31
  57. package/docs/helpers/jsdoc-types/interfaces/PowerCircuitOptions.md +0 -45
  58. package/docs/helpers/jsdoc-types/interfaces/PowerDeadlineOptions.md +0 -101
  59. package/docs/helpers/jsdoc-types/interfaces/PowerDeferOptions.md +0 -13
  60. package/docs/helpers/jsdoc-types/interfaces/PowerEventBusOptions.md +0 -19
  61. package/docs/helpers/jsdoc-types/interfaces/PowerLatchOptions.md +0 -23
  62. package/docs/helpers/jsdoc-types/interfaces/PowerLoggerOptions.md +0 -51
  63. package/docs/helpers/jsdoc-types/interfaces/PowerObserverOptions.md +0 -25
  64. package/docs/helpers/jsdoc-types/interfaces/PowerPoolOptions.md +0 -85
  65. package/docs/helpers/jsdoc-types/interfaces/PowerQueueOptions.md +0 -13
  66. package/docs/helpers/jsdoc-types/interfaces/PowerRetryOptions.md +0 -83
  67. package/docs/helpers/jsdoc-types/interfaces/PowerSlidingWindowOptions.md +0 -19
  68. package/docs/helpers/jsdoc-types/interfaces/PowerTTLMapOptions.md +0 -27
  69. package/docs/helpers/jsdoc-types/interfaces/PowerThrottleOptions.md +0 -31
  70. package/docs/helpers/jsdoc-types/interfaces/WorkerObj.md +0 -55
  71. package/docs/helpers/powerBackpressure/README.md +0 -17
  72. package/docs/helpers/powerBackpressure/classes/PowerBackpressure.md +0 -368
  73. package/docs/helpers/powerBatch/README.md +0 -17
  74. package/docs/helpers/powerBatch/classes/PowerBatch.md +0 -139
  75. package/docs/helpers/powerBuffer/README.md +0 -26
  76. package/docs/helpers/powerBuffer/functions/b2o.md +0 -25
  77. package/docs/helpers/powerBuffer/functions/o2b.md +0 -23
  78. package/docs/helpers/powerBuffer/functions/o2u8.md +0 -33
  79. package/docs/helpers/powerBuffer/functions/u82o.md +0 -30
  80. package/docs/helpers/powerBulkhead/README.md +0 -17
  81. package/docs/helpers/powerBulkhead/classes/PowerBulkhead.md +0 -302
  82. package/docs/helpers/powerCache/README.md +0 -29
  83. package/docs/helpers/powerCache/classes/PowerCache.md +0 -933
  84. package/docs/helpers/powerCache/classes/PowerMemoizer.md +0 -244
  85. package/docs/helpers/powerCache/classes/PowerTimedCache.md +0 -302
  86. package/docs/helpers/powerCache/functions/simpleArgsKey.md +0 -31
  87. package/docs/helpers/powerChunking/README.md +0 -17
  88. package/docs/helpers/powerChunking/classes/PowerChunker.md +0 -78
  89. package/docs/helpers/powerCircuit/README.md +0 -23
  90. package/docs/helpers/powerCircuit/classes/PowerCircuit.md +0 -167
  91. package/docs/helpers/powerDeadline/README.md +0 -23
  92. package/docs/helpers/powerDeadline/classes/PowerDeadline.md +0 -88
  93. package/docs/helpers/powerDefer/README.md +0 -17
  94. package/docs/helpers/powerDefer/classes/PowerDefer.md +0 -134
  95. package/docs/helpers/powerEventBus/README.md +0 -23
  96. package/docs/helpers/powerEventBus/classes/PowerEventBus.md +0 -330
  97. package/docs/helpers/powerHistogram/README.md +0 -17
  98. package/docs/helpers/powerHistogram/classes/PowerHistogram.md +0 -285
  99. package/docs/helpers/powerLatch/README.md +0 -17
  100. package/docs/helpers/powerLatch/classes/PowerLatch.md +0 -264
  101. package/docs/helpers/powerLogger/README.md +0 -17
  102. package/docs/helpers/powerLogger/classes/PowerLogger.md +0 -290
  103. package/docs/helpers/powerObserver/README.md +0 -23
  104. package/docs/helpers/powerObserver/classes/PowerObserver.md +0 -213
  105. package/docs/helpers/powerPermitGate/README.md +0 -11
  106. package/docs/helpers/powerPermitGate/classes/PowerPermitGate.md +0 -248
  107. package/docs/helpers/powerPool/README.md +0 -36
  108. package/docs/helpers/powerPool/classes/PowerPool.md +0 -973
  109. package/docs/helpers/powerPool/classes/PowerPoolShutdownError.md +0 -67
  110. package/docs/helpers/powerQueue/README.md +0 -11
  111. package/docs/helpers/powerQueue/classes/PowerQueue.md +0 -302
  112. package/docs/helpers/powerRateLimit/README.md +0 -17
  113. package/docs/helpers/powerRateLimit/classes/PowerRateLimit.md +0 -187
  114. package/docs/helpers/powerRetry/README.md +0 -23
  115. package/docs/helpers/powerRetry/classes/PowerRetry.md +0 -106
  116. package/docs/helpers/powerScheduler/README.md +0 -11
  117. package/docs/helpers/powerScheduler/classes/PowerScheduler.md +0 -135
  118. package/docs/helpers/powerSemaphore/README.md +0 -17
  119. package/docs/helpers/powerSemaphore/classes/PowerSemaphore.md +0 -173
  120. package/docs/helpers/powerSlidingWindow/README.md +0 -11
  121. package/docs/helpers/powerSlidingWindow/classes/PowerSlidingWindow.md +0 -83
  122. package/docs/helpers/powerSubscriberSet/README.md +0 -15
  123. package/docs/helpers/powerSubscriberSet/classes/PowerSubscriberSet.md +0 -251
  124. package/docs/helpers/powerSubscriberSet/functions/cleanupWeakRefs.md +0 -21
  125. package/docs/helpers/powerTTLMap/README.md +0 -17
  126. package/docs/helpers/powerTTLMap/classes/PowerTTLMap.md +0 -326
  127. package/docs/helpers/powerThrottle/README.md +0 -17
  128. package/docs/helpers/powerThrottle/classes/PowerThrottle.md +0 -216
  129. package/docs/index/README.md +0 -205
  130. package/docs/utils/errors/README.md +0 -12
  131. package/docs/utils/errors/functions/formatErrorObj.md +0 -30
  132. package/docs/utils/errors/functions/normalizeError.md +0 -50
  133. package/docs/utils/now/README.md +0 -19
  134. package/docs/utils/now/functions/measureAsync.md +0 -37
  135. package/docs/utils/now/functions/measureSync.md +0 -54
  136. package/docs/utils/now/functions/nowMs.md +0 -24
  137. package/guides/autoscale.md +0 -80
  138. package/guides/errors.md +0 -41
  139. package/guides/metaGuide.md +0 -440
  140. package/guides/now.md +0 -56
  141. package/guides/powerBackpressure.md +0 -110
  142. package/guides/powerBatch.md +0 -82
  143. package/guides/powerBuffer.md +0 -86
  144. package/guides/powerBulkhead.md +0 -61
  145. package/guides/powerCache.md +0 -269
  146. package/guides/powerChunking.md +0 -130
  147. package/guides/powerCircuit.md +0 -84
  148. package/guides/powerDeadline.md +0 -99
  149. package/guides/powerDefer.md +0 -56
  150. package/guides/powerEventBus.md +0 -89
  151. package/guides/powerHistogram.md +0 -71
  152. package/guides/powerLatch.md +0 -94
  153. package/guides/powerLogger.md +0 -129
  154. package/guides/powerObserver.md +0 -65
  155. package/guides/powerPermitGate.md +0 -52
  156. package/guides/powerPool.md +0 -321
  157. package/guides/powerQueue.md +0 -112
  158. package/guides/powerRateLimit.md +0 -37
  159. package/guides/powerRetry.md +0 -54
  160. package/guides/powerScheduler.md +0 -41
  161. package/guides/powerSemaphore.md +0 -65
  162. package/guides/powerSlidingWindow.md +0 -63
  163. package/guides/powerSubscriberSet.md +0 -48
  164. package/guides/powerTTLMap.md +0 -58
  165. package/guides/powerThrottle.md +0 -152
  166. package/index.html +0 -57
  167. package/results.json +0 -6692
  168. package/scripts/find-missing-jsdoc.js +0 -62
  169. package/scripts/modernize-optional-chaining.cjs +0 -36
  170. package/scripts/pool-debug.mjs +0 -29
  171. package/scripts/repro_powercache.js +0 -14
  172. package/scripts/static-audit-exports.cjs +0 -93
  173. package/scripts/static-audit-exports.json +0 -518
  174. package/test/powerBackpressure.test.js +0 -114
  175. package/test/powerBatch.branches.extra.test.js +0 -122
  176. package/test/powerBatch.test.js +0 -79
  177. package/test/powerBuffer.test.js +0 -125
  178. package/test/powerBulkhead.test.js +0 -210
  179. package/test/powerCache.branches.test.js +0 -233
  180. package/test/powerCache.bulk.test.js +0 -31
  181. package/test/powerCache.getorset.test.js +0 -110
  182. package/test/powerCache.hitRate.test.js +0 -35
  183. package/test/powerCache.inflight.test.js +0 -24
  184. package/test/powerCache.iterator.test.js +0 -18
  185. package/test/powerCache.misses.test.js +0 -52
  186. package/test/powerCache.more.test.js +0 -118
  187. package/test/powerCache.test.js +0 -37
  188. package/test/powerCache.timeout.test.js +0 -25
  189. package/test/powerCache.touch.test.js +0 -46
  190. package/test/powerChunking.branches.extra.test.js +0 -155
  191. package/test/powerChunking.errors.test.js +0 -177
  192. package/test/powerChunking.test.js +0 -39
  193. package/test/powerCircuit.observability.test.js +0 -71
  194. package/test/powerCircuit.test.js +0 -74
  195. package/test/powerDeadline.test.js +0 -140
  196. package/test/powerDefer.test.js +0 -55
  197. package/test/powerErrors.test.js +0 -32
  198. package/test/powerEventBus.branches.extra.test.js +0 -70
  199. package/test/powerEventBus.extra.test.js +0 -72
  200. package/test/powerEventBus.max.test.js +0 -43
  201. package/test/powerEventBus.more.test.js +0 -121
  202. package/test/powerEventBus.once_off.test.js +0 -17
  203. package/test/powerEventBus.test.js +0 -74
  204. package/test/powerEventBus.uncovered.test.js +0 -57
  205. package/test/powerEventBus.weak.test.js +0 -18
  206. package/test/powerHistogram.test.js +0 -73
  207. package/test/powerLatch.branches.extra.test.js +0 -115
  208. package/test/powerLatch.test.js +0 -57
  209. package/test/powerLogger.branches.test.js +0 -98
  210. package/test/powerLogger.formatter.name.test.js +0 -58
  211. package/test/powerLogger.json.test.js +0 -88
  212. package/test/powerLogger.output.test.js +0 -81
  213. package/test/powerLogger.table.debug.test.js +0 -77
  214. package/test/powerLogger.test.js +0 -59
  215. package/test/powerMemoizer.memoize.test.js +0 -100
  216. package/test/powerMemoizer.test.js +0 -85
  217. package/test/powerObserver.test.js +0 -129
  218. package/test/powerPermitGate.test.js +0 -66
  219. package/test/powerPool.autoTransfer.test.js +0 -100
  220. package/test/powerPool.autoscale.extra.test.js +0 -88
  221. package/test/powerPool.autoscale.test.js +0 -136
  222. package/test/powerPool.awaitDefaultTimeout.test.js +0 -52
  223. package/test/powerPool.awaitTimeout.test.js +0 -22
  224. package/test/powerPool.batch.test.js +0 -170
  225. package/test/powerPool.branches.extra2.test.js +0 -42
  226. package/test/powerPool.branches.test.js +0 -102
  227. package/test/powerPool.browser.messageerror.test.js +0 -45
  228. package/test/powerPool.correlation.test.js +0 -26
  229. package/test/powerPool.correlationId.test.js +0 -63
  230. package/test/powerPool.dispose.test.js +0 -49
  231. package/test/powerPool.drain.test.js +0 -57
  232. package/test/powerPool.events.test.js +0 -131
  233. package/test/powerPool.more.extra.test.js +0 -99
  234. package/test/powerPool.more.test.js +0 -283
  235. package/test/powerPool.node.messageerror.test.js +0 -46
  236. package/test/powerPool.postMessage.promise.test.js +0 -83
  237. package/test/powerPool.queueHigh.test.js +0 -55
  238. package/test/powerPool.queueSaturation.test.js +0 -51
  239. package/test/powerPool.rapidResize.test.js +0 -55
  240. package/test/powerPool.resize.overload.test.js +0 -65
  241. package/test/powerPool.resize.test.js +0 -70
  242. package/test/powerPool.shutdown.test.js +0 -38
  243. package/test/powerPool.stats.test.js +0 -40
  244. package/test/powerPool.stopThePress.test.js +0 -94
  245. package/test/powerPool.terminateShutdown.test.js +0 -22
  246. package/test/powerPool.test.js +0 -525
  247. package/test/powerPool.timers.test.js +0 -55
  248. package/test/powerPool.uncovered.test.js +0 -407
  249. package/test/powerPool.workerId.test.js +0 -47
  250. package/test/powerQueue.iterators.test.js +0 -67
  251. package/test/powerQueue.saturation.test.js +0 -18
  252. package/test/powerQueue.test.js +0 -48
  253. package/test/powerQueue.unshiftMany.test.js +0 -49
  254. package/test/powerRateLimit.atomic.test.js +0 -80
  255. package/test/powerRateLimit.extra.test.js +0 -145
  256. package/test/powerRateLimit.functions.test.js +0 -106
  257. package/test/powerRateLimit.test.js +0 -38
  258. package/test/powerRetry.attemptTimeout.test.js +0 -51
  259. package/test/powerRetry.test.js +0 -121
  260. package/test/powerScheduler.test.js +0 -126
  261. package/test/powerSemaphore.test.js +0 -108
  262. package/test/powerSlidingWindow.pool.test.js +0 -55
  263. package/test/powerSlidingWindow.test.js +0 -25
  264. package/test/powerSubscriberSet.test.js +0 -125
  265. package/test/powerTTLMap.test.js +0 -125
  266. package/test/powerThrottle.pool.test.js +0 -54
  267. package/test/powerThrottle.refill.test.js +0 -22
  268. package/test/powerThrottle.reserve.test.js +0 -46
  269. package/test/powerThrottle.test.js +0 -45
  270. package/test/powerTimedCache.test.js +0 -73
  271. package/test/umd.bundle.branches.test.js +0 -100
  272. package/test/umd.bundle.cache-timers.test.js +0 -48
  273. package/test/umd.bundle.exhaustive.test.js +0 -158
  274. package/test/umd.bundle.fuzz.test.js +0 -86
  275. package/test/umd.bundle.hasEqual.more.test.js +0 -68
  276. package/test/umd.bundle.hasEqual.test.js +0 -104
  277. package/test/umd.bundle.logger-extra.test.js +0 -48
  278. package/test/umd.bundle.more-coverage-2.test.js +0 -67
  279. package/test/umd.bundle.pool.test.js +0 -134
  280. package/test/umd.bundle.test.js +0 -265
  281. package/test/utils.measure.test.js +0 -49
  282. package/test/utils.now.extra.test.js +0 -30
  283. package/test/utils.now.more.test.js +0 -57
  284. package/tsconfig.json +0 -16
  285. package/typedoc.json +0 -25
  286. package/vite.config.js +0 -31
  287. package/vitest.config.js +0 -17
package/README.md CHANGED
@@ -111,7 +111,7 @@ npm run docs
111
111
 
112
112
  ## Usage examples
113
113
 
114
- Importing from the package entry (or directly from `src/helpers/*` during development):
114
+ Import everything from the package entry:
115
115
 
116
116
  ```javascript
117
117
  import {
@@ -147,6 +147,16 @@ import {
147
147
  } from 'performance-helpers';
148
148
  ```
149
149
 
150
+ Import a single helper or utility when you want the smallest possible bundle:
151
+
152
+ ```javascript
153
+ import { PowerCache } from 'performance-helpers/powerCache';
154
+ import { nowMs } from 'performance-helpers/now';
155
+ import { normalizeError } from 'performance-helpers/errors';
156
+ ```
157
+
158
+ The package is marked as side-effect free, so bundlers can treeshake unused exports from the root entry as well.
159
+
150
160
  ## CDN usage
151
161
 
152
162
  You can import the package directly from a CDN for quick demos. Example using unpkg (ES module support):
@@ -187,7 +197,7 @@ UMD example (script tag):
187
197
 
188
198
  ## API docs
189
199
 
190
- Full API documentation [here](docs/README.md)
200
+ See the [full API documentation](docs/README.md)
191
201
 
192
202
  ## License
193
203
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "performance-helpers",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Performance toolbox",
5
5
  "keywords": [
6
6
  "node",
@@ -38,13 +38,158 @@
38
38
  "author": "Abel Vázquez Montoro",
39
39
  "type": "module",
40
40
  "main": "src/index.js",
41
+ "module": "src/index.js",
41
42
  "types": "types/index.d.ts",
43
+ "files": [
44
+ "src",
45
+ "types",
46
+ "README.md",
47
+ "LICENSE.md",
48
+ "package.json"
49
+ ],
50
+ "sideEffects": false,
42
51
  "exports": {
43
52
  ".": {
53
+ "types": "./types/index.d.ts",
44
54
  "import": "./src/index.js",
45
55
  "require": "./src/index.js",
46
56
  "default": "./src/index.js"
47
57
  },
58
+ "./powerBackpressure": {
59
+ "types": "./types/helpers/powerBackpressure.d.ts",
60
+ "import": "./src/helpers/powerBackpressure.js",
61
+ "default": "./src/helpers/powerBackpressure.js"
62
+ },
63
+ "./powerBatch": {
64
+ "types": "./types/helpers/powerBatch.d.ts",
65
+ "import": "./src/helpers/powerBatch.js",
66
+ "default": "./src/helpers/powerBatch.js"
67
+ },
68
+ "./powerBuffer": {
69
+ "types": "./types/helpers/powerBuffer.d.ts",
70
+ "import": "./src/helpers/powerBuffer.js",
71
+ "default": "./src/helpers/powerBuffer.js"
72
+ },
73
+ "./powerBulkhead": {
74
+ "types": "./types/helpers/powerBulkhead.d.ts",
75
+ "import": "./src/helpers/powerBulkhead.js",
76
+ "default": "./src/helpers/powerBulkhead.js"
77
+ },
78
+ "./powerCache": {
79
+ "types": "./types/helpers/powerCache.d.ts",
80
+ "import": "./src/helpers/powerCache.js",
81
+ "default": "./src/helpers/powerCache.js"
82
+ },
83
+ "./powerChunking": {
84
+ "types": "./types/helpers/powerChunking.d.ts",
85
+ "import": "./src/helpers/powerChunking.js",
86
+ "default": "./src/helpers/powerChunking.js"
87
+ },
88
+ "./powerCircuit": {
89
+ "types": "./types/helpers/powerCircuit.d.ts",
90
+ "import": "./src/helpers/powerCircuit.js",
91
+ "default": "./src/helpers/powerCircuit.js"
92
+ },
93
+ "./powerDeadline": {
94
+ "types": "./types/helpers/powerDeadline.d.ts",
95
+ "import": "./src/helpers/powerDeadline.js",
96
+ "default": "./src/helpers/powerDeadline.js"
97
+ },
98
+ "./powerDefer": {
99
+ "types": "./types/helpers/powerDefer.d.ts",
100
+ "import": "./src/helpers/powerDefer.js",
101
+ "default": "./src/helpers/powerDefer.js"
102
+ },
103
+ "./powerEventBus": {
104
+ "types": "./types/helpers/powerEventBus.d.ts",
105
+ "import": "./src/helpers/powerEventBus.js",
106
+ "default": "./src/helpers/powerEventBus.js"
107
+ },
108
+ "./powerHistogram": {
109
+ "types": "./types/helpers/powerHistogram.d.ts",
110
+ "import": "./src/helpers/powerHistogram.js",
111
+ "default": "./src/helpers/powerHistogram.js"
112
+ },
113
+ "./powerLatch": {
114
+ "types": "./types/helpers/powerLatch.d.ts",
115
+ "import": "./src/helpers/powerLatch.js",
116
+ "default": "./src/helpers/powerLatch.js"
117
+ },
118
+ "./powerLogger": {
119
+ "types": "./types/helpers/powerLogger.d.ts",
120
+ "import": "./src/helpers/powerLogger.js",
121
+ "default": "./src/helpers/powerLogger.js"
122
+ },
123
+ "./powerObserver": {
124
+ "types": "./types/helpers/powerObserver.d.ts",
125
+ "import": "./src/helpers/powerObserver.js",
126
+ "default": "./src/helpers/powerObserver.js"
127
+ },
128
+ "./powerPermitGate": {
129
+ "types": "./types/helpers/powerPermitGate.d.ts",
130
+ "import": "./src/helpers/powerPermitGate.js",
131
+ "default": "./src/helpers/powerPermitGate.js"
132
+ },
133
+ "./powerPool": {
134
+ "types": "./types/helpers/powerPool.d.ts",
135
+ "import": "./src/helpers/powerPool.js",
136
+ "default": "./src/helpers/powerPool.js"
137
+ },
138
+ "./powerQueue": {
139
+ "types": "./types/helpers/powerQueue.d.ts",
140
+ "import": "./src/helpers/powerQueue.js",
141
+ "default": "./src/helpers/powerQueue.js"
142
+ },
143
+ "./powerRateLimit": {
144
+ "types": "./types/helpers/powerRateLimit.d.ts",
145
+ "import": "./src/helpers/powerRateLimit.js",
146
+ "default": "./src/helpers/powerRateLimit.js"
147
+ },
148
+ "./powerRetry": {
149
+ "types": "./types/helpers/powerRetry.d.ts",
150
+ "import": "./src/helpers/powerRetry.js",
151
+ "default": "./src/helpers/powerRetry.js"
152
+ },
153
+ "./powerScheduler": {
154
+ "types": "./types/helpers/powerScheduler.d.ts",
155
+ "import": "./src/helpers/powerScheduler.js",
156
+ "default": "./src/helpers/powerScheduler.js"
157
+ },
158
+ "./powerSemaphore": {
159
+ "types": "./types/helpers/powerSemaphore.d.ts",
160
+ "import": "./src/helpers/powerSemaphore.js",
161
+ "default": "./src/helpers/powerSemaphore.js"
162
+ },
163
+ "./powerSlidingWindow": {
164
+ "types": "./types/helpers/powerSlidingWindow.d.ts",
165
+ "import": "./src/helpers/powerSlidingWindow.js",
166
+ "default": "./src/helpers/powerSlidingWindow.js"
167
+ },
168
+ "./powerSubscriberSet": {
169
+ "types": "./types/helpers/powerSubscriberSet.d.ts",
170
+ "import": "./src/helpers/powerSubscriberSet.js",
171
+ "default": "./src/helpers/powerSubscriberSet.js"
172
+ },
173
+ "./powerThrottle": {
174
+ "types": "./types/helpers/powerThrottle.d.ts",
175
+ "import": "./src/helpers/powerThrottle.js",
176
+ "default": "./src/helpers/powerThrottle.js"
177
+ },
178
+ "./powerTTLMap": {
179
+ "types": "./types/helpers/powerTTLMap.d.ts",
180
+ "import": "./src/helpers/powerTTLMap.js",
181
+ "default": "./src/helpers/powerTTLMap.js"
182
+ },
183
+ "./now": {
184
+ "types": "./types/utils/now.d.ts",
185
+ "import": "./src/utils/now.js",
186
+ "default": "./src/utils/now.js"
187
+ },
188
+ "./errors": {
189
+ "types": "./types/utils/errors.d.ts",
190
+ "import": "./src/utils/errors.js",
191
+ "default": "./src/utils/errors.js"
192
+ },
48
193
  "./package.json": "./package.json"
49
194
  },
50
195
  "scripts": {
package/src/index.js CHANGED
@@ -14,6 +14,7 @@ export { PowerSubscriberSet } from './helpers/powerSubscriberSet.js';
14
14
  export { PowerSemaphore } from './helpers/powerSemaphore.js';
15
15
  export { PowerDefer } from './helpers/powerDefer.js';
16
16
  export { PowerTTLMap } from './helpers/powerTTLMap.js';
17
+ export { normalizeError, formatErrorObj } from './utils/errors.js';
17
18
  export { nowMs, measureSync, measureAsync } from './utils/now.js';
18
19
  export { PowerCircuit } from './helpers/powerCircuit.js';
19
20
  export { PowerRetry } from './helpers/powerRetry.js';
package/.eslintrc.cjs DELETED
@@ -1,22 +0,0 @@
1
- module.exports = {
2
- env: {
3
- es2021: true,
4
- node: true,
5
- browser: true,
6
- },
7
- parserOptions: {
8
- ecmaVersion: 2021,
9
- sourceType: 'module',
10
- },
11
- extends: [
12
- 'eslint:recommended',
13
- 'plugin:prettier/recommended'
14
- ],
15
- rules: {
16
- semi: ['error', 'always'],
17
- quotes: ['error', 'single'],
18
- 'no-unused-vars': ['warn'],
19
- 'no-empty': 'off',
20
- 'no-useless-catch': 'off',
21
- },
22
- };
package/.nojekyll DELETED
File without changes
package/.prettierrc DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "semi": true,
3
- "singleQuote": true,
4
- "trailingComma": "es5",
5
- "printWidth": 100
6
- }
package/CONTRIBUTING.md DELETED
@@ -1,178 +0,0 @@
1
- # Contributing
2
-
3
- Thanks for contributing to `performance-helpers`.
4
-
5
- This project is a small, performance-focused JavaScript toolbox for Node.js and browser runtimes. Contributions should stay consistent with that goal: small APIs, predictable behavior, low overhead, and clear documentation.
6
-
7
- Repository: <https://github.com/AbelVM/performance-helpers>
8
-
9
- ## Prerequisites
10
-
11
- - Node.js 16 or newer
12
- - npm
13
-
14
- Install dependencies:
15
-
16
- ```bash
17
- npm install
18
- ```
19
-
20
- ## Project layout
21
-
22
- - `src/helpers/`: helper implementations
23
- - `src/utils/`: small shared utilities
24
- - `test/`: Vitest coverage for helpers and edge cases
25
- - `guides/`: user-facing helper guides
26
- - `bench/`: benchmark runners and benchmark docs
27
- - `types/`: generated declaration output
28
-
29
- ## Development workflow
30
-
31
- 1. Make the smallest change that solves the problem.
32
- 2. Keep public APIs stable unless the change explicitly requires API work.
33
- 3. Add or update tests for behavior changes.
34
- 4. Update the relevant guide or README entry when user-facing behavior changes.
35
- 5. Run the relevant validation commands before opening a PR.
36
-
37
- ## Useful commands
38
-
39
- Run tests:
40
-
41
- ```bash
42
- npm run test
43
- ```
44
-
45
- Run linting:
46
-
47
- ```bash
48
- npm run lint
49
- ```
50
-
51
- Auto-fix lint issues:
52
-
53
- ```bash
54
- npm run lint:fix
55
- ```
56
-
57
- Format source and markdown:
58
-
59
- ```bash
60
- npm run format
61
- ```
62
-
63
- Generate declaration files:
64
-
65
- ```bash
66
- npm run types:generate
67
- ```
68
-
69
- Build the project:
70
-
71
- ```bash
72
- npm run build
73
- ```
74
-
75
- Generate docs:
76
-
77
- ```bash
78
- npm run docs
79
- ```
80
-
81
- Run benchmarks:
82
-
83
- ```bash
84
- npm run bench
85
- ```
86
-
87
- Run the full validation pipeline:
88
-
89
- ```bash
90
- npm run build:full
91
- ```
92
-
93
- ## Coding guidelines
94
-
95
- - Prefer plain JavaScript and small abstractions over framework-style layering.
96
- - Keep hot-path allocations and hidden work low.
97
- - Avoid adding dependencies unless there is a clear, durable payoff.
98
- - Preserve the existing naming style and file organization.
99
- - Write examples and docs using realistic usage patterns, not placeholder pseudocode.
100
- - When changing helper behavior, consider edge cases such as timeouts, cancellation, queue saturation, expiry, and cleanup.
101
-
102
- ## Testing expectations
103
-
104
- - Add focused tests near the affected helper area in `test/`.
105
- - Cover both normal behavior and failure or edge cases.
106
- - Prefer narrow, explicit tests over large multi-concern tests.
107
- - If a helper has concurrency, timing, or retry behavior, test the boundary conditions.
108
- - Keep the repository-wide coverage baseline green; use helper-specific work to raise weaker files toward Tier 1.
109
-
110
- ## Tier 1 helper checklist
111
-
112
- Use this checklist when promoting or maintaining a helper as Tier 1:
113
-
114
- - The helper has a dedicated guide and a README entry.
115
- - Public methods and constructor options have concise JSDoc with edge-case behavior spelled out.
116
- - Behavior-changing work includes focused regression tests.
117
- - The helper keeps per-file coverage at or above the repository targets during promotion, with branch coverage treated as mandatory.
118
- - Known correctness issues are fixed before broadening the API.
119
- - Performance-sensitive paths avoid avoidable allocations, duplicate clocks, and duplicated state machines.
120
- - If the helper composes other helpers, shared substrate should be reused instead of reimplemented.
121
-
122
- Helpers that cannot satisfy this bar without excessive complexity should stay advanced or internal until their scope is reduced.
123
-
124
- Current exceptions to treat deliberately rather than mechanically:
125
-
126
- - `PowerPool` is an advanced helper. Its scope is intentionally broader than most helpers here, so promotion work should focus on correctness, docs, and high-value edge cases instead of forcing it into the same maintenance profile as the smallest primitives.
127
- - `PowerRateLimit` currently has an anomalous function-coverage number despite strong public-path coverage. Do not treat that metric alone as proof of missing behavior unless a concrete branch or regression is identified.
128
- - For broad helpers, prefer documenting scope and trade-offs over adding low-value tests that only improve a report without increasing confidence.
129
-
130
- ## Documentation expectations
131
-
132
- Update documentation when any of the following changes:
133
-
134
- - public API
135
- - constructor options
136
- - method semantics
137
- - examples
138
- - performance trade-offs
139
- - recommended helper combinations
140
-
141
- At minimum, check whether one of these files needs an update:
142
-
143
- - `README.md`
144
- - `guides/*.md`
145
- - `guides/metaGuide.md`
146
-
147
- ## Pull requests
148
-
149
- A good pull request should include:
150
-
151
- - a clear problem statement
152
- - a concise summary of the change
153
- - tests for behavior changes
154
- - docs updates when user-facing behavior changed
155
- - notes about benchmark impact when performance-sensitive code changed
156
-
157
- If the change affects runtime cost, concurrency, or memory behavior, include benchmark numbers or at least a short explanation of the expected trade-off.
158
-
159
- ## Scope guidance
160
-
161
- Good contributions:
162
-
163
- - bug fixes
164
- - test improvements
165
- - documentation clarifications
166
- - performance improvements with evidence
167
- - small, coherent helper enhancements
168
-
169
- Higher-risk changes that need extra care:
170
-
171
- - public API redesigns
172
- - new dependencies
173
- - behavior changes in core helpers like cache, pool, queue, retry, or rate limiting
174
- - changes that make examples or guides drift from the actual implementation
175
-
176
- ## Questions
177
-
178
- If you are unsure whether a change fits the project, open an issue or draft PR with the intended API, behavior, and trade-offs before expanding the implementation.
@@ -1,4 +0,0 @@
1
- # Caching
2
-
3
- - [PowerCache: Caching (LRU + TTL + weight) and memoizing](../guides/powerCache.md). An in-memory, memory-efficient LRU cache with TTL, weighted eviction and an optional reusable node pool.
4
- - [PowerTTLMap: Map with per-key TTL](../guides/powerTTLMap.md). Lightweight `Map`-like store where keys expire lazily on access.
@@ -1,18 +0,0 @@
1
- # Parallelizing
2
-
3
- - [PowerPool: Worker pool](../guides/powerPool.md). A small, dependency-free worker pool that wraps underlying Worker instances.
4
- - [PowerChunker: Chunk + pool helper](../guides/powerChunking.md). Convenience helper to chunk iterables and process items via a `PowerPool`.
5
- - [PowerBulkhead: Partitioned executor](../guides/powerBulkhead.md). Isolate noisy workloads into separate lanes so one hot partition cannot starve the rest.
6
- - [PowerCircuit: Circuit breaker](../guides/powerCircuit.md). Small circuit breaker to protect external services from cascading failures.
7
- - [PowerRetry: Retry with backoff](../guides/powerRetry.md). Helper for retrying flaky async operations with configurable backoff and jitter.
8
- - [PowerDeadline: Timeout, retry budget, and cancellation](../guides/powerDeadline.md). Wrap async work with per-attempt timeouts, overall deadlines, and retry policy.
9
- - [PowerHistogram: Lock-free percentile estimator](../guides/powerHistogram.md). Compact in-process histogram for latency telemetry and estimated percentiles.
10
- - [PowerBackpressure: Producer-facing backpressure controller](../guides/powerBackpressure.md). Gate producers with adaptive refill and bounded waiting.
11
- - [PowerBatch: Microtask coalescing dispatcher](../guides/powerBatch.md). Coalesce synchronous calls into compact batches for bulk operations.
12
- - [PowerLatch: Counting barrier](../guides/powerLatch.md). Simple barrier that resolves when a count reaches zero. Useful for coordinating out-of-band task completions.
13
- - [PowerThrottle: A token-bucket limiter](guides/powerThrottle.md). A tiny rate limiter useful for pacing external work or cooperating with `PowerPool`. New: supports `reserve()`/`release()` for reservation-style workflows.
14
- - [PowerRateLimit: Compose multiple limiters](guides/powerRateLimit.md). Combine `PowerThrottle`, `PowerSlidingWindow` and others; supports an `atomic` option to attempt atomic consumes across composed limiters.
15
- - [PowerSlidingWindow: Sliding-window limiter](../guides/powerSlidingWindow.md). A simple rolling-window limiter for quota-style rate limiting.
16
- - [PowerQueue: O(1) ring-buffer queue](../guides/powerQueue.md). A resizable, high-performance queue intended for use in `PowerPool` and other high-throughput scenarios.
17
- - [PowerSemaphore: Async concurrency gate](../guides/powerSemaphore.md). Lightweight semaphore for limiting concurrent I/O and fan-out workloads.
18
- - [PowerEventBus: Typed micro event bus](../guides/powerEventBus.md). Lightweight pub/sub for intra-process coordination between helpers.
@@ -1,3 +0,0 @@
1
- # Logging
2
-
3
- - [PowerLogger: Gated logging](../guides/powerLogger.md). Simple runtime debug gate and in-memory counters useful for lightweight instrumentation and tests.
package/assets/404.md DELETED
@@ -1,3 +0,0 @@
1
- # Not found
2
-
3
- Go back to [home](../README.md)
package/assets/4_Utils.md DELETED
@@ -1,10 +0,0 @@
1
- # Utils
2
-
3
- - [PowerBuffer: Encode/decode JS objects to transferables for worker messaging](../guides/powerBuffer.md). Lightweight helpers for encoding/decoding JSON to/from binary (Uint8Array / ArrayBuffer / Node Buffer).
4
- - [PowerDefer: Deferred promise primitive](../guides/powerDefer.md). Small utility that separates a `Promise` from its `resolve`/`reject` functions.
5
- - [PowerPermitGate: Permit queue helper](../guides/powerPermitGate.md). Low-level concurrency gate that manages permits and FIFO waiters for building semaphore or backpressure primitives.
6
- - [PowerScheduler: Work coalescing scheduler](../guides/powerScheduler.md). Lightweight scheduler for batching deferred work into a single microtask or macrotask flush.
7
- - [PowerSubscriberSet: Shared listener registry](../guides/powerSubscriberSet.md). Internal subscriber helper with optional weak references and once-listener support.
8
- - [PowerObserver: Lightweight reactive value](../guides/powerObserver.md). Tiny observable primitive for synchronous subscriptions to a single value.
9
- - [Now utilities: high-resolution timers and measure helpers](../guides/now.md) — `nowMs()`, `measureSync()`, `measureAsync()` and timing best-practices.
10
- - [Errors utilities: recommended error shapes and patterns](../guides/errors.md) — guidance for attaching `duration`, `correlationId` and structured diagnostics to errors and responses
package/assets/logo.png DELETED
Binary file
@@ -1,10 +0,0 @@
1
- [home](README.md)
2
- [Quick Guide](guides/metaGuide.md)
3
- [Caching](assets/1_Caching.md)
4
- [Parallelizing](assets/2_Parallelizing.md)
5
- [Logging](assets/3_Logging.md)
6
- [Utils](assets/4_Utils.md)
7
- [API](docs/README.md)
8
- [Benchmark](bench/results.md)
9
- [Contributing](CONTRIBUTING.md)
10
- [License](LICENSE.md)
package/bench/README.md DELETED
@@ -1,97 +0,0 @@
1
- # Benchmarks
2
-
3
- Lightweight benchmarking helpers for `PowerPool` and `PowerCache`.
4
-
5
- This folder contains a small harness (`bench/run.js`) that measures:
6
-
7
- - single-threaded CPU-bound compute (baseline) with **p50/p95/p99** per-task latency
8
- - multi-worker `PowerPool` performance across pool sizes with **speedup vs single-threaded**
9
- - a simple `PowerCache` hit/miss benchmark
10
- - `PowerPool + PowerCache` optimized cache reuse patterns
11
- - `PowerPool` autoscaling performance
12
- - `PowerMemoizer` memoization overhead with duplicate keys
13
- - multiple real-world load profiles: `0%`, `25%`, `50%`, `75%`, and `100%` variable load
14
- - additional realistic scenario benchmarks, including:
15
- - `Burstiness`: sudden bursts of work followed by short quiet periods
16
- - `Mixed task sizes`: alternating light and heavy work items to mimic uneven request costs
17
- - `Ramp traffic`: gradual ramp-up and ramp-down of task submission rates
18
- - `Variable payload sizes`: payloads with different serialized sizes to exercise data movement
19
- - `I/O bound`: tasks that include small async wait periods to simulate I/O latency
20
- - `Thundering herd`: many tasks contending for the same cache key at once
21
- - `Cache hit-ratio sweeps`: low/medium/high reuse ratios for cache-backed work
22
- - `Cache warmup behavior`: cold vs warm cache performance for repeated workloads
23
- - `Cache eviction under pressure`: tight maxEntries (20% of unique keys) measuring LRU overhead
24
- - `Serial vs concurrent getOrSetAsync`: in-flight deduplication benefit quantified
25
- - **helper micro-benchmarks** for primitives not covered by the pool harness:
26
- - `PowerRateLimit`: tryConsume throughput under rate (all pass) and over rate (~50% rejected)
27
- - `PowerCircuit`: `call()` overhead in closed (happy path) vs open (fast-fail) state
28
- - `PowerRetry`: `run()` overhead with 0 retries and 1 retry (baseDelay=0)
29
- - `PowerSemaphore`: serial (limit=1) and concurrent (limit=8) permit acquisition
30
- - `PowerBulkhead`: single partition vs 2-partition critical/background isolation
31
- - `PowerBatch`: individual dispatch (maxSize=1) vs coalesced dispatch
32
- - `PowerBackpressure`: acquire/release with no pressure and with capacity=100
33
- - `PowerTTLMap`: set/get throughput with long TTL (no eviction) and short TTL (1 ms, high churn)
34
- - `PowerEventBus`: `emit` fan-out throughput at 1 / 10 / 50 / 100 subscribers
35
- - `PowerDeadline`: success path overhead and abort-path cost when task exceeds deadline
36
- - `PowerSlidingWindow`: `tryConsume` throughput under capacity and at capacity
37
- - `PowerQueue`: bulk push+shift and interleaved (ring-buffer steady state)
38
- - **historical delta comparison**: on each run, results are compared against the previous `results.json` and regressions/improvements > 5% are highlighted in the markdown
39
-
40
- Quick usage
41
-
42
- ```bash
43
- # Run the full benchmark suite (profiles + cache + helpers)
44
- npm run bench
45
-
46
- # Run only the profile-based worker-pool benchmarks (across variable load mixes)
47
- npm run bench:pool
48
-
49
- # Run only the cache workload
50
- npm run bench:cache
51
-
52
- # Run the profile-based pool benchmark directly
53
- node bench/run.js profiles
54
-
55
- # Run only the realistic scenario benchmarks
56
- node bench/run.js scenarios
57
-
58
- # Run only the helper micro-benchmarks
59
- node bench/run.js helpers
60
-
61
- # Alias for the same profile benchmark flow
62
- node bench/run.js variable
63
- ```
64
-
65
- Environment variables (defaults shown)
66
-
67
- - `BENCH_TASKS` (default: `1000`) — number of tasks submitted to the pool (or keys for cache benchmark)
68
- - `BENCH_ITERS` (default: `1000000`) — work per task (higher = heavier per-task CPU)
69
- - `BENCH_POOLS` (default: `1,2,4,8`) — comma-separated pool sizes when running pool benchmarks
70
- - `BENCH_POOL_TIMEOUT` (default: `0`) — ms timeout for each `PowerPool` run; set to `0` to disable timeout and let the pool run to completion
71
- - `BENCH_CACHE_DUPLICATE_KEYS` (default: `10`) — unique key count for cache getOrSetAsync duplicate-key benchmark
72
- - `BENCH_MEMOIZER_DUPLICATE_KEYS` (default: `10`) — unique key count for PowerMemoizer repeated-call benchmark
73
- - `BENCH_AUTOSCALE_CACHE_KEYS` (default: `10`) — unique key count for autoscale + cache duplicate-key benchmark
74
- - `BENCH_POOL_RUNS` (default: `3`) — repeat each pool/scenario variant N times and report the result closest to the median wall-clock time; set to `3` for more stable pool numbers at the cost of a ~3× longer run
75
- - `BENCH_RUNS` (default: `5`) — repeat each helper micro-benchmark N times and report the median; reduces measurement noise from OS jitter and JIT warm-up variance
76
- - `BENCH_HELPER_OPS` (default: `100000`) — operation count for each helper micro-benchmark variant
77
-
78
- Tips and notes
79
-
80
- - Start with small values during iteration: `BENCH_TASKS=2 BENCH_ITERS=10000` to validate changes quickly
81
- - Use `BENCH_POOL_TIMEOUT=0` when you expect long runs and don't want the harness to fall back to the plain `worker_threads` implementation
82
- - Use `BENCH_POOL_RUNS=3` for more stable pool benchmark numbers on a noisy machine (runs each pool variant 3 times, reports median)
83
- - Use `BENCH_RUNS=7` for even more stable helper micro-benchmark numbers on a noisy machine
84
- - Use `BENCH_HELPER_OPS=10000` to run a quick smoke test of all helpers
85
- - The harness writes human-readable results to `bench/results.md` and writes a machine-readable copy to `results.json` at the repository root; the markdown contains a link to that file
86
-
87
- Example quick smoke run
88
-
89
- ```bash
90
- BENCH_TASKS=2 BENCH_ITERS=10000 BENCH_POOLS=1 BENCH_POOL_TIMEOUT=0 BENCH_HELPER_OPS=1000 node bench/run.js pool
91
- ```
92
-
93
- Reproducibility
94
-
95
- - Run the same `BENCH_TASKS`, `BENCH_ITERS` and `BENCH_POOLS` across machines to compare relative performance
96
- - Benchmark results are noisy on shared machines; run multiple times and take median/mean as appropriate
97
- - The `Δ prev` column in the markdown shows changes relative to the previous `results.json` on disk — commit `results.json` to track regressions over time