UNPKG

2.01 kBPlain TextView Raw
1import { 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 concat<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
32 items: AdditionalMiddlewares
33 ): MiddlewareArray<Middlewares | AdditionalMiddlewares[number]>
34
35 concat<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
36 ...items: AdditionalMiddlewares
37 ): MiddlewareArray<Middlewares | AdditionalMiddlewares[number]>
38
39 concat(...arr: any[]) {
40 return new MiddlewareArray(...super.concat(...arr))
41 }
42
43 prepend<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
44 items: AdditionalMiddlewares
45 ): MiddlewareArray<AdditionalMiddlewares[number] | Middlewares>
46
47 prepend<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
48 ...items: AdditionalMiddlewares
49 ): MiddlewareArray<AdditionalMiddlewares[number] | Middlewares>
50
51 prepend(...arr: any[]) {
52 if (arr.length === 1 && Array.isArray(arr[0])) {
53 return new MiddlewareArray(...arr[0].concat(this))
54 }
55 return new MiddlewareArray(...arr.concat(this))
56 }
57}
58
\No newline at end of file