{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.2.4_jiti@2.6.1_postcss@8.5.6_typescript@5.5.4_yaml@2.8.2/node_modules/tsup/assets/esm_shims.js","../src/index.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import type {IClone, IOptions, IStatistic, ITokenLocation} from '@jscpd/core';\nimport type {IReporter} from \"@jscpd/finder\";\nimport {join} from 'path';\nimport {ensureDirSync, readJsonSync, writeFileSync} from \"fs-extra\";\nimport {green} from \"colors/safe\";\nimport {SarifBuilder, SarifResultBuilder, SarifRuleBuilder, SarifRunBuilder} from \"node-sarif-builder\";\n\n\nfunction getSourceLocation(start: ITokenLocation, end: ITokenLocation): string {\n return `${start.line}:${start.column} - ${end.line}:${end.column}`;\n}\n\nexport default class SarifReporter implements IReporter {\n constructor(private options: IOptions) {\n }\n\n public report(clones: IClone[], statistic: IStatistic): void {\n const url = \"https://github.com/kucherenko/jscpd/\";\n if (this.options.output) {\n const pkg = readJsonSync(join(__dirname, '../package.json'))\n // SARIF builder\n const sarifBuilder = new SarifBuilder();\n // SARIF Run builder\n const sarifRunBuilder = new SarifRunBuilder().initSimple({\n toolDriverName: \"jscpd\",\n toolDriverVersion: pkg.version,\n url\n });\n\n sarifRunBuilder.addRule(\n new SarifRuleBuilder().initSimple({\n ruleId: 'duplication',\n shortDescriptionText: 'Found code duplication',\n helpUri: url\n })\n )\n\n sarifRunBuilder.addRule(\n new SarifRuleBuilder().initSimple({\n ruleId: 'duplications-threshold',\n shortDescriptionText: 'Level of duplication is too high',\n helpUri: url\n })\n )\n\n\n for (const clone of clones) { // issues from your linter in any format\n const sarifResultBuilder = new SarifResultBuilder();\n // Init sarifResultBuilder\n sarifRunBuilder.addResult(\n sarifResultBuilder.initSimple(\n {\n // Transcode to a SARIF level: can be \"warning\" or \"error\" or \"note\"\n level: \"warning\",\n messageText: `Clone detected in ${clone.format}, - ${clone.duplicationA.sourceId}[${getSourceLocation(clone.duplicationA.start, clone.duplicationA.end)}] and ${clone.duplicationB.sourceId}[${getSourceLocation(clone.duplicationB.start, clone.duplicationB.end)}]`,\n ruleId: 'duplication',\n fileUri: clone.duplicationA.sourceId,\n startLine: clone.duplicationA.start.line,\n startColumn: clone.duplicationA.start.column,\n endLine: clone.duplicationA.end.line,\n endColumn: clone.duplicationA.end.column\n }\n )\n )\n }\n\n if (statistic.total?.percentage >= (this.options.threshold || 100)) {\n const sarifResultBuilderThreshold = new SarifResultBuilder();\n sarifRunBuilder.addResult(\n sarifResultBuilderThreshold.initSimple({\n level: 'error',\n messageText: `The duplication level (${statistic.total.percentage}%) is bigger than threshold (${this.options.threshold}%)`,\n ruleId: \"duplications-threshold\",\n })\n )\n }\n\n const path = join(this.options.output, 'jscpd-sarif.json');\n\n sarifBuilder.addRun(sarifRunBuilder);\n const sarifJsonString = sarifBuilder.buildSarifJsonString({ indent: false });\n ensureDirSync(this.options.output);\n writeFileSync(path, sarifJsonString);\n\n console.log(green(`SARIF report saved to ${path}`));\n }\n }\n}\n"],"mappings":";AACA,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAEjB,IAAM,cAAc,MAAM,cAAc,YAAY,GAAG;AACvD,IAAM,aAAa,MAAM,KAAK,QAAQ,YAAY,CAAC;AAE5C,IAAM,YAA4B,2BAAW;;;ACLpD,SAAQ,YAAW;AACnB,SAAQ,eAAe,cAAc,qBAAoB;AACzD,SAAQ,aAAY;AACpB,SAAQ,cAAc,oBAAoB,kBAAkB,uBAAsB;AAGlF,SAAS,kBAAkB,OAAuB,KAA6B;AAC7E,SAAO,GAAG,MAAM,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,MAAM;AAClE;AAEA,IAAqB,gBAArB,MAAwD;AAAA,EACtD,YAAoB,SAAmB;AAAnB;AAAA,EACpB;AAAA,EAEO,OAAO,QAAkB,WAA6B;AAC3D,UAAM,MAAM;AACZ,QAAI,KAAK,QAAQ,QAAQ;AACvB,YAAM,MAAM,aAAa,KAAK,WAAW,iBAAiB,CAAC;AAE3D,YAAM,eAAe,IAAI,aAAa;AAEtC,YAAM,kBAAkB,IAAI,gBAAgB,EAAE,WAAW;AAAA,QACvD,gBAAgB;AAAA,QAChB,mBAAmB,IAAI;AAAA,QACvB;AAAA,MACF,CAAC;AAED,sBAAgB;AAAA,QACd,IAAI,iBAAiB,EAAE,WAAW;AAAA,UAChC,QAAQ;AAAA,UACR,sBAAsB;AAAA,UACtB,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAEA,sBAAgB;AAAA,QACd,IAAI,iBAAiB,EAAE,WAAW;AAAA,UAChC,QAAQ;AAAA,UACR,sBAAsB;AAAA,UACtB,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAGA,iBAAW,SAAS,QAAQ;AAC1B,cAAM,qBAAqB,IAAI,mBAAmB;AAElD,wBAAgB;AAAA,UACd,mBAAmB;AAAA,YACjB;AAAA;AAAA,cAEE,OAAO;AAAA,cACP,aAAa,qBAAqB,MAAM,MAAM,OAAO,MAAM,aAAa,QAAQ,IAAI,kBAAkB,MAAM,aAAa,OAAO,MAAM,aAAa,GAAG,CAAC,SAAS,MAAM,aAAa,QAAQ,IAAI,kBAAkB,MAAM,aAAa,OAAO,MAAM,aAAa,GAAG,CAAC;AAAA,cAClQ,QAAQ;AAAA,cACR,SAAS,MAAM,aAAa;AAAA,cAC5B,WAAW,MAAM,aAAa,MAAM;AAAA,cACpC,aAAa,MAAM,aAAa,MAAM;AAAA,cACtC,SAAS,MAAM,aAAa,IAAI;AAAA,cAChC,WAAW,MAAM,aAAa,IAAI;AAAA,YACpC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,UAAU,OAAO,eAAe,KAAK,QAAQ,aAAa,MAAM;AAClE,cAAM,8BAA8B,IAAI,mBAAmB;AAC3D,wBAAgB;AAAA,UACd,4BAA4B,WAAW;AAAA,YACrC,OAAO;AAAA,YACP,aAAa,0BAA0B,UAAU,MAAM,UAAU,gCAAgC,KAAK,QAAQ,SAAS;AAAA,YACvH,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAAA,MACF;AAEA,YAAMA,QAAO,KAAK,KAAK,QAAQ,QAAQ,kBAAkB;AAEzD,mBAAa,OAAO,eAAe;AACnC,YAAM,kBAAkB,aAAa,qBAAqB,EAAE,QAAQ,MAAM,CAAC;AAC3E,oBAAc,KAAK,QAAQ,MAAM;AACjC,oBAAcA,OAAM,eAAe;AAEnC,cAAQ,IAAI,MAAM,yBAAyBA,KAAI,EAAE,CAAC;AAAA,IACpD;AAAA,EACF;AACF;","names":["path"]}