{"version":3,"file":"test-logger.mjs","sources":["../../src/testing/test-logger.ts"],"sourcesContent":["import { Logger } from '../types/logging'\nimport { LogSnapshotConfig } from '../types/testing'\nimport { asJson } from '../util'\n\n/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.\n * This is useful for automated testing.\n */\nexport class TestLogger implements Logger {\n  private originalLogger: Logger | undefined\n  private logs: string[]\n\n  /**\n   * Create a new test logger that wraps the given logger if provided.\n   * @param originalLogger The optional original logger to wrap.\n   */\n  constructor(originalLogger?: Logger) {\n    this.originalLogger = originalLogger\n    this.logs = []\n  }\n\n  /** Returns all logs captured thus far. */\n  get capturedLogs(): string[] {\n    return this.logs\n  }\n\n  /** Clears all logs captured so far. */\n  clear() {\n    this.logs = []\n  }\n\n  /**\n   * Returns a captured log snapshot.\n   * This helps ensure that the provided configuration items won't appear\n   *  with random values in the log snapshot, but rather will get substituted with predictable ids.\n   *\n   * https://jestjs.io/docs/snapshot-testing#2-tests-should-be-deterministic\n   *\n   * @example Jest Example\n   * ```typescript\n   * const logger = new TestLogger()\n   * ...\n   * expect(logger.getLogSnapshot()).toMatchSnapshot()\n   * ```\n   * @param config The snapshot configuration\n   * @returns The snapshotted logs.\n   */\n  getLogSnapshot(config?: LogSnapshotConfig) {\n    const { transactions: transactionIds, accounts, apps } = config ?? {}\n    let snapshot = this.capturedLogs.filter(config?.filterPredicate ?? (() => true)).join('\\n')\n    transactionIds?.forEach(\n      (txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)),\n    )\n    accounts?.forEach(\n      (sender, id) =>\n        (snapshot = snapshot.replace(\n          new RegExp(\n            typeof sender === 'string'\n              ? sender\n              : 'addr' in sender\n                ? sender.addr.toString()\n                : 'address' in sender\n                  ? sender.address().toString()\n                  : sender.toString(),\n            'g',\n          ),\n          `ACCOUNT_${id + 1}`,\n        )),\n    )\n    apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\\\b${app.toString()}\\\\b(?! bytes)`, 'g'), `APP_${id + 1}`)))\n    return snapshot\n  }\n\n  error(message: string, ...optionalParams: unknown[]): void {\n    this.originalLogger?.error(message, ...optionalParams)\n    this.logs.push(`ERROR: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n  }\n  warn(message: string, ...optionalParams: unknown[]): void {\n    this.originalLogger?.warn(message, ...optionalParams)\n    this.logs.push(`WARN: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n  }\n  info(message: string, ...optionalParams: unknown[]): void {\n    this.originalLogger?.info(message, ...optionalParams)\n    this.logs.push(`INFO: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n  }\n  verbose(message: string, ...optionalParams: unknown[]): void {\n    this.originalLogger?.verbose(message, ...optionalParams)\n    this.logs.push(`VERBOSE: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n  }\n  debug(message: string, ...optionalParams: unknown[]): void {\n    this.originalLogger?.debug(message, ...optionalParams)\n    this.logs.push(`DEBUG: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n  }\n}\n"],"names":[],"mappings":"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"}