1 | import type { 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[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 |