Skip to content

Commit 5441a81

Browse files
committed
refactor: Tweak asV2Middleware signatures
1 parent 3837098 commit 5441a81

File tree

3 files changed

+16
-51
lines changed

3 files changed

+16
-51
lines changed

packages/json-rpc-engine/src/README.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,10 @@ const middleware2 = (req, res, next, end) => {
6565
const v2Engine2 = JsonRpcEngineV2.create({
6666
middleware: [asV2Middleware(middleware1, middleware2)],
6767
});
68-
69-
// Or pass an array of legacy middlewares
70-
const v2Engine3 = JsonRpcEngineV2.create({
71-
middleware: [asV2Middleware([middleware1, middleware2])],
72-
});
7368
```
7469

70+
#### Context propagation
71+
7572
Non-JSON-RPC string properties on the request object will be copied over to the V2 engine's `context` object
7673
once the legacy engine is done with the request, _unless_ they already exist on the `context`, in which case
7774
they will be ignored.

packages/json-rpc-engine/src/asV2Middleware.test.ts

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -156,28 +156,6 @@ describe('asV2Middleware', () => {
156156
expect(middleware2).toHaveBeenCalledTimes(1);
157157
});
158158

159-
it('accepts an array of legacy middlewares', async () => {
160-
const middleware1 = jest.fn((req, _res, next) => {
161-
req.visited1 = true;
162-
next();
163-
});
164-
165-
const middleware2 = jest.fn((req, res, _next, end) => {
166-
expect(req.visited1).toBe(true);
167-
res.result = 'array-result';
168-
end();
169-
});
170-
171-
const v2Engine = JsonRpcEngineV2.create({
172-
middleware: [asV2Middleware([middleware1, middleware2])],
173-
});
174-
175-
const result = await v2Engine.handle(makeRequest());
176-
expect(result).toBe('array-result');
177-
expect(middleware1).toHaveBeenCalledTimes(1);
178-
expect(middleware2).toHaveBeenCalledTimes(1);
179-
});
180-
181159
it('forwards errors from legacy middleware', async () => {
182160
const legacyMiddleware = jest.fn((_req, res, _next, end) => {
183161
res.error = rpcErrors.internal('legacy-error');

packages/json-rpc-engine/src/asV2Middleware.ts

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ import {
1010
import type {
1111
JsonRpcEngineEndCallback,
1212
JsonRpcEngineNextCallback,
13-
} from './JsonRpcEngine';
14-
import {
1513
JsonRpcEngine,
16-
type JsonRpcMiddleware as LegacyMiddleware,
1714
} from './JsonRpcEngine';
15+
import { type JsonRpcMiddleware as LegacyMiddleware } from './JsonRpcEngine';
1816
import { mergeMiddleware } from './mergeMiddleware';
1917
import {
2018
deepClone,
@@ -32,57 +30,49 @@ import type {
3230
} from './v2/JsonRpcEngineV2';
3331

3432
/**
35-
* Convert a legacy {@link JsonRpcEngine} or an array of legacy middlewares into a {@link JsonRpcEngineV2} middleware.
33+
* Convert a legacy {@link JsonRpcEngine} into a {@link JsonRpcEngineV2} middleware.
3634
*
37-
* @param engineOrMiddlewares - The legacy engine or array of legacy middlewares to convert.
35+
* @param engine - The legacy engine to convert.
3836
* @returns The {@link JsonRpcEngineV2} middleware.
3937
*/
4038
export function asV2Middleware<
4139
Params extends JsonRpcParams,
4240
Request extends JsonRpcRequest<Params>,
43-
>(
44-
engineOrMiddlewares: JsonRpcEngine | LegacyMiddleware<JsonRpcParams, Json>[],
45-
): JsonRpcMiddleware<Request>;
41+
>(engine: JsonRpcEngine): JsonRpcMiddleware<Request>;
4642

4743
/**
48-
* Convert one or more legacy middlewares into a {@link JsonRpcEngineV2} middleware.
44+
* Convert one or more legacy middleware into a {@link JsonRpcEngineV2} middleware.
4945
*
50-
* @param middlewares - The legacy middleware(s) to convert.
46+
* @param middleware - The legacy middleware(s) to convert.
5147
* @returns The {@link JsonRpcEngineV2} middleware.
5248
*/
5349
export function asV2Middleware<
5450
Params extends JsonRpcParams,
5551
Request extends JsonRpcRequest<Params>,
5652
>(
57-
...middlewares: LegacyMiddleware<JsonRpcParams, Json>[]
53+
...middleware: LegacyMiddleware<JsonRpcParams, Json>[]
5854
): JsonRpcMiddleware<Request>;
5955

6056
/**
6157
* Implementation of asV2Middleware that handles all input types.
6258
*
63-
* @param engineOrMiddleware - A legacy engine, a single legacy middleware, or an array of legacy middlewares.
64-
* @param rest - Additional legacy middlewares when the first argument is a single middleware.
59+
* @param engineOrMiddleware - A legacy engine, a single legacy middleware, or an array of legacy middleware.
60+
* @param rest - Additional legacy middleware when the first argument is a single middleware.
6561
* @returns The {@link JsonRpcEngineV2} middleware.
6662
*/
6763
export function asV2Middleware<
6864
Params extends JsonRpcParams,
6965
Request extends JsonRpcRequest<Params>,
7066
>(
71-
engineOrMiddleware:
72-
| JsonRpcEngine
73-
| LegacyMiddleware<JsonRpcParams, Json>
74-
| LegacyMiddleware<JsonRpcParams, Json>[],
67+
engineOrMiddleware: JsonRpcEngine | LegacyMiddleware<JsonRpcParams, Json>,
7568
...rest: LegacyMiddleware<JsonRpcParams, Json>[]
7669
): JsonRpcMiddleware<Request> {
7770
// Determine the legacy middleware function from input(s)
7871
const middleware =
79-
engineOrMiddleware instanceof JsonRpcEngine
80-
? engineOrMiddleware.asMiddleware()
81-
: mergeMiddleware(
82-
Array.isArray(engineOrMiddleware)
83-
? engineOrMiddleware
84-
: [engineOrMiddleware, ...rest],
85-
);
72+
typeof engineOrMiddleware === 'function'
73+
? mergeMiddleware([engineOrMiddleware, ...rest])
74+
: engineOrMiddleware.asMiddleware();
75+
8676
return async ({ request, context, next }) => {
8777
const req = deepClone(request) as JsonRpcRequest<Params>;
8878
propagateToRequest(req, context);

0 commit comments

Comments
 (0)