1 | import { Middleware } from 'redux'
|
2 |
|
3 | export 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.
|
18 | If 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:
|
19 | It is disabled in production builds, so you don't need to worry about that.`)
|
20 | }
|
21 | }
|
22 | }
|
23 | }
|
24 |
|
25 | /**
|
26 | * @public
|
27 | */
|
28 | export 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 |