@testream/playwright-reporter 0.4.4 → 0.4.5
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/dist/index.js +1 -14
- package/package.json +5 -2
- package/dist/index.js.map +0 -1
- package/dist/reporter.js +0 -244
- package/dist/reporter.js.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/uploader.js +0 -247
- package/dist/uploader.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,14 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @jira-test-manager/playwright-reporter
|
|
4
|
-
*
|
|
5
|
-
* Playwright reporter that generates CTRF-format test reports and
|
|
6
|
-
* automatically uploads them with artifacts to the Test Manager backend.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.PlaywrightCTRFReporterWithUpload = exports.default = void 0;
|
|
10
|
-
var reporter_1 = require("./reporter");
|
|
11
|
-
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return reporter_1.PlaywrightCTRFReporterWithUpload; } });
|
|
12
|
-
var reporter_2 = require("./reporter");
|
|
13
|
-
Object.defineProperty(exports, "PlaywrightCTRFReporterWithUpload", { enumerable: true, get: function () { return reporter_2.PlaywrightCTRFReporterWithUpload; } });
|
|
14
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
(()=>{"use strict";var t={649:function(t,e,r){var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:true});const i=o(r(928));const n=o(r(896));const s=o(r(982));class GenerateCtrfReport{constructor(t){var e,r,o,i,n,a,l,u,c,d,f,p,h,m,g,v,_,b,y;this.reporterName="playwright-ctrf-json-reporter";this.defaultOutputFile="ctrf-report.json";this.defaultOutputDir="ctrf";this.reporterConfigOptions={outputFile:(e=t===null||t===void 0?void 0:t.outputFile)!==null&&e!==void 0?e:this.defaultOutputFile,outputDir:(r=t===null||t===void 0?void 0:t.outputDir)!==null&&r!==void 0?r:this.defaultOutputDir,minimal:(o=t===null||t===void 0?void 0:t.minimal)!==null&&o!==void 0?o:false,screenshot:(i=t===null||t===void 0?void 0:t.screenshot)!==null&&i!==void 0?i:false,annotations:(n=t===null||t===void 0?void 0:t.annotations)!==null&&n!==void 0?n:false,testType:(a=t===null||t===void 0?void 0:t.testType)!==null&&a!==void 0?a:"e2e",appName:(l=t===null||t===void 0?void 0:t.appName)!==null&&l!==void 0?l:undefined,appVersion:(u=t===null||t===void 0?void 0:t.appVersion)!==null&&u!==void 0?u: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:(f=t===null||t===void 0?void 0:t.osVersion)!==null&&f!==void 0?f:undefined,buildName:(p=t===null||t===void 0?void 0:t.buildName)!==null&&p!==void 0?p:undefined,buildNumber:(h=t===null||t===void 0?void 0:t.buildNumber)!==null&&h!==void 0?h:undefined,buildUrl:(m=t===null||t===void 0?void 0:t.buildUrl)!==null&&m!==void 0?m:undefined,repositoryName:(g=t===null||t===void 0?void 0:t.repositoryName)!==null&&g!==void 0?g:undefined,repositoryUrl:(v=t===null||t===void 0?void 0:t.repositoryUrl)!==null&&v!==void 0?v:undefined,branchName:(_=t===null||t===void 0?void 0:t.branchName)!==null&&_!==void 0?_:undefined,commit:(b=t===null||t===void 0?void 0:t.commit)!==null&&b!==void 0?b:undefined,testEnvironment:(y=t===null||t===void 0?void 0:t.testEnvironment)!==null&&y!==void 0?y:undefined};this.ctrfReport={reportFormat:"CTRF",specVersion:"0.0.0",reportId:s.default.randomUUID(),timestamp:(new Date).toISOString(),generatedBy:"playwright-ctrf-json-reporter",results:{tool:{name:"playwright"},summary:{tests:0,passed:0,failed:0,pending:0,skipped:0,other:0,start:0,stop:0},tests:[]}};this.ctrfEnvironment={}}onBegin(t,e){var r,o,i;this.suite=e;this.startTime=Date.now();this.ctrfReport.results.summary.start=this.startTime;if(!n.default.existsSync((r=this.reporterConfigOptions.outputDir)!==null&&r!==void 0?r:this.defaultOutputDir)){n.default.mkdirSync((o=this.reporterConfigOptions.outputDir)!==null&&o!==void 0?o:this.defaultOutputDir,{recursive:true})}this.setEnvironmentDetails(this.reporterConfigOptions);if(this.hasEnvironmentDetails(this.ctrfEnvironment)){this.ctrfReport.results.environment=this.ctrfEnvironment}this.setFilename((i=this.reporterConfigOptions.outputFile)!==null&&i!==void 0?i:this.defaultOutputFile)}onEnd(){this.ctrfReport.results.summary.stop=Date.now();if(this.suite!==undefined){if(this.suite.allTests().length>0){this.processSuite(this.suite);this.ctrfReport.results.summary.suites=this.countSuites(this.suite)}}this.writeReportToFile(this.ctrfReport)}printsToStdio(){return false}processSuite(t){for(const e of t.tests){this.processTest(e)}for(const e of t.suites){this.processSuite(e)}}processTest(t){if(t.results.length===0){return}const e=t.results[t.results.length-1];if(e!==undefined){this.updateCtrfTestResultsFromTestResult(t,e,this.ctrfReport);this.updateSummaryFromTestResult(e,this.ctrfReport)}}setFilename(t){if(t.endsWith(".json")){this.reporterConfigOptions.outputFile=t}else{this.reporterConfigOptions.outputFile=`${t}.json`}}updateCtrfTestResultsFromTestResult(t,e,r){var o,i,n,s,a,l;const u={name:t.title,status:e.status===t.expectedStatus&&e.status!=="skipped"?"passed":this.mapPlaywrightStatusToCtrf(e.status),duration:e.duration};if(this.reporterConfigOptions.minimal===false){u.start=this.updateStart(e.startTime);u.stop=this.calculateStopTime(e.startTime,e.duration);u.message=this.extractFailureDetails(e).message;u.trace=this.extractFailureDetails(e).trace;u.snippet=this.extractFailureDetails(e).snippet;u.rawStatus=e.status;u.tags=(o=t.tags)!==null&&o!==void 0?o:[];u.type=(i=this.reporterConfigOptions.testType)!==null&&i!==void 0?i:"e2e";u.filePath=t.location.file;u.retries=e.retry;u.flaky=e.status==="passed"&&e.retry>0;u.steps=[];if(e.steps.length>0){e.steps.forEach((t=>{this.processStep(u,t)}))}if(this.reporterConfigOptions.screenshot===true){u.screenshot=this.extractScreenshotBase64(e)}u.suite=this.buildSuitePath(t);if(((n=this.extractMetadata(e))===null||n===void 0?void 0:n.name)!==undefined||((s=this.extractMetadata(e))===null||s===void 0?void 0:s.version)!==undefined)u.browser=`${(a=this.extractMetadata(e))===null||a===void 0?void 0:a.name} ${(l=this.extractMetadata(e))===null||l===void 0?void 0:l.version}`;u.attachments=this.filterValidAttachments(e.attachments);u.stdout=e.stdout.map((t=>Buffer.isBuffer(t)?t.toString():String(t)));u.stderr=e.stderr.map((t=>Buffer.isBuffer(t)?t.toString():String(t)));if(this.reporterConfigOptions.annotations!==undefined){u.extra={annotations:t.annotations}}if(t.results.length>1){const e=t.results.slice(0,-1);u.retryAttempts=[];for(const t of e){const e={status:this.mapPlaywrightStatusToCtrf(t.status),duration:t.duration,message:this.extractFailureDetails(t).message,trace:this.extractFailureDetails(t).trace,snippet:this.extractFailureDetails(t).snippet};u.retryAttempts.push(e)}}}r.results.tests.push(u)}updateSummaryFromTestResult(t,e){e.results.summary.tests++;const r=this.mapPlaywrightStatusToCtrf(t.status);if(r in e.results.summary){e.results.summary[r]++}else{e.results.summary.other++}}mapPlaywrightStatusToCtrf(t){switch(t){case"passed":return"passed";case"failed":case"timedOut":case"interrupted":return"failed";case"skipped":return"skipped";case"pending":return"pending";default:return"other"}}setEnvironmentDetails(t){if(t.appName!==undefined){this.ctrfEnvironment.appName=t.appName}if(t.appVersion!==undefined){this.ctrfEnvironment.appVersion=t.appVersion}if(t.osPlatform!==undefined){this.ctrfEnvironment.osPlatform=t.osPlatform}if(t.osRelease!==undefined){this.ctrfEnvironment.osRelease=t.osRelease}if(t.osVersion!==undefined){this.ctrfEnvironment.osVersion=t.osVersion}if(t.buildName!==undefined){this.ctrfEnvironment.buildName=t.buildName}if(t.buildNumber!==undefined){this.ctrfEnvironment.buildNumber=t.buildNumber}if(t.buildUrl!==undefined){this.ctrfEnvironment.buildUrl=t.buildUrl}if(t.repositoryName!==undefined){this.ctrfEnvironment.repositoryName=t.repositoryName}if(t.repositoryUrl!==undefined){this.ctrfEnvironment.repositoryUrl=t.repositoryUrl}if(t.branchName!==undefined){this.ctrfEnvironment.branchName=t.branchName}if(t.commit!==undefined){this.ctrfEnvironment.commit=t.commit}if(t.testEnvironment!==undefined){this.ctrfEnvironment.testEnvironment=t.testEnvironment}}hasEnvironmentDetails(t){return Object.keys(t).length>0}extractMetadata(t){const e=t.attachments.find((t=>t.name==="metadata.json"));if((e===null||e===void 0?void 0:e.body)!==null&&(e===null||e===void 0?void 0:e.body)!==undefined){try{const t=e.body.toString("utf-8");return JSON.parse(t)}catch(t){if(t instanceof Error){console.error(`Error parsing browser metadata: ${t.message}`)}else{console.error("An unknown error occurred in parsing browser metadata")}}}return null}updateStart(t){const e=new Date(t);const r=Math.floor(e.getTime()/1e3);return r}calculateStopTime(t,e){const r=new Date(t);const o=new Date(r.getTime()+e);return Math.floor(o.getTime()/1e3)}buildSuitePath(t){const e=[];let r=t.parent;while(r!==undefined){if(r.title!==""){e.unshift(r.title)}r=r.parent}return e.join(" > ")}extractScreenshotBase64(t){var e;const r=t.attachments.find((t=>t.name==="screenshot"&&(t.contentType==="image/jpeg"||t.contentType==="image/png")));return(e=r===null||r===void 0?void 0:r.body)===null||e===void 0?void 0:e.toString("base64")}extractFailureDetails(t){if((t.status==="failed"||t.status==="timedOut"||t.status==="interrupted")&&t.error!==undefined){const e={};if(t.error.message!==undefined){e.message=t.error.message}if(t.error.stack!==undefined){e.trace=t.error.stack}if(t.error.snippet!==undefined){e.snippet=t.error.snippet}return e}return{}}countSuites(t){let e=0;t.suites.forEach((t=>{e+=this.countSuites(t)}));return e}writeReportToFile(t){var e,r;const o=i.default.join((e=this.reporterConfigOptions.outputDir)!==null&&e!==void 0?e:this.defaultOutputDir,(r=this.reporterConfigOptions.outputFile)!==null&&r!==void 0?r:this.defaultOutputFile);const s=JSON.stringify(t,null,2);try{n.default.writeFileSync(o,s+"\n");console.log(`${this.reporterName}: successfully written ctrf json to %s/%s`,this.reporterConfigOptions.outputDir,this.reporterConfigOptions.outputFile)}catch(t){console.error(`Error writing ctrf json report:, ${String(t)}`)}}processStep(t,e){var r;if(e.category==="test.step"){const o=e.error===undefined?this.mapPlaywrightStatusToCtrf("passed"):this.mapPlaywrightStatusToCtrf("failed");const i={name:e.title,status:o};(r=t.steps)===null||r===void 0?void 0:r.push(i)}const o=e.steps;if(o.length>0){o.forEach((e=>{this.processStep(t,e)}))}}filterValidAttachments(t){return t.filter((t=>t.path!==undefined)).map((t=>{var e;return{name:t.name,contentType:t.contentType,path:(e=t.path)!==null&&e!==void 0?e:""}}))}}e["default"]=GenerateCtrfReport},197:function(t,e,r){var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:true});e["default"]=void 0;var i=r(649);Object.defineProperty(e,"default",{enumerable:true,get:function(){return o(i).default}})},406:(t,e)=>{Object.defineProperty(e,"__esModule",{value:true});e.detectCIContext=detectCIContext;function detectCIContext(){const t=process.env;if(t.GITHUB_ACTIONS==="true"){return{branch:t.GITHUB_HEAD_REF||t.GITHUB_REF_NAME||t.GITHUB_REF?.replace("refs/heads/",""),commitSha:t.GITHUB_SHA,repositoryUrl:t.GITHUB_SERVER_URL&&t.GITHUB_REPOSITORY?`${t.GITHUB_SERVER_URL}/${t.GITHUB_REPOSITORY}`:undefined,buildNumber:t.GITHUB_RUN_NUMBER,buildUrl:t.GITHUB_SERVER_URL&&t.GITHUB_REPOSITORY&&t.GITHUB_RUN_ID?`${t.GITHUB_SERVER_URL}/${t.GITHUB_REPOSITORY}/actions/runs/${t.GITHUB_RUN_ID}`:undefined}}if(t.GITLAB_CI==="true"){return{branch:t.CI_COMMIT_BRANCH||t.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,commitSha:t.CI_COMMIT_SHA,repositoryUrl:t.CI_PROJECT_URL,buildNumber:t.CI_PIPELINE_IID,buildUrl:t.CI_PIPELINE_URL}}if(t.TF_BUILD==="True"){return{branch:t.BUILD_SOURCEBRANCH?.replace("refs/heads/",""),commitSha:t.BUILD_SOURCEVERSION,repositoryUrl:t.BUILD_REPOSITORY_URI,buildNumber:t.BUILD_BUILDNUMBER,buildUrl:t.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI&&t.SYSTEM_TEAMPROJECT&&t.BUILD_BUILDID?`${t.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${t.SYSTEM_TEAMPROJECT}/_build/results?buildId=${t.BUILD_BUILDID}`:undefined}}if(t.CIRCLECI==="true"){return{branch:t.CIRCLE_BRANCH,commitSha:t.CIRCLE_SHA1,repositoryUrl:t.CIRCLE_REPOSITORY_URL,buildNumber:t.CIRCLE_BUILD_NUM,buildUrl:t.CIRCLE_BUILD_URL}}if(t.JENKINS_URL){return{branch:t.GIT_BRANCH?.replace("origin/",""),commitSha:t.GIT_COMMIT,repositoryUrl:t.GIT_URL,buildNumber:t.BUILD_NUMBER,buildUrl:t.BUILD_URL}}if(t.BITBUCKET_BUILD_NUMBER){return{branch:t.BITBUCKET_BRANCH,commitSha:t.BITBUCKET_COMMIT,repositoryUrl:t.BITBUCKET_GIT_HTTP_ORIGIN,buildNumber:t.BITBUCKET_BUILD_NUMBER,buildUrl:t.BITBUCKET_REPO_FULL_NAME&&t.BITBUCKET_BUILD_NUMBER?`https://bitbucket.org/${t.BITBUCKET_REPO_FULL_NAME}/pipelines/results/${t.BITBUCKET_BUILD_NUMBER}`:undefined}}return{}}},827:(t,e)=>{Object.defineProperty(e,"__esModule",{value:true})},322:function(t,e,r){var o=this&&this.__createBinding||(Object.create?function(t,e,r,o){if(o===undefined)o=r;var i=Object.getOwnPropertyDescriptor(e,r);if(!i||("get"in i?!e.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return e[r]}}}Object.defineProperty(t,o,i)}:function(t,e,r,o){if(o===undefined)o=r;t[o]=e[r]});var i=this&&this.__exportStar||function(t,e){for(var r in t)if(r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r))o(e,t,r)};Object.defineProperty(e,"__esModule",{value:true});e.detectCIContext=void 0;i(r(827),e);var n=r(406);Object.defineProperty(e,"detectCIContext",{enumerable:true,get:function(){return n.detectCIContext}})},665:function(t,e,r){var o=this&&this.__createBinding||(Object.create?function(t,e,r,o){if(o===undefined)o=r;var i=Object.getOwnPropertyDescriptor(e,r);if(!i||("get"in i?!e.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return e[r]}}}Object.defineProperty(t,o,i)}:function(t,e,r,o){if(o===undefined)o=r;t[o]=e[r]});var i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:true,value:e})}:function(t,e){t["default"]=e});var n=this&&this.__importStar||function(){var ownKeys=function(t){ownKeys=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r))e[e.length]=r;return e};return ownKeys(t)};return function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r=ownKeys(t),n=0;n<r.length;n++)if(r[n]!=="default")o(e,t,r[n]);i(e,t);return e}}();var s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:true});e.PlaywrightCTRFReporterWithUpload=void 0;const a=n(r(943));const l=n(r(928));const u=r(10);const c=s(r(197));class PlaywrightCTRFReporterWithUpload{constructor(t){this.uploader=null;if(!t.apiKey){throw new Error("PlaywrightCTRFReporter: apiKey is required")}if(!t.projectKey){throw new Error("PlaywrightCTRFReporter: projectKey is required")}this.config={uploadEnabled:true,outputFile:"ctrf-report.json",outputDir:"ctrf",failOnUploadError:false,screenshot:true,annotations:false,testType:"e2e",...t};const e=(0,u.detectGitContext)();if(!this.config.branch&&e.branch){this.config.branch=e.branch}if(!this.config.commitSha&&e.commitSha){this.config.commitSha=e.commitSha}if(!this.config.repositoryUrl&&e.repositoryUrl){this.config.repositoryUrl=e.repositoryUrl}this.reportPath=l.join(this.config.outputDir,this.config.outputFile);const r={outputFile:this.config.outputFile,outputDir:this.config.outputDir,screenshot:this.config.screenshot,annotations:this.config.annotations,testType:this.config.testType};if(this.config.appName)r.appName=this.config.appName;if(this.config.appVersion)r.appVersion=this.config.appVersion;if(this.config.buildName)r.buildName=this.config.buildName;if(this.config.buildNumber)r.buildNumber=this.config.buildNumber;if(this.config.buildUrl)r.buildUrl=this.config.buildUrl;if(this.config.testEnvironment)r.testEnvironment=this.config.testEnvironment;if(this.config.branch)r.branchName=this.config.branch;if(this.config.commitSha)r.commit=this.config.commitSha;this.ctrfReporter=new c.default(r);if(this.config.uploadEnabled){this.uploader=new u.ReportUploader(this.config)}}onBegin(t,e){if(this.ctrfReporter.onBegin){this.ctrfReporter.onBegin(t,e)}console.log("");console.log("=".repeat(60));console.log("Playwright Test Manager Reporter");console.log("=".repeat(60));if(this.config.uploadEnabled){console.log(`Project: ${this.config.projectKey}`);if(this.config.branch)console.log(`Branch: ${this.config.branch}`);if(this.config.commitSha)console.log(`Commit: ${this.config.commitSha.substring(0,7)}`);if(this.config.repositoryUrl)console.log(`Repository: ${this.config.repositoryUrl}`)}else{console.log("Upload: Disabled")}console.log(`Report: ${this.reportPath}`);console.log("=".repeat(60));console.log("")}onTestBegin(t,e){if(this.ctrfReporter.onTestBegin){this.ctrfReporter.onTestBegin(t,e)}}onTestEnd(t,e){if(this.ctrfReporter.onTestEnd){this.ctrfReporter.onTestEnd(t,e)}}onError(t){if(this.ctrfReporter.onError){this.ctrfReporter.onError(t)}}onStepBegin(t,e,r){if(this.ctrfReporter.onStepBegin){this.ctrfReporter.onStepBegin(t,e,r)}}onStepEnd(t,e,r){if(this.ctrfReporter.onStepEnd){this.ctrfReporter.onStepEnd(t,e,r)}}async onEnd(t){if(this.ctrfReporter.onEnd){await this.ctrfReporter.onEnd(t)}if(!this.config.uploadEnabled||!this.uploader){console.log("");console.log("CTRF report generated");console.log(` ${this.reportPath}`);return}console.log("");console.log("=".repeat(60));console.log("Uploading Test Results");console.log("=".repeat(60));try{const t=await a.readFile(this.reportPath,"utf-8");const e=JSON.parse(t);e.results.tool.name="playwright";if(!e.extra){e.extra={}}if(this.config.branch&&!e.extra.branch){e.extra.branch=this.config.branch}if(this.config.commitSha&&!e.extra.commitSha){e.extra.commitSha=this.config.commitSha}const r=await this.uploader.uploadReport(e);if(r.success){console.log("=".repeat(60));console.log("Upload Complete");console.log("=".repeat(60));console.log("")}else{console.error("Upload completed with errors");console.error("")}}catch(t){const e=t instanceof Error?t.message:String(t);console.error("");console.error("=".repeat(60));console.error("Upload Failed");console.error("=".repeat(60));console.error(`Error: ${e}`);console.error("");if(this.config.failOnUploadError){throw t}}}}e.PlaywrightCTRFReporterWithUpload=PlaywrightCTRFReporterWithUpload;e["default"]=PlaywrightCTRFReporterWithUpload},10:function(t,e,r){var o=this&&this.__createBinding||(Object.create?function(t,e,r,o){if(o===undefined)o=r;var i=Object.getOwnPropertyDescriptor(e,r);if(!i||("get"in i?!e.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return e[r]}}}Object.defineProperty(t,o,i)}:function(t,e,r,o){if(o===undefined)o=r;t[o]=e[r]});var i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:true,value:e})}:function(t,e){t["default"]=e});var n=this&&this.__importStar||function(){var ownKeys=function(t){ownKeys=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r))e[e.length]=r;return e};return ownKeys(t)};return function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r=ownKeys(t),n=0;n<r.length;n++)if(r[n]!=="default")o(e,t,r[n]);i(e,t);return e}}();Object.defineProperty(e,"__esModule",{value:true});e.detectGitContext=e.ReportUploader=void 0;const s=n(r(943));const a=n(r(928));const l=r(982);const u=r(322);class ReportUploader{constructor(t){this.apiUrl="https://test-manager-backend.fly.dev";this.config={apiKey:t.apiKey,projectKey:t.projectKey,branch:t.branch,commitSha:t.commitSha,repositoryUrl:t.repositoryUrl,failOnUploadError:t.failOnUploadError??false}}async uploadReport(t){if(!t.reportId){t.reportId=(0,l.randomUUID)();console.log(`Generated reportId: ${t.reportId}`)}try{console.log("Uploading test results to backend...");const e={reportId:t.reportId,report:t,commitSha:this.config.commitSha,branch:this.config.branch,repositoryUrl:this.config.repositoryUrl};const r=await fetch(`${this.apiUrl}/api/v1/ingest`,{method:"POST",headers:{"X-API-KEY":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(e)});if(r.status===409){const e=await r.json();console.warn(`Report already exists: ${e.reportId}`);return{success:true,reportId:e.reportId||t.reportId}}if(!r.ok){let t;try{const e=await r.json();t=e.error||`HTTP ${r.status}`;if(e.details){t+=`: ${e.details}`}}catch{t=await r.text()}throw new Error(`API ingest failed: ${t}`)}const o=await r.json();console.log(`Report uploaded successfully`);console.log(` Report ID: ${o.reportId}`);console.log(` Test Run ID: ${o.testRunId}`);console.log(` Summary: ${o.summary.passed}/${o.summary.total} passed`);await this.uploadArtifacts(t,o);return{success:true,reportId:o.reportId,testRunId:o.testRunId,summary:o.summary}}catch(e){const r=e instanceof Error?e.message:String(e);const o=`Failed to upload report: ${r}`;if(this.config.failOnUploadError){throw new Error(o)}else{console.error(`${o}`);return{success:false,reportId:t.reportId,error:r}}}}async uploadArtifacts(t,e){try{const r=t.results.tests.reduce(((t,e)=>t+(e.attachments?.length||0)),0);if(r===0){console.log("--- Artifact Upload: No artifacts found to upload. ---");return 0}console.log(`--- Artifact Upload: Starting (${r} artifact(s)) ---`);let o=0;for(const r of t.results.tests){if(!r.attachments||r.attachments.length===0){continue}const t=e.testResults.find((t=>t.name===r.name));if(!t){console.warn(`[Artifact] Could not find test result for: ${r.name}`);continue}for(const i of r.attachments){console.log(`[Artifact] Preparing to upload: ${i.path}`);try{const r=await this.uploadSingleArtifact(t.id,i,e.reportId);if(r){o++}}catch(t){const e=t instanceof Error?t.message:String(t);if(e.includes("File not found")){console.error(`[Artifact] File not found: ${i.path}`)}else{console.error(`[Artifact] Failed to upload: ${i.path}`);console.error(`[Artifact] Error:`,e)}}}}console.log(`--- Artifact Upload: Completed. Total artifacts attempted: ${r}, uploaded: ${o} ---`);return o}catch(t){const e=t instanceof Error?t.message:String(t);const r=`Failed to upload artifacts: ${e}`;if(this.config.failOnUploadError){throw new Error(r)}else{console.error(`${r}`);return 0}}}async uploadSingleArtifact(t,e,r){const o=a.resolve(e.path);try{await s.access(o)}catch{console.warn(` File not found: ${o}`);return false}let i;try{i=await s.readFile(o)}catch(t){const e=t instanceof Error?t.message:String(t);throw new Error(`Failed to read file: ${e}`)}const n=new Blob([i],{type:e.contentType});const l=new FormData;l.append("testResultId",t);l.append("ctrfAttachmentName",e.name);l.append("file",n,a.basename(o));const u=`${this.apiUrl}/api/v1/artifacts/${r}`;const c=await fetch(u,{method:"POST",headers:{"X-API-KEY":this.config.apiKey},body:l});if(!c.ok){const t=await c.text();throw new Error(`HTTP ${c.status}: ${t}`)}return true}}e.ReportUploader=ReportUploader;e.detectGitContext=u.detectCIContext},982:t=>{t.exports=require("crypto")},896:t=>{t.exports=require("fs")},943:t=>{t.exports=require("fs/promises")},928:t=>{t.exports=require("path")}};var e={};function __nccwpck_require__(r){var o=e[r];if(o!==undefined){return o.exports}var i=e[r]={exports:{}};var n=true;try{t[r].call(i.exports,i,i.exports,__nccwpck_require__);n=false}finally{if(n)delete e[r]}return i.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r={};(()=>{var t=r;Object.defineProperty(t,"__esModule",{value:true});t.PlaywrightCTRFReporterWithUpload=t["default"]=void 0;var e=__nccwpck_require__(665);Object.defineProperty(t,"default",{enumerable:true,get:function(){return e.PlaywrightCTRFReporterWithUpload}});var o=__nccwpck_require__(665);Object.defineProperty(t,"PlaywrightCTRFReporterWithUpload",{enumerable:true,get:function(){return o.PlaywrightCTRFReporterWithUpload}})})();module.exports=r})();
|
package/package.json
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testream/playwright-reporter",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"description": "Playwright CTRF reporter with automatic upload to Testream",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"build": "
|
|
8
|
+
"build": "npm run build:bundle && npm run build:types",
|
|
9
|
+
"build:bundle": "ncc build src/index.ts -o dist --minify",
|
|
10
|
+
"build:types": "tsc --declaration --emitDeclarationOnly --outDir dist",
|
|
9
11
|
"format": "prettier --write '**/*.ts'",
|
|
10
12
|
"lint": "eslint src/**/*.ts",
|
|
11
13
|
"prepublishOnly": "npm run build",
|
|
@@ -42,6 +44,7 @@
|
|
|
42
44
|
"@types/node": "^20.10.6",
|
|
43
45
|
"@typescript-eslint/eslint-plugin": "^6.17.0",
|
|
44
46
|
"@typescript-eslint/parser": "^6.17.0",
|
|
47
|
+
"@vercel/ncc": "^0.38.1",
|
|
45
48
|
"dotenv": "^17.2.3",
|
|
46
49
|
"eslint": "^8.56.0",
|
|
47
50
|
"prettier": "^3.1.1",
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uCAAyE;AAAhE,mGAAA,gCAAgC,OAAW;AACpD,uCAA8D;AAArD,4HAAA,gCAAgC,OAAA"}
|
package/dist/reporter.js
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.PlaywrightCTRFReporterWithUpload = void 0;
|
|
40
|
-
const fs = __importStar(require("fs/promises"));
|
|
41
|
-
const path = __importStar(require("path"));
|
|
42
|
-
const uploader_1 = require("./uploader");
|
|
43
|
-
// Import the underlying CTRF reporter
|
|
44
|
-
const playwright_ctrf_json_reporter_1 = __importDefault(require("playwright-ctrf-json-reporter"));
|
|
45
|
-
/**
|
|
46
|
-
* Playwright Reporter that generates CTRF reports and uploads them to a backend API
|
|
47
|
-
*/
|
|
48
|
-
class PlaywrightCTRFReporterWithUpload {
|
|
49
|
-
constructor(config) {
|
|
50
|
-
this.uploader = null;
|
|
51
|
-
// Validate required configuration (apiUrl is now internal)
|
|
52
|
-
if (!config.apiKey) {
|
|
53
|
-
throw new Error('PlaywrightCTRFReporter: apiKey is required');
|
|
54
|
-
}
|
|
55
|
-
if (!config.projectKey) {
|
|
56
|
-
throw new Error('PlaywrightCTRFReporter: projectKey is required');
|
|
57
|
-
}
|
|
58
|
-
// Set defaults and inject internalApiUrl
|
|
59
|
-
this.config = {
|
|
60
|
-
uploadEnabled: true,
|
|
61
|
-
outputFile: 'ctrf-report.json',
|
|
62
|
-
outputDir: 'ctrf',
|
|
63
|
-
failOnUploadError: false,
|
|
64
|
-
screenshot: true,
|
|
65
|
-
annotations: false,
|
|
66
|
-
testType: 'e2e',
|
|
67
|
-
...config
|
|
68
|
-
};
|
|
69
|
-
// Auto-detect git context if not provided
|
|
70
|
-
const gitContext = (0, uploader_1.detectGitContext)();
|
|
71
|
-
if (!this.config.branch && gitContext.branch) {
|
|
72
|
-
this.config.branch = gitContext.branch;
|
|
73
|
-
}
|
|
74
|
-
if (!this.config.commitSha && gitContext.commitSha) {
|
|
75
|
-
this.config.commitSha = gitContext.commitSha;
|
|
76
|
-
}
|
|
77
|
-
if (!this.config.repositoryUrl && gitContext.repositoryUrl) {
|
|
78
|
-
this.config.repositoryUrl = gitContext.repositoryUrl;
|
|
79
|
-
}
|
|
80
|
-
// Calculate full report path
|
|
81
|
-
this.reportPath = path.join(this.config.outputDir, this.config.outputFile);
|
|
82
|
-
// Initialize the underlying CTRF reporter
|
|
83
|
-
const ctrfConfig = {
|
|
84
|
-
outputFile: this.config.outputFile,
|
|
85
|
-
outputDir: this.config.outputDir,
|
|
86
|
-
screenshot: this.config.screenshot,
|
|
87
|
-
annotations: this.config.annotations,
|
|
88
|
-
testType: this.config.testType,
|
|
89
|
-
};
|
|
90
|
-
// Add optional environment configuration
|
|
91
|
-
if (this.config.appName)
|
|
92
|
-
ctrfConfig.appName = this.config.appName;
|
|
93
|
-
if (this.config.appVersion)
|
|
94
|
-
ctrfConfig.appVersion = this.config.appVersion;
|
|
95
|
-
if (this.config.buildName)
|
|
96
|
-
ctrfConfig.buildName = this.config.buildName;
|
|
97
|
-
if (this.config.buildNumber)
|
|
98
|
-
ctrfConfig.buildNumber = this.config.buildNumber;
|
|
99
|
-
if (this.config.buildUrl)
|
|
100
|
-
ctrfConfig.buildUrl = this.config.buildUrl;
|
|
101
|
-
if (this.config.testEnvironment)
|
|
102
|
-
ctrfConfig.testEnvironment = this.config.testEnvironment;
|
|
103
|
-
if (this.config.branch)
|
|
104
|
-
ctrfConfig.branchName = this.config.branch;
|
|
105
|
-
if (this.config.commitSha)
|
|
106
|
-
ctrfConfig.commit = this.config.commitSha;
|
|
107
|
-
this.ctrfReporter = new playwright_ctrf_json_reporter_1.default(ctrfConfig);
|
|
108
|
-
// Initialize uploader if upload is enabled
|
|
109
|
-
if (this.config.uploadEnabled) {
|
|
110
|
-
this.uploader = new uploader_1.ReportUploader(this.config);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Called once before running tests
|
|
115
|
-
*/
|
|
116
|
-
onBegin(config, suite) {
|
|
117
|
-
if (this.ctrfReporter.onBegin) {
|
|
118
|
-
this.ctrfReporter.onBegin(config, suite);
|
|
119
|
-
}
|
|
120
|
-
console.log('');
|
|
121
|
-
console.log('='.repeat(60));
|
|
122
|
-
console.log('Playwright Test Manager Reporter');
|
|
123
|
-
console.log('='.repeat(60));
|
|
124
|
-
if (this.config.uploadEnabled) {
|
|
125
|
-
console.log(`Project: ${this.config.projectKey}`);
|
|
126
|
-
if (this.config.branch)
|
|
127
|
-
console.log(`Branch: ${this.config.branch}`);
|
|
128
|
-
if (this.config.commitSha)
|
|
129
|
-
console.log(`Commit: ${this.config.commitSha.substring(0, 7)}`);
|
|
130
|
-
if (this.config.repositoryUrl)
|
|
131
|
-
console.log(`Repository: ${this.config.repositoryUrl}`);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
console.log('Upload: Disabled');
|
|
135
|
-
}
|
|
136
|
-
console.log(`Report: ${this.reportPath}`);
|
|
137
|
-
console.log('='.repeat(60));
|
|
138
|
-
console.log('');
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Called after a test has been started
|
|
142
|
-
*/
|
|
143
|
-
onTestBegin(test, result) {
|
|
144
|
-
if (this.ctrfReporter.onTestBegin) {
|
|
145
|
-
this.ctrfReporter.onTestBegin(test, result);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Called after a test has been finished
|
|
150
|
-
*/
|
|
151
|
-
onTestEnd(test, result) {
|
|
152
|
-
if (this.ctrfReporter.onTestEnd) {
|
|
153
|
-
this.ctrfReporter.onTestEnd(test, result);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Called on some global error
|
|
158
|
-
*/
|
|
159
|
-
onError(error) {
|
|
160
|
-
if (this.ctrfReporter.onError) {
|
|
161
|
-
this.ctrfReporter.onError(error);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Called after a step has been started
|
|
166
|
-
*/
|
|
167
|
-
onStepBegin(test, result, step) {
|
|
168
|
-
if (this.ctrfReporter.onStepBegin) {
|
|
169
|
-
this.ctrfReporter.onStepBegin(test, result, step);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Called after a step has been finished
|
|
174
|
-
*/
|
|
175
|
-
onStepEnd(test, result, step) {
|
|
176
|
-
if (this.ctrfReporter.onStepEnd) {
|
|
177
|
-
this.ctrfReporter.onStepEnd(test, result, step);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Called after all tests have been run
|
|
182
|
-
*/
|
|
183
|
-
async onEnd(result) {
|
|
184
|
-
// Let the underlying CTRF reporter finish writing the report
|
|
185
|
-
if (this.ctrfReporter.onEnd) {
|
|
186
|
-
await this.ctrfReporter.onEnd(result);
|
|
187
|
-
}
|
|
188
|
-
// If upload is disabled, we're done
|
|
189
|
-
if (!this.config.uploadEnabled || !this.uploader) {
|
|
190
|
-
console.log('');
|
|
191
|
-
console.log('CTRF report generated');
|
|
192
|
-
console.log(` ${this.reportPath}`);
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
console.log('');
|
|
196
|
-
console.log('='.repeat(60));
|
|
197
|
-
console.log('Uploading Test Results');
|
|
198
|
-
console.log('='.repeat(60));
|
|
199
|
-
try {
|
|
200
|
-
// Read the generated CTRF report
|
|
201
|
-
const reportContent = await fs.readFile(this.reportPath, 'utf-8');
|
|
202
|
-
const report = JSON.parse(reportContent);
|
|
203
|
-
// Force tool name to 'playwright'
|
|
204
|
-
report.results.tool.name = 'playwright';
|
|
205
|
-
// Add git context to report if not already present
|
|
206
|
-
if (!report.extra) {
|
|
207
|
-
report.extra = {};
|
|
208
|
-
}
|
|
209
|
-
if (this.config.branch && !report.extra.branch) {
|
|
210
|
-
report.extra.branch = this.config.branch;
|
|
211
|
-
}
|
|
212
|
-
if (this.config.commitSha && !report.extra.commitSha) {
|
|
213
|
-
report.extra.commitSha = this.config.commitSha;
|
|
214
|
-
}
|
|
215
|
-
// Upload report (artifacts are uploaded internally)
|
|
216
|
-
const uploadResult = await this.uploader.uploadReport(report);
|
|
217
|
-
if (uploadResult.success) {
|
|
218
|
-
console.log('='.repeat(60));
|
|
219
|
-
console.log('Upload Complete');
|
|
220
|
-
console.log('='.repeat(60));
|
|
221
|
-
console.log('');
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
console.error('Upload completed with errors');
|
|
225
|
-
console.error('');
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
catch (error) {
|
|
229
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
230
|
-
console.error('');
|
|
231
|
-
console.error('='.repeat(60));
|
|
232
|
-
console.error('Upload Failed');
|
|
233
|
-
console.error('='.repeat(60));
|
|
234
|
-
console.error(`Error: ${errorMessage}`);
|
|
235
|
-
console.error('');
|
|
236
|
-
if (this.config.failOnUploadError) {
|
|
237
|
-
throw error;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
exports.PlaywrightCTRFReporterWithUpload = PlaywrightCTRFReporterWithUpload;
|
|
243
|
-
exports.default = PlaywrightCTRFReporterWithUpload;
|
|
244
|
-
//# sourceMappingURL=reporter.js.map
|
package/dist/reporter.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/uploader.js
DELETED
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.detectGitContext = exports.ReportUploader = void 0;
|
|
37
|
-
const fs = __importStar(require("fs/promises"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
const crypto_1 = require("crypto");
|
|
40
|
-
const shared_types_1 = require("@jira-test-manager/shared-types");
|
|
41
|
-
/**
|
|
42
|
-
* Upload CTRF report and artifacts to the backend API
|
|
43
|
-
*/
|
|
44
|
-
class ReportUploader {
|
|
45
|
-
constructor(config) {
|
|
46
|
-
this.apiUrl = 'https://test-manager-backend.fly.dev';
|
|
47
|
-
this.config = {
|
|
48
|
-
apiKey: config.apiKey,
|
|
49
|
-
projectKey: config.projectKey,
|
|
50
|
-
branch: config.branch,
|
|
51
|
-
commitSha: config.commitSha,
|
|
52
|
-
repositoryUrl: config.repositoryUrl,
|
|
53
|
-
failOnUploadError: config.failOnUploadError ?? false,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Upload CTRF report to the backend
|
|
58
|
-
*/
|
|
59
|
-
async uploadReport(report) {
|
|
60
|
-
// Ensure reportId exists
|
|
61
|
-
if (!report.reportId) {
|
|
62
|
-
report.reportId = (0, crypto_1.randomUUID)();
|
|
63
|
-
console.log(`Generated reportId: ${report.reportId}`);
|
|
64
|
-
}
|
|
65
|
-
try {
|
|
66
|
-
console.log('Uploading test results to backend...');
|
|
67
|
-
const ingestPayload = {
|
|
68
|
-
reportId: report.reportId,
|
|
69
|
-
report,
|
|
70
|
-
commitSha: this.config.commitSha,
|
|
71
|
-
branch: this.config.branch,
|
|
72
|
-
repositoryUrl: this.config.repositoryUrl,
|
|
73
|
-
};
|
|
74
|
-
const response = await fetch(`${this.apiUrl}/api/v1/ingest`, {
|
|
75
|
-
method: 'POST',
|
|
76
|
-
headers: {
|
|
77
|
-
'X-API-KEY': this.config.apiKey,
|
|
78
|
-
'Content-Type': 'application/json',
|
|
79
|
-
},
|
|
80
|
-
body: JSON.stringify(ingestPayload),
|
|
81
|
-
});
|
|
82
|
-
// Handle idempotent duplicate reports
|
|
83
|
-
if (response.status === 409) {
|
|
84
|
-
const errorData = (await response.json());
|
|
85
|
-
console.warn(`Report already exists: ${errorData.reportId}`);
|
|
86
|
-
return {
|
|
87
|
-
success: true,
|
|
88
|
-
reportId: errorData.reportId || report.reportId,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
if (!response.ok) {
|
|
92
|
-
let errorMessage;
|
|
93
|
-
try {
|
|
94
|
-
const errorData = (await response.json());
|
|
95
|
-
errorMessage = errorData.error || `HTTP ${response.status}`;
|
|
96
|
-
if (errorData.details) {
|
|
97
|
-
errorMessage += `: ${errorData.details}`;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
errorMessage = await response.text();
|
|
102
|
-
}
|
|
103
|
-
throw new Error(`API ingest failed: ${errorMessage}`);
|
|
104
|
-
}
|
|
105
|
-
const result = (await response.json());
|
|
106
|
-
console.log(`Report uploaded successfully`);
|
|
107
|
-
console.log(` Report ID: ${result.reportId}`);
|
|
108
|
-
console.log(` Test Run ID: ${result.testRunId}`);
|
|
109
|
-
console.log(` Summary: ${result.summary.passed}/${result.summary.total} passed`);
|
|
110
|
-
// Upload artifacts if present
|
|
111
|
-
await this.uploadArtifacts(report, result);
|
|
112
|
-
return {
|
|
113
|
-
success: true,
|
|
114
|
-
reportId: result.reportId,
|
|
115
|
-
testRunId: result.testRunId,
|
|
116
|
-
summary: result.summary,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
121
|
-
const message = `Failed to upload report: ${errorMessage}`;
|
|
122
|
-
if (this.config.failOnUploadError) {
|
|
123
|
-
throw new Error(message);
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
console.error(`${message}`);
|
|
127
|
-
return {
|
|
128
|
-
success: false,
|
|
129
|
-
reportId: report.reportId,
|
|
130
|
-
error: errorMessage,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Upload all artifacts from the CTRF report (internal method)
|
|
137
|
-
*/
|
|
138
|
-
async uploadArtifacts(report, ingestResponse) {
|
|
139
|
-
try {
|
|
140
|
-
const totalAttachments = report.results.tests.reduce((sum, test) => sum + (test.attachments?.length || 0), 0);
|
|
141
|
-
if (totalAttachments === 0) {
|
|
142
|
-
console.log('--- Artifact Upload: No artifacts found to upload. ---');
|
|
143
|
-
return 0;
|
|
144
|
-
}
|
|
145
|
-
console.log(`--- Artifact Upload: Starting (${totalAttachments} artifact(s)) ---`);
|
|
146
|
-
let uploadedCount = 0;
|
|
147
|
-
// Iterate through all tests
|
|
148
|
-
for (const test of report.results.tests) {
|
|
149
|
-
if (!test.attachments || test.attachments.length === 0) {
|
|
150
|
-
continue;
|
|
151
|
-
}
|
|
152
|
-
// Find matching test result from ingest response
|
|
153
|
-
const testResult = ingestResponse.testResults.find((tr) => tr.name === test.name);
|
|
154
|
-
if (!testResult) {
|
|
155
|
-
console.warn(`[Artifact] Could not find test result for: ${test.name}`);
|
|
156
|
-
continue;
|
|
157
|
-
}
|
|
158
|
-
// Upload each attachment
|
|
159
|
-
for (const attachment of test.attachments) {
|
|
160
|
-
console.log(`[Artifact] Preparing to upload: ${attachment.path}`);
|
|
161
|
-
try {
|
|
162
|
-
const uploaded = await this.uploadSingleArtifact(testResult.id, attachment, ingestResponse.reportId);
|
|
163
|
-
if (uploaded) {
|
|
164
|
-
uploadedCount++;
|
|
165
|
-
// console.log(`[Artifact] Successfully uploaded: ${attachment.path}`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
catch (error) {
|
|
169
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
170
|
-
if (errorMessage.includes('File not found')) {
|
|
171
|
-
console.error(`[Artifact] File not found: ${attachment.path}`);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
console.error(`[Artifact] Failed to upload: ${attachment.path}`);
|
|
175
|
-
console.error(`[Artifact] Error:`, errorMessage);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
console.log(`--- Artifact Upload: Completed. Total artifacts attempted: ${totalAttachments}, uploaded: ${uploadedCount} ---`);
|
|
181
|
-
return uploadedCount;
|
|
182
|
-
}
|
|
183
|
-
catch (error) {
|
|
184
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
185
|
-
const message = `Failed to upload artifacts: ${errorMessage}`;
|
|
186
|
-
if (this.config.failOnUploadError) {
|
|
187
|
-
throw new Error(message);
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
console.error(`${message}`);
|
|
191
|
-
return 0;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Upload a single artifact file
|
|
197
|
-
*/
|
|
198
|
-
async uploadSingleArtifact(testResultId, attachment, reportId) {
|
|
199
|
-
// Resolve file path
|
|
200
|
-
const filePath = path.resolve(attachment.path);
|
|
201
|
-
// Check if file exists
|
|
202
|
-
try {
|
|
203
|
-
await fs.access(filePath);
|
|
204
|
-
}
|
|
205
|
-
catch {
|
|
206
|
-
console.warn(` File not found: ${filePath}`);
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
// Read file
|
|
210
|
-
let fileBuffer;
|
|
211
|
-
try {
|
|
212
|
-
fileBuffer = await fs.readFile(filePath);
|
|
213
|
-
}
|
|
214
|
-
catch (error) {
|
|
215
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
216
|
-
throw new Error(`Failed to read file: ${errorMessage}`);
|
|
217
|
-
}
|
|
218
|
-
// Create native FormData with Blob (compatible with native fetch)
|
|
219
|
-
const blob = new Blob([fileBuffer], { type: attachment.contentType });
|
|
220
|
-
const formData = new FormData();
|
|
221
|
-
formData.append('testResultId', testResultId);
|
|
222
|
-
formData.append('ctrfAttachmentName', attachment.name);
|
|
223
|
-
formData.append('file', blob, path.basename(filePath));
|
|
224
|
-
// Upload to API
|
|
225
|
-
const uploadUrl = `${this.apiUrl}/api/v1/artifacts/${reportId}`;
|
|
226
|
-
const response = await fetch(uploadUrl, {
|
|
227
|
-
method: 'POST',
|
|
228
|
-
headers: {
|
|
229
|
-
'X-API-KEY': this.config.apiKey,
|
|
230
|
-
// Note: Don't set Content-Type - fetch sets it automatically with boundary
|
|
231
|
-
},
|
|
232
|
-
body: formData,
|
|
233
|
-
});
|
|
234
|
-
if (!response.ok) {
|
|
235
|
-
const errorText = await response.text();
|
|
236
|
-
throw new Error(`HTTP ${response.status}: ${errorText}`);
|
|
237
|
-
}
|
|
238
|
-
return true;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
exports.ReportUploader = ReportUploader;
|
|
242
|
-
/**
|
|
243
|
-
* Detect git context from environment variables
|
|
244
|
-
* @deprecated Use detectCIContext from @jira-test-manager/shared-types instead
|
|
245
|
-
*/
|
|
246
|
-
exports.detectGitContext = shared_types_1.detectCIContext;
|
|
247
|
-
//# sourceMappingURL=uploader.js.map
|
package/dist/uploader.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.js","sourceRoot":"","sources":["../src/uploader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAC7B,mCAAoC;AACpC,kEAOyC;AAGzC;;GAEG;AACH,MAAa,cAAc;IAQzB,YAAY,MAAoC;QAFxC,WAAM,GAAW,sCAAsC,CAAC;QAG9D,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;SACrD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAAkB;QACnC,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAA,mBAAU,GAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YAEpD,MAAM,aAAa,GAAG;gBACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;gBAChC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC1B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;aACzC,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,gBAAgB,EAAE;gBAC3D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;oBAC/B,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;aACpC,CAAC,CAAC;YAEH,sCAAsC;YACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqB,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,0BAA0B,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC7D,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;iBAChD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,YAAoB,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqB,CAAC;oBAC9D,YAAY,GAAG,SAAS,CAAC,KAAK,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC5D,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;wBACtB,YAAY,IAAI,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;oBAC3C,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACvC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;YAEzD,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC;YAEnF,8BAA8B;YAC9B,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAE3C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,4BAA4B,YAAY,EAAE,CAAC;YAE3D,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,YAAY;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,MAAkB,EAClB,cAA8B;QAE9B,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAClD,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC,EACpD,CAAC,CACF,CAAC;YAEF,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;gBACtE,OAAO,CAAC,CAAC;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,gBAAgB,mBAAmB,CAAC,CAAC;YAEnF,IAAI,aAAa,GAAG,CAAC,CAAC;YAEtB,4BAA4B;YAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvD,SAAS;gBACX,CAAC;gBAED,iDAAiD;gBACjD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClF,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,8CAA8C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBACxE,SAAS;gBACX,CAAC;gBAED,yBAAyB;gBACzB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,mCAAmC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;oBAClE,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC9C,UAAU,CAAC,EAAE,EACb,UAAU,EACV,cAAc,CAAC,QAAQ,CACxB,CAAC;wBAEF,IAAI,QAAQ,EAAE,CAAC;4BACb,aAAa,EAAE,CAAC;4BAChB,uEAAuE;wBACzE,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC5E,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;4BAC5C,OAAO,CAAC,KAAK,CAAC,8BAA8B,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;wBACjE,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,KAAK,CAAC,gCAAgC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;4BACjE,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;wBACnD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,8DAA8D,gBAAgB,eAAe,aAAa,MAAM,CAAC,CAAC;YAC9H,OAAO,aAAa,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,+BAA+B,YAAY,EAAE,CAAC;YAE9D,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;gBAC5B,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAChC,YAAoB,EACpB,UAA0B,EAC1B,QAAgB;QAEhB,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE/C,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,YAAY;QACZ,IAAI,UAAkB,CAAC;QACvB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,kEAAkE;QAClE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAC9C,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACvD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEvD,gBAAgB;QAChB,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,MAAM,qBAAqB,QAAQ,EAAE,CAAC;QAEhE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC/B,2EAA2E;aAC5E;YACD,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA5OD,wCA4OC;AAED;;;GAGG;AACU,QAAA,gBAAgB,GAAG,8BAAe,CAAC"}
|