UNPKG

2.28 kBPlain TextView Raw
1import type { Middleware } from 'redux'
2
3export function getTimeMeasureUtils(maxDelay: number, fnName: string) {
4 let elapsed = 0
5 return {
6 measureTime<T>(fn: () => T): T {
7 const started = Date.now()
8 try {
9 return fn()
10 } finally {
11 const finished = Date.now()
12 elapsed += finished - started
13 }
14 },
15 warnIfExceeded() {
16 if (elapsed > maxDelay) {
17 console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms.
18If your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.
19It is disabled in production builds, so you don't need to worry about that.`)
20 }
21 },
22 }
23}
24
25/**
26 * @public
27 */
28export class MiddlewareArray<
29 Middlewares extends Middleware<any, any>
30> extends Array<Middlewares> {
31 constructor(arrayLength?: number)
32 constructor(...items: Middlewares[])
33 constructor(...args: any[]) {
34 super(...args)
35 Object.setPrototypeOf(this, MiddlewareArray.prototype)
36 }
37
38 static get [Symbol.species]() {
39 return MiddlewareArray as any
40 }
41
42 concat<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
43 items: AdditionalMiddlewares
44 ): MiddlewareArray<Middlewares | AdditionalMiddlewares[number]>
45
46 concat<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
47 ...items: AdditionalMiddlewares
48 ): MiddlewareArray<Middlewares | AdditionalMiddlewares[number]>
49 concat(...arr: any[]) {
50 return super.concat.apply(this, arr)
51 }
52
53 prepend<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
54 items: AdditionalMiddlewares
55 ): MiddlewareArray<AdditionalMiddlewares[number] | Middlewares>
56
57 prepend<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
58 ...items: AdditionalMiddlewares
59 ): MiddlewareArray<AdditionalMiddlewares[number] | Middlewares>
60
61 prepend(...arr: any[]) {
62 if (arr.length === 1 && Array.isArray(arr[0])) {
63 return new MiddlewareArray(...arr[0].concat(this))
64 }
65 return new MiddlewareArray(...arr.concat(this))
66 }
67}
68
\No newline at end of file