{"version":3,"file":"index.mjs","names":["waitFor","getMissingError","defaultQueries"],"sources":["../src/mutation-observer.ts","../src/suggestions.ts","../src/test-runner-globals.ts","../src/helpers.ts","../src/config.ts","../src/wait-for.ts","../src/query-helpers.ts","../src/queries/text.ts","../src/queries/error.ts","../src/queries/index.ts","../src/get-queries-for-instance.ts","../src/process-helpers.ts","../src/event-map.ts","../src/events.ts","../src/user-event/utils.ts","../src/user-event/keyboard/getNextKeyDef.ts","../src/user-event/keyboard/keyboardImplementation.ts","../src/user-event/keyboard/keyMap.ts","../src/user-event/keyboard/index.ts","../src/user-event/index.ts","../src/get-user-code-frame.ts","../src/pretty-cli.ts","../src/pure.ts","../src/index.ts"],"sourcesContent":["// Used for `MutationObserver`. Unsure if it's really needed, but it's worth mentioning that these are not tied to\n// specific CLI instances of `render`. This means that if there are e2e CLI tests that run in parallel, they will\n// execute far more frequently than needed.\nconst _observers = new Map();\n\n// Not perfect as a way to make \"MutationObserver\" unique IDs, but it should work\nlet mutId = 0;\n\nclass MutationObserver {\n  _cb: () => void;\n  _id: number;\n\n  constructor(cb: () => void) {\n    this._id = ++mutId;\n    this._cb = cb;\n  }\n\n  observe() {\n    _observers.set(this._id, this._cb);\n  }\n\n  disconnect() {\n    _observers.delete(this._id);\n  }\n}\n\nfunction _runObservers() {\n  Array.from(_observers.values()).forEach((cb) => cb());\n}\n\nexport { _runObservers, MutationObserver };\n","import { getDefaultNormalizer } from \"./matches\";\nimport type { TestInstance } from \"./types\";\n\nexport interface QueryOptions {\n  [key: string]: RegExp | boolean;\n}\n\nexport type QueryArgs = [string, QueryOptions?];\n\nexport interface Suggestion {\n  queryName: string;\n  queryMethod: string;\n  queryArgs: QueryArgs;\n  variant: string;\n  warning?: string;\n  toString: () => string;\n}\n\nexport type Variant = \"find\" | \"get\" | \"query\";\n\nexport type Method = \"Text\" | \"text\";\n\nconst normalize = getDefaultNormalizer();\n\nfunction escapeRegExp(string: string) {\n  return string.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n}\n\nfunction getRegExpMatcher(string: string) {\n  return new RegExp(escapeRegExp(string.toLowerCase()), \"i\");\n}\n\nfunction makeSuggestion(\n  queryName: string,\n  _instance: TestInstance,\n  content: string,\n  {\n    variant,\n    name,\n  }: {\n    variant: Variant;\n    name?: string;\n  },\n): Suggestion | undefined {\n  const warning = \"\" as string;\n  const queryOptions = {} as QueryOptions;\n  const queryArgs = [\n    [].includes(queryName as never) ? content : getRegExpMatcher(content),\n  ] as QueryArgs;\n\n  if (name) {\n    queryOptions.name = getRegExpMatcher(name);\n  }\n\n  if (Object.keys(queryOptions).length > 0) {\n    queryArgs.push(queryOptions);\n  }\n\n  const queryMethod = `${variant}By${queryName}`;\n\n  return {\n    queryName,\n    queryMethod,\n    queryArgs,\n    variant,\n    warning,\n    toString() {\n      if (warning) {\n        console.warn(warning);\n      }\n      const [text, options] = queryArgs;\n\n      const newText = typeof text === \"string\" ? `'${text}'` : text;\n\n      const newOptions = options\n        ? `, { ${Object.entries(options)\n            .map(([k, v]) => `${k}: ${v}`)\n            .join(\", \")} }`\n        : \"\";\n\n      return `${queryMethod}(${newText}${newOptions})`;\n    },\n  };\n}\n\nfunction canSuggest(\n  currentMethod: Method,\n  requestedMethod: Method | undefined,\n  data: unknown,\n) {\n  return (\n    data &&\n    (!requestedMethod ||\n      requestedMethod.toLowerCase() === currentMethod.toLowerCase())\n  );\n}\n\nexport function getSuggestedQuery(\n  instance: TestInstance,\n  variant: Variant = \"get\",\n  method?: Method,\n): Suggestion | undefined {\n  const textContent = normalize(\n    instance.stdoutArr.map((obj) => obj.contents).join(\"\\n\"),\n  );\n  if (canSuggest(\"Text\", method, textContent)) {\n    return makeSuggestion(\"Text\", instance, textContent, { variant });\n  }\n\n  return undefined;\n}\n","interface FakeTimerController {\n  advanceTimersByTime: (milliseconds: number) => void;\n  isFakeTimers?: () => boolean;\n}\n\ntype CleanupHook = (callback: () => Promise<void> | void) => void;\n\ninterface TestRunnerGlobals {\n  afterEach?: CleanupHook;\n  jest?: FakeTimerController;\n  teardown?: CleanupHook;\n  vi?: FakeTimerController;\n}\n\nexport const testRunnerGlobals = globalThis as unknown as TestRunnerGlobals;\n","import { testRunnerGlobals } from \"./test-runner-globals\";\nimport type { TestInstance } from \"./types\";\n\nfunction jestFakeTimersAreEnabled() {\n  /* istanbul ignore else */\n  if (\n    (testRunnerGlobals.vi?.isFakeTimers?.() ?? false) ||\n    testRunnerGlobals.jest !== undefined\n  ) {\n    return (\n      // legacy timers\n      (\n        setTimeout as unknown as {\n          _isMockFunction: boolean;\n        }\n      )._isMockFunction === true ||\n      // modern timers\n\n      Object.prototype.hasOwnProperty.call(setTimeout, \"clock\")\n    );\n  }\n  // istanbul ignore next\n  return false;\n}\n\nconst instanceRef = { current: undefined as TestInstance | undefined };\n\nif (typeof testRunnerGlobals.afterEach === \"function\") {\n  testRunnerGlobals.afterEach(() => {\n    instanceRef.current = undefined;\n  });\n}\n\nfunction getCurrentInstance() {\n  /**\n   * Worth mentioning that this deviates from the upstream implementation\n   * of `dom-testing-library`'s `getDocument` in waitFor, which throws an error whenever\n   * `window` is not defined.\n   *\n   * Admittedly, this is another way that `cli-testing-library` will need to figure out\n   * the right solution to this problem, since there is no omni-present parent `instance`\n   * in a CLI like there is in a browser. (although FWIW, \"process\" might work)\n   *\n   * Have ideas how to solve? Please let us know:\n   * https://github.com/crutchcorn/cli-testing-library/issues/\n   */\n  return instanceRef.current;\n}\n\n// TODO: Does this need to be namespaced for each test that runs?\n//  That way, we don't end up with a \"singleton\" that ends up wiped between\n//  parallel tests.\nfunction setCurrentInstance(newInstance: TestInstance) {\n  instanceRef.current = newInstance;\n}\n\nfunction debounce<T extends (...args: Array<any>) => void>(\n  func: T,\n  timeout: number,\n): (...args: Parameters<T>) => void {\n  let timer: ReturnType<typeof setTimeout>;\n\n  return (...args: Parameters<T>) => {\n    clearTimeout(timer);\n    timer = setTimeout(() => {\n      // @ts-ignore this is fine\n      func.apply(this, args);\n    }, timeout);\n  };\n}\n\n/**\n * This is used to bind a series of functions where `instance` is the first argument\n * to an instance, removing the implicit first argument.\n */\nfunction bindObjectFnsToInstance(\n  instance: TestInstance,\n  object: Record<string, (...props: Array<unknown>) => unknown>,\n) {\n  return Object.entries(object).reduce(\n    (prev, [key, fn]) => {\n      prev[key] = (...props: Array<unknown>) => fn(instance, ...props);\n      return prev;\n    },\n    {} as typeof object,\n  );\n}\n\nexport {\n  jestFakeTimersAreEnabled,\n  setCurrentInstance,\n  getCurrentInstance,\n  debounce,\n  bindObjectFnsToInstance,\n};\n","import type { TestInstance } from \"./types\";\n\n// import {prettyDOM} from './pretty-dom'\n\nexport interface Config {\n  /**\n   * WARNING: `unstable` prefix means this API may change in patch and minor releases.\n   * @param cb\n   */\n  unstable_advanceTimersWrapper: (\n    cb: (...args: Array<unknown>) => unknown,\n  ) => unknown;\n  asyncUtilTimeout: number;\n  renderAwaitTime: number;\n  errorDebounceTimeout: number;\n  showOriginalStackTrace: boolean;\n  throwSuggestions: boolean;\n  getInstanceError: (message: string | null, container: TestInstance) => Error;\n}\n\nexport interface ConfigFn {\n  (existingConfig: Config): Partial<Config>;\n}\n\ntype Callback<T> = () => T;\ninterface InternalConfig extends Config {\n  _disableExpensiveErrorDiagnostics: boolean;\n}\n\n// It would be cleaner for this to live inside './queries', but\n// other parts of the code assume that all exports from\n// './queries' are query functions.\nlet config: InternalConfig = {\n  asyncUtilTimeout: 1000,\n  // Short amount of time to wait for your process to spin up after a `spawn`. AFAIK There's unfortunately not much\n  // of a better way to do this\n  renderAwaitTime: 100,\n  // Internal timer time to wait before attempting error recovery debounce action\n  errorDebounceTimeout: 100,\n  unstable_advanceTimersWrapper: (cb) => cb(),\n  // default value for the `hidden` option in `ByRole` queries\n  // showOriginalStackTrace flag to show the full error stack traces for async errors\n  showOriginalStackTrace: false,\n\n  // throw errors w/ suggestions for better queries. Opt in so off by default.\n  throwSuggestions: false,\n\n  // called when getBy* queries fail. (message, container) => Error\n  getInstanceError(message, testInstance: TestInstance | undefined) {\n    let instanceWarning = \"\";\n    if (testInstance) {\n      const stdallArrStr = testInstance.getStdallStr();\n      instanceWarning = `\\n${stdallArrStr}`;\n    } else {\n      instanceWarning = \"\";\n    }\n    const error = new Error(\n      [message, instanceWarning].filter(Boolean).join(\"\\n\\n\"),\n    );\n    error.name = \"TestingLibraryElementError\";\n    return error;\n  },\n  _disableExpensiveErrorDiagnostics: false,\n};\n\nexport function runWithExpensiveErrorDiagnosticsDisabled<T>(\n  callback: Callback<T>,\n) {\n  try {\n    config._disableExpensiveErrorDiagnostics = true;\n    return callback();\n  } finally {\n    config._disableExpensiveErrorDiagnostics = false;\n  }\n}\n\nexport function configure(newConfig: ConfigFn | Partial<Config>): void {\n  if (typeof newConfig === \"function\") {\n    // Pass the existing config out to the provided function\n    // and accept a delta in return\n    newConfig = newConfig(config);\n  }\n\n  // Merge the incoming config delta\n  config = {\n    ...config,\n    ...newConfig,\n  };\n}\n\nexport function getConfig(): Config {\n  return config;\n}\n","// Migrated from: https://github.com/testing-library/dom-testing-library/blob/main/src/wait-for.js\n// TODO: Migrate back to use `config.js` file\nimport { getCurrentInstance, jestFakeTimersAreEnabled } from \"./helpers\";\nimport { MutationObserver } from \"./mutation-observer\";\nimport { getConfig } from \"./config\";\nimport { testRunnerGlobals } from \"./test-runner-globals\";\nimport type { TestInstance } from \"./types\";\n\n// This is so the stack trace the developer sees is one that's\n// closer to their code (because async stack traces are hard to follow).\nfunction copyStackTrace(target: Error, source: Error) {\n  target.stack = source.stack!.replace(source.message, target.message);\n}\n\nexport interface waitForOptions {\n  instance?: TestInstance;\n  showOriginalStackTrace?: boolean;\n  timeout?: number;\n  interval?: number;\n  onTimeout?: (error: Error) => Error;\n  stackTraceError?: Error;\n}\n\nfunction waitFor<T>(\n  callback: () => Promise<T> | T,\n  {\n    instance = getCurrentInstance(),\n    timeout = getConfig().asyncUtilTimeout,\n    showOriginalStackTrace = getConfig().showOriginalStackTrace,\n    stackTraceError,\n    interval = 50,\n    onTimeout = (error) => {\n      error.message = getConfig().getInstanceError(\n        error.message,\n        instance!,\n      ).message;\n      return error;\n    },\n  }: Omit<waitForOptions, \"stackTraceError\"> & {\n    stackTraceError: Error;\n  } = {\n    stackTraceError: new Error(\"STACK_TRACE_MESSAGE\"),\n  },\n): Promise<T> {\n  if (typeof callback !== \"function\") {\n    throw new TypeError(\"Received `callback` arg must be a function\");\n  }\n\n  // eslint-disable-next-line no-async-promise-executor\n  return new Promise(async (resolve, reject) => {\n    let lastError: Error | null = null;\n    let intervalId!: NodeJS.Timeout;\n    let observer: MutationObserver;\n    let finished = false;\n    let promiseStatus = \"idle\";\n\n    const overallTimeoutTimer = setTimeout(handleTimeout, timeout);\n\n    const usingJestFakeTimers = jestFakeTimersAreEnabled();\n    if (usingJestFakeTimers) {\n      const { unstable_advanceTimersWrapper: advanceTimersWrapper } =\n        getConfig();\n      checkCallback();\n      // this is a dangerous rule to disable because it could lead to an\n      // infinite loop. However, eslint isn't smart enough to know that we're\n      // setting finished inside `onDone` which will be called when we're done\n      // waiting or when we've timed out.\n\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n      while (!finished) {\n        if (!jestFakeTimersAreEnabled()) {\n          const error = new Error(\n            `Changed from using fake timers to real timers while using waitFor. This is not allowed and will result in very strange behavior. Please ensure you're awaiting all async things your test is doing before changing to real timers. For more info, please go to https://github.com/testing-library/dom-testing-library/issues/830`,\n          );\n          if (!showOriginalStackTrace) copyStackTrace(error, stackTraceError);\n          reject(error);\n          return;\n        }\n        // we *could* (maybe should?) use `advanceTimersToNextTimer` but it's\n        // possible that could make this loop go on forever if someone is using\n        // third party code that's setting up recursive timers so rapidly that\n        // the user's timer's don't get a chance to resolve. So we'll advance\n        // by an interval instead. (We have a test for this case).\n        advanceTimersWrapper(() => {\n          if (testRunnerGlobals.jest !== undefined) {\n            testRunnerGlobals.jest.advanceTimersByTime(interval);\n          } else if (testRunnerGlobals.vi !== undefined) {\n            testRunnerGlobals.vi.advanceTimersByTime(interval);\n          }\n        });\n\n        // It's really important that checkCallback is run *before* we flush\n        // in-flight promises. To be honest, I'm not sure why, and I can't quite\n        // think of a way to reproduce the problem in a test, but I spent\n        // an entire day banging my head against a wall on this.\n        checkCallback();\n\n        // In this rare case, we *need* to wait for in-flight promises\n        // to resolve before continuing. We don't need to take advantage\n        // of parallelization so we're fine.\n        // https://stackoverflow.com/a/59243586/971592\n\n        await advanceTimersWrapper(async () => {\n          await new Promise((r) => {\n            setTimeout(r, 0);\n            if (testRunnerGlobals.jest !== undefined) {\n              testRunnerGlobals.jest.advanceTimersByTime(0);\n            } else if (testRunnerGlobals.vi !== undefined) {\n              testRunnerGlobals.vi.advanceTimersByTime(0);\n            }\n          });\n        });\n      }\n    } else {\n      intervalId = setInterval(checkRealTimersCallback, interval);\n      observer = new MutationObserver(checkRealTimersCallback);\n      observer.observe();\n      checkCallback();\n    }\n\n    function onDone(error: null, result: T): void;\n    function onDone(error: Error, result: null): void;\n    function onDone(error: Error | null, result: T | null) {\n      finished = true;\n      clearTimeout(overallTimeoutTimer);\n\n      if (!usingJestFakeTimers) {\n        clearInterval(intervalId);\n        observer.disconnect();\n      }\n\n      if (error) {\n        reject(error);\n      } else {\n        resolve(result!);\n      }\n    }\n\n    function checkRealTimersCallback() {\n      if (jestFakeTimersAreEnabled()) {\n        const error = new Error(\n          `Changed from using real timers to fake timers while using waitFor. This is not allowed and will result in very strange behavior. Please ensure you're awaiting all async things your test is doing before changing to fake timers. For more info, please go to https://github.com/testing-library/dom-testing-library/issues/830`,\n        );\n        if (!showOriginalStackTrace) copyStackTrace(error, stackTraceError);\n        return reject(error);\n      } else {\n        return checkCallback();\n      }\n    }\n\n    function checkCallback() {\n      if (promiseStatus === \"pending\") return;\n      try {\n        const result = callback(); // runWithExpensiveErrorDiagnosticsDisabled(callback)\n        const isPromise = (r: unknown): r is Promise<T> =>\n          !!r && typeof (r as Promise<T>).then === \"function\";\n        if (isPromise(result)) {\n          promiseStatus = \"pending\";\n          result.then(\n            (resolvedValue) => {\n              promiseStatus = \"resolved\";\n              onDone(null, resolvedValue);\n            },\n            (rejectedValue) => {\n              promiseStatus = \"rejected\";\n              lastError = rejectedValue;\n            },\n          );\n        } else {\n          onDone(null, result);\n        }\n        // If `callback` throws, wait for the next mutation, interval, or timeout.\n      } catch (error) {\n        // Save the most recent callback error to reject the promise with it in the event of a timeout\n        lastError = error as Error;\n      }\n    }\n\n    function handleTimeout() {\n      let error;\n      if (lastError) {\n        error = lastError;\n        if (\n          !showOriginalStackTrace &&\n          error.name === \"TestingLibraryElementError\"\n        ) {\n          copyStackTrace(error, stackTraceError);\n        }\n      } else {\n        error = new Error(\"Timed out in waitFor.\");\n        if (!showOriginalStackTrace) {\n          copyStackTrace(error, stackTraceError);\n        }\n      }\n      onDone(onTimeout(error), null);\n    }\n  });\n}\n\nfunction waitForWrapper<T>(\n  callback: () => Promise<T> | T,\n  options?: waitForOptions,\n): Promise<T> {\n  // create the error here so its stack trace is as close to the\n  // calling code as possible\n  const stackTraceError = new Error(\"STACK_TRACE_MESSAGE\");\n  return waitFor(callback, { stackTraceError, ...options });\n}\n\nexport { waitForWrapper as waitFor };\n","import { getSuggestedQuery } from \"./suggestions\";\nimport { waitFor } from \"./wait-for\";\nimport { getConfig } from \"./config\";\nimport type { waitForOptions as WaitForOptions } from \"./wait-for\";\nimport type { Variant } from \"./suggestions\";\nimport type { TestInstance } from \"./types\";\nimport type { Matcher, MatcherOptions } from \"./matches\";\n\nexport type WithSuggest = { suggest?: boolean };\n\nexport type GetErrorFunction<TArguments extends Array<any> = [string]> = (\n  c: TestInstance | null,\n  ...args: TArguments\n) => string;\n\nexport interface SelectorMatcherOptions extends MatcherOptions {\n  selector?: string;\n  ignore?: boolean | string;\n}\n\nexport type QueryMethod<TArguments extends Array<any>, TReturn> = (\n  container: TestInstance,\n  ...args: TArguments\n) => TReturn;\n\nfunction getInstanceError(message: string | null, instance: TestInstance) {\n  return getConfig().getInstanceError(message, instance);\n}\n\nfunction getSuggestionError(\n  suggestion: { toString: () => string },\n  container: TestInstance,\n) {\n  return getConfig().getInstanceError(\n    `A better query is available, try this:\n${suggestion.toString()}\n`,\n    container,\n  );\n}\n\n// this accepts a query function and returns a function which throws an error\n// if an empty list of elements is returned\nfunction makeGetQuery<TArguments extends Array<unknown>>(\n  queryBy: (instance: TestInstance, ...args: TArguments) => TestInstance | null,\n  getMissingError: GetErrorFunction<TArguments>,\n) {\n  return <T extends TestInstance = TestInstance>(\n    instance: TestInstance,\n    ...args: TArguments\n  ): T => {\n    const el = queryBy(instance, ...args);\n    if (!el) {\n      throw getConfig().getInstanceError(\n        getMissingError(instance, ...args),\n        instance,\n      );\n    }\n\n    return el as T;\n  };\n}\n\n// this accepts a getter query function and returns a function which calls\n// waitFor and passing a function which invokes the getter.\nfunction makeFindQuery<TQueryFor>(\n  getter: (\n    container: TestInstance,\n    text: Matcher,\n    options?: MatcherOptions,\n  ) => TQueryFor,\n) {\n  return <T extends TestInstance = TestInstance>(\n    instance: TestInstance,\n    text: Matcher,\n    options?: MatcherOptions,\n    waitForOptions?: WaitForOptions,\n  ): Promise<T> => {\n    return waitFor(\n      () => {\n        return getter(instance, text, options) as unknown as T;\n      },\n      { instance, ...waitForOptions },\n    );\n  };\n}\n\nconst wrapSingleQueryWithSuggestion =\n  <TArguments extends Array<unknown>>(\n    query: (\n      container: TestInstance,\n      ...args: TArguments\n    ) => TestInstance | null,\n    queryByName: string,\n    variant: Variant,\n  ) =>\n  <T extends TestInstance = TestInstance>(\n    container: TestInstance,\n    ...args: TArguments\n  ): T => {\n    const instance = query(container, ...args);\n    const [{ suggest = getConfig().throwSuggestions } = {}] = args.slice(\n      -1,\n    ) as [WithSuggest];\n    if (instance && suggest) {\n      const suggestion = getSuggestedQuery(instance, variant);\n      if (suggestion && !queryByName.endsWith(suggestion.queryName)) {\n        throw getSuggestionError(suggestion.toString(), container);\n      }\n    }\n\n    return instance as T;\n  };\n\nfunction buildQueries(\n  queryBy: QueryMethod<\n    [matcher: Matcher, options?: MatcherOptions],\n    TestInstance | null\n  >,\n  getMissingError: GetErrorFunction<\n    [matcher: Matcher, options?: MatcherOptions]\n  >,\n) {\n  const getBy = makeGetQuery(queryBy, getMissingError);\n\n  const queryByWithSuggestions = wrapSingleQueryWithSuggestion(\n    queryBy,\n    queryBy.name,\n    \"get\",\n  );\n\n  const getByWithSuggestions = wrapSingleQueryWithSuggestion(\n    getBy,\n    queryBy.name,\n    \"get\",\n  );\n\n  const findBy = makeFindQuery(\n    wrapSingleQueryWithSuggestion(getBy, queryBy.name, \"find\"),\n  );\n\n  return [queryByWithSuggestions, getByWithSuggestions, findBy] as const;\n}\n\nexport {\n  getInstanceError,\n  wrapSingleQueryWithSuggestion,\n  makeFindQuery,\n  buildQueries,\n};\n","import {\n  buildQueries,\n  fuzzyMatches,\n  makeNormalizer,\n  matches,\n} from \"./all-utils\";\nimport type { TestInstance } from \"../types\";\nimport type {\n  GetErrorFunction,\n  Matcher,\n  SelectorMatcherOptions,\n} from \"./all-utils\";\nimport type { waitForOptions } from \"../wait-for\";\n\nexport type QueryByText<T extends TestInstance = TestInstance> = (\n  instance: TestInstance,\n  id: Matcher,\n  options?: SelectorMatcherOptions,\n) => T | null;\n\nexport type GetByText<T extends TestInstance = TestInstance> = (\n  instance: TestInstance,\n  id: Matcher,\n  options?: SelectorMatcherOptions,\n) => T;\n\nexport type FindByText<T extends TestInstance = TestInstance> = (\n  instance: TestInstance,\n  id: Matcher,\n  options?: SelectorMatcherOptions,\n  waitForElementOptions?: waitForOptions,\n) => Promise<T>;\n\nconst queryByTextBase: QueryByText = (\n  instance,\n  text,\n  { exact = false, collapseWhitespace, trim, normalizer, stripAnsi } = {},\n) => {\n  const matcher = exact ? matches : fuzzyMatches;\n  const matchNormalizer = makeNormalizer({\n    stripAnsi,\n    collapseWhitespace,\n    trim,\n    normalizer,\n  });\n  const str = instance.stdoutArr.map((output) => output.contents).join(\"\\n\");\n  if (matcher(str, instance, text, matchNormalizer)) return instance;\n  else return null;\n};\n\nconst getMissingError: GetErrorFunction<[unknown]> = (_c, text) =>\n  `Unable to find an stdout line with the text: ${text}. This could be because the text is broken up by multiple lines. In this case, you can provide a function for your text matcher to make your matcher more flexible.`;\n\nconst [_queryByTextWithSuggestions, _getByText, _findByText] = buildQueries(\n  queryByTextBase,\n  getMissingError,\n);\n\nexport function getByText<T extends TestInstance = TestInstance>(\n  ...args: Parameters<GetByText<T>>\n): ReturnType<GetByText<T>> {\n  return _getByText<T>(...args);\n}\nexport function queryByText<T extends TestInstance = TestInstance>(\n  ...args: Parameters<QueryByText<T>>\n): ReturnType<QueryByText<T>> {\n  return _queryByTextWithSuggestions<T>(...args);\n}\nexport function findByText<T extends TestInstance = TestInstance>(\n  ...args: Parameters<FindByText<T>>\n): ReturnType<FindByText<T>> {\n  return _findByText(...args);\n}\n","import {\n  buildQueries,\n  fuzzyMatches,\n  makeNormalizer,\n  matches,\n} from \"./all-utils\";\nimport type {\n  GetErrorFunction,\n  Matcher,\n  SelectorMatcherOptions,\n} from \"./all-utils\";\nimport type { TestInstance } from \"../types\";\nimport type { waitForOptions } from \"../wait-for\";\n\nexport type QueryByError<T extends TestInstance = TestInstance> = (\n  instance: TestInstance,\n  id: Matcher,\n  options?: SelectorMatcherOptions,\n) => T | null;\n\nexport type GetByError<T extends TestInstance = TestInstance> = (\n  instance: TestInstance,\n  id: Matcher,\n  options?: SelectorMatcherOptions,\n) => T;\n\nexport type FindByError<T extends TestInstance = TestInstance> = (\n  instance: TestInstance,\n  id: Matcher,\n  options?: SelectorMatcherOptions,\n  waitForElementOptions?: waitForOptions,\n) => Promise<T>;\n\nconst queryByErrorBase: QueryByError = (\n  instance,\n  text,\n  { exact = false, collapseWhitespace, trim, normalizer, stripAnsi } = {},\n) => {\n  const matcher = exact ? matches : fuzzyMatches;\n  const matchNormalizer = makeNormalizer({\n    stripAnsi,\n    collapseWhitespace,\n    trim,\n    normalizer,\n  });\n  const str = instance.stderrArr.map((obj) => obj.contents).join(\"\\n\");\n  if (matcher(str, instance, text, matchNormalizer)) return instance;\n  else return null;\n};\n\nconst getMissingError: GetErrorFunction<[unknown]> = (_c, text) =>\n  `Unable to find an stdout line with the text: ${text}. This could be because the text is broken up by multiple lines. In this case, you can provide a function for your text matcher to make your matcher more flexible.`;\n\nconst [_queryByErrorWithSuggestions, _getByError, _findByError] = buildQueries(\n  queryByErrorBase,\n  getMissingError,\n);\n\nexport function getByError<T extends TestInstance = TestInstance>(\n  ...args: Parameters<GetByError<T>>\n): ReturnType<GetByError<T>> {\n  return _getByError<T>(...args);\n}\n\nexport function queryByError<T extends TestInstance = TestInstance>(\n  ...args: Parameters<QueryByError<T>>\n): ReturnType<QueryByError<T>> {\n  return _queryByErrorWithSuggestions<T>(...args);\n}\n\nexport function findByError<T extends TestInstance = TestInstance>(\n  ...args: Parameters<FindByError<T>>\n): ReturnType<FindByError<T>> {\n  return _findByError<T>(...args);\n}\n","export * from \"./text\";\nexport * from \"./error\";\n","import * as defaultQueries from \"./queries/index\";\nimport type { TestInstance } from \"./types\";\n\nexport type BoundFunction<T> = T extends (\n  container: TestInstance,\n  ...args: infer P\n) => infer R\n  ? (...args: P) => R\n  : never;\n\nexport type BoundFunctions<TQueries> = TQueries extends typeof defaultQueries\n  ? {\n      getByText: <T extends TestInstance = TestInstance>(\n        ...args: Parameters<BoundFunction<defaultQueries.GetByText<T>>>\n      ) => ReturnType<defaultQueries.GetByText<T>>;\n      queryByText: <T extends TestInstance = TestInstance>(\n        ...args: Parameters<BoundFunction<defaultQueries.QueryByText<T>>>\n      ) => ReturnType<defaultQueries.QueryByText<T>>;\n      findByText: <T extends TestInstance = TestInstance>(\n        ...args: Parameters<BoundFunction<defaultQueries.FindByText<T>>>\n      ) => ReturnType<defaultQueries.FindByText<T>>;\n    } & {\n      [P in keyof TQueries]: BoundFunction<TQueries[P]>;\n    }\n  : {\n      [P in keyof TQueries]: BoundFunction<TQueries[P]>;\n    };\n\nexport type Query = (\n  container: TestInstance,\n  ...args: Array<any>\n) =>\n  | Error\n  | TestInstance\n  | Array<TestInstance>\n  | Promise<Array<TestInstance>>\n  | Promise<TestInstance>\n  | null;\n\nexport interface Queries {\n  [T: string]: Query;\n}\n\n/**\n * @param instance\n * @param queries object of functions\n * @param initialValue for reducer\n * @returns returns object of functions bound to container\n */\nfunction getQueriesForElement<T extends Queries = typeof defaultQueries>(\n  instance: TestInstance,\n  queries: T = defaultQueries as unknown as T,\n  initialValue = {},\n): BoundFunctions<T> {\n  return Object.keys(queries).reduce((helpers, key) => {\n    const fn = queries[key];\n    return Object.assign(helpers, { [key]: fn!.bind(null, instance) });\n  }, initialValue as BoundFunctions<T>);\n}\n\nexport { getQueriesForElement };\n","import treeKill from \"tree-kill\";\nimport { getConfig } from \"./config\";\nimport type { TestInstance } from \"./types\";\n\nexport const killProc = (instance: TestInstance, signal: string | undefined) =>\n  new Promise<void>((resolve, reject) => {\n    if (!instance.process.pid || (instance.process.pid && instance.hasExit())) {\n      resolve();\n      return;\n    }\n\n    treeKill(instance.process.pid, signal, async (err) => {\n      try {\n        if (err) {\n          if (\n            err.message.includes(\"The process\") &&\n            err.message.includes(\"not found.\")\n          ) {\n            resolve();\n            return;\n          }\n          if (\n            err.message.includes(\"could not be terminated\") &&\n            err.message.includes(\"There is no running instance of the task.\") &&\n            instance.hasExit()\n          ) {\n            resolve();\n            return;\n          }\n          const isOperationNotSupported = err.message.includes(\n            \"The operation attempted is not supported.\",\n          );\n          const isAccessDenied = err.message.includes(\"Access is denied.\");\n          if (\n            err.message.includes(\"could not be terminated\") &&\n            (isOperationNotSupported || isAccessDenied)\n          ) {\n            const sleep = (t: number) => new Promise((r) => setTimeout(r, t));\n            await sleep(getConfig().errorDebounceTimeout);\n            if (instance.hasExit()) {\n              resolve();\n              return;\n            }\n            console.warn(\"Ran into error while trying to kill process:\");\n            console.warn(err.toString());\n            console.warn(`This is likely due to Window's permissions.\n                Because this error is prevalent on CI Windows systems with the tree-kill package, we are attempting\n                 an alternative kill method.`);\n            console.warn();\n            console.warn(\n              \"Be aware that this alternative kill method is not guaranteed to work with subprocesses, and they may not exit properly as a result.\",\n            );\n\n            const didKill = instance.process.kill(signal as \"SIGKILL\");\n            if (didKill) {\n              resolve();\n            } else {\n              console.error(\n                \"Alternative kill method failed. Rejecting with original error.\",\n              );\n              reject(err);\n            }\n            return;\n          }\n          reject(err);\n        } else resolve();\n      } catch (e: unknown) {\n        reject(e);\n      }\n    });\n  });\n","import { killProc } from \"./process-helpers\";\nimport type { TestInstance } from \"./types\";\n\nconst isWin = process.platform === \"win32\";\n\nconst eventMap = {\n  sigterm: (instance: TestInstance): Promise<void> =>\n    killProc(instance, isWin ? undefined : \"SIGTERM\"),\n  sigkill: (instance: TestInstance): Promise<void> =>\n    killProc(instance, isWin ? undefined : \"SIGKILL\"),\n  write: (instance: TestInstance, props: { value: string }): boolean =>\n    instance.process.stdin.write(props.value),\n};\n\nexport { eventMap };\n","import { eventMap } from \"./event-map\";\nimport type { TestInstance } from \"./types\";\n\ntype EventMap = typeof eventMap;\nexport type EventType = keyof EventMap;\n\nexport type FireFunction = <TEventType extends EventType>(\n  instance: TestInstance,\n  event: TEventType,\n  options?: Parameters<EventMap[TEventType]>[1],\n) => boolean | Promise<void>;\n\nexport type FireObject = {\n  [K in EventType]: (\n    instance: TestInstance,\n    options?: Parameters<EventMap[K]>[1],\n  ) => boolean | Promise<void>;\n};\n\nconst fireEvent: FireFunction & FireObject = ((\n  instance,\n  event,\n  props = undefined,\n) => {\n  return eventMap[event](instance, props!);\n}) satisfies FireFunction as never;\n\nObject.entries(eventMap).forEach(([_eventName, _eventFn]) => {\n  const eventName = _eventName as keyof typeof eventMap;\n  const eventFn = _eventFn as (\n    ...props: Array<unknown>\n  ) => ReturnType<(typeof eventMap)[keyof typeof eventMap]>;\n  fireEvent[eventName] = (instance, ...props) => {\n    return eventFn(instance, ...props);\n  };\n});\n\nexport { fireEvent };\n","export function wait(time?: number) {\n  return new Promise<void>((resolve) => setTimeout(() => resolve(), time));\n}\n","import type { keyboardKey, keyboardOptions } from \"./types\";\n\nenum bracketDict {\n  \"[\" = \"]\",\n}\n\n/**\n * Get the next key from keyMap\n *\n * Named keys can be referenced by physical locations per `[code]`.\n * Everything else will be interpreted as a typed character - e.g. `a`.\n * The opening bracket `[` can be escaped by doubling it - e.g. `foo[[bar`\n * translates to `foo[bar`.\n */\nexport function getNextKeyDef(\n  text: string,\n  options: keyboardOptions,\n): {\n  keyDef: keyboardKey;\n  consumedLength: number;\n} {\n  const descriptor = readNextDescriptor(text);\n  const controlChord = readInlineControlChord(descriptor, options);\n\n  if (controlChord) return controlChord;\n\n  return {\n    keyDef: resolveKeyDef(descriptor, options),\n    consumedLength: descriptor.consumedLength,\n  };\n}\n\ntype KeyDescriptor = ReturnType<typeof readNextDescriptor>;\n\nfunction resolveKeyDef(\n  { type, descriptor }: KeyDescriptor,\n  options: keyboardOptions,\n): keyboardKey {\n  const mappedKey = options.keyboardMap.find((def) => {\n    if (type === \"[\") {\n      return def.code?.toLowerCase() === descriptor.toLowerCase();\n    }\n    return def.hex === descriptor;\n  });\n\n  if (mappedKey) return mappedKey;\n\n  if (type === \"\") {\n    return {\n      code: descriptor,\n      hex: descriptor,\n    };\n  }\n\n  return {\n    code: descriptor,\n    hex: \"Unknown\",\n  };\n}\n\nfunction readInlineControlChord(\n  descriptor: KeyDescriptor,\n  options: keyboardOptions,\n): { keyDef: keyboardKey; consumedLength: number } | undefined {\n  if (descriptor.type !== \"[\") return undefined;\n\n  const chordParts = descriptor.descriptor.split(\"+\");\n  if (chordParts.length !== 2) return undefined;\n\n  const [modifier, keyDescriptor] = chordParts;\n  if (\n    !modifier ||\n    !keyDescriptor ||\n    ![\"control\", \"ctrl\"].includes(modifier.toLowerCase())\n  ) {\n    return undefined;\n  }\n\n  const mappedKey = options.keyboardMap.find(\n    (key) => key.code?.toLowerCase() === keyDescriptor.toLowerCase(),\n  );\n  const key =\n    mappedKey ??\n    (Array.from(keyDescriptor).length === 1\n      ? { code: keyDescriptor, hex: keyDescriptor }\n      : undefined);\n  const controlCharacter = toControlCharacter(key?.hex);\n\n  if (controlCharacter === undefined) return undefined;\n\n  return {\n    keyDef: {\n      code: `${modifier}+${keyDescriptor}`,\n      hex: controlCharacter,\n    },\n    consumedLength: descriptor.consumedLength,\n  };\n}\n\nfunction toControlCharacter(value: string | undefined): string | undefined {\n  if (!value) return undefined;\n\n  const characters = Array.from(value);\n  if (characters.length !== 1) return undefined;\n\n  const codePoint = characters[0]!.toUpperCase().codePointAt(0)!;\n\n  if (codePoint === 0x20) return \"\\x00\";\n  if (codePoint >= 0x40 && codePoint <= 0x5f) {\n    return String.fromCharCode(codePoint & 0x1f);\n  }\n  if (codePoint === 0x3f) return \"\\x7f\";\n\n  return undefined;\n}\n\nfunction readNextDescriptor(text: string) {\n  let pos = 0;\n  const startBracket =\n    text[pos]! in bracketDict ? (text[pos] as keyof typeof bracketDict) : \"\";\n\n  pos += startBracket.length;\n\n  // `foo[[bar` is an escaped opening bracket at position 3.\n  const startBracketRepeated = startBracket\n    ? (text.match(new RegExp(`^\\\\${startBracket}+`)) as RegExpMatchArray)[0]\n        .length\n    : 0;\n  const isEscapedChar = startBracketRepeated === 2;\n\n  const type = isEscapedChar ? \"\" : startBracket;\n\n  return {\n    type,\n    ...(type === \"\" ? readPrintableChar(text, pos) : readTag(text, pos, type)),\n  };\n}\n\nfunction readPrintableChar(text: string, pos: number) {\n  const codePoint = text.codePointAt(pos);\n  const descriptor =\n    codePoint === undefined ? undefined : String.fromCodePoint(codePoint);\n\n  assertDescriptor(descriptor, text, pos);\n\n  pos += descriptor.length;\n\n  return {\n    consumedLength: pos,\n    descriptor,\n    releasePrevious: false,\n    releaseSelf: true,\n    repeat: 1,\n  };\n}\n\nfunction readTag(\n  text: string,\n  pos: number,\n  startBracket: keyof typeof bracketDict,\n) {\n  const descriptor = text.slice(pos).match(/^[^\\]]+/)?.[0];\n\n  assertDescriptor(descriptor, text, pos);\n\n  pos += descriptor.length;\n\n  const expectedEndBracket = bracketDict[startBracket];\n  const endBracket = text[pos] === expectedEndBracket ? expectedEndBracket : \"\";\n\n  if (!endBracket) {\n    throw new Error(\n      getErrorMessage(`\"${expectedEndBracket}\"`, text[pos], text),\n    );\n  }\n\n  pos += endBracket.length;\n\n  return {\n    consumedLength: pos,\n    descriptor,\n  };\n}\n\nfunction assertDescriptor(\n  descriptor: string | undefined,\n  text: string,\n  pos: number,\n): asserts descriptor is string {\n  if (!descriptor) {\n    throw new Error(getErrorMessage(\"key descriptor\", text[pos], text));\n  }\n}\n\nfunction getErrorMessage(\n  expected: string,\n  found: string | undefined,\n  text: string,\n) {\n  return `Expected ${expected} but found \"${found ?? \"\"}\" in \"${text}\"\n    See https://github.com/testing-library/user-event/blob/main/README.md#keyboardtext-options\n    for more information about how userEvent parses your input.`;\n}\n","import { fireEvent } from \"../../events\";\nimport { wait } from \"../utils\";\nimport { getNextKeyDef } from \"./getNextKeyDef\";\nimport type { TestInstance } from \"../../types\";\nimport type { keyboardKey, keyboardOptions } from \"./types\";\n\nexport async function keyboardImplementation(\n  instance: TestInstance,\n  text: string,\n  options: keyboardOptions,\n): Promise<void> {\n  let remainingText = text;\n\n  while (remainingText) {\n    const { keyDef, consumedLength } = getNextKeyDef(remainingText, options);\n\n    keypress(keyDef, instance);\n    remainingText = remainingText.slice(consumedLength);\n\n    if (remainingText && options.delay > 0) {\n      await wait(options.delay);\n    }\n  }\n}\n\nfunction keypress(keyDef: keyboardKey, instance: TestInstance) {\n  fireEvent.write(instance, { value: keyDef.hex! });\n}\n","import type { keyboardKey } from \"./types\";\n\nconst digitKeys: Array<keyboardKey> = Array.from(\n  { length: 10 },\n  (_, digit) => ({\n    code: `Digit${digit}`,\n    hex: String(digit),\n  }),\n);\n\nconst letterKeys: Array<keyboardKey> = Array.from(\n  { length: 26 },\n  (_, offset) => {\n    const uppercaseLetter = String.fromCharCode(\"A\".charCodeAt(0) + offset);\n\n    return [\n      { code: `Key${uppercaseLetter}`, hex: uppercaseLetter },\n      {\n        code: `KeyLower${uppercaseLetter}`,\n        hex: uppercaseLetter.toLowerCase(),\n      },\n    ];\n  },\n).flat();\n\n/**\n * Named key descriptors supported by the default terminal keyboard.\n *\n * Printable text is written directly to stdin and deliberately does not need\n * an entry here. This map is reserved for named physical keys and terminal\n * escape sequences. The generated digit and letter entries preserve support\n * for descriptors such as `[Digit1]`, `[KeyA]`, and `[KeyLowerA]`.\n */\nexport const defaultKeyMap: Array<keyboardKey> = [\n  ...digitKeys,\n  ...letterKeys,\n\n  // Named printable physical keys\n  { code: \"Space\", hex: \" \" },\n  { code: \"Backquote\", hex: \"`\" },\n  { code: \"Minus\", hex: \"-\" },\n  { code: \"Equal\", hex: \"=\" },\n  { code: \"BracketLeft\", hex: \"[\" },\n  { code: \"BracketRight\", hex: \"]\" },\n  { code: \"Backslash\", hex: \"\\\\\" },\n  { code: \"Semicolon\", hex: \";\" },\n  { code: \"Quote\", hex: \"'\" },\n  { code: \"Comma\", hex: \",\" },\n  { code: \"Period\", hex: \".\" },\n  { code: \"Slash\", hex: \"/\" },\n\n  // Editing and control keys\n  { code: \"Tab\", hex: \"\\x09\" },\n  { code: \"Backspace\", hex: \"\\x08\" },\n  { code: \"Enter\", hex: \"\\x0d\" },\n  { code: \"Escape\", hex: \"\\x1b\" },\n  { code: \"ShiftTab\", hex: \"\\x1b[Z\" },\n\n  // Navigation keys\n  { code: \"ArrowUp\", hex: \"\\x1b[A\" },\n  { code: \"ArrowDown\", hex: \"\\x1b[B\" },\n  { code: \"ArrowRight\", hex: \"\\x1b[C\" },\n  { code: \"ArrowLeft\", hex: \"\\x1b[D\" },\n  { code: \"Home\", hex: \"\\x1bOH\" },\n  { code: \"End\", hex: \"\\x1bOF\" },\n  { code: \"Insert\", hex: \"\\x1b[2~\" },\n  { code: \"Delete\", hex: \"\\x1b[3~\" },\n  { code: \"PageUp\", hex: \"\\x1b[5~\" },\n  { code: \"PageDown\", hex: \"\\x1b[6~\" },\n\n  // Function keys (common xterm-compatible sequences)\n  { code: \"F1\", hex: \"\\x1bOP\" },\n  { code: \"F2\", hex: \"\\x1bOQ\" },\n  { code: \"F3\", hex: \"\\x1bOR\" },\n  { code: \"F4\", hex: \"\\x1bOS\" },\n  { code: \"F5\", hex: \"\\x1b[15~\" },\n  { code: \"F6\", hex: \"\\x1b[17~\" },\n  { code: \"F7\", hex: \"\\x1b[18~\" },\n  { code: \"F8\", hex: \"\\x1b[19~\" },\n  { code: \"F9\", hex: \"\\x1b[20~\" },\n  { code: \"F10\", hex: \"\\x1b[21~\" },\n  { code: \"F11\", hex: \"\\x1b[23~\" },\n  { code: \"F12\", hex: \"\\x1b[24~\" },\n];\n","import { keyboardImplementation } from \"./keyboardImplementation\";\nimport { defaultKeyMap } from \"./keyMap\";\nimport type { TestInstance } from \"../../types\";\nimport type { keyboardKey, keyboardOptions } from \"./types\";\n\nexport type { keyboardOptions, keyboardKey };\nexport { defaultKeyMap } from \"./keyMap\";\n\nexport function keyboard(\n  instance: TestInstance,\n  text: string,\n  options?: Partial<keyboardOptions & { delay: number }>,\n): void | Promise<void> {\n  const { promise } = keyboardImplementationWrapper(instance, text, options);\n\n  if ((options?.delay ?? 0) > 0) {\n    return promise;\n  } else {\n    // prevent users from dealing with UnhandledPromiseRejectionWarning in sync call\n    promise.catch(console.error);\n  }\n}\n\nexport function keyboardImplementationWrapper(\n  instance: TestInstance,\n  text: string,\n  config: Partial<keyboardOptions> = {},\n): {\n  promise: Promise<void>;\n} {\n  const { delay = 0, keyboardMap = defaultKeyMap } = config;\n  const options = {\n    delay,\n    keyboardMap,\n  };\n\n  return {\n    promise: keyboardImplementation(instance, text, options),\n  };\n}\n","import { keyboard } from \"./keyboard/index\";\n\nconst userEvent = {\n  keyboard,\n};\n\nexport default userEvent;\n\nexport { defaultKeyMap } from \"./keyboard/index\";\nexport type { keyboardKey, keyboardOptions } from \"./keyboard/index\";\n","// We try to load node dependencies\nimport fs from \"node:fs\";\nimport pc from \"picocolors\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\n\nconst readFileSync = fs.readFileSync;\n\n// frame has the form \"at myMethod (location/to/my/file.js:10:2)\"\nfunction getCodeFrame(frame: string) {\n  const locationStart = frame.indexOf(\"(\") + 1;\n  const locationEnd = frame.indexOf(\")\");\n  const frameLocation = frame.slice(locationStart, locationEnd);\n\n  const frameLocationElements = frameLocation.split(\":\");\n  const [filename, line, column] = [\n    frameLocationElements[0]!,\n    parseInt(frameLocationElements[1]!, 10),\n    parseInt(frameLocationElements[2]!, 10),\n  ];\n\n  let rawFileContents = \"\";\n  try {\n    rawFileContents = readFileSync(filename, \"utf-8\");\n  } catch (e) {\n    return \"\";\n  }\n\n  const codeFrame = codeFrameColumns(\n    rawFileContents,\n    {\n      start: { line, column },\n    },\n    {\n      highlightCode: false,\n      linesBelow: 0,\n    },\n  );\n  return `${pc.dim(frameLocation)}\\n${codeFrame}\\n`;\n}\n\nfunction getUserCodeFrame() {\n  // If we couldn't load dependencies, we can't generate the user trace\n  /* istanbul ignore next */\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n  if (!readFileSync || !codeFrameColumns) {\n    return \"\";\n  }\n  const err = new Error();\n  const firstClientCodeFrame = err.stack\n    ?.split(\"\\n\")\n    .slice(1) // Remove first line which has the form \"Error: TypeError\"\n    .find((frame) => !frame.includes(\"node_modules/\")); // Ignore frames from 3rd party libraries\n\n  return getCodeFrame(firstClientCodeFrame!);\n}\n\nexport { getUserCodeFrame };\n","import sliceAnsi from \"slice-ansi\";\nimport { getUserCodeFrame } from \"./get-user-code-frame\";\nimport type { TestInstance } from \"./types\";\n\nfunction prettyCLI(testInstance: TestInstance, maxLength?: number) {\n  if (typeof maxLength !== \"number\") {\n    maxLength =\n      (typeof process !== \"undefined\" &&\n        Number(process.env.DEBUG_PRINT_LIMIT)) ||\n      7000;\n  }\n\n  if (maxLength === 0) {\n    return \"\";\n  }\n\n  if (!(\"stdoutArr\" in testInstance && \"stderrArr\" in testInstance)) {\n    throw new TypeError(`Expected an instance but got ${testInstance}`);\n  }\n\n  const outStr = testInstance.getStdallStr();\n\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n  return maxLength !== undefined && outStr.length > maxLength\n    ? sliceAnsi(outStr, 0, maxLength)\n    : outStr;\n}\n\nconst logCLI = (...args: Parameters<typeof prettyCLI>) => {\n  const userCodeFrame = getUserCodeFrame();\n  if (userCodeFrame) {\n    process.stdout.write(`${prettyCLI(...args)}\\n\\n${userCodeFrame}`);\n  } else {\n    process.stdout.write(prettyCLI(...args));\n  }\n};\n\nexport { prettyCLI, logCLI };\n","import childProcess from \"node:child_process\";\nimport { performance } from \"node:perf_hooks\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport stripFinalNewline from \"strip-final-newline\";\nimport { _runObservers } from \"./mutation-observer\";\nimport { getQueriesForElement } from \"./get-queries-for-instance\";\nimport userEvent from \"./user-event/index\";\nimport { bindObjectFnsToInstance, setCurrentInstance } from \"./helpers\";\nimport { fireEvent } from \"./events\";\nimport { getConfig } from \"./config\";\nimport { logCLI } from \"./pretty-cli\";\nimport type { TestInstance } from \"./types\";\nimport type * as queries from \"./queries/index\";\nimport type { SpawnOptionsWithoutStdio } from \"node:child_process\";\nimport type { BoundFunction } from \"./get-queries-for-instance\";\n\nconst __curDir =\n  typeof __dirname === \"undefined\"\n    ? // @ts-ignore ESM requires this, but it doesn't work in Node18\n      path.dirname(fileURLToPath(import.meta.url))\n    : __dirname;\n\nexport interface RenderOptions {\n  cwd: string;\n  debug: boolean;\n  spawnOpts: Omit<SpawnOptionsWithoutStdio, \"cwd\">;\n}\n\ntype UserEvent = typeof userEvent;\n\nexport type RenderResult = TestInstance & {\n  userEvent: {\n    [P in keyof UserEvent]: BoundFunction<UserEvent[P]>;\n  };\n} & { [P in keyof typeof queries]: BoundFunction<(typeof queries)[P]> };\n\nconst mountedInstances = new Set<TestInstance>();\n\nasync function render(\n  command: string,\n  args: Array<string> = [],\n  opts: Partial<RenderOptions> = {},\n): Promise<RenderResult> {\n  const { cwd = __curDir, spawnOpts = {} } = opts;\n\n  const exec = childProcess.spawn(command, args, {\n    cwd,\n    ...spawnOpts,\n  });\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  let _readyPromiseInternals: null | { resolve: Function; reject: Function } =\n    null;\n\n  let _resolved = false;\n\n  const execOutputAPI = {\n    __exitCode: null as null | number,\n    _isOutputAPI: true,\n    _isReady: new Promise(\n      (resolve, reject) => (_readyPromiseInternals = { resolve, reject }),\n    ),\n    process: exec,\n    // Clear buffer of stdout to do more accurate `t.regex` checks\n    clear() {\n      execOutputAPI.stdoutArr = [];\n      execOutputAPI.stderrArr = [];\n    },\n    debug(maxLength?: number) {\n      logCLI(execOutputAPI, maxLength);\n    },\n    // An array of strings gathered from stdout when unable to do\n    // `await stdout` because of inquirer interactive prompts\n    stdoutArr: [] as Array<{ contents: Buffer | string; timestamp: number }>,\n    stderrArr: [] as Array<{ contents: Buffer | string; timestamp: number }>,\n    hasExit() {\n      return this.__exitCode === null ? null : { exitCode: this.__exitCode };\n    },\n    getStdallStr(): string {\n      return this.stderrArr\n        .concat(this.stdoutArr)\n        .sort((a, b) => (a.timestamp < b.timestamp ? -1 : 1))\n        .map((obj) => obj.contents)\n        .join(\"\\n\");\n    },\n  } as TestInstance & {\n    __exitCode: null | number;\n    _isOutputAPI: true;\n    _isReady: Promise<void>;\n  };\n\n  mountedInstances.add(execOutputAPI);\n\n  exec.stdout.on(\"data\", (result: string | Buffer) => {\n    // `on('spawn') doesn't work the same way in Node12.\n    // Instead, we have to rely on this working as-expected.\n    if (_readyPromiseInternals && !_resolved) {\n      _readyPromiseInternals.resolve();\n      _resolved = true;\n    }\n\n    const resStr = stripFinalNewline(result);\n    execOutputAPI.stdoutArr.push({\n      contents: resStr,\n      timestamp: performance.now(),\n    });\n    _runObservers();\n  });\n\n  exec.stderr.on(\"data\", (result: string | Buffer) => {\n    if (_readyPromiseInternals && !_resolved) {\n      _readyPromiseInternals.resolve();\n      _resolved = true;\n    }\n\n    const resStr = stripFinalNewline(result);\n    execOutputAPI.stderrArr.push({\n      contents: resStr,\n      timestamp: performance.now(),\n    });\n    _runObservers();\n  });\n\n  exec.on(\"error\", (result) => {\n    if (_readyPromiseInternals) {\n      _readyPromiseInternals.reject(result);\n    }\n  });\n\n  exec.on(\"spawn\", () => {\n    setTimeout(() => {\n      if (_readyPromiseInternals && !_resolved) {\n        _readyPromiseInternals.resolve();\n        _resolved = true;\n      }\n    }, getConfig().renderAwaitTime);\n  });\n\n  exec.on(\"exit\", (code) => {\n    execOutputAPI.__exitCode = code ?? 0;\n  });\n\n  setCurrentInstance(execOutputAPI);\n\n  await execOutputAPI._isReady;\n\n  function getStdallStr(this: Omit<TestInstance, \"getStdallStr\">) {\n    return this.stderrArr\n      .concat(this.stdoutArr)\n      .sort((a, b) => (a.timestamp < b.timestamp ? -1 : 1))\n      .map((obj) => obj.contents)\n      .join(\"\\n\");\n  }\n\n  return Object.assign(\n    execOutputAPI,\n    {\n      userEvent: bindObjectFnsToInstance(execOutputAPI, userEvent as never),\n      getStdallStr: getStdallStr.bind(execOutputAPI),\n    },\n    getQueriesForElement(execOutputAPI),\n  ) as TestInstance as RenderResult;\n}\n\nfunction cleanup() {\n  return Promise.all(Array.from(mountedInstances).map(cleanupAtInstance));\n}\n\n// maybe one day we'll expose this (perhaps even as a utility returned by render).\n// but let's wait until someone asks for it.\nasync function cleanupAtInstance(instance: TestInstance) {\n  await fireEvent.sigkill(instance);\n\n  mountedInstances.delete(instance);\n}\n\nexport { render, cleanup };\n","import { cleanup } from \"./pure\";\nimport { testRunnerGlobals } from \"./test-runner-globals\";\n\n// if we're running in a test runner that supports afterEach\n// or teardown then we'll automatically run cleanup afterEach test\n// this ensures that tests run in isolation from each other\n// if you don't like this then set the CTL_SKIP_AUTO_CLEANUP env variable to 'true'.\nif (\n  typeof process === \"undefined\" ||\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n  !(process.env && process.env.CTL_SKIP_AUTO_CLEANUP)\n) {\n  // ignore teardown() in code coverage because Jest does not support it\n  /* istanbul ignore else */\n  if (typeof testRunnerGlobals.afterEach === \"function\") {\n    testRunnerGlobals.afterEach(async () => {\n      await cleanup();\n    });\n  } else if (typeof testRunnerGlobals.teardown === \"function\") {\n    // Block is guarded by `typeof` check.\n    // eslint does not support `typeof` guards.\n\n    testRunnerGlobals.teardown(async () => {\n      await cleanup();\n    });\n  }\n}\n\nexport * from \"./config\";\nexport * from \"./helpers\";\nexport * from \"./events\";\nexport * from \"./get-queries-for-instance\";\nexport * from \"./matches\";\nexport * from \"./pure\";\nexport * from \"./query-helpers\";\nexport * from \"./queries/index\";\nexport * as queries from \"./queries/index\";\nexport * from \"./mutation-observer\";\nexport * from \"./wait-for\";\nexport * from \"./user-event/index\";\n"],"mappings":"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"}