UNPKG

2.24 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[number]> {
31 constructor(...items: Middlewares)
32 constructor(...args: any[]) {
33 super(...args)
34 Object.setPrototypeOf(this, MiddlewareArray.prototype)
35 }
36
37 static get [Symbol.species]() {
38 return MiddlewareArray as any
39 }
40
41 concat<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
42 items: AdditionalMiddlewares
43 ): MiddlewareArray<[...Middlewares, ...AdditionalMiddlewares]>
44
45 concat<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
46 ...items: AdditionalMiddlewares
47 ): MiddlewareArray<[...Middlewares, ...AdditionalMiddlewares]>
48 concat(...arr: any[]) {
49 return super.concat.apply(this, arr)
50 }
51
52 prepend<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
53 items: AdditionalMiddlewares
54 ): MiddlewareArray<[...AdditionalMiddlewares, ...Middlewares]>
55
56 prepend<AdditionalMiddlewares extends ReadonlyArray<Middleware<any, any>>>(
57 ...items: AdditionalMiddlewares
58 ): MiddlewareArray<[...AdditionalMiddlewares, ...Middlewares]>
59
60 prepend(...arr: any[]) {
61 if (arr.length === 1 && Array.isArray(arr[0])) {
62 return new MiddlewareArray(...arr[0].concat(this))
63 }
64 return new MiddlewareArray(...arr.concat(this))
65 }
66}
67
\No newline at end of file