{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { StrykerOptions } from '@stryker-mutator/api/core'\nimport type { Ignorer, NodePath } from '@stryker-mutator/api/ignore'\nimport type { Injector, PluginContext } from '@stryker-mutator/api/plugin'\nimport { PluginKind, commonTokens, declareFactoryPlugin, tokens } from '@stryker-mutator/api/plugin' // eslint-disable-line @typescript-eslint/no-duplicate-imports\n\nimport fs from 'node:fs'\n\n/**\n * Configuration for @sgohlke/stryker-log-ignorer\n */\ninterface IgnorerOptions {\n  /**\n   * Specify the object names of the logger objects to be ignored. Defaults to [\"console\"]\n   */\n  objectNames?: string[]\n}\n\ninterface LogIgnorerOptions extends StrykerOptions {\n  logignore?: IgnorerOptions\n}\n\n/*\n * LogIgnorer provides functionality to ignore log calls for provided logger object names.\n */\nclass LogIgnorer implements Ignorer {\n  public static inject = [commonTokens.options] as const\n  protected readonly options?: IgnorerOptions\n\n  constructor(options?: Partial<LogIgnorerOptions>) {\n    this.options = options?.logignore\n  }\n\n  shouldIgnore(path: NodePath): string | undefined {\n    const loggerObjectNames = this.options?.objectNames ?? ['console']\n    if (\n      path.isExpressionStatement() &&\n      path.node.expression.type === 'CallExpression' &&\n      path.node.expression.callee.type === 'MemberExpression' &&\n      path.node.expression.callee.object.type === 'Identifier' &&\n      loggerObjectNames.includes(path.node.expression.callee.object.name)\n    ) {\n      return `We are not interested in testing ${loggerObjectNames} statements.`\n    }\n  }\n}\n\nlogIgnorerFactory.inject = tokens(commonTokens.injector)\n\nfunction logIgnorerFactory(injector: Injector<PluginContext>): LogIgnorer {\n  return injector.injectClass(LogIgnorer)\n}\n\nfunction createLogIgnorerFactory(): {\n  (injector: Injector<PluginContext>): LogIgnorer\n  inject: ['$injector']\n} {\n  return logIgnorerFactory\n}\n\nconst strykerPlugins = [\n  declareFactoryPlugin(PluginKind.Ignore, 'log-ignore', createLogIgnorerFactory()),\n]\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nconst strykerValidationSchema: typeof import('../schema/log-ignorer-options.json') = JSON.parse(\n  // eslint-disable-next-line security/detect-non-literal-fs-filename\n  fs.readFileSync(new URL('../schema/log-ignorer-options.json', import.meta.url), 'utf8'),\n)\n\nexport {\n  LogIgnorer,\n  createLogIgnorerFactory,\n  logIgnorerFactory,\n  strykerPlugins,\n  strykerValidationSchema,\n}\nexport type { IgnorerOptions, LogIgnorerOptions }\n"],"mappings":";;;;AAwBA,IAAM,aAAN,MAAoC;CAClC,OAAc,SAAS,CAAC,aAAa,QAAQ;CAC7C,AAAmB;CAEnB,YAAY,SAAsC;AAChD,OAAK,UAAU,SAAS;;CAG1B,aAAa,MAAoC;EAC/C,MAAM,oBAAoB,KAAK,SAAS,eAAe,CAAC,UAAU;AAClE,MACE,KAAK,uBAAuB,IAC5B,KAAK,KAAK,WAAW,SAAS,oBAC9B,KAAK,KAAK,WAAW,OAAO,SAAS,sBACrC,KAAK,KAAK,WAAW,OAAO,OAAO,SAAS,gBAC5C,kBAAkB,SAAS,KAAK,KAAK,WAAW,OAAO,OAAO,KAAK,CAEnE,QAAO,oCAAoC,kBAAkB;;;AAKnE,kBAAkB,SAAS,OAAO,aAAa,SAAS;AAExD,SAAS,kBAAkB,UAA+C;AACxE,QAAO,SAAS,YAAY,WAAW;;AAGzC,SAAS,0BAGP;AACA,QAAO;;AAGT,MAAM,iBAAiB,CACrB,qBAAqB,WAAW,QAAQ,cAAc,yBAAyB,CAAC,CACjF;AAGD,MAAM,0BAA+E,KAAK,MAExF,GAAG,aAAa,IAAI,IAAI,sCAAsC,OAAO,KAAK,IAAI,EAAE,OAAO,CACxF"}