{"version":3,"file":"global.cjs","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":";AAAA,sNAAsN","sourcesContent":["/* eslint-disable @typescript-eslint/consistent-type-definitions, @typescript-eslint/naming-convention, @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unused-vars, @typescript-eslint/no-namespace */\n\nimport type {\n  EnumToUnion,\n  NotificationType,\n  ComponentOrElement,\n} from '@metamask/snaps-sdk';\nimport type { JSXElement } from '@metamask/snaps-sdk/jsx';\n\ninterface SnapsMatchers {\n  /**\n   * Assert that the response is a JSON-RPC response with the given result. This\n   * is equivalent to calling `expect(response.result).toStrictEqual(result)`.\n   *\n   * @param response - The expected response result.\n   * @throws If the response is not a JSON-RPC response with the given result.\n   * @example\n   * const response = await request({ method: 'foo' });\n   * expect(response).toRespondWith('bar');\n   */\n  toRespondWith(response: unknown): void;\n\n  /**\n   * Assert that the response is a JSON-RPC response with the given error. This\n   * is equivalent to calling `expect(response.error).toStrictEqual(error)`.\n   *\n   * @param error - The expected response error.\n   * @throws If the response is not a JSON-RPC response with the given error.\n   * @example\n   * const response = await request({ method: 'foo' });\n   * expect(response).toRespondWithError({\n   *   code: -32601,\n   *   message: 'The method does not exist / is not available.',\n   *   stack: expect.any(String),\n   *   data: { method: 'foo', cause: null },\n   * });\n   */\n  toRespondWithError(error: unknown): void;\n\n  /**\n   * Assert that the Snap sent a notification with the expected message, and\n   * optionally the expected notification type. This is equivalent to calling\n   * `expect(response.notifications).toContainEqual({ message, type })`.\n   *\n   * @param message - The expected notification message.\n   * @param type - The expected notification type, i.e., 'inApp' or 'native'.\n   * @param title - The title of an expanded notification.\n   * @param content - The content of an expanded notification.\n   * @param footerLink - The footer link of an expanded notification (if it exists).\n   * @param footerLink.text - The text of the footer link.\n   * @param footerLink.href - The href of the footer link.\n   * @throws If the snap did not send a notification with the expected message.\n   * @example\n   * const response = await request({ method: 'foo' });\n   * expect(response).toSendNotification('bar', NotificationType.InApp);\n   */\n  toSendNotification(\n    message: string,\n    type: EnumToUnion<NotificationType>,\n    title?: string,\n    content?: JSXElement,\n    footerLink?: { text: string; href: string },\n  ): void;\n\n  /**\n   * Assert that the Snap rendered the expected component. This is equivalent to\n   * calling `expect(interface.content).toStrictEqual(component)`.\n   *\n   * @param component - The expected rendered component.\n   * @throws If the snap did not render the expected component.\n   * @example\n   * const response = request({ method: 'foo' });\n   * const ui = await response.getInterface();\n   * expect(ui).toRender(panel([heading('Hello, world!')]));\n   */\n  toRender(component: ComponentOrElement): void;\n\n  /**\n   * Assert that the Snap tracked an error with the expected parameters. This\n   * is equivalent to calling\n   * `expect(response.tracked.errors).toContainEqual(error)`.\n   *\n   * @param error - The expected error parameters.\n   * @throws If the snap did not track an error with the expected parameters.\n   * @example\n   * const response = await request({ method: 'foo' });\n   * expect(response).toTrackError({\n   *   name: 'Error',\n   *   message: 'This is an error.',\n   * });\n   */\n  toTrackError(error?: unknown): void;\n\n  /**\n   * Assert that the Snap tracked an event with the expected parameters. This\n   * is equivalent to calling\n   * `expect(response.tracked.events).toContainEqual(event)`.\n   *\n   * @param event - The expected event parameters.\n   * @throws If the snap did not track an event with the expected parameters.\n   * @example\n   * const response = await request({ method: 'foo' });\n   * expect(response).toTrackEvent({\n   *   event: 'bar',\n   *   properties: { baz: 'qux' },\n   *   sensitiveProperties: { quux: 'corge' },\n   * });\n   */\n  toTrackEvent(event?: unknown): void;\n\n  /**\n   * Assert that the Snap started and ended a trace with the expected\n   * parameters. This is equivalent to calling\n   * `expect(response.tracked.traces).toContainEqual(span)`.\n   *\n   * @param trace - The expected trace parameters.\n   * @throws If the snap did not end a trace with the expected parameters.\n   * @example\n   * const response = await request({ method: 'foo' });\n   * expect(response).toTrace({\n   *   name: 'My Trace',\n   * });\n   */\n  toTrace(trace?: unknown): void;\n}\n\n// Extend the `expect` interface with the new matchers. This is used when\n// importing `expect` from `@jest/globals`.\ndeclare module 'expect' {\n  interface AsymmetricMatchers extends SnapsMatchers {}\n\n  // Ideally we would use `Matchers<Result>` instead of `Matchers<R>`, but\n  // TypeScript doesn't allow this:\n  // TS2428: All declarations of 'Matchers' must have identical type parameters.\n  interface Matchers<R> extends SnapsMatchers {}\n}\n\n// Extend the Jest global namespace with the new matchers. This is used when\n// using the global `expect` function.\ndeclare global {\n  namespace jest {\n    // Ideally we would use `Matchers<Result>` instead of `Matchers<R>`, but\n    // TypeScript doesn't allow this:\n    // TS2428: All declarations of 'Matchers' must have identical type parameters.\n    interface Matchers<R> extends SnapsMatchers {}\n  }\n}\n"]}