@sgohlke/stryker-log-ignorer
Version:
Log Ignorer for Stryker
1 lines • 3.36 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","names":["commonTokens","PluginKind","fs"],"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,CAACA,yCAAa,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,iDAAgBA,yCAAa,SAAS;AAExD,SAAS,kBAAkB,UAA+C;AACxE,QAAO,SAAS,YAAY,WAAW;;AAGzC,SAAS,0BAGP;AACA,QAAO;;AAGT,MAAM,iBAAiB,uDACAC,uCAAW,QAAQ,cAAc,yBAAyB,CAAC,CACjF;AAGD,MAAM,0BAA+E,KAAK,MAExFC,gBAAG,aAAa,IAAI,IAAI,oFAAsD,EAAE,OAAO,CACxF"}