@testream/jest-reporter 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e={580:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});const i=r(896);const n=r(928);class GenerateCtrfReport{constructor(e,t,r){var n,o,s,a,u,l,c,d,p,f,m,h,_,b,y,R,T,v,U;this.reporterName="jest-ctrf-json-reporter";this.defaultOutputFile="ctrf-report.json";this.defaultOutputDir="ctrf";this.filename=this.defaultOutputFile;this.reporterConfigOptions={outputFile:(n=t===null||t===void 0?void 0:t.outputFile)!==null&&n!==void 0?n:this.defaultOutputFile,outputDir:(o=t===null||t===void 0?void 0:t.outputDir)!==null&&o!==void 0?o:this.defaultOutputDir,minimal:(s=t===null||t===void 0?void 0:t.minimal)!==null&&s!==void 0?s:false,testType:(a=t.testType)!==null&&a!==void 0?a:"unit",appName:(u=t===null||t===void 0?void 0:t.appName)!==null&&u!==void 0?u:undefined,appVersion:(l=t===null||t===void 0?void 0:t.appVersion)!==null&&l!==void 0?l:undefined,osPlatform:(c=t===null||t===void 0?void 0:t.osPlatform)!==null&&c!==void 0?c:undefined,osRelease:(d=t===null||t===void 0?void 0:t.osRelease)!==null&&d!==void 0?d:undefined,osVersion:(p=t===null||t===void 0?void 0:t.osVersion)!==null&&p!==void 0?p:undefined,buildName:(f=t===null||t===void 0?void 0:t.buildName)!==null&&f!==void 0?f:undefined,buildNumber:(m=t===null||t===void 0?void 0:t.buildNumber)!==null&&m!==void 0?m:undefined,buildUrl:(h=t===null||t===void 0?void 0:t.buildUrl)!==null&&h!==void 0?h:undefined,repositoryName:(_=t===null||t===void 0?void 0:t.repositoryName)!==null&&_!==void 0?_:undefined,repositoryUrl:(b=t===null||t===void 0?void 0:t.repositoryUrl)!==null&&b!==void 0?b:undefined,branchName:(y=t===null||t===void 0?void 0:t.branchName)!==null&&y!==void 0?y:undefined,testEnvironment:(R=t===null||t===void 0?void 0:t.testEnvironment)!==null&&R!==void 0?R:undefined};this.ctrfReport={results:{tool:{name:"jest"},summary:{tests:0,passed:0,failed:0,pending:0,skipped:0,other:0,start:0,stop:0},tests:[]}};this.ctrfEnvironment={};if(((T=this.reporterConfigOptions)===null||T===void 0?void 0:T.outputFile)!==undefined)this.setFilename(this.reporterConfigOptions.outputFile);if(!i.existsSync((v=this.reporterConfigOptions.outputDir)!==null&&v!==void 0?v:this.defaultOutputDir)){i.mkdirSync((U=this.reporterConfigOptions.outputDir)!==null&&U!==void 0?U:this.defaultOutputDir,{recursive:true})}}onRunStart(){var e;this.ctrfReport.results.summary.start=Date.now();this.setEnvironmentDetails((e=this.reporterConfigOptions)!==null&&e!==void 0?e:{});if(this.hasEnvironmentDetails(this.ctrfEnvironment)){this.ctrfReport.results.environment=this.ctrfEnvironment}}onTestStart(){}onTestResult(e,t){this.updateCtrfTestResultsFromTestResult(t);this.updateTotalsFromTestResult(t)}onRunComplete(){this.ctrfReport.results.summary.stop=Date.now();this.writeReportToFile(this.ctrfReport)}setFilename(e){if(e.endsWith(".json")){this.filename=e}else{this.filename=`${e}.json`}}updateCtrfTestResultsFromTestResult(e){e.testResults.forEach((t=>{var r,i,n,o;const s={name:t.fullName,duration:(r=t.duration)!==null&&r!==void 0?r:0,status:this.mapStatus(t.status)};if(this.reporterConfigOptions.minimal===false){s.message=this.extractFailureDetails(t).message;s.trace=this.extractFailureDetails(t).trace;s.rawStatus=t.status;s.type=(i=this.reporterConfigOptions.testType)!==null&&i!==void 0?i:"unit";s.filePath=e.testFilePath;s.retries=((n=t.invocations)!==null&&n!==void 0?n:1)-1;s.flaky=t.status==="passed"&&((o=t.invocations)!==null&&o!==void 0?o:1)-1>0;s.suite=this.buildSuitePath(e,t)}this.ctrfReport.results.tests.push(s)}))}extractFailureDetails(e){var t;const r=/^\s{4}at/mu;const i=/\x1b\[\d+m/gmu;if(e.status==="failed"&&e.failureMessages!==undefined){const n={};if(e.failureMessages!==undefined){const t=e.failureMessages.join("\n");const o=t.match(r);n.message=t.slice(0,o===null||o===void 0?void 0:o.index).replace(i,"");n.trace=t.slice(o===null||o===void 0?void 0:o.index).split("\n").map((e=>e.trim())).join("\n")}if(e.failureDetails!==undefined){n.trace=(t=n.trace)===null||t===void 0?void 0:t.concat("\n\n",e.failureDetails.join("\n"))}return n}return{}}updateTotalsFromTestResult(e){e.testResults.forEach((e=>{const t=this.mapStatus(e.status);this.ctrfReport.results.summary[t]++;this.ctrfReport.results.summary.tests++}))}mapStatus(e){switch(e){case"passed":return"passed";case"failed":return"failed";case"skipped":return"skipped";case"pending":return"pending";case"todo":case"disabled":case"focused":default:return"other"}}setEnvironmentDetails(e){if(e.appName!==undefined){this.ctrfEnvironment.appName=e.appName}if(e.appVersion!==undefined){this.ctrfEnvironment.appVersion=e.appVersion}if(e.osPlatform!==undefined){this.ctrfEnvironment.osPlatform=e.osPlatform}if(e.osRelease!==undefined){this.ctrfEnvironment.osRelease=e.osRelease}if(e.osVersion!==undefined){this.ctrfEnvironment.osVersion=e.osVersion}if(e.buildName!==undefined){this.ctrfEnvironment.buildName=e.buildName}if(e.buildNumber!==undefined){this.ctrfEnvironment.buildNumber=e.buildNumber}if(e.buildUrl!==undefined){this.ctrfEnvironment.buildUrl=e.buildUrl}if(e.repositoryName!==undefined){this.ctrfEnvironment.repositoryName=e.repositoryName}if(e.repositoryUrl!==undefined){this.ctrfEnvironment.repositoryUrl=e.repositoryUrl}if(e.branchName!==undefined){this.ctrfEnvironment.branchName=e.branchName}if(e.testEnvironment!==undefined){this.ctrfEnvironment.testEnvironment=e.testEnvironment}}hasEnvironmentDetails(e){return Object.keys(e).length>0}buildSuitePath(e,t){var r;const i=(r=e.testFilePath.split("/").pop())!==null&&r!==void 0?r:"";const n=[i,...t.ancestorTitles];return n.join(" > ")}writeReportToFile(e){var t;const r=n.join((t=this.reporterConfigOptions.outputDir)!==null&&t!==void 0?t:this.defaultOutputDir,this.filename);const o=JSON.stringify(e,null,2);try{i.writeFileSync(r,o+"\n");console.log(`${this.reporterName}: successfully written ctrf json to %s/%s`,this.reporterConfigOptions.outputDir,this.filename)}catch(e){console.error(`Error writing ctrf json report:, ${String(e)}`)}}}t["default"]=GenerateCtrfReport},764:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var i=r(580);Object.defineProperty(t,"default",{enumerable:true,get:function(){return i.default}})},406:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.detectCIContext=detectCIContext;function detectCIContext(){const e=process.env;if(e.GITHUB_ACTIONS==="true"){return{branch:e.GITHUB_HEAD_REF||e.GITHUB_REF_NAME||e.GITHUB_REF?.replace("refs/heads/",""),commitSha:e.GITHUB_SHA,repositoryUrl:e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}`:undefined,buildNumber:e.GITHUB_RUN_NUMBER,buildUrl:e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY&&e.GITHUB_RUN_ID?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}/actions/runs/${e.GITHUB_RUN_ID}`:undefined}}if(e.GITLAB_CI==="true"){return{branch:e.CI_COMMIT_BRANCH||e.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,commitSha:e.CI_COMMIT_SHA,repositoryUrl:e.CI_PROJECT_URL,buildNumber:e.CI_PIPELINE_IID,buildUrl:e.CI_PIPELINE_URL}}if(e.TF_BUILD==="True"){return{branch:e.BUILD_SOURCEBRANCH?.replace("refs/heads/",""),commitSha:e.BUILD_SOURCEVERSION,repositoryUrl:e.BUILD_REPOSITORY_URI,buildNumber:e.BUILD_BUILDNUMBER,buildUrl:e.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI&&e.SYSTEM_TEAMPROJECT&&e.BUILD_BUILDID?`${e.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${e.SYSTEM_TEAMPROJECT}/_build/results?buildId=${e.BUILD_BUILDID}`:undefined}}if(e.CIRCLECI==="true"){return{branch:e.CIRCLE_BRANCH,commitSha:e.CIRCLE_SHA1,repositoryUrl:e.CIRCLE_REPOSITORY_URL,buildNumber:e.CIRCLE_BUILD_NUM,buildUrl:e.CIRCLE_BUILD_URL}}if(e.JENKINS_URL){return{branch:e.GIT_BRANCH?.replace("origin/",""),commitSha:e.GIT_COMMIT,repositoryUrl:e.GIT_URL,buildNumber:e.BUILD_NUMBER,buildUrl:e.BUILD_URL}}if(e.BITBUCKET_BUILD_NUMBER){return{branch:e.BITBUCKET_BRANCH,commitSha:e.BITBUCKET_COMMIT,repositoryUrl:e.BITBUCKET_GIT_HTTP_ORIGIN,buildNumber:e.BITBUCKET_BUILD_NUMBER,buildUrl:e.BITBUCKET_REPO_FULL_NAME&&e.BITBUCKET_BUILD_NUMBER?`https://bitbucket.org/${e.BITBUCKET_REPO_FULL_NAME}/pipelines/results/${e.BITBUCKET_BUILD_NUMBER}`:undefined}}return{}}},827:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true})},322:function(e,t,r){var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){if(i===undefined)i=r;var n=Object.getOwnPropertyDescriptor(t,r);if(!n||("get"in n?!t.__esModule:n.writable||n.configurable)){n={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,i,n)}:function(e,t,r,i){if(i===undefined)i=r;e[i]=t[r]});var n=this&&this.__exportStar||function(e,t){for(var r in e)if(r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r))i(t,e,r)};Object.defineProperty(t,"__esModule",{value:true});t.ensureReportId=t.mapAttachmentsToTestResults=t.uploadArtifacts=t.uploadTestRun=t.detectCIContext=void 0;n(r(827),t);var o=r(406);Object.defineProperty(t,"detectCIContext",{enumerable:true,get:function(){return o.detectCIContext}});var s=r(969);Object.defineProperty(t,"uploadTestRun",{enumerable:true,get:function(){return s.uploadTestRun}});Object.defineProperty(t,"uploadArtifacts",{enumerable:true,get:function(){return s.uploadArtifacts}});Object.defineProperty(t,"mapAttachmentsToTestResults",{enumerable:true,get:function(){return s.mapAttachmentsToTestResults}});Object.defineProperty(t,"ensureReportId",{enumerable:true,get:function(){return s.ensureReportId}})},969:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.ensureReportId=ensureReportId;t.uploadTestRun=uploadTestRun;t.mapAttachmentsToTestResults=mapAttachmentsToTestResults;t.uploadArtifacts=uploadArtifacts;const i="https://test-manager-backend.fly.dev";function ensureReportId(e){if(typeof e.reportId==="string"&&e.reportId.trim().length>0){return e.reportId}const t=crypto.randomUUID();e.reportId=t;return t}function resolveApiUrl(e){const t=normalizeApiUrl(e);if(t){return t}const r=getEnvApiUrl();if(r){return r}return i}function getEnvApiUrl(){if(typeof process==="undefined"||!process?.env){return undefined}return normalizeApiUrl(process.env.TESTREAM_API_URL)}function normalizeApiUrl(e){if(!e){return undefined}const t=e.trim();if(!t){return undefined}return t.replace(/\/+$/,"")}async function uploadTestRun(e){const{report:t,apiKey:r}=e;const i=resolveApiUrl(e.apiUrl);const n=ensureReportId(t);const o={report:t,reportId:n,commitSha:e.commitSha,branch:e.branch,repositoryUrl:e.repositoryUrl,buildName:e.buildName,buildNumber:e.buildNumber,buildUrl:e.buildUrl,testEnvironment:e.testEnvironment,appName:e.appName,appVersion:e.appVersion,testType:e.testType};console.log("Uploading test results...");let s;try{s=await fetch(`${i}/api/v1/ingest`,{method:"POST",headers:{"X-API-KEY":r,"Content-Type":"application/json"},body:JSON.stringify(o)})}catch(e){const t=e instanceof Error?e.message:String(e);return{success:false,reportId:n,error:`Connection failed: ${t}`}}if(s.status===409){console.warn("Report already exists (workflow may have been re-run)");return{success:true,reportId:n,summary:{passed:t.results.summary.passed,failed:t.results.summary.failed,skipped:t.results.summary.skipped,total:t.results.summary.tests},alreadyExists:true}}if(!s.ok){const e=await s.text();return{success:false,reportId:n,error:`Upload failed (HTTP ${s.status}): ${e}`}}const a=await s.json();console.log(`✓ Test results uploaded successfully`);console.log(` Report ID: ${a.reportId}`);console.log(` Test Run ID: ${a.testRunId}`);console.log(` Tests: ${a.summary.passed}/${a.summary.total} passed`);return{success:true,reportId:a.reportId,testRunId:a.testRunId,summary:{passed:a.summary.passed,failed:a.summary.failed,skipped:a.summary.skipped,total:a.summary.total},testResults:a.testResults}}function mapAttachmentsToTestResults(e,t){const r=new Map;for(const e of t){const t=r.get(e.name)??[];t.push(e.id);r.set(e.name,t)}const i=[];for(const t of e){const e=r.get(t.name);const n=e?.shift();if(!t.attachments||t.attachments.length===0){continue}if(!n){console.warn(`Skipping artifact upload: could not match test result for "${t.name}"`);continue}i.push({testResultId:n,attachments:t.attachments})}return i}async function uploadArtifacts(e){const{reportId:t,apiKey:r,testResults:i}=e;const n=resolveApiUrl(e.apiUrl);let o=0;for(const e of i){for(const i of e.attachments){try{const s=await uploadSingleArtifact({testResultId:e.testResultId,attachment:i,reportId:t,apiKey:r,apiUrl:n});if(s)o++}catch(e){const t=e instanceof Error?e.message:String(e);console.error(`Failed to upload artifact ${i.name}: ${t}`)}}}if(o>0){console.log(`✓ Uploaded ${o} artifact(s)`)}return o}async function uploadSingleArtifact(e){const{testResultId:t,attachment:i,reportId:n,apiKey:o,apiUrl:s}=e;const a=await Promise.resolve().then(r.t.bind(r,943,23));const u=await Promise.resolve().then(r.t.bind(r,928,23));const l=u.resolve(i.path);try{await a.access(l)}catch{console.warn(`Artifact not found: ${u.basename(l)}`);return false}let c;let d;const p=u.basename(l);const f=i.contentType||"application/octet-stream";try{c=await a.readFile(l);d=c.byteLength}catch(e){const t=e instanceof Error?e.message:String(e);throw new Error(`Failed to read file: ${t}`)}try{return await uploadWithPresignedUrl({testResultId:t,reportId:n,apiKey:o,apiUrl:s,attachmentName:i.name,fileName:p,contentType:f,sizeBytes:d,fileBuffer:c})}catch(e){if(!(e instanceof LegacyUploadRequiredError)){throw e}return await uploadWithLegacyEndpoint({testResultId:t,attachmentName:i.name,reportId:n,apiKey:o,apiUrl:s,fileName:p,contentType:f,fileBuffer:c})}}class LegacyUploadRequiredError extends Error{constructor(){super("Legacy upload endpoint required")}}async function uploadWithPresignedUrl(e){const{testResultId:t,reportId:r,apiKey:i,apiUrl:n,attachmentName:o,fileName:s,contentType:a,sizeBytes:u,fileBuffer:l}=e;const c={testResultId:t,ctrfAttachmentName:o,fileName:s,contentType:a,sizeBytes:u};const d=await fetch(`${n}/api/v1/artifacts/${r}/upload-url`,{method:"POST",headers:{"X-API-KEY":i,"Content-Type":"application/json"},body:JSON.stringify(c)});if(shouldFallbackToLegacyUpload(d.status)){throw new LegacyUploadRequiredError}if(!d.ok){const e=await d.text();throw new Error(`Failed to create direct upload URL (HTTP ${d.status}): ${e}`)}const p=await d.json();const f={...p.requiredHeaders??{}};if(!hasHeaderIgnoreCase(f,"Content-Type")){f["Content-Type"]=a}const m=await fetch(p.uploadUrl,{method:"PUT",headers:f,body:l});if(!m.ok){const e=await m.text();throw new Error(`Direct artifact upload failed (HTTP ${m.status}): ${e}`)}const h={testResultId:t,ctrfAttachmentName:o,fileName:s,contentType:a,sizeBytes:u,storageKey:p.storageKey};const _=await fetch(`${n}/api/v1/artifacts/${r}/complete`,{method:"POST",headers:{"X-API-KEY":i,"Content-Type":"application/json"},body:JSON.stringify(h)});if(!_.ok){const e=await _.text();throw new Error(`Failed to finalize artifact upload (HTTP ${_.status}): ${e}`)}return true}async function uploadWithLegacyEndpoint(e){const{testResultId:t,attachmentName:r,reportId:i,apiKey:n,apiUrl:o,fileName:s,contentType:a,fileBuffer:u}=e;const l=new Blob([new Uint8Array(u)],{type:a});const c=new FormData;c.append("testResultId",t);c.append("ctrfAttachmentName",r);c.append("file",l,s);const d=await fetch(`${o}/api/v1/artifacts/${i}`,{method:"POST",headers:{"X-API-KEY":n},body:c});if(!d.ok){const e=await d.text();throw new Error(`Legacy artifact upload failed (HTTP ${d.status}): ${e}`)}return true}function shouldFallbackToLegacyUpload(e){return e===404||e===405||e===501}function hasHeaderIgnoreCase(e,t){const r=t.toLowerCase();return Object.keys(e).some((e=>e.toLowerCase()===r))}},665:function(e,t,r){var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){if(i===undefined)i=r;var n=Object.getOwnPropertyDescriptor(t,r);if(!n||("get"in n?!t.__esModule:n.writable||n.configurable)){n={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,i,n)}:function(e,t,r,i){if(i===undefined)i=r;e[i]=t[r]});var n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(){var ownKeys=function(e){ownKeys=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r))t[t.length]=r;return t};return ownKeys(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=ownKeys(e),o=0;o<r.length;o++)if(r[o]!=="default")i(t,e,r[o]);n(t,e);return t}}();var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.TestreamJestReporter=void 0;const a=s(r(764));const u=o(r(943));const l=o(r(928));const c=r(322);const d=r(10);class TestreamJestReporter{constructor(e,t={apiKey:"",uploadEnabled:true},r={}){this.outputDir="ctrf";this.outputFile="ctrf-report.json";this.config={uploadEnabled:true,failOnUploadError:false,...t};const i={outputDir:this.outputDir,outputFile:this.outputFile};if(this.config.testEnvironment)i.testEnvironment=this.config.testEnvironment;if(this.config.appName)i.appName=this.config.appName;if(this.config.appVersion)i.appVersion=this.config.appVersion;if(this.config.buildName)i.buildName=this.config.buildName;if(this.config.buildNumber)i.buildNumber=this.config.buildNumber;if(this.config.buildUrl)i.buildUrl=this.config.buildUrl;if(this.config.testType)i.testType=this.config.testType;if(this.config.branch)i.branchName=this.config.branch;if(this.config.commitSha)i.commit=this.config.commitSha;this.ctrfReporter=new a.default(e,i,r)}onRunStart(e,t){if(this.ctrfReporter.onRunStart){return this.ctrfReporter.onRunStart()}}onTestStart(e){if(this.ctrfReporter.onTestStart){return this.ctrfReporter.onTestStart()}}onTestResult(e,t,r){if(this.ctrfReporter.onTestResult){return this.ctrfReporter.onTestResult(e,t)}}async onRunComplete(e,t){if(this.ctrfReporter.onRunComplete){await this.ctrfReporter.onRunComplete()}const r=await this.readCTRFReport();if(!r){console.error("Failed to read CTRF report, skipping upload");return}console.info(`CTRF report written to: ${l.join(this.outputDir,this.outputFile)}`);if(this.config.uploadEnabled&&this.config.apiKey){await this.uploadReport(r)}}async readCTRFReport(){const e=l.join(this.outputDir,this.outputFile);try{const t=await u.readFile(e,"utf-8");const r=JSON.parse(t);r.results.tool.name="jest";return r}catch(t){console.error(`Failed to read CTRF report from ${e}: ${t instanceof Error?t.message:String(t)}`);return null}}async uploadReport(e){const t=(0,c.detectCIContext)();const r=this.config.branch||t.branch;const i=this.config.commitSha||t.commitSha;const n=this.config.repositoryUrl||t.repositoryUrl;const o=this.config.buildNumber||t.buildNumber;const s=this.config.buildUrl||t.buildUrl;const a=await(0,d.uploadToApi)({report:e,apiKey:this.config.apiKey,branch:r,commitSha:i,repositoryUrl:n,buildName:this.config.buildName,buildNumber:o,buildUrl:s,testEnvironment:this.config.testEnvironment,appName:this.config.appName,appVersion:this.config.appVersion,testType:this.config.testType});if(!a.success&&this.config.failOnUploadError){throw new Error(`Upload failed: ${a.error}`)}}}t.TestreamJestReporter=TestreamJestReporter;t["default"]=TestreamJestReporter},10:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.detectGitContext=void 0;t.uploadToApi=uploadToApi;const i=r(322);async function uploadToApi(e){return(0,i.uploadTestRun)({report:e.report,apiKey:e.apiKey,apiUrl:e.apiUrl,commitSha:e.commitSha,branch:e.branch,repositoryUrl:e.repositoryUrl,buildName:e.buildName,buildNumber:e.buildNumber,buildUrl:e.buildUrl,testEnvironment:e.testEnvironment,appName:e.appName,appVersion:e.appVersion,testType:e.testType})}t.detectGitContext=i.detectCIContext},896:e=>{e.exports=require("fs")},943:e=>{e.exports=require("fs/promises")},928:e=>{e.exports=require("path")}};var t={};function __nccwpck_require__(r){var i=t[r];if(i!==undefined){return i.exports}var n=t[r]={exports:{}};var o=true;try{e[r].call(n.exports,n,n.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return n.exports}(()=>{var e=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;var t;__nccwpck_require__.t=function(r,i){if(i&1)r=this(r);if(i&8)return r;if(typeof r==="object"&&r){if(i&4&&r.__esModule)return r;if(i&16&&typeof r.then==="function")return r}var n=Object.create(null);__nccwpck_require__.r(n);var o={};t=t||[null,e({}),e([]),e(e)];for(var s=i&2&&r;typeof s=="object"&&!~t.indexOf(s);s=e(s)){Object.getOwnPropertyNames(s).forEach((e=>o[e]=()=>r[e]))}o["default"]=()=>r;__nccwpck_require__.d(n,o);return n}})();(()=>{__nccwpck_require__.d=(e,t)=>{for(var r in t){if(__nccwpck_require__.o(t,r)&&!__nccwpck_require__.o(e,r)){Object.defineProperty(e,r,{enumerable:true,get:t[r]})}}}})();(()=>{__nccwpck_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})();(()=>{__nccwpck_require__.r=e=>{if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})}})();if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r={};(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:true});e.TestreamJestReporter=e["default"]=void 0;var t=__nccwpck_require__(665);Object.defineProperty(e,"default",{enumerable:true,get:function(){return t.TestreamJestReporter}});var i=__nccwpck_require__(665);Object.defineProperty(e,"TestreamJestReporter",{enumerable:true,get:function(){return i.TestreamJestReporter}})})();module.exports=r})();
|
|
1
|
+
(()=>{"use strict";var e={580:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});const o=r(896);const i=r(928);class GenerateCtrfReport{constructor(e,t,r){var i,n,s,a,u,l,d,c,p,f,m,h,_,b,y,R,v,T,U;this.reporterName="jest-ctrf-json-reporter";this.defaultOutputFile="ctrf-report.json";this.defaultOutputDir="ctrf";this.filename=this.defaultOutputFile;this.reporterConfigOptions={outputFile:(i=t===null||t===void 0?void 0:t.outputFile)!==null&&i!==void 0?i:this.defaultOutputFile,outputDir:(n=t===null||t===void 0?void 0:t.outputDir)!==null&&n!==void 0?n:this.defaultOutputDir,minimal:(s=t===null||t===void 0?void 0:t.minimal)!==null&&s!==void 0?s:false,testType:(a=t.testType)!==null&&a!==void 0?a:"unit",appName:(u=t===null||t===void 0?void 0:t.appName)!==null&&u!==void 0?u:undefined,appVersion:(l=t===null||t===void 0?void 0:t.appVersion)!==null&&l!==void 0?l:undefined,osPlatform:(d=t===null||t===void 0?void 0:t.osPlatform)!==null&&d!==void 0?d:undefined,osRelease:(c=t===null||t===void 0?void 0:t.osRelease)!==null&&c!==void 0?c:undefined,osVersion:(p=t===null||t===void 0?void 0:t.osVersion)!==null&&p!==void 0?p:undefined,buildName:(f=t===null||t===void 0?void 0:t.buildName)!==null&&f!==void 0?f:undefined,buildNumber:(m=t===null||t===void 0?void 0:t.buildNumber)!==null&&m!==void 0?m:undefined,buildUrl:(h=t===null||t===void 0?void 0:t.buildUrl)!==null&&h!==void 0?h:undefined,repositoryName:(_=t===null||t===void 0?void 0:t.repositoryName)!==null&&_!==void 0?_:undefined,repositoryUrl:(b=t===null||t===void 0?void 0:t.repositoryUrl)!==null&&b!==void 0?b:undefined,branchName:(y=t===null||t===void 0?void 0:t.branchName)!==null&&y!==void 0?y:undefined,testEnvironment:(R=t===null||t===void 0?void 0:t.testEnvironment)!==null&&R!==void 0?R:undefined};this.ctrfReport={results:{tool:{name:"jest"},summary:{tests:0,passed:0,failed:0,pending:0,skipped:0,other:0,start:0,stop:0},tests:[]}};this.ctrfEnvironment={};if(((v=this.reporterConfigOptions)===null||v===void 0?void 0:v.outputFile)!==undefined)this.setFilename(this.reporterConfigOptions.outputFile);if(!o.existsSync((T=this.reporterConfigOptions.outputDir)!==null&&T!==void 0?T:this.defaultOutputDir)){o.mkdirSync((U=this.reporterConfigOptions.outputDir)!==null&&U!==void 0?U:this.defaultOutputDir,{recursive:true})}}onRunStart(){var e;this.ctrfReport.results.summary.start=Date.now();this.setEnvironmentDetails((e=this.reporterConfigOptions)!==null&&e!==void 0?e:{});if(this.hasEnvironmentDetails(this.ctrfEnvironment)){this.ctrfReport.results.environment=this.ctrfEnvironment}}onTestStart(){}onTestResult(e,t){this.updateCtrfTestResultsFromTestResult(t);this.updateTotalsFromTestResult(t)}onRunComplete(){this.ctrfReport.results.summary.stop=Date.now();this.writeReportToFile(this.ctrfReport)}setFilename(e){if(e.endsWith(".json")){this.filename=e}else{this.filename=`${e}.json`}}updateCtrfTestResultsFromTestResult(e){e.testResults.forEach((t=>{var r,o,i,n;const s={name:t.fullName,duration:(r=t.duration)!==null&&r!==void 0?r:0,status:this.mapStatus(t.status)};if(this.reporterConfigOptions.minimal===false){s.message=this.extractFailureDetails(t).message;s.trace=this.extractFailureDetails(t).trace;s.rawStatus=t.status;s.type=(o=this.reporterConfigOptions.testType)!==null&&o!==void 0?o:"unit";s.filePath=e.testFilePath;s.retries=((i=t.invocations)!==null&&i!==void 0?i:1)-1;s.flaky=t.status==="passed"&&((n=t.invocations)!==null&&n!==void 0?n:1)-1>0;s.suite=this.buildSuitePath(e,t)}this.ctrfReport.results.tests.push(s)}))}extractFailureDetails(e){var t;const r=/^\s{4}at/mu;const o=/\x1b\[\d+m/gmu;if(e.status==="failed"&&e.failureMessages!==undefined){const i={};if(e.failureMessages!==undefined){const t=e.failureMessages.join("\n");const n=t.match(r);i.message=t.slice(0,n===null||n===void 0?void 0:n.index).replace(o,"");i.trace=t.slice(n===null||n===void 0?void 0:n.index).split("\n").map((e=>e.trim())).join("\n")}if(e.failureDetails!==undefined){i.trace=(t=i.trace)===null||t===void 0?void 0:t.concat("\n\n",e.failureDetails.join("\n"))}return i}return{}}updateTotalsFromTestResult(e){e.testResults.forEach((e=>{const t=this.mapStatus(e.status);this.ctrfReport.results.summary[t]++;this.ctrfReport.results.summary.tests++}))}mapStatus(e){switch(e){case"passed":return"passed";case"failed":return"failed";case"skipped":return"skipped";case"pending":return"pending";case"todo":case"disabled":case"focused":default:return"other"}}setEnvironmentDetails(e){if(e.appName!==undefined){this.ctrfEnvironment.appName=e.appName}if(e.appVersion!==undefined){this.ctrfEnvironment.appVersion=e.appVersion}if(e.osPlatform!==undefined){this.ctrfEnvironment.osPlatform=e.osPlatform}if(e.osRelease!==undefined){this.ctrfEnvironment.osRelease=e.osRelease}if(e.osVersion!==undefined){this.ctrfEnvironment.osVersion=e.osVersion}if(e.buildName!==undefined){this.ctrfEnvironment.buildName=e.buildName}if(e.buildNumber!==undefined){this.ctrfEnvironment.buildNumber=e.buildNumber}if(e.buildUrl!==undefined){this.ctrfEnvironment.buildUrl=e.buildUrl}if(e.repositoryName!==undefined){this.ctrfEnvironment.repositoryName=e.repositoryName}if(e.repositoryUrl!==undefined){this.ctrfEnvironment.repositoryUrl=e.repositoryUrl}if(e.branchName!==undefined){this.ctrfEnvironment.branchName=e.branchName}if(e.testEnvironment!==undefined){this.ctrfEnvironment.testEnvironment=e.testEnvironment}}hasEnvironmentDetails(e){return Object.keys(e).length>0}buildSuitePath(e,t){var r;const o=(r=e.testFilePath.split("/").pop())!==null&&r!==void 0?r:"";const i=[o,...t.ancestorTitles];return i.join(" > ")}writeReportToFile(e){var t;const r=i.join((t=this.reporterConfigOptions.outputDir)!==null&&t!==void 0?t:this.defaultOutputDir,this.filename);const n=JSON.stringify(e,null,2);try{o.writeFileSync(r,n+"\n");console.log(`${this.reporterName}: successfully written ctrf json to %s/%s`,this.reporterConfigOptions.outputDir,this.filename)}catch(e){console.error(`Error writing ctrf json report:, ${String(e)}`)}}}t["default"]=GenerateCtrfReport},764:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var o=r(580);Object.defineProperty(t,"default",{enumerable:true,get:function(){return o.default}})},406:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.detectCIContext=detectCIContext;function detectCIContext(){const e=process.env;if(e.GITHUB_ACTIONS==="true"){return{branch:e.GITHUB_HEAD_REF||e.GITHUB_REF_NAME||e.GITHUB_REF?.replace("refs/heads/",""),commitSha:e.GITHUB_SHA,repositoryUrl:e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}`:undefined,buildNumber:e.GITHUB_RUN_NUMBER,buildUrl:e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY&&e.GITHUB_RUN_ID?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}/actions/runs/${e.GITHUB_RUN_ID}`:undefined}}if(e.GITLAB_CI==="true"){return{branch:e.CI_COMMIT_BRANCH||e.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,commitSha:e.CI_COMMIT_SHA,repositoryUrl:e.CI_PROJECT_URL,buildNumber:e.CI_PIPELINE_IID,buildUrl:e.CI_PIPELINE_URL}}if(e.TF_BUILD==="True"){return{branch:e.BUILD_SOURCEBRANCH?.replace("refs/heads/",""),commitSha:e.BUILD_SOURCEVERSION,repositoryUrl:e.BUILD_REPOSITORY_URI,buildNumber:e.BUILD_BUILDNUMBER,buildUrl:e.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI&&e.SYSTEM_TEAMPROJECT&&e.BUILD_BUILDID?`${e.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${e.SYSTEM_TEAMPROJECT}/_build/results?buildId=${e.BUILD_BUILDID}`:undefined}}if(e.CIRCLECI==="true"){return{branch:e.CIRCLE_BRANCH,commitSha:e.CIRCLE_SHA1,repositoryUrl:e.CIRCLE_REPOSITORY_URL,buildNumber:e.CIRCLE_BUILD_NUM,buildUrl:e.CIRCLE_BUILD_URL}}if(e.JENKINS_URL){return{branch:e.GIT_BRANCH?.replace("origin/",""),commitSha:e.GIT_COMMIT,repositoryUrl:e.GIT_URL,buildNumber:e.BUILD_NUMBER,buildUrl:e.BUILD_URL}}if(e.BITBUCKET_BUILD_NUMBER){return{branch:e.BITBUCKET_BRANCH,commitSha:e.BITBUCKET_COMMIT,repositoryUrl:e.BITBUCKET_GIT_HTTP_ORIGIN,buildNumber:e.BITBUCKET_BUILD_NUMBER,buildUrl:e.BITBUCKET_REPO_FULL_NAME&&e.BITBUCKET_BUILD_NUMBER?`https://bitbucket.org/${e.BITBUCKET_REPO_FULL_NAME}/pipelines/results/${e.BITBUCKET_BUILD_NUMBER}`:undefined}}return{}}},827:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true})},322:function(e,t,r){var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){if(o===undefined)o=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,o,i)}:function(e,t,r,o){if(o===undefined)o=r;e[o]=t[r]});var i=this&&this.__exportStar||function(e,t){for(var r in e)if(r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r))o(t,e,r)};Object.defineProperty(t,"__esModule",{value:true});t.ensureReportId=t.mapAttachmentsToTestResults=t.uploadArtifacts=t.uploadTestRun=t.detectCIContext=void 0;i(r(827),t);var n=r(406);Object.defineProperty(t,"detectCIContext",{enumerable:true,get:function(){return n.detectCIContext}});var s=r(969);Object.defineProperty(t,"uploadTestRun",{enumerable:true,get:function(){return s.uploadTestRun}});Object.defineProperty(t,"uploadArtifacts",{enumerable:true,get:function(){return s.uploadArtifacts}});Object.defineProperty(t,"mapAttachmentsToTestResults",{enumerable:true,get:function(){return s.mapAttachmentsToTestResults}});Object.defineProperty(t,"ensureReportId",{enumerable:true,get:function(){return s.ensureReportId}})},969:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.ensureReportId=ensureReportId;t.uploadTestRun=uploadTestRun;t.mapAttachmentsToTestResults=mapAttachmentsToTestResults;t.uploadArtifacts=uploadArtifacts;const o=r(406);const i="https://test-manager-backend.fly.dev";function ensureReportId(e){if(typeof e.reportId==="string"&&e.reportId.trim().length>0){return e.reportId}const t=crypto.randomUUID();e.reportId=t;return t}function resolveApiUrl(e){const t=normalizeApiUrl(e);if(t){return t}const r=getEnvApiUrl();if(r){return r}return i}function getEnvApiUrl(){if(typeof process==="undefined"||!process?.env){return undefined}return normalizeApiUrl(process.env.TESTREAM_API_URL)}function normalizeApiUrl(e){if(!e){return undefined}const t=e.trim();if(!t){return undefined}return t.replace(/\/+$/,"")}function isReportAlreadyExistsConflict(e){return e.errorCode==="report_already_exists"}function formatUploadError(e){const t=e.detail||e.title||e.rawBody||"Unknown error";const r=e.errorCode?`, code=${e.errorCode}`:"";return`Upload failed (HTTP ${e.statusCode}${r}): ${t}`}async function parseHttpError(e){const t=await e.text();const r=e.headers.get("content-type")||"";if(r.toLowerCase().includes("json")&&t.trim().length>0){try{const r=JSON.parse(t);return{statusCode:e.status,title:r.title,detail:r.detail||r.details||r.error,errorCode:r.errorCode,rawBody:t}}catch{}}return{statusCode:e.status,rawBody:t}}function resolveUploadContext(e){const t=(0,o.detectCIContext)();return{commitSha:e.commitSha??t.commitSha,branch:e.branch??t.branch,repositoryUrl:e.repositoryUrl??t.repositoryUrl,buildName:e.buildName,buildNumber:e.buildNumber??t.buildNumber,buildUrl:e.buildUrl??t.buildUrl,testEnvironment:e.testEnvironment,appName:e.appName,appVersion:e.appVersion,testType:e.testType}}async function uploadTestRun(e){const{report:t,apiKey:r}=e;const o=resolveApiUrl(e.apiUrl);const i=ensureReportId(t);const n=resolveUploadContext(e);const s={report:t,reportId:i,...n};console.log("Uploading test results...");let a;try{a=await fetch(`${o}/api/v1/ingest`,{method:"POST",headers:{"X-API-KEY":r,"Content-Type":"application/json"},body:JSON.stringify(s)})}catch(e){const t=e instanceof Error?e.message:String(e);const r=`Connection failed: ${t}`;console.error(r);return{success:false,reportId:i,error:r}}if(!a.ok){const e=await parseHttpError(a);if(a.status===409&&isReportAlreadyExistsConflict(e)){console.warn("Report already exists (workflow may have been re-run)");return{success:true,reportId:i,summary:{passed:t.results.summary.passed,failed:t.results.summary.failed,skipped:t.results.summary.skipped,total:t.results.summary.tests},alreadyExists:true,statusCode:e.statusCode,errorCode:e.errorCode}}const r=formatUploadError(e);console.error(r);return{success:false,reportId:i,error:r,statusCode:e.statusCode,errorCode:e.errorCode,errorDetail:e.detail||e.rawBody}}const u=await a.json();console.log(`✓ Test results uploaded successfully`);console.log(` Report ID: ${u.reportId}`);console.log(` Test Run ID: ${u.testRunId}`);console.log(` Tests: ${u.summary.passed}/${u.summary.total} passed`);return{success:true,reportId:u.reportId,testRunId:u.testRunId,summary:{passed:u.summary.passed,failed:u.summary.failed,skipped:u.summary.skipped,total:u.summary.total},testResults:u.testResults}}function mapAttachmentsToTestResults(e,t){const r=new Map;for(const e of t){const t=r.get(e.name)??[];t.push(e.id);r.set(e.name,t)}const o=[];for(const t of e){const e=r.get(t.name);const i=e?.shift();if(!t.attachments||t.attachments.length===0){continue}if(!i){console.warn(`Skipping artifact upload: could not match test result for "${t.name}"`);continue}o.push({testResultId:i,attachments:t.attachments})}return o}async function uploadArtifacts(e){const{reportId:t,apiKey:r,testResults:o}=e;const i=resolveApiUrl(e.apiUrl);let n=0;for(const e of o){for(const o of e.attachments){try{const s=await uploadSingleArtifact({testResultId:e.testResultId,attachment:o,reportId:t,apiKey:r,apiUrl:i});if(s)n++}catch(e){const t=e instanceof Error?e.message:String(e);console.error(`Failed to upload artifact ${o.name}: ${t}`)}}}if(n>0){console.log(`✓ Uploaded ${n} artifact(s)`)}return n}async function uploadSingleArtifact(e){const{testResultId:t,attachment:o,reportId:i,apiKey:n,apiUrl:s}=e;const a=await Promise.resolve().then(r.t.bind(r,943,23));const u=await Promise.resolve().then(r.t.bind(r,928,23));const l=u.resolve(o.path);try{await a.access(l)}catch{console.warn(`Artifact not found: ${u.basename(l)}`);return false}let d;let c;const p=u.basename(l);const f=o.contentType||"application/octet-stream";try{d=await a.readFile(l);c=d.byteLength}catch(e){const t=e instanceof Error?e.message:String(e);throw new Error(`Failed to read file: ${t}`)}try{return await uploadWithPresignedUrl({testResultId:t,reportId:i,apiKey:n,apiUrl:s,attachmentName:o.name,fileName:p,contentType:f,sizeBytes:c,fileBuffer:d})}catch(e){if(!(e instanceof LegacyUploadRequiredError)){throw e}return await uploadWithLegacyEndpoint({testResultId:t,attachmentName:o.name,reportId:i,apiKey:n,apiUrl:s,fileName:p,contentType:f,fileBuffer:d})}}class LegacyUploadRequiredError extends Error{constructor(){super("Legacy upload endpoint required")}}async function uploadWithPresignedUrl(e){const{testResultId:t,reportId:r,apiKey:o,apiUrl:i,attachmentName:n,fileName:s,contentType:a,sizeBytes:u,fileBuffer:l}=e;const d={testResultId:t,ctrfAttachmentName:n,fileName:s,contentType:a,sizeBytes:u};const c=await fetch(`${i}/api/v1/artifacts/${r}/upload-url`,{method:"POST",headers:{"X-API-KEY":o,"Content-Type":"application/json"},body:JSON.stringify(d)});if(shouldFallbackToLegacyUpload(c.status)){throw new LegacyUploadRequiredError}if(!c.ok){const e=await c.text();throw new Error(`Failed to create direct upload URL (HTTP ${c.status}): ${e}`)}const p=await c.json();const f={...p.requiredHeaders??{}};if(!hasHeaderIgnoreCase(f,"Content-Type")){f["Content-Type"]=a}const m=await fetch(p.uploadUrl,{method:"PUT",headers:f,body:l});if(!m.ok){const e=await m.text();throw new Error(`Direct artifact upload failed (HTTP ${m.status}): ${e}`)}const h={testResultId:t,ctrfAttachmentName:n,fileName:s,contentType:a,sizeBytes:u,storageKey:p.storageKey};const _=await fetch(`${i}/api/v1/artifacts/${r}/complete`,{method:"POST",headers:{"X-API-KEY":o,"Content-Type":"application/json"},body:JSON.stringify(h)});if(!_.ok){const e=await _.text();throw new Error(`Failed to finalize artifact upload (HTTP ${_.status}): ${e}`)}return true}async function uploadWithLegacyEndpoint(e){const{testResultId:t,attachmentName:r,reportId:o,apiKey:i,apiUrl:n,fileName:s,contentType:a,fileBuffer:u}=e;const l=new Blob([new Uint8Array(u)],{type:a});const d=new FormData;d.append("testResultId",t);d.append("ctrfAttachmentName",r);d.append("file",l,s);const c=await fetch(`${n}/api/v1/artifacts/${o}`,{method:"POST",headers:{"X-API-KEY":i},body:d});if(!c.ok){const e=await c.text();throw new Error(`Legacy artifact upload failed (HTTP ${c.status}): ${e}`)}return true}function shouldFallbackToLegacyUpload(e){return e===404||e===405||e===501}function hasHeaderIgnoreCase(e,t){const r=t.toLowerCase();return Object.keys(e).some((e=>e.toLowerCase()===r))}},665:function(e,t,r){var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){if(o===undefined)o=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,o,i)}:function(e,t,r,o){if(o===undefined)o=r;e[o]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var n=this&&this.__importStar||function(){var ownKeys=function(e){ownKeys=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r))t[t.length]=r;return t};return ownKeys(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=ownKeys(e),n=0;n<r.length;n++)if(r[n]!=="default")o(t,e,r[n]);i(t,e);return t}}();var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.TestreamJestReporter=void 0;const a=s(r(764));const u=n(r(943));const l=n(r(928));const d=r(10);class TestreamJestReporter{constructor(e,t={apiKey:"",uploadEnabled:true},r={}){this.outputDir="ctrf";this.outputFile="ctrf-report.json";this.config={uploadEnabled:true,failOnUploadError:false,...t};const o={outputDir:this.outputDir,outputFile:this.outputFile};if(this.config.testEnvironment)o.testEnvironment=this.config.testEnvironment;if(this.config.appName)o.appName=this.config.appName;if(this.config.appVersion)o.appVersion=this.config.appVersion;if(this.config.buildName)o.buildName=this.config.buildName;if(this.config.buildNumber)o.buildNumber=this.config.buildNumber;if(this.config.buildUrl)o.buildUrl=this.config.buildUrl;if(this.config.testType)o.testType=this.config.testType;if(this.config.branch)o.branchName=this.config.branch;if(this.config.commitSha)o.commit=this.config.commitSha;this.ctrfReporter=new a.default(e,o,r)}onRunStart(e,t){if(this.ctrfReporter.onRunStart){return this.ctrfReporter.onRunStart()}}onTestStart(e){if(this.ctrfReporter.onTestStart){return this.ctrfReporter.onTestStart()}}onTestResult(e,t,r){if(this.ctrfReporter.onTestResult){return this.ctrfReporter.onTestResult(e,t)}}async onRunComplete(e,t){if(this.ctrfReporter.onRunComplete){await this.ctrfReporter.onRunComplete()}const r=await this.readCTRFReport();if(!r){console.error("Failed to read CTRF report, skipping upload");return}console.info(`CTRF report written to: ${l.join(this.outputDir,this.outputFile)}`);if(this.config.uploadEnabled&&this.config.apiKey){await this.uploadReport(r)}}async readCTRFReport(){const e=l.join(this.outputDir,this.outputFile);try{const t=await u.readFile(e,"utf-8");const r=JSON.parse(t);r.results.tool.name="jest";r.generatedBy="@testream/jest-reporter";return r}catch(t){console.error(`Failed to read CTRF report from ${e}: ${t instanceof Error?t.message:String(t)}`);return null}}async uploadReport(e){const t=await(0,d.uploadToApi)({report:e,apiKey:this.config.apiKey,branch:this.config.branch,commitSha:this.config.commitSha,repositoryUrl:this.config.repositoryUrl,buildName:this.config.buildName,buildNumber:this.config.buildNumber,buildUrl:this.config.buildUrl,testEnvironment:this.config.testEnvironment,appName:this.config.appName,appVersion:this.config.appVersion,testType:this.config.testType});if(!t.success&&this.config.failOnUploadError){throw new Error(`Upload failed: ${t.error}`)}}}t.TestreamJestReporter=TestreamJestReporter;t["default"]=TestreamJestReporter},10:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.detectGitContext=void 0;t.uploadToApi=uploadToApi;const o=r(322);async function uploadToApi(e){return(0,o.uploadTestRun)({report:e.report,apiKey:e.apiKey,apiUrl:e.apiUrl,commitSha:e.commitSha,branch:e.branch,repositoryUrl:e.repositoryUrl,buildName:e.buildName,buildNumber:e.buildNumber,buildUrl:e.buildUrl,testEnvironment:e.testEnvironment,appName:e.appName,appVersion:e.appVersion,testType:e.testType})}t.detectGitContext=o.detectCIContext},896:e=>{e.exports=require("fs")},943:e=>{e.exports=require("fs/promises")},928:e=>{e.exports=require("path")}};var t={};function __nccwpck_require__(r){var o=t[r];if(o!==undefined){return o.exports}var i=t[r]={exports:{}};var n=true;try{e[r].call(i.exports,i,i.exports,__nccwpck_require__);n=false}finally{if(n)delete t[r]}return i.exports}(()=>{var e=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;var t;__nccwpck_require__.t=function(r,o){if(o&1)r=this(r);if(o&8)return r;if(typeof r==="object"&&r){if(o&4&&r.__esModule)return r;if(o&16&&typeof r.then==="function")return r}var i=Object.create(null);__nccwpck_require__.r(i);var n={};t=t||[null,e({}),e([]),e(e)];for(var s=o&2&&r;typeof s=="object"&&!~t.indexOf(s);s=e(s)){Object.getOwnPropertyNames(s).forEach((e=>n[e]=()=>r[e]))}n["default"]=()=>r;__nccwpck_require__.d(i,n);return i}})();(()=>{__nccwpck_require__.d=(e,t)=>{for(var r in t){if(__nccwpck_require__.o(t,r)&&!__nccwpck_require__.o(e,r)){Object.defineProperty(e,r,{enumerable:true,get:t[r]})}}}})();(()=>{__nccwpck_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})();(()=>{__nccwpck_require__.r=e=>{if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})}})();if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r={};(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:true});e.TestreamJestReporter=e["default"]=void 0;var t=__nccwpck_require__(665);Object.defineProperty(e,"default",{enumerable:true,get:function(){return t.TestreamJestReporter}});var o=__nccwpck_require__(665);Object.defineProperty(e,"TestreamJestReporter",{enumerable:true,get:function(){return o.TestreamJestReporter}})})();module.exports=r})();
|