diff --git a/package.json b/package.json index 03ebc5b..55cfe36 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,10 @@ "devDependencies": { "@lavamoat/allow-scripts": "^2.3.1", "@metamask/auto-changelog": "^3.1.0", - "@metamask/eslint-config": "^11.0.1", - "@metamask/eslint-config-jest": "^11.0.0", - "@metamask/eslint-config-nodejs": "^11.0.1", - "@metamask/eslint-config-typescript": "^11.0.0", + "@metamask/eslint-config": "^12.2.0", + "@metamask/eslint-config-jest": "^12.1.0", + "@metamask/eslint-config-nodejs": "^12.1.0", + "@metamask/eslint-config-typescript": "^12.1.0", "@types/jest": "^29.5.0", "@types/node": "^18.15.11", "@typescript-eslint/eslint-plugin": "^5.43.0", @@ -55,8 +55,9 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-jest": "^27.1.5", "eslint-plugin-jsdoc": "^39.6.2", - "eslint-plugin-node": "^11.1.0", + "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.1.1", "jest": "^29.5.0", "jest-it-up": "^2.2.0", "prettier": "^2.8.7", diff --git a/src/JsonRpcEngine.test.ts b/src/JsonRpcEngine.test.ts index 064041a..4f9682f 100644 --- a/src/JsonRpcEngine.test.ts +++ b/src/JsonRpcEngine.test.ts @@ -1,14 +1,14 @@ import { rpcErrors } from '@metamask/rpc-errors'; +import type { JsonRpcParams, Json } from '@metamask/utils'; import { assertIsJsonRpcSuccess, assertIsJsonRpcFailure, isJsonRpcFailure, isJsonRpcSuccess, - JsonRpcParams, - Json, } from '@metamask/utils'; -import { JsonRpcEngine, JsonRpcMiddleware } from '.'; +import type { JsonRpcMiddleware } from '.'; +import { JsonRpcEngine } from '.'; const jsonrpc = '2.0' as const; diff --git a/src/JsonRpcEngine.ts b/src/JsonRpcEngine.ts index a3d7b60..170d76d 100644 --- a/src/JsonRpcEngine.ts +++ b/src/JsonRpcEngine.ts @@ -1,16 +1,15 @@ import { errorCodes, JsonRpcError, serializeError } from '@metamask/rpc-errors'; import SafeEventEmitter from '@metamask/safe-event-emitter'; -import { - hasProperty, +import type { JsonRpcError as SerializedJsonRpcError, JsonRpcRequest, JsonRpcResponse, JsonRpcNotification, - isJsonRpcRequest, Json, JsonRpcParams, PendingJsonRpcResponse, } from '@metamask/utils'; +import { hasProperty, isJsonRpcRequest } from '@metamask/utils'; export type JsonRpcEngineCallbackError = Error | SerializedJsonRpcError | null; @@ -347,11 +346,11 @@ export class JsonRpcEngine extends SafeEventEmitter { // errors are unexpected and should be surfaced to the caller. if (error && res === undefined) { reject(error); + } else { + // Excepting notifications, there will always be a response, and it will + // always have any error that is caught and propagated. + resolve(res); } - - // Excepting notifications, there will always be a response, and it will - // always have any error that is caught and propagated. - resolve(res); }).catch(reject); }); } diff --git a/src/asMiddleware.test.ts b/src/asMiddleware.test.ts index adc76bd..14ba817 100644 --- a/src/asMiddleware.test.ts +++ b/src/asMiddleware.test.ts @@ -1,8 +1,5 @@ -import { - assertIsJsonRpcSuccess, - isJsonRpcSuccess, - JsonRpcRequest, -} from '@metamask/utils'; +import type { JsonRpcRequest } from '@metamask/utils'; +import { assertIsJsonRpcSuccess, isJsonRpcSuccess } from '@metamask/utils'; import { JsonRpcEngine } from '.'; diff --git a/src/createAsyncMiddleware.test.ts b/src/createAsyncMiddleware.test.ts index 087de22..1cd50f2 100644 --- a/src/createAsyncMiddleware.test.ts +++ b/src/createAsyncMiddleware.test.ts @@ -33,7 +33,8 @@ describe('createAsyncMiddleware', () => { engine.push( createAsyncMiddleware(async (_request, response, next) => { expect(response.result).toBeUndefined(); - await next(); // eslint-disable-line node/callback-return + // eslint-disable-next-line n/callback-return + await next(); expect(response.result).toBe(1234); // override value response.result = 42; // eslint-disable-line require-atomic-updates @@ -87,7 +88,8 @@ describe('createAsyncMiddleware', () => { engine.push( createAsyncMiddleware(async (_request, _response, next) => { - await next(); // eslint-disable-line node/callback-return + // eslint-disable-next-line n/callback-return + await next(); throw thrownError; }), ); diff --git a/src/createAsyncMiddleware.ts b/src/createAsyncMiddleware.ts index 1b90ac4..ebf1852 100644 --- a/src/createAsyncMiddleware.ts +++ b/src/createAsyncMiddleware.ts @@ -1,11 +1,11 @@ -import { +import type { Json, JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse, } from '@metamask/utils'; -import { JsonRpcMiddleware } from './JsonRpcEngine'; +import type { JsonRpcMiddleware } from './JsonRpcEngine'; export type AsyncJsonRpcEngineNextCallback = () => Promise; @@ -66,7 +66,6 @@ export function createAsyncMiddleware< // We pass a return handler to next(). When it is called by the engine, // the consumer's async middleware will resume executing. - // eslint-disable-next-line node/callback-return next((runReturnHandlersCallback) => { // This callback comes from JsonRpcEngine._runReturnHandlers returnHandlerCallback = runReturnHandlersCallback; diff --git a/src/createScaffoldMiddleware.test.ts b/src/createScaffoldMiddleware.test.ts index 5e1ef87..0900ec8 100644 --- a/src/createScaffoldMiddleware.test.ts +++ b/src/createScaffoldMiddleware.test.ts @@ -1,12 +1,12 @@ import { rpcErrors } from '@metamask/rpc-errors'; +import type { JsonRpcParams, Json } from '@metamask/utils'; import { assertIsJsonRpcSuccess, assertIsJsonRpcFailure, - JsonRpcParams, - Json, } from '@metamask/utils'; -import { JsonRpcEngine, createScaffoldMiddleware, JsonRpcMiddleware } from '.'; +import type { JsonRpcMiddleware } from '.'; +import { JsonRpcEngine, createScaffoldMiddleware } from '.'; describe('createScaffoldMiddleware', () => { it('basic middleware test', async () => { diff --git a/src/createScaffoldMiddleware.ts b/src/createScaffoldMiddleware.ts index 8d4b6fa..05a444a 100644 --- a/src/createScaffoldMiddleware.ts +++ b/src/createScaffoldMiddleware.ts @@ -1,6 +1,6 @@ -import { Json, JsonRpcParams, JsonRpcSuccess } from '@metamask/utils'; +import type { Json, JsonRpcParams, JsonRpcSuccess } from '@metamask/utils'; -import { JsonRpcMiddleware } from './JsonRpcEngine'; +import type { JsonRpcMiddleware } from './JsonRpcEngine'; type ScaffoldMiddlewareHandler< Params extends JsonRpcParams, diff --git a/src/idRemapMiddleware.ts b/src/idRemapMiddleware.ts index df2079c..ebf176f 100644 --- a/src/idRemapMiddleware.ts +++ b/src/idRemapMiddleware.ts @@ -1,7 +1,7 @@ -import { Json, JsonRpcParams } from '@metamask/utils'; +import type { Json, JsonRpcParams } from '@metamask/utils'; import { getUniqueId } from './getUniqueId'; -import { JsonRpcMiddleware } from './JsonRpcEngine'; +import type { JsonRpcMiddleware } from './JsonRpcEngine'; /** * Returns a middleware function that overwrites the `id` property of each diff --git a/src/mergeMiddleware.test.ts b/src/mergeMiddleware.test.ts index 1c5c49e..f868cc9 100644 --- a/src/mergeMiddleware.test.ts +++ b/src/mergeMiddleware.test.ts @@ -1,8 +1,5 @@ -import { - assertIsJsonRpcSuccess, - hasProperty, - JsonRpcRequest, -} from '@metamask/utils'; +import type { JsonRpcRequest } from '@metamask/utils'; +import { assertIsJsonRpcSuccess, hasProperty } from '@metamask/utils'; import { JsonRpcEngine, mergeMiddleware } from '.'; diff --git a/src/mergeMiddleware.ts b/src/mergeMiddleware.ts index 3d96a26..ba4efbe 100644 --- a/src/mergeMiddleware.ts +++ b/src/mergeMiddleware.ts @@ -1,6 +1,7 @@ -import { Json, JsonRpcParams } from '@metamask/utils'; +import type { Json, JsonRpcParams } from '@metamask/utils'; -import { JsonRpcEngine, JsonRpcMiddleware } from './JsonRpcEngine'; +import type { JsonRpcMiddleware } from './JsonRpcEngine'; +import { JsonRpcEngine } from './JsonRpcEngine'; /** * Takes a stack of middleware and joins them into a single middleware function. diff --git a/yarn.lock b/yarn.lock index 308ae5e..11613dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -935,52 +935,53 @@ __metadata: languageName: node linkType: hard -"@metamask/eslint-config-jest@npm:^11.0.0": - version: 11.1.0 - resolution: "@metamask/eslint-config-jest@npm:11.1.0" +"@metamask/eslint-config-jest@npm:^12.1.0": + version: 12.1.0 + resolution: "@metamask/eslint-config-jest@npm:12.1.0" peerDependencies: - "@metamask/eslint-config": ^11.0.0 + "@metamask/eslint-config": ^12.0.0 eslint: ^8.27.0 eslint-plugin-jest: ^27.1.5 - checksum: a649cf317327532d0d18795ac3bc74766e649e821ca3130dac288b16d5243ae72b5bda4eb85c678f1b4f9c073904ac6162b740c237b67921e64ce4f40c6ceb77 + checksum: 98f60234412051d429237dbf32b147a648a0e3b6adacafda24999ec9eb8096155c8000c62204415100c97980cc3bfe0a0fe19e4c318b8bb529eaf57e9f96e680 languageName: node linkType: hard -"@metamask/eslint-config-nodejs@npm:^11.0.1": - version: 11.1.0 - resolution: "@metamask/eslint-config-nodejs@npm:11.1.0" +"@metamask/eslint-config-nodejs@npm:^12.1.0": + version: 12.1.0 + resolution: "@metamask/eslint-config-nodejs@npm:12.1.0" peerDependencies: - "@metamask/eslint-config": ^11.0.0 + "@metamask/eslint-config": ^12.0.0 eslint: ^8.27.0 - eslint-plugin-node: ^11.1.0 - checksum: f672fc4a3269c55ec6189caf4fe1a4d94f375ebd4c72d479530bc561d6afc642999b055ff795398f6ad77e9e7f217baa44499699f3301e149ace316dc3cba861 + eslint-plugin-n: ^15.7.0 + checksum: f4387ba5b0a5173197b960dc59b8e29b7ef02754107b61c3af98f505397048717bd8ba5f9d09555740886c968fc0898520c26899268886f1967bc80f93c26919 languageName: node linkType: hard -"@metamask/eslint-config-typescript@npm:^11.0.0": - version: 11.1.0 - resolution: "@metamask/eslint-config-typescript@npm:11.1.0" +"@metamask/eslint-config-typescript@npm:^12.1.0": + version: 12.1.0 + resolution: "@metamask/eslint-config-typescript@npm:12.1.0" peerDependencies: - "@metamask/eslint-config": ^11.0.0 + "@metamask/eslint-config": ^12.0.0 "@typescript-eslint/eslint-plugin": ^5.42.1 "@typescript-eslint/parser": ^5.42.1 eslint: ^8.27.0 - typescript: ~4.8.4 - checksum: 86f20303730fce7a2d6944d133e3d4cf745816bdc202fd17ebd341e4937777c662e80b3c1496a8da7d5e06e39518dec3206c4a4e872d9491f423e792bcdf56db + typescript: ~4.8.4 || ~5.0 || ~5.1 + checksum: a854574e4c2ca7b036d0a2a454aecb93ba538d1b92c1615878dfe06a14972df6af2fcdd5e2911ef369b3b2eeb04b8c6879bd037c618a35f6cb98950cdab84d50 languageName: node linkType: hard -"@metamask/eslint-config@npm:^11.0.1": - version: 11.1.0 - resolution: "@metamask/eslint-config@npm:11.1.0" +"@metamask/eslint-config@npm:^12.2.0": + version: 12.2.0 + resolution: "@metamask/eslint-config@npm:12.2.0" peerDependencies: eslint: ^8.27.0 eslint-config-prettier: ^8.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-jsdoc: ^39.6.2 + eslint-plugin-import: ~2.26.0 + eslint-plugin-jsdoc: ^39.6.2 || ^41 || ^43.0.7 eslint-plugin-prettier: ^4.2.1 + eslint-plugin-promise: ^6.1.1 prettier: ^2.7.1 - checksum: 2345eb03821d80d605d60c393a3249b322ae32cee87497b338d81cc723d28d87d44adec92ba657fdc83e7df8599ec9eed06f1ad78f0febd13c318fb5a5ba2a7a + checksum: dfd913a712a81db528c662dc2d2d97edf8c34b2053b77c7060f9c117a4f9057d66f2fc87634b5d8860c9ab22c690ad79f40d399bda1e1b9863b0f4d198592a09 languageName: node linkType: hard @@ -990,10 +991,10 @@ __metadata: dependencies: "@lavamoat/allow-scripts": ^2.3.1 "@metamask/auto-changelog": ^3.1.0 - "@metamask/eslint-config": ^11.0.1 - "@metamask/eslint-config-jest": ^11.0.0 - "@metamask/eslint-config-nodejs": ^11.0.1 - "@metamask/eslint-config-typescript": ^11.0.0 + "@metamask/eslint-config": ^12.2.0 + "@metamask/eslint-config-jest": ^12.1.0 + "@metamask/eslint-config-nodejs": ^12.1.0 + "@metamask/eslint-config-typescript": ^12.1.0 "@metamask/rpc-errors": ^6.0.0 "@metamask/safe-event-emitter": ^3.0.0 "@metamask/utils": ^8.1.0 @@ -1007,8 +1008,9 @@ __metadata: eslint-plugin-import: ^2.26.0 eslint-plugin-jest: ^27.1.5 eslint-plugin-jsdoc: ^39.6.2 - eslint-plugin-node: ^11.1.0 + eslint-plugin-n: ^15.7.0 eslint-plugin-prettier: ^4.2.1 + eslint-plugin-promise: ^6.1.1 jest: ^29.5.0 jest-it-up: ^2.2.0 prettier: ^2.8.7 @@ -2040,6 +2042,15 @@ __metadata: languageName: node linkType: hard +"builtins@npm:^5.0.1": + version: 5.0.1 + resolution: "builtins@npm:5.0.1" + dependencies: + semver: ^7.0.0 + checksum: 66d204657fe36522822a95b288943ad11b58f5eaede235b11d8c4edaa28ce4800087d44a2681524c340494aadb120a0068011acabe99d30e8f11a7d826d83515 + languageName: node + linkType: hard + "cacache@npm:^16.1.0": version: 16.1.3 resolution: "cacache@npm:16.1.3" @@ -2731,15 +2742,15 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-es@npm:^3.0.0": - version: 3.0.1 - resolution: "eslint-plugin-es@npm:3.0.1" +"eslint-plugin-es@npm:^4.1.0": + version: 4.1.0 + resolution: "eslint-plugin-es@npm:4.1.0" dependencies: eslint-utils: ^2.0.0 regexpp: ^3.0.0 peerDependencies: eslint: ">=4.19.1" - checksum: e57592c52301ee8ddc296ae44216df007f3a870bcb3be8d1fbdb909a1d3a3efe3fa3785de02066f9eba1d6466b722d3eb3cc3f8b75b3cf6a1cbded31ac6298e4 + checksum: 26b87a216d3625612b1d3ca8653ac8a1d261046d2a973bb0eb2759070267d2bfb0509051facdeb5ae03dc8dfb51a434be23aff7309a752ca901d637da535677f languageName: node linkType: hard @@ -2802,19 +2813,21 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-node@npm:^11.1.0": - version: 11.1.0 - resolution: "eslint-plugin-node@npm:11.1.0" +"eslint-plugin-n@npm:^15.7.0": + version: 15.7.0 + resolution: "eslint-plugin-n@npm:15.7.0" dependencies: - eslint-plugin-es: ^3.0.0 - eslint-utils: ^2.0.0 + builtins: ^5.0.1 + eslint-plugin-es: ^4.1.0 + eslint-utils: ^3.0.0 ignore: ^5.1.1 - minimatch: ^3.0.4 - resolve: ^1.10.1 - semver: ^6.1.0 + is-core-module: ^2.11.0 + minimatch: ^3.1.2 + resolve: ^1.22.1 + semver: ^7.3.8 peerDependencies: - eslint: ">=5.16.0" - checksum: 5804c4f8a6e721f183ef31d46fbe3b4e1265832f352810060e0502aeac7de034df83352fc88643b19641bb2163f2587f1bd4119aff0fd21e8d98c57c450e013b + eslint: ">=7.0.0" + checksum: cfbcc67e62adf27712afdeadf13223cb9717f95d4af8442056d9d4c97a8b88af76b7969f75deaac26fa98481023d6b7c9e43a28909e7f0468f40b3024b7bcfae languageName: node linkType: hard @@ -2833,6 +2846,15 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-promise@npm:^6.1.1": + version: 6.1.1 + resolution: "eslint-plugin-promise@npm:6.1.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 46b9a4f79dae5539987922afc27cc17cbccdecf4f0ba19c0ccbf911b0e31853e9f39d9959eefb9637461b52772afa1a482f1f87ff16c1ba38bdb6fcf21897e9a + languageName: node + linkType: hard + "eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -2862,6 +2884,17 @@ __metadata: languageName: node linkType: hard +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^1.1.0": version: 1.1.0 resolution: "eslint-visitor-keys@npm:1.1.0" @@ -2869,6 +2902,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.0": version: 3.4.0 resolution: "eslint-visitor-keys@npm:3.4.0" @@ -5488,7 +5528,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.1, resolve@npm:^1.18.1, resolve@npm:^1.20.0, resolve@npm:^1.22.1": +"resolve@npm:^1.18.1, resolve@npm:^1.20.0, resolve@npm:^1.22.1": version: 1.22.2 resolution: "resolve@npm:1.22.2" dependencies: @@ -5501,7 +5541,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.1#~builtin, resolve@patch:resolve@^1.18.1#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": +"resolve@patch:resolve@^1.18.1#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": version: 1.22.2 resolution: "resolve@patch:resolve@npm%3A1.22.2#~builtin::version=1.22.2&hash=c3c19d" dependencies: @@ -5626,7 +5666,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4": +"semver@npm:7.x, semver@npm:^7.0.0, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -5637,7 +5677,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.3.0": +"semver@npm:^6.0.0, semver@npm:^6.3.0": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: