diff --git a/.yarn/patches/@metamask-utils-npm-8.0.0-7a3c3a899a.patch b/.yarn/patches/@metamask-utils-npm-8.0.0-7a3c3a899a.patch new file mode 100644 index 0000000..a53146f --- /dev/null +++ b/.yarn/patches/@metamask-utils-npm-8.0.0-7a3c3a899a.patch @@ -0,0 +1,140 @@ +diff --git a/dist/cjs/json.js b/dist/cjs/json.js +index 17e5663cd237a88fcdb3728a16b5b1219113babe..7a47b0a49641f8b514def34cd1abb11f793761a9 100644 +--- a/dist/cjs/json.js ++++ b/dist/cjs/json.js +@@ -159,19 +159,21 @@ const JsonRpcErrorStruct = (0, _superstruct.object)({ + data: (0, _superstruct.optional)(JsonStruct), + stack: (0, _superstruct.optional)((0, _superstruct.string)()) + }); +-const JsonRpcParamsStruct = (0, _superstruct.optional)((0, _superstruct.union)([ ++const JsonRpcParamsStruct = (0, _superstruct.union)([ + (0, _superstruct.record)((0, _superstruct.string)(), JsonStruct), + (0, _superstruct.array)(JsonStruct) +-])); ++]); + const JsonRpcRequestStruct = (0, _superstruct.object)({ + id: JsonRpcIdStruct, + jsonrpc: JsonRpcVersionStruct, + method: (0, _superstruct.string)(), + params: JsonRpcParamsStruct + }); +-const JsonRpcNotificationStruct = (0, _superstruct.omit)(JsonRpcRequestStruct, [ +- 'id' +-]); ++const JsonRpcNotificationStruct = (0, _superstruct.object)({ ++ jsonrpc: JsonRpcVersionStruct, ++ method: (0, _superstruct.string)(), ++ params: JsonRpcParamsStruct ++}); + function isJsonRpcNotification(value) { + return (0, _superstruct.is)(value, JsonRpcNotificationStruct); + } +diff --git a/dist/cjs/json.js.map b/dist/cjs/json.js.map +index 26bea6e257cc0f2d36ca93f5652254ed85d8720f..a041487cdcaa4066e7dd962436883aacac0f1082 100644 +--- a/dist/cjs/json.js.map ++++ b/dist/cjs/json.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["../../src/json.ts"],"sourcesContent":["import type { Infer, Struct } from 'superstruct';\nimport {\n any,\n array,\n boolean,\n coerce,\n create,\n define,\n integer,\n is,\n lazy,\n literal,\n nullable,\n number,\n object,\n omit,\n optional,\n record,\n string,\n union,\n unknown,\n} from 'superstruct';\n\nimport type { AssertionErrorConstructor } from './assert';\nimport { assertStruct } from './assert';\n\n/**\n * Any JSON-compatible value.\n */\nexport type Json =\n | null\n | boolean\n | number\n | string\n | Json[]\n | { [prop: string]: Json };\n\n/**\n * A struct to check if the given value is finite number. Superstruct's\n * `number()` struct does not check if the value is finite.\n *\n * @returns A struct to check if the given value is finite number.\n */\nconst finiteNumber = () =>\n define('finite number', (value) => {\n return is(value, number()) && Number.isFinite(value);\n });\n\n/**\n * A struct to check if the given value is a valid JSON-serializable value.\n *\n * Note that this struct is unsafe. For safe validation, use {@link JsonStruct}.\n */\n// We cannot infer the type of the struct, because it is recursive.\nexport const UnsafeJsonStruct: Struct = union([\n literal(null),\n boolean(),\n finiteNumber(),\n string(),\n array(lazy(() => UnsafeJsonStruct)),\n record(\n string(),\n lazy(() => UnsafeJsonStruct),\n ),\n]);\n\n/**\n * A struct to check if the given value is a valid JSON-serializable value.\n *\n * This struct sanitizes the value before validating it, so that it is safe to\n * use with untrusted input.\n */\nexport const JsonStruct = coerce(UnsafeJsonStruct, any(), (value) => {\n assertStruct(value, UnsafeJsonStruct);\n return JSON.parse(\n JSON.stringify(value, (propKey, propValue) => {\n // Strip __proto__ and constructor properties to prevent prototype pollution.\n if (propKey === '__proto__' || propKey === 'constructor') {\n return undefined;\n }\n return propValue;\n }),\n );\n});\n\n/**\n * Check if the given value is a valid {@link Json} value, i.e., a value that is\n * serializable to JSON.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link Json} value.\n */\nexport function isValidJson(value: unknown): value is Json {\n try {\n getSafeJson(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate and return sanitized JSON.\n *\n * Note:\n * This function uses sanitized JsonStruct for validation\n * that applies stringify and then parse of a value provided\n * to ensure that there are no getters which can have side effects\n * that can cause security issues.\n *\n * @param value - JSON structure to be processed.\n * @returns Sanitized JSON structure.\n */\nexport function getSafeJson(value: unknown): Type {\n return create(value, JsonStruct) as Type;\n}\n\n/**\n * Get the size of a JSON value in bytes. This also validates the value.\n *\n * @param value - The JSON value to get the size of.\n * @returns The size of the JSON value in bytes.\n */\nexport function getJsonSize(value: unknown): number {\n assertStruct(value, JsonStruct, 'Invalid JSON value');\n\n const json = JSON.stringify(value);\n return new TextEncoder().encode(json).byteLength;\n}\n\n/**\n * The string '2.0'.\n */\nexport const jsonrpc2 = '2.0' as const;\nexport const JsonRpcVersionStruct = literal(jsonrpc2);\n\n/**\n * A String specifying the version of the JSON-RPC protocol.\n * MUST be exactly \"2.0\".\n */\nexport type JsonRpcVersion2 = typeof jsonrpc2;\n\nexport const JsonRpcIdStruct = nullable(union([number(), string()]));\n\n/**\n * An identifier established by the Client that MUST contain a String, Number,\n * or NULL value if included. If it is not included it is assumed to be a\n * notification. The value SHOULD normally not be Null and Numbers SHOULD\n * NOT contain fractional parts.\n */\nexport type JsonRpcId = Infer;\n\nexport const JsonRpcErrorStruct = object({\n code: integer(),\n message: string(),\n data: optional(JsonStruct),\n stack: optional(string()),\n});\n\n/**\n * Mark a certain key of a type as optional.\n */\nexport type OptionalField<\n Type extends Record,\n Key extends keyof Type,\n> = Omit & Partial>;\n\n/**\n * A JSON-RPC error object.\n *\n * Note that TypeScript infers `unknown | undefined` as `unknown`, meaning that\n * the `data` field is not optional. To make it optional, we use the\n * `OptionalField` helper, to explicitly make it optional.\n */\nexport type JsonRpcError = OptionalField<\n Infer,\n 'data'\n>;\n\nexport const JsonRpcParamsStruct: Struct, null> =\n optional(union([record(string(), JsonStruct), array(JsonStruct)])) as any;\n\nexport type JsonRpcParams = Json[] | Record;\n\nexport const JsonRpcRequestStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n method: string(),\n params: JsonRpcParamsStruct,\n});\n\nexport type InferWithParams<\n Type extends Struct,\n Params extends JsonRpcParams,\n> = Omit, 'params'> &\n (keyof Params extends undefined\n ? {\n params?: Params;\n }\n : {\n params: Params;\n });\n\n/**\n * A JSON-RPC request object.\n */\nexport type JsonRpcRequest =\n InferWithParams;\n\nexport const JsonRpcNotificationStruct = omit(JsonRpcRequestStruct, ['id']);\n\n/**\n * A JSON-RPC notification object.\n */\nexport type JsonRpcNotification =\n InferWithParams;\n\n/**\n * Check if the given value is a valid {@link JsonRpcNotification} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcNotification}\n * object.\n */\nexport function isJsonRpcNotification(\n value: unknown,\n): value is JsonRpcNotification {\n return is(value, JsonRpcNotificationStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcNotification} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcNotification} object.\n */\nexport function assertIsJsonRpcNotification(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcNotification {\n assertStruct(\n value,\n JsonRpcNotificationStruct,\n 'Invalid JSON-RPC notification',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcRequest} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcRequest} object.\n */\nexport function isJsonRpcRequest(value: unknown): value is JsonRpcRequest {\n return is(value, JsonRpcRequestStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcRequest} object.\n *\n * @param value - The JSON-RPC request or notification to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcRequest} object.\n */\nexport function assertIsJsonRpcRequest(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcRequest {\n assertStruct(\n value,\n JsonRpcRequestStruct,\n 'Invalid JSON-RPC request',\n ErrorWrapper,\n );\n}\n\nexport const PendingJsonRpcResponseStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n result: optional(unknown()),\n error: optional(JsonRpcErrorStruct),\n});\n\n/**\n * A JSON-RPC response object that has not yet been resolved.\n */\nexport type PendingJsonRpcResponse = Omit<\n Infer,\n 'result'\n> & {\n result?: Result;\n};\n\nexport const JsonRpcSuccessStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n result: JsonStruct,\n});\n\n/**\n * A successful JSON-RPC response object.\n */\nexport type JsonRpcSuccess = Omit<\n Infer,\n 'result'\n> & {\n result: Result;\n};\n\nexport const JsonRpcFailureStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n error: JsonRpcErrorStruct as Struct,\n});\n\n/**\n * A failed JSON-RPC response object.\n */\nexport type JsonRpcFailure = Infer;\n\nexport const JsonRpcResponseStruct = union([\n JsonRpcSuccessStruct,\n JsonRpcFailureStruct,\n]);\n\n/**\n * A JSON-RPC response object. Must be checked to determine whether it's a\n * success or failure.\n *\n * @template Result - The type of the result.\n */\nexport type JsonRpcResponse =\n | JsonRpcSuccess\n | JsonRpcFailure;\n\n/**\n * Type guard to check whether specified JSON-RPC response is a\n * {@link PendingJsonRpcResponse}.\n *\n * @param response - The JSON-RPC response to check.\n * @returns Whether the specified JSON-RPC response is pending.\n */\nexport function isPendingJsonRpcResponse(\n response: unknown,\n): response is PendingJsonRpcResponse {\n return is(response, PendingJsonRpcResponseStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link PendingJsonRpcResponse} object.\n *\n * @param response - The JSON-RPC response to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link PendingJsonRpcResponse}\n * object.\n */\nexport function assertIsPendingJsonRpcResponse(\n response: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts response is PendingJsonRpcResponse {\n assertStruct(\n response,\n PendingJsonRpcResponseStruct,\n 'Invalid pending JSON-RPC response',\n ErrorWrapper,\n );\n}\n\n/**\n * Type guard to check if a value is a {@link JsonRpcResponse}.\n *\n * @param response - The object to check.\n * @returns Whether the object is a JsonRpcResponse.\n */\nexport function isJsonRpcResponse(\n response: unknown,\n): response is JsonRpcResponse {\n return is(response, JsonRpcResponseStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcResponse} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcResponse} object.\n */\nexport function assertIsJsonRpcResponse(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcResponse {\n assertStruct(\n value,\n JsonRpcResponseStruct,\n 'Invalid JSON-RPC response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcSuccess} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcSuccess} object.\n */\nexport function isJsonRpcSuccess(\n value: unknown,\n): value is JsonRpcSuccess {\n return is(value, JsonRpcSuccessStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcSuccess} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcSuccess} object.\n */\nexport function assertIsJsonRpcSuccess(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcSuccess {\n assertStruct(\n value,\n JsonRpcSuccessStruct,\n 'Invalid JSON-RPC success response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcFailure} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcFailure} object.\n */\nexport function isJsonRpcFailure(value: unknown): value is JsonRpcFailure {\n return is(value, JsonRpcFailureStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcFailure} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcFailure} object.\n */\nexport function assertIsJsonRpcFailure(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcFailure {\n assertStruct(\n value,\n JsonRpcFailureStruct,\n 'Invalid JSON-RPC failure response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcError} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcError} object.\n */\nexport function isJsonRpcError(value: unknown): value is JsonRpcError {\n return is(value, JsonRpcErrorStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcError} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcError} object.\n */\nexport function assertIsJsonRpcError(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcError {\n assertStruct(\n value,\n JsonRpcErrorStruct,\n 'Invalid JSON-RPC error',\n ErrorWrapper,\n );\n}\n\ntype JsonRpcValidatorOptions = {\n permitEmptyString?: boolean;\n permitFractions?: boolean;\n permitNull?: boolean;\n};\n\n/**\n * Gets a function for validating JSON-RPC request / response `id` values.\n *\n * By manipulating the options of this factory, you can control the behavior\n * of the resulting validator for some edge cases. This is useful because e.g.\n * `null` should sometimes but not always be permitted.\n *\n * Note that the empty string (`''`) is always permitted by the JSON-RPC\n * specification, but that kind of sucks and you may want to forbid it in some\n * instances anyway.\n *\n * For more details, see the\n * [JSON-RPC Specification](https://www.jsonrpc.org/specification).\n *\n * @param options - An options object.\n * @param options.permitEmptyString - Whether the empty string (i.e. `''`)\n * should be treated as a valid ID. Default: `true`\n * @param options.permitFractions - Whether fractional numbers (e.g. `1.2`)\n * should be treated as valid IDs. Default: `false`\n * @param options.permitNull - Whether `null` should be treated as a valid ID.\n * Default: `true`\n * @returns The JSON-RPC ID validator function.\n */\nexport function getJsonRpcIdValidator(options?: JsonRpcValidatorOptions) {\n const { permitEmptyString, permitFractions, permitNull } = {\n permitEmptyString: true,\n permitFractions: false,\n permitNull: true,\n ...options,\n };\n\n /**\n * Type guard for {@link JsonRpcId}.\n *\n * @param id - The JSON-RPC ID value to check.\n * @returns Whether the given ID is valid per the options given to the\n * factory.\n */\n const isValidJsonRpcId = (id: unknown): id is JsonRpcId => {\n return Boolean(\n (typeof id === 'number' && (permitFractions || Number.isInteger(id))) ||\n (typeof id === 'string' && (permitEmptyString || id.length > 0)) ||\n (permitNull && id === null),\n );\n };\n\n return isValidJsonRpcId;\n}\n"],"names":["UnsafeJsonStruct","JsonStruct","isValidJson","getSafeJson","getJsonSize","jsonrpc2","JsonRpcVersionStruct","JsonRpcIdStruct","JsonRpcErrorStruct","JsonRpcParamsStruct","JsonRpcRequestStruct","JsonRpcNotificationStruct","isJsonRpcNotification","assertIsJsonRpcNotification","isJsonRpcRequest","assertIsJsonRpcRequest","PendingJsonRpcResponseStruct","JsonRpcSuccessStruct","JsonRpcFailureStruct","JsonRpcResponseStruct","isPendingJsonRpcResponse","assertIsPendingJsonRpcResponse","isJsonRpcResponse","assertIsJsonRpcResponse","isJsonRpcSuccess","assertIsJsonRpcSuccess","isJsonRpcFailure","assertIsJsonRpcFailure","isJsonRpcError","assertIsJsonRpcError","getJsonRpcIdValidator","finiteNumber","define","value","is","number","Number","isFinite","union","literal","boolean","string","array","lazy","record","coerce","any","assertStruct","JSON","parse","stringify","propKey","propValue","undefined","create","json","TextEncoder","encode","byteLength","nullable","object","code","integer","message","data","optional","stack","id","jsonrpc","method","params","omit","ErrorWrapper","result","unknown","error","response","options","permitEmptyString","permitFractions","permitNull","isValidJsonRpcId","Boolean","isInteger","length"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"sources":["../../src/json.ts"],"sourcesContent":["import type { Infer, Struct } from 'superstruct';\nimport {\n any,\n array,\n boolean,\n coerce,\n create,\n define,\n integer,\n is,\n lazy,\n literal,\n nullable,\n number,\n object,\n optional,\n record,\n string,\n union,\n unknown,\n} from 'superstruct';\n\nimport type { AssertionErrorConstructor } from './assert';\nimport { assertStruct } from './assert';\n\n/**\n * Any JSON-compatible value.\n */\nexport type Json =\n | null\n | boolean\n | number\n | string\n | Json[]\n | { [prop: string]: Json };\n\n/**\n * A struct to check if the given value is finite number. Superstruct's\n * `number()` struct does not check if the value is finite.\n *\n * @returns A struct to check if the given value is finite number.\n */\nconst finiteNumber = () =>\n define('finite number', (value) => {\n return is(value, number()) && Number.isFinite(value);\n });\n\n/**\n * A struct to check if the given value is a valid JSON-serializable value.\n *\n * Note that this struct is unsafe. For safe validation, use {@link JsonStruct}.\n */\n// We cannot infer the type of the struct, because it is recursive.\nexport const UnsafeJsonStruct: Struct = union([\n literal(null),\n boolean(),\n finiteNumber(),\n string(),\n array(lazy(() => UnsafeJsonStruct)),\n record(\n string(),\n lazy(() => UnsafeJsonStruct),\n ),\n]);\n\n/**\n * A struct to check if the given value is a valid JSON-serializable value.\n *\n * This struct sanitizes the value before validating it, so that it is safe to\n * use with untrusted input.\n */\nexport const JsonStruct = coerce(UnsafeJsonStruct, any(), (value) => {\n assertStruct(value, UnsafeJsonStruct);\n return JSON.parse(\n JSON.stringify(value, (propKey, propValue) => {\n // Strip __proto__ and constructor properties to prevent prototype pollution.\n if (propKey === '__proto__' || propKey === 'constructor') {\n return undefined;\n }\n return propValue;\n }),\n );\n});\n\n/**\n * Check if the given value is a valid {@link Json} value, i.e., a value that is\n * serializable to JSON.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link Json} value.\n */\nexport function isValidJson(value: unknown): value is Json {\n try {\n getSafeJson(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate and return sanitized JSON.\n *\n * Note:\n * This function uses sanitized JsonStruct for validation\n * that applies stringify and then parse of a value provided\n * to ensure that there are no getters which can have side effects\n * that can cause security issues.\n *\n * @param value - JSON structure to be processed.\n * @returns Sanitized JSON structure.\n */\nexport function getSafeJson(value: unknown): Type {\n return create(value, JsonStruct) as Type;\n}\n\n/**\n * Get the size of a JSON value in bytes. This also validates the value.\n *\n * @param value - The JSON value to get the size of.\n * @returns The size of the JSON value in bytes.\n */\nexport function getJsonSize(value: unknown): number {\n assertStruct(value, JsonStruct, 'Invalid JSON value');\n\n const json = JSON.stringify(value);\n return new TextEncoder().encode(json).byteLength;\n}\n\n/**\n * The string '2.0'.\n */\nexport const jsonrpc2 = '2.0' as const;\nexport const JsonRpcVersionStruct = literal(jsonrpc2);\n\n/**\n * A String specifying the version of the JSON-RPC protocol.\n * MUST be exactly \"2.0\".\n */\nexport type JsonRpcVersion2 = typeof jsonrpc2;\n\nexport const JsonRpcIdStruct = nullable(union([number(), string()]));\n\n/**\n * An identifier established by the Client that MUST contain a String, Number,\n * or NULL value if included. If it is not included it is assumed to be a\n * notification. The value SHOULD normally not be Null and Numbers SHOULD\n * NOT contain fractional parts.\n */\nexport type JsonRpcId = Infer;\n\nexport const JsonRpcErrorStruct = object({\n code: integer(),\n message: string(),\n data: optional(JsonStruct),\n stack: optional(string()),\n});\n\n/**\n * Mark a certain key of a type as optional.\n */\nexport type OptionalField<\n Type extends Record,\n Key extends keyof Type,\n> = Omit & Partial>;\n\n/**\n * A JSON-RPC error object.\n *\n * Note that TypeScript infers `unknown | undefined` as `unknown`, meaning that\n * the `data` field is not optional. To make it optional, we use the\n * `OptionalField` helper, to explicitly make it optional.\n */\nexport type JsonRpcError = OptionalField<\n Infer,\n 'data'\n>;\n\nexport const JsonRpcParamsStruct: Struct, null> =\n union([record(string(), JsonStruct), array(JsonStruct)]);\n\nexport type JsonRpcParams = Json[] | Record;\n\nexport const JsonRpcRequestStruct: Struct<\n {\n id: string | number | null;\n jsonrpc: '2.0';\n method: string;\n params?: Json[] | Record;\n },\n {\n id: Struct;\n jsonrpc: Struct<'2.0', '2.0'>;\n method: Struct;\n params?: Struct, null>;\n }\n> = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n method: string(),\n params: JsonRpcParamsStruct,\n}) as Struct<\n {\n id: string | number | null;\n jsonrpc: '2.0';\n method: string;\n params?: Json[] | Record;\n },\n {\n id: Struct;\n jsonrpc: Struct<'2.0', '2.0'>;\n method: Struct;\n params?: Struct, null>;\n }\n>;\n\nexport type InferWithParams<\n Type extends Struct,\n Params extends JsonRpcParams,\n> = Omit, 'params'> &\n (keyof Params extends undefined\n ? {\n params?: Params;\n }\n : {\n params: Params;\n });\n\n/**\n * A JSON-RPC request object.\n */\nexport type JsonRpcRequest =\n InferWithParams;\n\nexport const JsonRpcNotificationStruct: Struct<\n {\n jsonrpc: '2.0';\n method: string;\n params?: Json[] | Record;\n },\n {\n jsonrpc: Struct<'2.0', '2.0'>;\n method: Struct;\n params?: Struct, null>;\n }\n> = object({\n jsonrpc: JsonRpcVersionStruct,\n method: string(),\n params: JsonRpcParamsStruct,\n}) as Struct<\n {\n jsonrpc: '2.0';\n method: string;\n params?: Json[] | Record;\n },\n {\n jsonrpc: Struct<'2.0', '2.0'>;\n method: Struct;\n params?: Struct, null>;\n }\n>;\n\n/**\n * A JSON-RPC notification object.\n */\nexport type JsonRpcNotification =\n InferWithParams;\n\n/**\n * Check if the given value is a valid {@link JsonRpcNotification} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcNotification}\n * object.\n */\nexport function isJsonRpcNotification(\n value: unknown,\n): value is JsonRpcNotification {\n return is(value, JsonRpcNotificationStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcNotification} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcNotification} object.\n */\nexport function assertIsJsonRpcNotification(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcNotification {\n assertStruct(\n value,\n JsonRpcNotificationStruct,\n 'Invalid JSON-RPC notification',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcRequest} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcRequest} object.\n */\nexport function isJsonRpcRequest(value: unknown): value is JsonRpcRequest {\n return is(value, JsonRpcRequestStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcRequest} object.\n *\n * @param value - The JSON-RPC request or notification to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcRequest} object.\n */\nexport function assertIsJsonRpcRequest(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcRequest {\n assertStruct(\n value,\n JsonRpcRequestStruct,\n 'Invalid JSON-RPC request',\n ErrorWrapper,\n );\n}\n\nexport const PendingJsonRpcResponseStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n result: optional(unknown()),\n error: optional(JsonRpcErrorStruct),\n});\n\n/**\n * A JSON-RPC response object that has not yet been resolved.\n */\nexport type PendingJsonRpcResponse = Omit<\n Infer,\n 'result'\n> & {\n result?: Result;\n};\n\nexport const JsonRpcSuccessStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n result: JsonStruct,\n});\n\n/**\n * A successful JSON-RPC response object.\n */\nexport type JsonRpcSuccess = Omit<\n Infer,\n 'result'\n> & {\n result: Result;\n};\n\nexport const JsonRpcFailureStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n error: JsonRpcErrorStruct as Struct,\n});\n\n/**\n * A failed JSON-RPC response object.\n */\nexport type JsonRpcFailure = Infer;\n\nexport const JsonRpcResponseStruct = union([\n JsonRpcSuccessStruct,\n JsonRpcFailureStruct,\n]);\n\n/**\n * A JSON-RPC response object. Must be checked to determine whether it's a\n * success or failure.\n *\n * @template Result - The type of the result.\n */\nexport type JsonRpcResponse =\n | JsonRpcSuccess\n | JsonRpcFailure;\n\n/**\n * Type guard to check whether specified JSON-RPC response is a\n * {@link PendingJsonRpcResponse}.\n *\n * @param response - The JSON-RPC response to check.\n * @returns Whether the specified JSON-RPC response is pending.\n */\nexport function isPendingJsonRpcResponse(\n response: unknown,\n): response is PendingJsonRpcResponse {\n return is(response, PendingJsonRpcResponseStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link PendingJsonRpcResponse} object.\n *\n * @param response - The JSON-RPC response to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link PendingJsonRpcResponse}\n * object.\n */\nexport function assertIsPendingJsonRpcResponse(\n response: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts response is PendingJsonRpcResponse {\n assertStruct(\n response,\n PendingJsonRpcResponseStruct,\n 'Invalid pending JSON-RPC response',\n ErrorWrapper,\n );\n}\n\n/**\n * Type guard to check if a value is a {@link JsonRpcResponse}.\n *\n * @param response - The object to check.\n * @returns Whether the object is a JsonRpcResponse.\n */\nexport function isJsonRpcResponse(\n response: unknown,\n): response is JsonRpcResponse {\n return is(response, JsonRpcResponseStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcResponse} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcResponse} object.\n */\nexport function assertIsJsonRpcResponse(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcResponse {\n assertStruct(\n value,\n JsonRpcResponseStruct,\n 'Invalid JSON-RPC response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcSuccess} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcSuccess} object.\n */\nexport function isJsonRpcSuccess(\n value: unknown,\n): value is JsonRpcSuccess {\n return is(value, JsonRpcSuccessStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcSuccess} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcSuccess} object.\n */\nexport function assertIsJsonRpcSuccess(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcSuccess {\n assertStruct(\n value,\n JsonRpcSuccessStruct,\n 'Invalid JSON-RPC success response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcFailure} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcFailure} object.\n */\nexport function isJsonRpcFailure(value: unknown): value is JsonRpcFailure {\n return is(value, JsonRpcFailureStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcFailure} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcFailure} object.\n */\nexport function assertIsJsonRpcFailure(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcFailure {\n assertStruct(\n value,\n JsonRpcFailureStruct,\n 'Invalid JSON-RPC failure response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcError} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcError} object.\n */\nexport function isJsonRpcError(value: unknown): value is JsonRpcError {\n return is(value, JsonRpcErrorStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcError} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcError} object.\n */\nexport function assertIsJsonRpcError(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcError {\n assertStruct(\n value,\n JsonRpcErrorStruct,\n 'Invalid JSON-RPC error',\n ErrorWrapper,\n );\n}\n\ntype JsonRpcValidatorOptions = {\n permitEmptyString?: boolean;\n permitFractions?: boolean;\n permitNull?: boolean;\n};\n\n/**\n * Gets a function for validating JSON-RPC request / response `id` values.\n *\n * By manipulating the options of this factory, you can control the behavior\n * of the resulting validator for some edge cases. This is useful because e.g.\n * `null` should sometimes but not always be permitted.\n *\n * Note that the empty string (`''`) is always permitted by the JSON-RPC\n * specification, but that kind of sucks and you may want to forbid it in some\n * instances anyway.\n *\n * For more details, see the\n * [JSON-RPC Specification](https://www.jsonrpc.org/specification).\n *\n * @param options - An options object.\n * @param options.permitEmptyString - Whether the empty string (i.e. `''`)\n * should be treated as a valid ID. Default: `true`\n * @param options.permitFractions - Whether fractional numbers (e.g. `1.2`)\n * should be treated as valid IDs. Default: `false`\n * @param options.permitNull - Whether `null` should be treated as a valid ID.\n * Default: `true`\n * @returns The JSON-RPC ID validator function.\n */\nexport function getJsonRpcIdValidator(options?: JsonRpcValidatorOptions) {\n const { permitEmptyString, permitFractions, permitNull } = {\n permitEmptyString: true,\n permitFractions: false,\n permitNull: true,\n ...options,\n };\n\n /**\n * Type guard for {@link JsonRpcId}.\n *\n * @param id - The JSON-RPC ID value to check.\n * @returns Whether the given ID is valid per the options given to the\n * factory.\n */\n const isValidJsonRpcId = (id: unknown): id is JsonRpcId => {\n return Boolean(\n (typeof id === 'number' && (permitFractions || Number.isInteger(id))) ||\n (typeof id === 'string' && (permitEmptyString || id.length > 0)) ||\n (permitNull && id === null),\n );\n };\n\n return isValidJsonRpcId;\n}\n"],"names":["UnsafeJsonStruct","JsonStruct","isValidJson","getSafeJson","getJsonSize","jsonrpc2","JsonRpcVersionStruct","JsonRpcIdStruct","JsonRpcErrorStruct","JsonRpcParamsStruct","JsonRpcRequestStruct","JsonRpcNotificationStruct","isJsonRpcNotification","assertIsJsonRpcNotification","isJsonRpcRequest","assertIsJsonRpcRequest","PendingJsonRpcResponseStruct","JsonRpcSuccessStruct","JsonRpcFailureStruct","JsonRpcResponseStruct","isPendingJsonRpcResponse","assertIsPendingJsonRpcResponse","isJsonRpcResponse","assertIsJsonRpcResponse","isJsonRpcSuccess","assertIsJsonRpcSuccess","isJsonRpcFailure","assertIsJsonRpcFailure","isJsonRpcError","assertIsJsonRpcError","getJsonRpcIdValidator","finiteNumber","define","value","is","number","Number","isFinite","union","literal","boolean","string","array","lazy","record","coerce","any","assertStruct","JSON","parse","stringify","propKey","propValue","undefined","create","json","TextEncoder","encode","byteLength","nullable","object","code","integer","message","data","optional","stack","id","jsonrpc","method","params","ErrorWrapper","result","unknown","error","response","options","permitEmptyString","permitFractions","permitNull","isValidJsonRpcId","Boolean","isInteger","length"],"mappings":"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"} +\ No newline at end of file +diff --git a/dist/esm/json.js b/dist/esm/json.js +index 2c039cccf11893d2d88fc4fb666e7836c9a42325..2b586583535818fd1204298245087e26e9c0c1a6 100644 +--- a/dist/esm/json.js ++++ b/dist/esm/json.js +@@ -1,4 +1,4 @@ +-import { any, array, boolean, coerce, create, define, integer, is, lazy, literal, nullable, number, object, omit, optional, record, string, union, unknown } from 'superstruct'; ++import { any, array, boolean, coerce, create, define, integer, is, lazy, literal, nullable, number, object, optional, record, string, union, unknown } from 'superstruct'; + import { assertStruct } from './assert'; + /** + * A struct to check if the given value is finite number. Superstruct's +@@ -88,19 +88,21 @@ export const JsonRpcErrorStruct = object({ + data: optional(JsonStruct), + stack: optional(string()) + }); +-export const JsonRpcParamsStruct = optional(union([ ++export const JsonRpcParamsStruct = union([ + record(string(), JsonStruct), + array(JsonStruct) +-])); ++]); + export const JsonRpcRequestStruct = object({ + id: JsonRpcIdStruct, + jsonrpc: JsonRpcVersionStruct, + method: string(), + params: JsonRpcParamsStruct + }); +-export const JsonRpcNotificationStruct = omit(JsonRpcRequestStruct, [ +- 'id' +-]); ++export const JsonRpcNotificationStruct = object({ ++ jsonrpc: JsonRpcVersionStruct, ++ method: string(), ++ params: JsonRpcParamsStruct ++}); + /** + * Check if the given value is a valid {@link JsonRpcNotification} object. + * +diff --git a/dist/esm/json.js.map b/dist/esm/json.js.map +index ae3392c53e52a601e18ce8991dc6e4414a50123f..04172f7a4dd3d35367cd22bfe2a21b113be5f6b3 100644 +--- a/dist/esm/json.js.map ++++ b/dist/esm/json.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["../../src/json.ts"],"sourcesContent":["import type { Infer, Struct } from 'superstruct';\nimport {\n any,\n array,\n boolean,\n coerce,\n create,\n define,\n integer,\n is,\n lazy,\n literal,\n nullable,\n number,\n object,\n omit,\n optional,\n record,\n string,\n union,\n unknown,\n} from 'superstruct';\n\nimport type { AssertionErrorConstructor } from './assert';\nimport { assertStruct } from './assert';\n\n/**\n * Any JSON-compatible value.\n */\nexport type Json =\n | null\n | boolean\n | number\n | string\n | Json[]\n | { [prop: string]: Json };\n\n/**\n * A struct to check if the given value is finite number. Superstruct's\n * `number()` struct does not check if the value is finite.\n *\n * @returns A struct to check if the given value is finite number.\n */\nconst finiteNumber = () =>\n define('finite number', (value) => {\n return is(value, number()) && Number.isFinite(value);\n });\n\n/**\n * A struct to check if the given value is a valid JSON-serializable value.\n *\n * Note that this struct is unsafe. For safe validation, use {@link JsonStruct}.\n */\n// We cannot infer the type of the struct, because it is recursive.\nexport const UnsafeJsonStruct: Struct = union([\n literal(null),\n boolean(),\n finiteNumber(),\n string(),\n array(lazy(() => UnsafeJsonStruct)),\n record(\n string(),\n lazy(() => UnsafeJsonStruct),\n ),\n]);\n\n/**\n * A struct to check if the given value is a valid JSON-serializable value.\n *\n * This struct sanitizes the value before validating it, so that it is safe to\n * use with untrusted input.\n */\nexport const JsonStruct = coerce(UnsafeJsonStruct, any(), (value) => {\n assertStruct(value, UnsafeJsonStruct);\n return JSON.parse(\n JSON.stringify(value, (propKey, propValue) => {\n // Strip __proto__ and constructor properties to prevent prototype pollution.\n if (propKey === '__proto__' || propKey === 'constructor') {\n return undefined;\n }\n return propValue;\n }),\n );\n});\n\n/**\n * Check if the given value is a valid {@link Json} value, i.e., a value that is\n * serializable to JSON.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link Json} value.\n */\nexport function isValidJson(value: unknown): value is Json {\n try {\n getSafeJson(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate and return sanitized JSON.\n *\n * Note:\n * This function uses sanitized JsonStruct for validation\n * that applies stringify and then parse of a value provided\n * to ensure that there are no getters which can have side effects\n * that can cause security issues.\n *\n * @param value - JSON structure to be processed.\n * @returns Sanitized JSON structure.\n */\nexport function getSafeJson(value: unknown): Type {\n return create(value, JsonStruct) as Type;\n}\n\n/**\n * Get the size of a JSON value in bytes. This also validates the value.\n *\n * @param value - The JSON value to get the size of.\n * @returns The size of the JSON value in bytes.\n */\nexport function getJsonSize(value: unknown): number {\n assertStruct(value, JsonStruct, 'Invalid JSON value');\n\n const json = JSON.stringify(value);\n return new TextEncoder().encode(json).byteLength;\n}\n\n/**\n * The string '2.0'.\n */\nexport const jsonrpc2 = '2.0' as const;\nexport const JsonRpcVersionStruct = literal(jsonrpc2);\n\n/**\n * A String specifying the version of the JSON-RPC protocol.\n * MUST be exactly \"2.0\".\n */\nexport type JsonRpcVersion2 = typeof jsonrpc2;\n\nexport const JsonRpcIdStruct = nullable(union([number(), string()]));\n\n/**\n * An identifier established by the Client that MUST contain a String, Number,\n * or NULL value if included. If it is not included it is assumed to be a\n * notification. The value SHOULD normally not be Null and Numbers SHOULD\n * NOT contain fractional parts.\n */\nexport type JsonRpcId = Infer;\n\nexport const JsonRpcErrorStruct = object({\n code: integer(),\n message: string(),\n data: optional(JsonStruct),\n stack: optional(string()),\n});\n\n/**\n * Mark a certain key of a type as optional.\n */\nexport type OptionalField<\n Type extends Record,\n Key extends keyof Type,\n> = Omit & Partial>;\n\n/**\n * A JSON-RPC error object.\n *\n * Note that TypeScript infers `unknown | undefined` as `unknown`, meaning that\n * the `data` field is not optional. To make it optional, we use the\n * `OptionalField` helper, to explicitly make it optional.\n */\nexport type JsonRpcError = OptionalField<\n Infer,\n 'data'\n>;\n\nexport const JsonRpcParamsStruct: Struct, null> =\n optional(union([record(string(), JsonStruct), array(JsonStruct)])) as any;\n\nexport type JsonRpcParams = Json[] | Record;\n\nexport const JsonRpcRequestStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n method: string(),\n params: JsonRpcParamsStruct,\n});\n\nexport type InferWithParams<\n Type extends Struct,\n Params extends JsonRpcParams,\n> = Omit, 'params'> &\n (keyof Params extends undefined\n ? {\n params?: Params;\n }\n : {\n params: Params;\n });\n\n/**\n * A JSON-RPC request object.\n */\nexport type JsonRpcRequest =\n InferWithParams;\n\nexport const JsonRpcNotificationStruct = omit(JsonRpcRequestStruct, ['id']);\n\n/**\n * A JSON-RPC notification object.\n */\nexport type JsonRpcNotification =\n InferWithParams;\n\n/**\n * Check if the given value is a valid {@link JsonRpcNotification} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcNotification}\n * object.\n */\nexport function isJsonRpcNotification(\n value: unknown,\n): value is JsonRpcNotification {\n return is(value, JsonRpcNotificationStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcNotification} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcNotification} object.\n */\nexport function assertIsJsonRpcNotification(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcNotification {\n assertStruct(\n value,\n JsonRpcNotificationStruct,\n 'Invalid JSON-RPC notification',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcRequest} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcRequest} object.\n */\nexport function isJsonRpcRequest(value: unknown): value is JsonRpcRequest {\n return is(value, JsonRpcRequestStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcRequest} object.\n *\n * @param value - The JSON-RPC request or notification to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcRequest} object.\n */\nexport function assertIsJsonRpcRequest(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcRequest {\n assertStruct(\n value,\n JsonRpcRequestStruct,\n 'Invalid JSON-RPC request',\n ErrorWrapper,\n );\n}\n\nexport const PendingJsonRpcResponseStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n result: optional(unknown()),\n error: optional(JsonRpcErrorStruct),\n});\n\n/**\n * A JSON-RPC response object that has not yet been resolved.\n */\nexport type PendingJsonRpcResponse = Omit<\n Infer,\n 'result'\n> & {\n result?: Result;\n};\n\nexport const JsonRpcSuccessStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n result: JsonStruct,\n});\n\n/**\n * A successful JSON-RPC response object.\n */\nexport type JsonRpcSuccess = Omit<\n Infer,\n 'result'\n> & {\n result: Result;\n};\n\nexport const JsonRpcFailureStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n error: JsonRpcErrorStruct as Struct,\n});\n\n/**\n * A failed JSON-RPC response object.\n */\nexport type JsonRpcFailure = Infer;\n\nexport const JsonRpcResponseStruct = union([\n JsonRpcSuccessStruct,\n JsonRpcFailureStruct,\n]);\n\n/**\n * A JSON-RPC response object. Must be checked to determine whether it's a\n * success or failure.\n *\n * @template Result - The type of the result.\n */\nexport type JsonRpcResponse =\n | JsonRpcSuccess\n | JsonRpcFailure;\n\n/**\n * Type guard to check whether specified JSON-RPC response is a\n * {@link PendingJsonRpcResponse}.\n *\n * @param response - The JSON-RPC response to check.\n * @returns Whether the specified JSON-RPC response is pending.\n */\nexport function isPendingJsonRpcResponse(\n response: unknown,\n): response is PendingJsonRpcResponse {\n return is(response, PendingJsonRpcResponseStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link PendingJsonRpcResponse} object.\n *\n * @param response - The JSON-RPC response to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link PendingJsonRpcResponse}\n * object.\n */\nexport function assertIsPendingJsonRpcResponse(\n response: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts response is PendingJsonRpcResponse {\n assertStruct(\n response,\n PendingJsonRpcResponseStruct,\n 'Invalid pending JSON-RPC response',\n ErrorWrapper,\n );\n}\n\n/**\n * Type guard to check if a value is a {@link JsonRpcResponse}.\n *\n * @param response - The object to check.\n * @returns Whether the object is a JsonRpcResponse.\n */\nexport function isJsonRpcResponse(\n response: unknown,\n): response is JsonRpcResponse {\n return is(response, JsonRpcResponseStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcResponse} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcResponse} object.\n */\nexport function assertIsJsonRpcResponse(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcResponse {\n assertStruct(\n value,\n JsonRpcResponseStruct,\n 'Invalid JSON-RPC response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcSuccess} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcSuccess} object.\n */\nexport function isJsonRpcSuccess(\n value: unknown,\n): value is JsonRpcSuccess {\n return is(value, JsonRpcSuccessStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcSuccess} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcSuccess} object.\n */\nexport function assertIsJsonRpcSuccess(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcSuccess {\n assertStruct(\n value,\n JsonRpcSuccessStruct,\n 'Invalid JSON-RPC success response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcFailure} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcFailure} object.\n */\nexport function isJsonRpcFailure(value: unknown): value is JsonRpcFailure {\n return is(value, JsonRpcFailureStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcFailure} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcFailure} object.\n */\nexport function assertIsJsonRpcFailure(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcFailure {\n assertStruct(\n value,\n JsonRpcFailureStruct,\n 'Invalid JSON-RPC failure response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcError} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcError} object.\n */\nexport function isJsonRpcError(value: unknown): value is JsonRpcError {\n return is(value, JsonRpcErrorStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcError} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcError} object.\n */\nexport function assertIsJsonRpcError(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcError {\n assertStruct(\n value,\n JsonRpcErrorStruct,\n 'Invalid JSON-RPC error',\n ErrorWrapper,\n );\n}\n\ntype JsonRpcValidatorOptions = {\n permitEmptyString?: boolean;\n permitFractions?: boolean;\n permitNull?: boolean;\n};\n\n/**\n * Gets a function for validating JSON-RPC request / response `id` values.\n *\n * By manipulating the options of this factory, you can control the behavior\n * of the resulting validator for some edge cases. This is useful because e.g.\n * `null` should sometimes but not always be permitted.\n *\n * Note that the empty string (`''`) is always permitted by the JSON-RPC\n * specification, but that kind of sucks and you may want to forbid it in some\n * instances anyway.\n *\n * For more details, see the\n * [JSON-RPC Specification](https://www.jsonrpc.org/specification).\n *\n * @param options - An options object.\n * @param options.permitEmptyString - Whether the empty string (i.e. `''`)\n * should be treated as a valid ID. Default: `true`\n * @param options.permitFractions - Whether fractional numbers (e.g. `1.2`)\n * should be treated as valid IDs. Default: `false`\n * @param options.permitNull - Whether `null` should be treated as a valid ID.\n * Default: `true`\n * @returns The JSON-RPC ID validator function.\n */\nexport function getJsonRpcIdValidator(options?: JsonRpcValidatorOptions) {\n const { permitEmptyString, permitFractions, permitNull } = {\n permitEmptyString: true,\n permitFractions: false,\n permitNull: true,\n ...options,\n };\n\n /**\n * Type guard for {@link JsonRpcId}.\n *\n * @param id - The JSON-RPC ID value to check.\n * @returns Whether the given ID is valid per the options given to the\n * factory.\n */\n const isValidJsonRpcId = (id: unknown): id is JsonRpcId => {\n return Boolean(\n (typeof id === 'number' && (permitFractions || Number.isInteger(id))) ||\n (typeof id === 'string' && (permitEmptyString || id.length > 0)) ||\n (permitNull && id === null),\n );\n };\n\n return isValidJsonRpcId;\n}\n"],"names":["any","array","boolean","coerce","create","define","integer","is","lazy","literal","nullable","number","object","omit","optional","record","string","union","unknown","assertStruct","finiteNumber","value","Number","isFinite","UnsafeJsonStruct","JsonStruct","JSON","parse","stringify","propKey","propValue","undefined","isValidJson","getSafeJson","getJsonSize","json","TextEncoder","encode","byteLength","jsonrpc2","JsonRpcVersionStruct","JsonRpcIdStruct","JsonRpcErrorStruct","code","message","data","stack","JsonRpcParamsStruct","JsonRpcRequestStruct","id","jsonrpc","method","params","JsonRpcNotificationStruct","isJsonRpcNotification","assertIsJsonRpcNotification","ErrorWrapper","isJsonRpcRequest","assertIsJsonRpcRequest","PendingJsonRpcResponseStruct","result","error","JsonRpcSuccessStruct","JsonRpcFailureStruct","JsonRpcResponseStruct","isPendingJsonRpcResponse","response","assertIsPendingJsonRpcResponse","isJsonRpcResponse","assertIsJsonRpcResponse","isJsonRpcSuccess","assertIsJsonRpcSuccess","isJsonRpcFailure","assertIsJsonRpcFailure","isJsonRpcError","assertIsJsonRpcError","getJsonRpcIdValidator","options","permitEmptyString","permitFractions","permitNull","isValidJsonRpcId","Boolean","isInteger","length"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"sources":["../../src/json.ts"],"sourcesContent":["import type { Infer, Struct } from 'superstruct';\nimport {\n any,\n array,\n boolean,\n coerce,\n create,\n define,\n integer,\n is,\n lazy,\n literal,\n nullable,\n number,\n object,\n optional,\n record,\n string,\n union,\n unknown,\n} from 'superstruct';\n\nimport type { AssertionErrorConstructor } from './assert';\nimport { assertStruct } from './assert';\n\n/**\n * Any JSON-compatible value.\n */\nexport type Json =\n | null\n | boolean\n | number\n | string\n | Json[]\n | { [prop: string]: Json };\n\n/**\n * A struct to check if the given value is finite number. Superstruct's\n * `number()` struct does not check if the value is finite.\n *\n * @returns A struct to check if the given value is finite number.\n */\nconst finiteNumber = () =>\n define('finite number', (value) => {\n return is(value, number()) && Number.isFinite(value);\n });\n\n/**\n * A struct to check if the given value is a valid JSON-serializable value.\n *\n * Note that this struct is unsafe. For safe validation, use {@link JsonStruct}.\n */\n// We cannot infer the type of the struct, because it is recursive.\nexport const UnsafeJsonStruct: Struct = union([\n literal(null),\n boolean(),\n finiteNumber(),\n string(),\n array(lazy(() => UnsafeJsonStruct)),\n record(\n string(),\n lazy(() => UnsafeJsonStruct),\n ),\n]);\n\n/**\n * A struct to check if the given value is a valid JSON-serializable value.\n *\n * This struct sanitizes the value before validating it, so that it is safe to\n * use with untrusted input.\n */\nexport const JsonStruct = coerce(UnsafeJsonStruct, any(), (value) => {\n assertStruct(value, UnsafeJsonStruct);\n return JSON.parse(\n JSON.stringify(value, (propKey, propValue) => {\n // Strip __proto__ and constructor properties to prevent prototype pollution.\n if (propKey === '__proto__' || propKey === 'constructor') {\n return undefined;\n }\n return propValue;\n }),\n );\n});\n\n/**\n * Check if the given value is a valid {@link Json} value, i.e., a value that is\n * serializable to JSON.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link Json} value.\n */\nexport function isValidJson(value: unknown): value is Json {\n try {\n getSafeJson(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate and return sanitized JSON.\n *\n * Note:\n * This function uses sanitized JsonStruct for validation\n * that applies stringify and then parse of a value provided\n * to ensure that there are no getters which can have side effects\n * that can cause security issues.\n *\n * @param value - JSON structure to be processed.\n * @returns Sanitized JSON structure.\n */\nexport function getSafeJson(value: unknown): Type {\n return create(value, JsonStruct) as Type;\n}\n\n/**\n * Get the size of a JSON value in bytes. This also validates the value.\n *\n * @param value - The JSON value to get the size of.\n * @returns The size of the JSON value in bytes.\n */\nexport function getJsonSize(value: unknown): number {\n assertStruct(value, JsonStruct, 'Invalid JSON value');\n\n const json = JSON.stringify(value);\n return new TextEncoder().encode(json).byteLength;\n}\n\n/**\n * The string '2.0'.\n */\nexport const jsonrpc2 = '2.0' as const;\nexport const JsonRpcVersionStruct = literal(jsonrpc2);\n\n/**\n * A String specifying the version of the JSON-RPC protocol.\n * MUST be exactly \"2.0\".\n */\nexport type JsonRpcVersion2 = typeof jsonrpc2;\n\nexport const JsonRpcIdStruct = nullable(union([number(), string()]));\n\n/**\n * An identifier established by the Client that MUST contain a String, Number,\n * or NULL value if included. If it is not included it is assumed to be a\n * notification. The value SHOULD normally not be Null and Numbers SHOULD\n * NOT contain fractional parts.\n */\nexport type JsonRpcId = Infer;\n\nexport const JsonRpcErrorStruct = object({\n code: integer(),\n message: string(),\n data: optional(JsonStruct),\n stack: optional(string()),\n});\n\n/**\n * Mark a certain key of a type as optional.\n */\nexport type OptionalField<\n Type extends Record,\n Key extends keyof Type,\n> = Omit & Partial>;\n\n/**\n * A JSON-RPC error object.\n *\n * Note that TypeScript infers `unknown | undefined` as `unknown`, meaning that\n * the `data` field is not optional. To make it optional, we use the\n * `OptionalField` helper, to explicitly make it optional.\n */\nexport type JsonRpcError = OptionalField<\n Infer,\n 'data'\n>;\n\nexport const JsonRpcParamsStruct: Struct, null> =\n union([record(string(), JsonStruct), array(JsonStruct)]);\n\nexport type JsonRpcParams = Json[] | Record;\n\nexport const JsonRpcRequestStruct: Struct<\n {\n id: string | number | null;\n jsonrpc: '2.0';\n method: string;\n params?: Json[] | Record;\n },\n {\n id: Struct;\n jsonrpc: Struct<'2.0', '2.0'>;\n method: Struct;\n params?: Struct, null>;\n }\n> = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n method: string(),\n params: JsonRpcParamsStruct,\n}) as Struct<\n {\n id: string | number | null;\n jsonrpc: '2.0';\n method: string;\n params?: Json[] | Record;\n },\n {\n id: Struct;\n jsonrpc: Struct<'2.0', '2.0'>;\n method: Struct;\n params?: Struct, null>;\n }\n>;\n\nexport type InferWithParams<\n Type extends Struct,\n Params extends JsonRpcParams,\n> = Omit, 'params'> &\n (keyof Params extends undefined\n ? {\n params?: Params;\n }\n : {\n params: Params;\n });\n\n/**\n * A JSON-RPC request object.\n */\nexport type JsonRpcRequest =\n InferWithParams;\n\nexport const JsonRpcNotificationStruct: Struct<\n {\n jsonrpc: '2.0';\n method: string;\n params?: Json[] | Record;\n },\n {\n jsonrpc: Struct<'2.0', '2.0'>;\n method: Struct;\n params?: Struct, null>;\n }\n> = object({\n jsonrpc: JsonRpcVersionStruct,\n method: string(),\n params: JsonRpcParamsStruct,\n}) as Struct<\n {\n jsonrpc: '2.0';\n method: string;\n params?: Json[] | Record;\n },\n {\n jsonrpc: Struct<'2.0', '2.0'>;\n method: Struct;\n params?: Struct, null>;\n }\n>;\n\n/**\n * A JSON-RPC notification object.\n */\nexport type JsonRpcNotification =\n InferWithParams;\n\n/**\n * Check if the given value is a valid {@link JsonRpcNotification} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcNotification}\n * object.\n */\nexport function isJsonRpcNotification(\n value: unknown,\n): value is JsonRpcNotification {\n return is(value, JsonRpcNotificationStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcNotification} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcNotification} object.\n */\nexport function assertIsJsonRpcNotification(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcNotification {\n assertStruct(\n value,\n JsonRpcNotificationStruct,\n 'Invalid JSON-RPC notification',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcRequest} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcRequest} object.\n */\nexport function isJsonRpcRequest(value: unknown): value is JsonRpcRequest {\n return is(value, JsonRpcRequestStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcRequest} object.\n *\n * @param value - The JSON-RPC request or notification to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcRequest} object.\n */\nexport function assertIsJsonRpcRequest(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcRequest {\n assertStruct(\n value,\n JsonRpcRequestStruct,\n 'Invalid JSON-RPC request',\n ErrorWrapper,\n );\n}\n\nexport const PendingJsonRpcResponseStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n result: optional(unknown()),\n error: optional(JsonRpcErrorStruct),\n});\n\n/**\n * A JSON-RPC response object that has not yet been resolved.\n */\nexport type PendingJsonRpcResponse = Omit<\n Infer,\n 'result'\n> & {\n result?: Result;\n};\n\nexport const JsonRpcSuccessStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n result: JsonStruct,\n});\n\n/**\n * A successful JSON-RPC response object.\n */\nexport type JsonRpcSuccess = Omit<\n Infer,\n 'result'\n> & {\n result: Result;\n};\n\nexport const JsonRpcFailureStruct = object({\n id: JsonRpcIdStruct,\n jsonrpc: JsonRpcVersionStruct,\n error: JsonRpcErrorStruct as Struct,\n});\n\n/**\n * A failed JSON-RPC response object.\n */\nexport type JsonRpcFailure = Infer;\n\nexport const JsonRpcResponseStruct = union([\n JsonRpcSuccessStruct,\n JsonRpcFailureStruct,\n]);\n\n/**\n * A JSON-RPC response object. Must be checked to determine whether it's a\n * success or failure.\n *\n * @template Result - The type of the result.\n */\nexport type JsonRpcResponse =\n | JsonRpcSuccess\n | JsonRpcFailure;\n\n/**\n * Type guard to check whether specified JSON-RPC response is a\n * {@link PendingJsonRpcResponse}.\n *\n * @param response - The JSON-RPC response to check.\n * @returns Whether the specified JSON-RPC response is pending.\n */\nexport function isPendingJsonRpcResponse(\n response: unknown,\n): response is PendingJsonRpcResponse {\n return is(response, PendingJsonRpcResponseStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link PendingJsonRpcResponse} object.\n *\n * @param response - The JSON-RPC response to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link PendingJsonRpcResponse}\n * object.\n */\nexport function assertIsPendingJsonRpcResponse(\n response: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts response is PendingJsonRpcResponse {\n assertStruct(\n response,\n PendingJsonRpcResponseStruct,\n 'Invalid pending JSON-RPC response',\n ErrorWrapper,\n );\n}\n\n/**\n * Type guard to check if a value is a {@link JsonRpcResponse}.\n *\n * @param response - The object to check.\n * @returns Whether the object is a JsonRpcResponse.\n */\nexport function isJsonRpcResponse(\n response: unknown,\n): response is JsonRpcResponse {\n return is(response, JsonRpcResponseStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcResponse} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcResponse} object.\n */\nexport function assertIsJsonRpcResponse(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcResponse {\n assertStruct(\n value,\n JsonRpcResponseStruct,\n 'Invalid JSON-RPC response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcSuccess} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcSuccess} object.\n */\nexport function isJsonRpcSuccess(\n value: unknown,\n): value is JsonRpcSuccess {\n return is(value, JsonRpcSuccessStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcSuccess} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcSuccess} object.\n */\nexport function assertIsJsonRpcSuccess(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcSuccess {\n assertStruct(\n value,\n JsonRpcSuccessStruct,\n 'Invalid JSON-RPC success response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcFailure} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcFailure} object.\n */\nexport function isJsonRpcFailure(value: unknown): value is JsonRpcFailure {\n return is(value, JsonRpcFailureStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcFailure} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcFailure} object.\n */\nexport function assertIsJsonRpcFailure(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcFailure {\n assertStruct(\n value,\n JsonRpcFailureStruct,\n 'Invalid JSON-RPC failure response',\n ErrorWrapper,\n );\n}\n\n/**\n * Check if the given value is a valid {@link JsonRpcError} object.\n *\n * @param value - The value to check.\n * @returns Whether the given value is a valid {@link JsonRpcError} object.\n */\nexport function isJsonRpcError(value: unknown): value is JsonRpcError {\n return is(value, JsonRpcErrorStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link JsonRpcError} object.\n *\n * @param value - The value to check.\n * @param ErrorWrapper - The error class to throw if the assertion fails.\n * Defaults to {@link AssertionError}.\n * @throws If the given value is not a valid {@link JsonRpcError} object.\n */\nexport function assertIsJsonRpcError(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is JsonRpcError {\n assertStruct(\n value,\n JsonRpcErrorStruct,\n 'Invalid JSON-RPC error',\n ErrorWrapper,\n );\n}\n\ntype JsonRpcValidatorOptions = {\n permitEmptyString?: boolean;\n permitFractions?: boolean;\n permitNull?: boolean;\n};\n\n/**\n * Gets a function for validating JSON-RPC request / response `id` values.\n *\n * By manipulating the options of this factory, you can control the behavior\n * of the resulting validator for some edge cases. This is useful because e.g.\n * `null` should sometimes but not always be permitted.\n *\n * Note that the empty string (`''`) is always permitted by the JSON-RPC\n * specification, but that kind of sucks and you may want to forbid it in some\n * instances anyway.\n *\n * For more details, see the\n * [JSON-RPC Specification](https://www.jsonrpc.org/specification).\n *\n * @param options - An options object.\n * @param options.permitEmptyString - Whether the empty string (i.e. `''`)\n * should be treated as a valid ID. Default: `true`\n * @param options.permitFractions - Whether fractional numbers (e.g. `1.2`)\n * should be treated as valid IDs. Default: `false`\n * @param options.permitNull - Whether `null` should be treated as a valid ID.\n * Default: `true`\n * @returns The JSON-RPC ID validator function.\n */\nexport function getJsonRpcIdValidator(options?: JsonRpcValidatorOptions) {\n const { permitEmptyString, permitFractions, permitNull } = {\n permitEmptyString: true,\n permitFractions: false,\n permitNull: true,\n ...options,\n };\n\n /**\n * Type guard for {@link JsonRpcId}.\n *\n * @param id - The JSON-RPC ID value to check.\n * @returns Whether the given ID is valid per the options given to the\n * factory.\n */\n const isValidJsonRpcId = (id: unknown): id is JsonRpcId => {\n return Boolean(\n (typeof id === 'number' && (permitFractions || Number.isInteger(id))) ||\n (typeof id === 'string' && (permitEmptyString || id.length > 0)) ||\n (permitNull && id === null),\n );\n };\n\n return isValidJsonRpcId;\n}\n"],"names":["any","array","boolean","coerce","create","define","integer","is","lazy","literal","nullable","number","object","optional","record","string","union","unknown","assertStruct","finiteNumber","value","Number","isFinite","UnsafeJsonStruct","JsonStruct","JSON","parse","stringify","propKey","propValue","undefined","isValidJson","getSafeJson","getJsonSize","json","TextEncoder","encode","byteLength","jsonrpc2","JsonRpcVersionStruct","JsonRpcIdStruct","JsonRpcErrorStruct","code","message","data","stack","JsonRpcParamsStruct","JsonRpcRequestStruct","id","jsonrpc","method","params","JsonRpcNotificationStruct","isJsonRpcNotification","assertIsJsonRpcNotification","ErrorWrapper","isJsonRpcRequest","assertIsJsonRpcRequest","PendingJsonRpcResponseStruct","result","error","JsonRpcSuccessStruct","JsonRpcFailureStruct","JsonRpcResponseStruct","isPendingJsonRpcResponse","response","assertIsPendingJsonRpcResponse","isJsonRpcResponse","assertIsJsonRpcResponse","isJsonRpcSuccess","assertIsJsonRpcSuccess","isJsonRpcFailure","assertIsJsonRpcFailure","isJsonRpcError","assertIsJsonRpcError","getJsonRpcIdValidator","options","permitEmptyString","permitFractions","permitNull","isValidJsonRpcId","Boolean","isInteger","length"],"mappings":"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"} +\ No newline at end of file +diff --git a/dist/types/json.d.ts b/dist/types/json.d.ts +index 1533dcbb925903367f6cf082a4a54d5aa306caf9..04cbe1d8f758f70c85d11fec98364f79d6084e30 100644 +--- a/dist/types/json.d.ts ++++ b/dist/types/json.d.ts +@@ -92,14 +92,14 @@ export declare const JsonRpcParamsStruct: Struct, + export declare type JsonRpcParams = Json[] | Record; + export declare const JsonRpcRequestStruct: Struct<{ + id: string | number | null; ++ jsonrpc: '2.0'; + method: string; +- jsonrpc: "2.0"; +- params: Json[] | Record; ++ params?: Json[] | Record; + }, { + id: Struct; +- jsonrpc: Struct<"2.0", "2.0">; ++ jsonrpc: Struct<'2.0', '2.0'>; + method: Struct; +- params: Struct, null>; ++ params?: Struct, null>; + }>; + export declare type InferWithParams, Params extends JsonRpcParams> = Omit, 'params'> & (keyof Params extends undefined ? { + params?: Params; +@@ -111,15 +111,14 @@ export declare type InferWithParams, Params extends Jso + */ + export declare type JsonRpcRequest = InferWithParams; + export declare const JsonRpcNotificationStruct: Struct<{ ++ jsonrpc: '2.0'; + method: string; +- jsonrpc: "2.0"; +- params: Json[] | Record; +-}, Omit<{ +- id: Struct; +- jsonrpc: Struct<"2.0", "2.0">; ++ params?: Json[] | Record; ++}, { ++ jsonrpc: Struct<'2.0', '2.0'>; + method: Struct; +- params: Struct, null>; +-}, "id">>; ++ params?: Struct, null>; ++}>; + /** + * A JSON-RPC notification object. + */ +diff --git a/dist/types/json.d.ts.map b/dist/types/json.d.ts.map +index b8af457fd46d71f4687d6164df970f05e392966e..86866f52f6ba80d003ea2e40d85e366e74b5d866 100644 +--- a/dist/types/json.d.ts.map ++++ b/dist/types/json.d.ts.map +@@ -1 +1 @@ +-{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAuBjD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAG1D;;GAEG;AACH,oBAAY,IAAI,GACZ,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,EAAE,GACN;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAa7B;;;;GAIG;AAEH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAUxC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,UAAU,uBAWrB,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAOzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,SAAS,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKlD;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,OAAiB,CAAC;AACvC,eAAO,MAAM,oBAAoB,sBAAoB,CAAC;AAEtD;;;GAGG;AACH,oBAAY,eAAe,GAAG,OAAO,QAAQ,CAAC;AAE9C,eAAO,MAAM,eAAe,sCAAwC,CAAC;AAErE;;;;;GAKG;AACH,oBAAY,SAAS,GAAG,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAEtD,eAAO,MAAM,kBAAkB;;;;;;;;;;EAK7B,CAAC;AAEH;;GAEG;AACH,oBAAY,aAAa,CACvB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,GAAG,SAAS,MAAM,IAAI,IACpB,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAE/C;;;;;;GAMG;AACH,oBAAY,YAAY,GAAG,aAAa,CACtC,KAAK,CAAC,OAAO,kBAAkB,CAAC,EAChC,MAAM,CACP,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CACD,CAAC;AAE5E,oBAAY,aAAa,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE1D,eAAO,MAAM,oBAAoB;;;;;;;;;;EAK/B,CAAC;AAEH,oBAAY,eAAe,CACzB,IAAI,SAAS,MAAM,CAAC,GAAG,CAAC,EACxB,MAAM,SAAS,aAAa,IAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,GAC7B,CAAC,MAAM,MAAM,SAAS,SAAS,GAC3B;IACE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAET;;GAEG;AACH,oBAAY,cAAc,CAAC,MAAM,SAAS,aAAa,GAAG,aAAa,IACrE,eAAe,CAAC,OAAO,oBAAoB,EAAE,MAAM,CAAC,CAAC;AAEvD,eAAO,MAAM,yBAAyB;;;;;;;;;SAAqC,CAAC;AAE5E;;GAEG;AACH,oBAAY,mBAAmB,CAAC,MAAM,SAAS,aAAa,GAAG,aAAa,IAC1E,eAAe,CAAC,OAAO,yBAAyB,EAAE,MAAM,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,mBAAmB,CAE9B;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EAEd,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAOtC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EAEd,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,KAAK,IAAI,cAAc,CAOjC;AAED,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;EAKvC,CAAC;AAEH;;GAEG;AACH,oBAAY,sBAAsB,CAAC,MAAM,SAAS,IAAI,IAAI,IAAI,CAC5D,KAAK,CAAC,OAAO,4BAA4B,CAAC,EAC1C,QAAQ,CACT,GAAG;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;EAI/B,CAAC;AAEH;;GAEG;AACH,oBAAY,cAAc,CAAC,MAAM,SAAS,IAAI,IAAI,IAAI,CACpD,KAAK,CAAC,OAAO,oBAAoB,CAAC,EAClC,QAAQ,CACT,GAAG;IACF,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;EAI/B,CAAC;AAEH;;GAEG;AACH,oBAAY,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE,eAAO,MAAM,qBAAqB;;;;;;;;QAGhC,CAAC;AAEH;;;;;GAKG;AACH,oBAAY,eAAe,CAAC,MAAM,SAAS,IAAI,IAC3C,cAAc,CAAC,MAAM,CAAC,GACtB,cAAc,CAAC;AAEnB;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAChB,QAAQ,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,OAAO,EAEjB,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,QAAQ,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAOlD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,GAChB,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAEnC;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EAEd,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,KAAK,IAAI,eAAe,CAAC,IAAI,CAAC,CAOxC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,CAE/B;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EAEd,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,CAOvC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EAEd,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,KAAK,IAAI,cAAc,CAOjC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EAEd,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,KAAK,IAAI,YAAY,CAO/B;AAED,aAAK,uBAAuB,GAAG;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,uBAAuB,QAevC,OAAO,kCAStC"} +\ No newline at end of file ++{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":"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"} +\ No newline at end of file diff --git a/package.json b/package.json index 4b632fa..3e3466e 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,11 @@ "test": "jest && jest-it-up", "test:watch": "jest --watch" }, + "resolutions": { + "@metamask/utils@^8.0.0": "patch:@metamask/utils@npm%3A8.0.0#./.yarn/patches/@metamask-utils-npm-8.0.0-7a3c3a899a.patch" + }, "dependencies": { - "@metamask/utils": "^5.0.0", + "@metamask/utils": "^8.0.0", "fast-safe-stringify": "^2.0.6" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 5b34349..85dc72e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -995,7 +995,7 @@ __metadata: "@metamask/eslint-config-jest": ^11.1.0 "@metamask/eslint-config-nodejs": ^11.1.0 "@metamask/eslint-config-typescript": ^11.1.0 - "@metamask/utils": ^5.0.0 + "@metamask/utils": ^8.0.0 "@types/jest": ^28.1.6 "@typescript-eslint/eslint-plugin": ^5.42.1 "@typescript-eslint/parser": ^5.42.1 @@ -1018,16 +1018,31 @@ __metadata: languageName: unknown linkType: soft -"@metamask/utils@npm:^5.0.0": - version: 5.0.2 - resolution: "@metamask/utils@npm:5.0.2" +"@metamask/utils@npm:8.0.0": + version: 8.0.0 + resolution: "@metamask/utils@npm:8.0.0" dependencies: "@ethereumjs/tx": ^4.1.2 + "@noble/hashes": ^1.3.1 "@types/debug": ^4.1.7 debug: ^4.3.4 - semver: ^7.3.8 + semver: ^7.5.4 superstruct: ^1.0.3 - checksum: eca82e42911b2840deb4f32f0f215c5ffd14d22d68afbbe92d3180e920e509e310777b15eab29def3448f3535b66596ceb4c23666ec846adacc8e1bb093ff882 + checksum: 01c956b150b454f648868cb08e850822d526fcf7d33dd04e156ed06d9b2829d0bd42a766f7bcc98c7b21d4990b00c6adb0474b23515a927131a460d50237eb52 + languageName: node + linkType: hard + +"@metamask/utils@patch:@metamask/utils@npm%3A8.0.0#./.yarn/patches/@metamask-utils-npm-8.0.0-7a3c3a899a.patch::locator=%40metamask%2Frpc-errors%40workspace%3A.": + version: 8.0.0 + resolution: "@metamask/utils@patch:@metamask/utils@npm%3A8.0.0#./.yarn/patches/@metamask-utils-npm-8.0.0-7a3c3a899a.patch::version=8.0.0&hash=42be3a&locator=%40metamask%2Frpc-errors%40workspace%3A." + dependencies: + "@ethereumjs/tx": ^4.1.2 + "@noble/hashes": ^1.3.1 + "@types/debug": ^4.1.7 + debug: ^4.3.4 + semver: ^7.5.4 + superstruct: ^1.0.3 + checksum: 8da5d0ef4cec0b527725c30cb6db7d3fea51d517aeda8c3d3591a3a82f5e616515dca0be3591e63afbd567014731a6c8070eb1e0c9df62d1716089305df681f0 languageName: node linkType: hard @@ -1040,13 +1055,20 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.0, @noble/hashes@npm:^1.3.0, @noble/hashes@npm:~1.3.0": +"@noble/hashes@npm:1.3.0": version: 1.3.0 resolution: "@noble/hashes@npm:1.3.0" checksum: d7ddb6d7c60f1ce1f87facbbef5b724cdea536fc9e7f59ae96e0fc9de96c8f1a2ae2bdedbce10f7dcc621338dfef8533daa73c873f2b5c87fa1a4e05a95c2e2e languageName: node linkType: hard +"@noble/hashes@npm:^1.3.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0": + version: 1.3.1 + resolution: "@noble/hashes@npm:1.3.1" + checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -1399,16 +1421,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.42.0": - version: 5.42.0 - resolution: "@typescript-eslint/scope-manager@npm:5.42.0" - dependencies: - "@typescript-eslint/types": 5.42.0 - "@typescript-eslint/visitor-keys": 5.42.0 - checksum: c7dac787c27db640ef8add18e91f84ade36871a50e84f36604fc1b823fc544ad28cea4731c4b7cadec157964f5399e6db2b3a9a115b2a2dd97fbc2bae7b1f9e0 - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:5.59.0": version: 5.59.0 resolution: "@typescript-eslint/scope-manager@npm:5.59.0" @@ -1436,13 +1448,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.42.0": - version: 5.42.0 - resolution: "@typescript-eslint/types@npm:5.42.0" - checksum: 7a17ff007972129a1e2105a653d8aa637070b74d4f8b98309aeb83d06076ab40cebfa1c3e9aae3fc614118e730c4539ff13e8299d34530851cb06260483ef14c - languageName: node - linkType: hard - "@typescript-eslint/types@npm:5.59.0": version: 5.59.0 resolution: "@typescript-eslint/types@npm:5.59.0" @@ -1450,24 +1455,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.42.0": - version: 5.42.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.42.0" - dependencies: - "@typescript-eslint/types": 5.42.0 - "@typescript-eslint/visitor-keys": 5.42.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: cc8a98815daf6c8bf6f8f5e43c4a7bf7008aa850cecc669de7b8cfdddb0648fd2eae738a185165176a24aed360cb12204cc0808f251e9fcf8e436cd15fff3645 - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:5.59.0": version: 5.59.0 resolution: "@typescript-eslint/typescript-estree@npm:5.59.0" @@ -1486,7 +1473,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.59.0": +"@typescript-eslint/utils@npm:5.59.0, @typescript-eslint/utils@npm:^5.10.0": version: 5.59.0 resolution: "@typescript-eslint/utils@npm:5.59.0" dependencies: @@ -1504,34 +1491,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^5.10.0": - version: 5.42.0 - resolution: "@typescript-eslint/utils@npm:5.42.0" - dependencies: - "@types/json-schema": ^7.0.9 - "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.42.0 - "@typescript-eslint/types": 5.42.0 - "@typescript-eslint/typescript-estree": 5.42.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 - semver: ^7.3.7 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: cc57ba8bdf1cf18de5c6c264b71be80dc8c4a7630c0d6a34f73ed991cd3684c97a06605f414a8fd439ce2201f7724249b2fc29eac1e54a770ee4e8303cabef52 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.42.0": - version: 5.42.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.42.0" - dependencies: - "@typescript-eslint/types": 5.42.0 - eslint-visitor-keys: ^3.3.0 - checksum: d198e51ea968555dd44b3ff14587dd82ce43c30ae43d4021d4eacb468e4476102a5b715e15240adcdeec4b4b5280d819087a9c4090360f1e4dcb05829ea8f2dc - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:5.59.0": version: 5.59.0 resolution: "@typescript-eslint/visitor-keys@npm:5.59.0" @@ -2706,17 +2665,6 @@ __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.3.0 resolution: "eslint-visitor-keys@npm:1.3.0" @@ -2724,21 +2672,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "eslint-visitor-keys@npm:2.0.0" - checksum: e07e9863fb8c9b1453f5ad1a26f3cc8dd6b349b26605cc06bc0c61215ac5b6f13a4d08c875218e6c0f8ac8fc06ca6e090df769e32c569f0fd2e6a848b8a76c75 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0": - version: 3.3.0 - resolution: "eslint-visitor-keys@npm:3.3.0" - checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.4.0": +"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" checksum: 33159169462d3989321a1ec1e9aaaf6a24cc403d5d347e9886d1b5bfe18ffa1be73bdc6203143a28a606b142b1af49787f33cff0d6d0813eb5f2e8d2e1a6043c @@ -2816,16 +2750,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.0": - version: 1.4.0 - resolution: "esquery@npm:1.4.0" - dependencies: - estraverse: ^5.1.0 - checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 - languageName: node - linkType: hard - -"esquery@npm:^1.4.2": +"esquery@npm:^1.4.0, esquery@npm:^1.4.2": version: 1.5.0 resolution: "esquery@npm:1.5.0" dependencies: @@ -5467,14 +5392,14 @@ __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": - version: 7.3.8 - resolution: "semver@npm:7.3.8" +"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": + version: 7.5.4 + resolution: "semver@npm:7.5.4" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard