@checksum-ai/runtime 1.1.63-beta → 1.1.65

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/.env CHANGED
@@ -1 +1 @@
1
- BUILD_TIME=2025-02-28T21:53:55.968Z
1
+ BUILD_TIME=2025-03-05T08:44:36.089Z
package/cli.js CHANGED
@@ -1885,8 +1885,7 @@ if (typeof globalThis.requireTs === "undefined") {
1885
1885
  }
1886
1886
  };
1887
1887
 
1888
- const pathToTs = path.endsWith(".ts") ? path : path + ".ts";
1889
- clearModuleFromCache(pathToTs);
1888
+ clearModuleFromCache(path);
1890
1889
  return require(path);
1891
1890
  }
1892
1891
  }`;var X3=x7(Kae()),W6r=x7(require("path"));var kXt=class kXt{constructor(p,d="require"){this.sourceFilePath=p;this.identifierName=d}getAdjustedModuleSpecifier(p){if(X3.isStringLiteral(p)&&p.text.startsWith(".")){let d=this.sourceFilePath.replace(/[^/]*$/,"");return X3.factory.createStringLiteral(W6r.default.join(d,p.text))}return p}transformImportToRequire(p){if(p.importClause&&p.importClause.isTypeOnly)return p;let d=p.moduleSpecifier;if(p.importClause){let{name:y,namedBindings:E}=p.importClause;if(y&&E){if(X3.isNamedImports(E))return this.transformDefaultAndNamedImport(y,E,d)}else{if(y)return this.transformDefaultImport(y,d);if(E&&X3.isNamespaceImport(E))return this.transformNamespaceImport(E,d);if(E&&X3.isNamedImports(E))return this.transformNamedImports(E,d)}}else return this.transformSideEffectImport(d);return p}transformDefaultImport(p,d){return d=this.getAdjustedModuleSpecifier(d),X3.factory.createVariableStatement(void 0,X3.factory.createVariableDeclarationList([X3.factory.createVariableDeclaration(p,void 0,void 0,this.createRequireCall(d))],X3.NodeFlags.Const))}isChecksumAIRuntimeImport(p){return X3.isStringLiteral(p)&&p.text==="@checksum-ai/runtime"}transformNamedImports(p,d){return process.env.DEV_MODE==="true"&&this.isChecksumAIRuntimeImport(d)?d=X3.factory.createStringLiteral(`${process.cwd()}/src/init.ts`):d=this.getAdjustedModuleSpecifier(d),X3.factory.createVariableStatement(void 0,X3.factory.createVariableDeclarationList([X3.factory.createVariableDeclaration(X3.factory.createObjectBindingPattern(p.elements.map(y=>X3.factory.createBindingElement(void 0,y.propertyName||y.name,y.name))),void 0,void 0,this.createRequireCall(d))],X3.NodeFlags.Const))}transformNamespaceImport(p,d){return d=this.getAdjustedModuleSpecifier(d),X3.factory.createVariableStatement(void 0,X3.factory.createVariableDeclarationList([X3.factory.createVariableDeclaration(p.name,void 0,void 0,this.createRequireCall(d))],X3.NodeFlags.Const))}transformDefaultAndNamedImport(p,d,y){return y=this.getAdjustedModuleSpecifier(y),X3.factory.createVariableStatement(void 0,X3.factory.createVariableDeclarationList([X3.factory.createVariableDeclaration(X3.factory.createObjectBindingPattern(d.elements.map(E=>X3.factory.createBindingElement(void 0,E.propertyName||E.name,E.name))),void 0,void 0,this.createRequireCall(y))],X3.NodeFlags.Const))}transformSideEffectImport(p){return p=this.getAdjustedModuleSpecifier(p),X3.factory.createExpressionStatement(this.createRequireCall(p))}createRequireCall(p){return X3.factory.createCallExpression(X3.factory.createIdentifier(this.identifierName),void 0,[p])}transform(p){let d=e(y=>X3.isImportDeclaration(y)?this.transformImportToRequire(y):X3.visitEachChild(y,d,p),"visit");return y=>X3.visitNode(y,d)}};e(kXt,"ImportToRequireTransformer");var grt=kXt;var eI=x7(Kae());var wXt=class wXt{constructor(p,d,y,E=["page","vs"]){this.sourceFile=p;this.testBodies=d;this.newTestBody=y;this.testFunctionParameters=E}isMatchingTestBody(p){return eI.isConciseBody(p)?this.testBodies.some(d=>p.pos===d.pos&&p.end===d.end&&p.getText(this.sourceFile)===d.getText(this.sourceFile)):!1}transformTestFunctionParameters(p){let[d,...y]=p;if(!d||!eI.isObjectBindingPattern(d.name))return p;let E=d.name,N=e(H=>E.elements.some(Q=>eI.isBindingElement(Q)&&Q.name.getText(this.sourceFile)===H),"isAlreadyInParameters"),F=e(H=>eI.factory.createBindingElement(void 0,void 0,eI.factory.createIdentifier(H),void 0),"createNewBindingElement"),R=eI.factory.createObjectBindingPattern([...E.elements,...this.testFunctionParameters.filter(H=>!N(H)).map(F)]),V=eI.factory.createParameterDeclaration(d.modifiers,d.dotDotDotToken,R,d.questionToken,d.type,d.initializer);return eI.factory.createNodeArray([V,...y])}transform(p){let d=e(y=>{if(eI.isCallExpression(y)&&eI.isIdentifier(y.expression)&&y.expression.text==="test"&&y.arguments.length>=2&&eI.isArrowFunction(y.arguments[1])&&eI.isBlock(y.arguments[1].body)&&this.isMatchingTestBody(y.arguments[1].body)){let[,E,...N]=y.arguments;return E=eI.factory.updateArrowFunction(E,E.modifiers,E.typeParameters,this.transformTestFunctionParameters(E.parameters),E.type,E.equalsGreaterThanToken,this.newTestBody),eI.factory.updateCallExpression(y,y.expression,y.typeArguments,[y.arguments[0],E,...N])}return eI.visitEachChild(y,d,p)},"visit");return y=>eI.visitNode(y,d)}};e(wXt,"TestBodyTransformer");var yrt=wXt;var Mrr=require("crypto");var vrt=x7(require("path")),tK=x7(require("fs"));function AXt(l,p){let d=l.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);if(!d||d.length!==3)throw new Error("Invalid base64 string");let y=d[1],E=d[2],N=Buffer.from(E,"base64");return{name:p,type:y,buffer:N,size:N.length}}e(AXt,"base64ToFile");function PXt(l,p,d=null){let y=AXt(l,p),E=d??vrt.join(__dirname,"..","uploads");tK.existsSync(E)||tK.mkdirSync(E,{recursive:!0});let N=vrt.join(E,p);return tK.writeFileSync(N,y.buffer),Nh(`File written successfully: ${N}`),N}e(PXt,"writeBase64ToFile");function $6r(l,p,d){tK.existsSync(d)||tK.mkdirSync(d,{recursive:!0});let y=vrt.join(d,p);return tK.writeFileSync(y,l),Nh(`File written successfully: ${y}`),y}e($6r,"writeFileToFolder");function H6r(l,p){if(!tK.existsSync(l)){Nh.error("The folder does not exist.");return}let d=p;function y(E,N){tK.lstatSync(E).isDirectory()?(tK.existsSync(N)||tK.mkdirSync(N),tK.readdirSync(E).forEach(F=>{let R=vrt.join(E,F),V=vrt.join(N,F);y(R,V)})):tK.copyFileSync(E,N)}e(y,"copyRecursiveSync"),y(l,d),Nh(`Backup created: ${d}`)}e(H6r,"copyFolderWithBackupSuffix");function G6r(l){return/^(?!\.{1,2}$)(?!.*[\\/:*?"<>|])[\S ]{1,255}$/.test(l)}e(G6r,"isValidFolderName");var IXt=require("crypto");function K6r(l){return l.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\r?\n/g,"\\n")}e(K6r,"escapeForDoubleQuotes");function jvn(l){return l.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\r?\n/g,"\\n")}e(jvn,"escapeForBackticks");var Y6r=e(l=>l.startsWith("'")&&l.endsWith("'")||l.startsWith('"')&&l.endsWith('"')||l.startsWith("`")&&l.endsWith("`")?l:`"${K6r(l)}"`,"surroundWithQuotes");function ikt(l){let p=/^\$\{([^}]*)\}$/,d=/\$\{[^}]+\}/,y=/^(?!["'`])\$\{([^}]*)\}(?!["'`])$/;if(!l)return"";if(y.test(l)){let E=l.match(p);return E?E[1]:""}return d.test(l)?`\`${jvn(l)}\``:`"${K6r(l)}"`}e(ikt,"parseUnevaluatedString");var GUn=e(l=>{let p=e(d=>akt(d)?d.matcher:`${d.matcher} ${d.locator} ${d.matcher}`,"createUniqueKey");return Array.from(l.reduce((d,y)=>d.set(p(y),y),new Map).values())},"filterDuplicateAssertions"),KUn=e((l,p)=>{let d=p.map(R=>R.value),y=e(R=>d.some(V=>R.includes(`'${V}'`)||R.includes(`"${V}"`)),"stringContainsVariableValue");if((!l.locator||!y(l.locator))&&!y(l.matcher))return;let E=e(R=>p.reduce((V,{name:H,value:Q})=>V.replace(`'${Q}'`,`${kNe}${H}`).replace(`"${Q}"`,`${kNe}${H}`),R),"findAndReplaceVariableValuesWithNames"),N=l.locator?E(l.locator):void 0,F=l.locator!==N?"toBeVisible()":E(l.matcher);return{...l,locator:N,matcher:F,locatorMappedToCorrectRrwebId:!1,isValid:void 0}},"refactorAssertionUsingHeuristics"),Jvn="withChecksumAI()",akt=e(l=>l.matcher.startsWith("toHaveURL")||l.matcher.startsWith("not.toHaveURL")||l.matcher.startsWith(Jvn),"isPageLevelAssertion"),YUn=["navigation","get_more_items","wait","switch_tab"],X6r=e(l=>{let{assertions:p,smartAssertion:d}=l;return[...p??[],...d?[d]:[]].filter(y=>y.isSelected)},"getSelectedAssertions"),NXt=e(l=>l.matcher==="toBeHidden()","isAssertionOnElementFromPreviousState"),FXt=e(l=>!l.locator||l.locator==="page"?"page":J0e(l.locator.replace(/^page/,"")),"getLocator"),qvn=e((l,p)=>{let d=/^(not\.)?(\w+)\((.*)\)$/,y=l.match(d);if(!y)return null;let[,E,N,F]=y,R=[];F&&(R=F.split(",").map(H=>{H=H.trim();let Q=H.match(/^(['"`])(.*)\1$/);return Q?ikt(Q[2]):H}));let V=[...R,...p?[p]:[]].join(", ");return`${E?"not.":""}${N}(${V})`},"parseMatcher"),DOt=e(l=>{let p=e(N=>N?N.replaceAll(/\\/g,"\\\\").replaceAll(/"/g,'\\"').replaceAll(`
@@ -1899,10 +1898,10 @@ if (typeof globalThis.requireTs === "undefined") {
1899
1898
  ...(${this.makeOptions(d)})
1900
1899
  })`:E;return R?`, ${H}`:H}let V=this.buildClickActionOptionsObject(p);return this.makeOptions({...d,...V,...N},R)}buildActionCode(p,d,y){let{eventCode:E,unevaluatedFillValue:N,dropTarget:F,files:R,switchToTab:V,userRole:H,canvas:Q,nativeDialog:se}=p,G=ikt(N),_e=Z1r[E],ne=this.getOptionsString(p,y);switch(E){case"navigation":return[`await page.goto(${this.formatURL(N)}${ne})`];case"click":case"double_click":return[`${d}.${_e}(${ne})`];case"drag_and_drop":return[`${d}.${_e}(${this.buildLocatorChain("page",F.locator,F.locatorWithVars,F.parentFramesSelectors,F.selector,F.selectorWithVars)}${ne})`];case"check":case"uncheck":case"hover":return[`${d}.${_e}(${ne})`];case"input":case"selectoption":case"keystroke":return[`${d}.${_e}(${G}${ne})`];case"click_and_type":return[`${d}.click(${ne})`,`${d}.pressSequentially(${G}${ne?`, ${ne}`:""})`];case"clear_and_type":return[`${d}.clear(${this.makeOptions(y)})`,`${d}.pressSequentially(${G}${ne?`, ${ne}`:""})`];case"custom_code":return[N];case"wait":return[`await page.waitForTimeout(${N||1e3})`];case"upload_files":return R!=null&&R.length||console.warn("Input files are required for SetInputFiles event code"),[`${d}.${_e}(page.resolveAssetsFolder(["${R.join('", "')}"])${ne})`];case"switch_tab":return[`page = await page.${_e}(${V.index}${ne})`];case"logout_and_login":return[`await page.${_e}("${H}")`];case"canvas_click":return[`${d}.${_e}("${Q.canvasText}"${Q.rectSizeIndex?`, ${Q.rectSizeIndex}`:""})`];case"native_accept":{let le=se.dialogResult!=null&&(0,Q6r.isString)(se.dialogResult)?`"${se.dialogResult}"`:"";return[`await page.waitForDialog().then(async (${se.dialogType}) => {await ${se.dialogType}.accept(${le})})`]}case"native_dismiss":return[`await page.waitForDialog().then(async (${se.dialogType}) => {await ${se.dialogType}.dismiss()})`];case"login":return[`await login(page${ne})`];default:return[]}}buildLocatorChain(p,d,y,E,N,F,R){let V=this.addFrameSelectorsToLocatorChain(p,E),H=this.addFrameSelectorsToLocatorChain("page",E);if(R){let Q=this.buildCompoundSelectorLocatorChain(V,R);if(Q)return Q}return y?V+=`.${wPt(y,H)}`:F?V+=`.locator('${this.escapeSelector(F)}')`:d?V+=`.${wPt(d,H)}`:N&&(V+=`.locator('${this.escapeSelector(N)}')`),V}addFrameSelectorsToLocatorChain(p,d){return(d??[]).reduce((y,E)=>`${y}.frameLocator('${this.escapeSelector(E)}')`,p)}buildCompoundSelectorLocatorChain(p,d){let y=e(E=>E.selection.type==="content"?`"${E.selection.value}"`:E.locator?`base.${E.locator}`:`base.locator('${this.escapeSelector(E.selector)}')`,"getElementSelector");try{return`${p}.compoundSelection((base) => [${d.contextElements.map(E=>y(E.element)).join(", ")}], (base) => ${d.targetRelativeSelector.locator?`base.${d.targetRelativeSelector.locator}`:`base.locator('${this.escapeSelector(d.targetRelativeSelector.selector)}')`}).first()`}catch(E){console.error("Error building compound selector locator chain",E);return}}formatURL(p){let d=this.resolveRelativeURL(p);return ikt(decodeURIComponent(d))}resolveRelativeURL(p){if(p.startsWith("/"))return p;let d;try{d=new URL(p)}catch(F){if(F instanceof TypeError)return p;throw F}if(!this.options.environment.baseURL)return p;let y=new URL(this.options.environment.baseURL),E=e(F=>F.replace(/^www\./,""),"normalizeHostname");return!y||y.protocol!==d.protocol||E(y.hostname)!==E(d.hostname)||!d.pathname.startsWith(y.pathname)?p:d.pathname.substring(y.pathname.length).replace(/\/$/,"").replace(/^(?!\/)/,"/")+d.search+d.hash}addVariable(p){this.test.usingVariableStore=!0,this.addCode(rhr([p],{onlyValueExpression:!0}))}addAssertion(p){this.addCode(this.assertionGenerator.generateAssertionCode(p))}addCode(p){Array.isArray(p)||(p=[p]),p.forEach(d=>{if(!d)return;let y=d.trimEnd();y.endsWith(";")||(y+=";"),this.test.lines.push({type:0,content:y})})}addFunction(p){this.test.lines.push({type:0,content:p})}addComment(p){this.test.lines.push({type:1,content:`/* ${p} */`})}getTestMetadata(){return this.test}createFallbackMarkupForSelector(p,d=[],y,E,N){let F=(d||[]).concat(this.test.fallbackMarkups.map(V=>V.id)),R;do R=xCt(5);while(F.indexOf(R)>-1);return{id:R,selector:p,esraMetadata:y,compoundSelector:E==null?void 0:E.metadata,alternateLocators:N}}escapeSelector(p){var d;return(d=p==null?void 0:p.replaceAll("'","\\'"))==null?void 0:d.replaceAll(/\\/g,"\\\\")}};e(skt,"SingleTestCode");var YNe=skt;var Vvn=1e3,zvn=3e4,OXt=class OXt{constructor(p,d,y,E,N,F,R,V,H){this.config=p;this.checksumRoot=d;this.pageInteractor=y;this.apiService=E;this.userStoryService=N;this.actionsManager=F;this.testAssetsManager=R;this.webDriver=V;this.evaluatorService=H;this.executeAction=e(async({data:p,id:d,options:y,withPageInteractor:E=!1})=>{try{p.selector=void 0,p.executed=!1;let N=p.eventCode==="custom_code";p.thought="";let F=y.forceUpdateTimestamp?{id:d,timestamp:N?Date.now():void 0}:void 0,R=(()=>{if(y.timeout>=0)return y.timeout;if(y.singlePlay)return p.eventCode==="navigation"?zvn:Vvn})();if(p.eventCode==="login"?await this.performLogin(p.login):E?await this.performActionWithPageInteractor(p,R):await this.performActionWithEvaluation(p,R),F&&!N){F.timestamp=Date.now();let V=await this.webDriver.tmFrame.evaluate(H=>window.checksum.timeMachine.sessionReplayer.getLastEventTimestamp(H),F.timestamp);V&&(F.timestamp=V)}return{data:F,success:!0,message:"Action has been executed successfully"}}catch(N){throw Nh.error(`Error: ${N.message.slice(0,200)}`),new Error(N.message||N)}},"executeAction")}setPage(p){this.page=p}async performActionWithEvaluation(p,d){let y=YNe.generateSingleActionCode(p,{noFallbacks:!0,generateAssertionsCode:!1,actionOptions:d?{timeout:d}:void 0});await this.evaluatorService.execute(y)}async performActionWithPageInteractor(p,d){await this.pageInteractor.performAction(p,{useLocator:!0,timeout:d,monitorFlashingHTML:!1})}async uploadFiles(p){let d=p.map(({data:y,fileName:E},N)=>AXt(y,E));await Promise.all(d.map(async y=>{let E=await this.getUploadFileSignedUrl({fileName:y.name,contentType:y.type});await this.apiService.putFile(E,y)})),p.forEach(({data:y,fileName:E},N)=>{PXt(y,E);let F=`${this.testAssetsManager.getLocalAutoSavePath()}/files`;PXt(y,E,F)})}async getUploadFileSignedUrl(p){if(!this.userStoryService.hasTestGenerationData()){Nh.warning("No generationBatchId, can't upload");return}let d=await this.apiService.post("test-generation/get-upload-file-signed-url",{...p,batchId:this.userStoryService.getTestGenerationData().generationBatchId}),{url:y}=await d.json();return y}async login(p,{role:d,environment:y}){await JWt({config:this.config,folder:this.checksumRoot,throwIfEnvInfoInvalid:!0})(p,{role:d,environment:y}),this.didLogin=!0}async performLogin({role:p,environment:d}){await ANt(this.webDriver.page,this.webDriver.appMainFrame,async y=>{await this.login(y,{role:p,environment:d})})}async addInitialLoginAction(){this.actionsManager.addAction({thought:"Log into application",eventCode:"login",id:(0,IXt.randomUUID)(),isInitialAction:!0,login:{role:this.userStoryService.getStory().environment.userRole,environment:this.userStoryService.getStory().environment.name}})}async addStartURLNavigationAction(){var d;let p=(d=this.userStoryService.getStory())==null?void 0:d.url;p&&this.actionsManager.addAction({thought:"Navigate to start URL",eventCode:"navigation",isInitialAction:!0,id:(0,IXt.randomUUID)(),fillValue:p})}hasLoggedIn(){return this.didLogin}};e(OXt,"VtgActionsService");var COt=OXt;var LXt=class LXt{constructor(p,d={},y=!0){this.requests=[];this.watcherConfig={minimumWaitTime:250,maximumWaitTime:1e4,followingRequestsWaitTime:250};this.resolved=!0;this.hasMinimumWaitTimePassed=!1;this.useLog=!1;this.logStack=[];this.resolve=e(()=>{this.resolved||(this.resolved=!0,clearTimeout(this.minimumWaitTimer),clearTimeout(this.maximumWaitTimer),clearTimeout(this.followingRequestWaitTimeoutId),this.loadResolve({totalTime:Date.now()-this.startTS,logs:this.logStack,pendingRequests:this.requests.length,totalRequests:this.observedRequestsCount}))},"resolve");this.watcherConfig={...this.watcherConfig,...d},this.initListeners(p),this.useLog=y}initListeners(p){p.on("request",d=>{var y;this.hasMinimumWaitTimePassed||(y=this.watcherConfig.whitelist)!=null&&y.length&&!this.watcherConfig.whitelist.some(E=>E.test(d.url()))||(this.useLog&&this.logStack.push(`${d.method()} ${d.url().substring(0,60)}`),this.requests.push(d),this.observedRequestsCount+=1)}),p.on("response",d=>{this.requests=this.requests.filter(y=>y!==d.request()),this.hasMinimumWaitTimePassed&&(this.requests.length||(clearTimeout(this.followingRequestWaitTimeoutId),this.followingRequestWaitTimeoutId=setTimeout(()=>{this.requests.length||this.resolve()},this.watcherConfig.followingRequestsWaitTime)))})}async wait(){return new Promise(p=>{this.loadResolve=p,this.resolved=!1,this.minimumWaitTimer=setTimeout(()=>{this.hasMinimumWaitTimePassed=!0,this.requests.length||this.resolve()},this.watcherConfig.minimumWaitTime),this.maximumWaitTimer=setTimeout(this.resolve,this.watcherConfig.maximumWaitTime)})}startListening(){this.requests=[],this.startTS=Date.now(),this.hasMinimumWaitTimePassed=!1,this.observedRequestsCount=0,this.useLog&&(this.logStack=[])}};e(LXt,"NetworkWatcher");var EOt=LXt;var Z6r=require("crypto");var Wvn=e(l=>({...l.fillValue&&{value:l.fillValue},...l.selector&&{selector:l.selector},type:Q1r[l.eventCode],id:l.id,files:[]}),"webPageActionToNextAction"),MXt=class MXt{constructor(p,d,y){this.actionsManager=p;this.apiService=d;this.userStoryService=y}clear(){this.remoteSessionId=void 0}async init({retriesLeft:p=3,keepActionsWithoutDescription:d=!1,lastActionId:y=void 0}={}){let{goal:E,instructions:N}=this.userStoryService.getStory(),F=this.actionsManager.actions??[];if(y){let H=F.findIndex(({id:Q})=>Q===y);H===-1&&Nh(`[init] No action with id ${y} was found in executed actions`),F=F.slice(0,H+1)}d||(F=F.filter(H=>!!H.thought));let R={previous:F.map(H=>({thought:H.thought,action:Wvn(H)}))},V={type:"test-generation",storyTitle:E,storyInstructions:N,testId:void 0,testSuiteId:void 0,thoughtsAndActions:R};try{let H=await this.apiService.post("ai-fallback/init",{data:V});this.remoteSessionId=await H.text()}catch(H){if(Nh.error(H),await aA(2e3),p>0)return this.init({retriesLeft:p-1,keepActionsWithoutDescription:d});throw H}}};e(MXt,"VtgAiSessionBaseService");var XNe=MXt;var RXt=class RXt extends XNe{constructor(d,y,E,N,F,R){super(N,F,R);this.webDriver=d;this.pageInteractor=y;this.actionsService=E;this.actionsManager=N;this.apiService=F;this.userStoryService=R;this.previousActionFailed=!1;this.currentChecksumId="0";this.executeAction=e(async({data:d,options:y={isAISuggestion:!0}})=>{await this.webDriver.clearHighlights(),this.previousActionFailed=!1;let E;try{let N=new EOt(this.webDriver.appMainFrame.page());N.startListening(),E=await this.actionsService.executeAction({data:d,id:d.id,options:y}),await N.wait(),await aA(2e3)}catch(N){throw this.previousActionFailed=!0,Nh.error(N),new Error(N)}return y.valueChanged&&await this.init(),E},"executeAction")}async init({keepActionsWithoutDescription:d}={keepActionsWithoutDescription:!0}){return this.clear(),super.init({keepActionsWithoutDescription:d})}clear(){super.clear(),this.previousActionFailed=!1,this.currentChecksumId="0"}async iterate({guidance:d}={}){await this.webDriver.getTimeMachine().toggleTimeMachineHandleEvents(!1);let{reducedHTML:y,flashingHTML:E,elementsForNodeInterpretation:N,currentChecksumId:F}=await this.webDriver.evaluateWithChecksum(async({appRules:R,currentChecksumId:V})=>window.checksum.testGenerator.reduceHTML(R,{stopFlashingElementsDetection:!0,assignChecksumIdsToAllElements:!0,initialChecksumId:V}),{appRules:{appSpecificInteractableElementsSelectors:[]},currentChecksumId:this.currentChecksumId});this.currentChecksumId=F;try{let R=await this.getNextAction({reducedHTML:y,flashingHTML:E,elementsForNodeInterpretation:N,guidance:d}),H={...await this.pageInteractor.translateActionResponseToAgentPotentialAction(R),id:(0,Z6r.randomUUID)(),timestamp:Date.now()};return await this.webDriver.highlightElementByLocator(this.pageInteractor.makeLocator(H.selector,H.parentFramesSelectors),H.clickOffset,"10px solid rgba(255,0,0,1)",!0),H}catch(R){Nh.error("error in ai iterate",R)}}async stop(){}async getNextAction({reducedHTML:d,flashingHTML:y,elementsForNodeInterpretation:E,guidance:N}){let F={reduction:{reducedHTML:d,flashingHTML:y,elementsForNodeInterpretation:E},currentURL:this.webDriver.appMainFrame.url(),previousActionOverview:{success:!this.previousActionFailed,userCorrection:N}};try{return await(await this.apiService.post("ai-fallback/iterate",{sessionId:this.remoteSessionId,iterationData:F})).json()}catch(R){throw console.error(R),R}}};e(RXt,"VtgAITestGenerationService");var kOt=RXt;var BXt=class BXt{constructor(p){this.config=p;this.baseURL=p.apiURL+"/client-api/runtime"}getBaseURL(){return this.baseURL}post(p,d){return fetch(`${this.baseURL}/${p}`,{method:"POST",headers:{"Content-Type":"application/json",ChecksumAppCode:this.config.apiKey},body:d?JSON.stringify(d):void 0})}putFile(p,d){return fetch(p,{method:"PUT",headers:{"Content-Type":d.type},body:d})}};e(BXt,"VtgCloudAPIService");var wOt=BXt;var PZe=require("@playwright/test"),oQt=x7(x7r());var eQt=class eQt{constructor(p){this.options=p;this.harData={methodIndex:{GET:0,POST:0,PUT:0,DELETE:0}};this.interceptors={recordHar:this.harInterceptor.bind(this),completeOriginHeader:this.completeOriginHeaderInterceptor.bind(this)};this.intercept=e(async(p,d,y)=>{let E=[],N=e(F=>{if(F)switch(F.type){case"abort":return p.abort(F.errorCode);case"fulfill":return p.fulfill(F.fulfillOptions);default:case"continue":E.push(F)}},"processResult");for(let[F,R]of Object.entries(this.interceptors))if(this.options[F]){let V=N(await R(p,d,y));if(V)return V}return this.applyContinueResults(p,E)},"intercept")}setOptions(p){this.options=p}mergeOptions(p){this.options={...this.options,...p}}applyContinueResults(p,d){let y=d.filter(N=>!!N),E={};return y.forEach(N=>{N.options&&(N.options.headers&&(E.headers={...E.headers,...N.options.headers}),N.options.method&&(E.method=N.options.method),N.options.postData&&(E.postData=N.options.postData),N.options.url&&(E.url=N.options.url))}),p.continue(E)}async harInterceptor(p){let d=p.request().headers(),y=p.request().method();return d["Checksum-Id"]=(++this.harData.methodIndex[y]).toString(),{options:{headers:d}}}async completeOriginHeaderInterceptor(p,d,{page:y}){let E=p.request().headers();if(!E.Origin){try{let N=new URL(y.url()).origin;E.Origin=N}catch{}return{options:{headers:E}}}}};e(eQt,"RouteInterceptors");var OOt=eQt;var cQt=class cQt{constructor(p={},d={},y=new mEt,E=void 0){this.framesMessageBroker=y;this.context=E;this.browserConfig={devtools:!1,executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH??void 0};this.options={fullScreenResolution:!1,disableWebSecurity:!0};this.contextClosePromise=void 0;this.eventListeners=[];this.lastSnapshot={selector:void 0,eventCode:void 0};this.snapshotTimeout=3e4;this.cacheScript=!1;this.pagesIndexToGuid={};this.onRequestFinished=e(async p=>{try{let d=await p.response();if(!d.ok())return;let y=p.resourceType(),E=p.url(),N=e(async()=>{try{return await d.text()}catch{try{return await(await fetch(E)).text()}catch{return}}},"getBody");if(["document","script","stylesheet"].includes(y))try{let F=await N();if(!F)return;let R={url:E,source:F,type:y};await this.forEachEventListener(V=>{var H;return(H=V.onWebDriverResourceLoaded)==null?void 0:H.call(V,R)})}catch(F){console.error("[WebDriver] requestfinished event handler error",y,E,F)}}catch(d){console.error("[WebDriver] requestfinished event handler error",d)}},"onRequestFinished");this.onFrameNavigated=e(async p=>{let d=e(async y=>{await this.forEachEventListener(E=>{var N;return(N=E.onWebDriverFrameNavigated)==null?void 0:N.call(E,p,y)})},"notifyFrameNavigated");await d(!1),await this.injectedScriptManager.onFrameNavigated(p),await d(!0)},"onFrameNavigated");this.tracing=!1;this.tracingChunk=!1;this.chunkIndex=0;var N;if(this.options={...this.options,...p},this.browserConfig={...this.browserConfig,...d},this.injectedScriptManager=new dEt(this.options),this.browserConfig.args||(this.browserConfig.args=[]),this.options.disableWebSecurity&&this.browserConfig.args.push("--disable-web-security"),this.options.allowFileAccess&&this.browserConfig.args.push("--allow-file-access-from-files"),this.browserConfig.args.push("--disable-site-isolation-trials"),this.browserConfig.args.push("--allow-running-insecure-content"),this.options.remoteDebugging&&this.browserConfig.args.push("--remote-debugging-port=9222"),this.options.forceHeadless&&(this.browserConfig.headless=!0,this.browserConfig.devtools=!1),this.options.useProxy)if((N=this.options.webProxy)!=null&&N.server){console.log("[WebDriver] using proxy");let{server:F,username:R,password:V}=this.options.webProxy;this.browserConfig.proxy={server:F,username:R,password:V},this.browserConfig.args.push("--proxy-bypass-list=localhost,127.0.0.1")}else console.error("[WebDriver] useProxy=true but proxy not configured");this.routeInterceptor=new OOt({completeOriginHeader:this.options.completeOriginHeader,recordHar:this.options.recordHAR})}async prepare({storageState:p,baseURL:d,shutdown:y=!0}={}){if(y&&await this.shutdown(),this.options.useStealth){let N=G7r();oQt.chromium.use(N()),this.browser=await oQt.chromium.launch(this.browserConfig)}else this.browser=await PZe.chromium.launch(this.browserConfig);let E={};return E.bypassCSP=!0,E.ignoreHTTPSErrors=!0,E.baseURL=d??this.options.baseURL,this.options.timezoneId&&(E.timezoneId=this.options.timezoneId),this.options.viewport?E.viewport=this.options.viewport:this.options.fullScreenResolution?E.viewport={width:1280,height:720}:this.options.hostWindowViewport&&(E.deviceScaleFactor=void 0,E.viewport=null),p&&(E.storageState=p),this.context??(this.context=await this.browser.newContext(E)),this.options.defaultTimeout&&this.context.setDefaultTimeout(this.options.defaultTimeout),this.options.defaultNavigationTimeout&&this.context.setDefaultNavigationTimeout(this.options.defaultNavigationTimeout),this.context.on("page",async N=>{await this.onNewPage(N),await this.onFrameNavigated(N.mainFrame()),N.on("framenavigated",this.onFrameNavigated)}),this.context.on("close",async()=>{this.contextClosePromise=this.forEachEventListener(N=>{var F;return(F=N.onWebDriverContextClose)==null?void 0:F.call(N)})}),this.activePage=await this.context.newPage(),this.originalPage=this.activePage,this.options.trackLoadedResources&&this.page.on("requestfinished",this.onRequestFinished),this.options.useCDPSession&&(this.cdpSession=await this.context.newCDPSession(this.page)),!0}get frameMsgBroker(){return this.framesMessageBroker}async onNewPage(p){try{await(p==null?void 0:p.route("**/*",async(d,y)=>this.routeInterceptor.intercept(d,y,{page:p})))}catch(d){console.error("[WebDriver] onPage error",d)}}switchActivePage(p){let d=this.context.pages().find(y=>wQ(y)===p);return!d||d.isClosed()?(console.error(`[WebDriver] Page with guid ${p} not found or has been closed.`),!1):(this.previousPage=this.activePage,this.activePage=d,!0)}getDefaultTimeout(){return this.options.defaultTimeout}getDefaultNavigationTimeout(){return this.options.defaultNavigationTimeout}async addHARMockAPIRecordings(p){if(!this.activePage){console.warn("[addHARMockAPIRecordings] Active page is not set, skipping HAR recording.");return}await this.activePage.routeFromHAR(p,{url:/^(?!.*\.(js|mjs|ts|jsx|tsx|css|jpg|jpeg|png|gif|svg|webp|heif|heic|raw|cr2|nef|arw|bmp|tiff|tif|ico|woff|woff2|ttf|otf|doc|docx|pdf|ws|wasm|mp3|wav|aac|flac|mp4|avi|mov|wmv|flv|zip|rar|7z|tar\.gz|xml|html|py|java|cpp|xls|xlsx|ppt|pptx|gif)$)/i,update:!0,updateMode:"minimal"})}forEachEventListener(p){return Promise.all(this.eventListeners.map(async d=>{try{await p(d)}catch(y){console.log("WebDriver/forEachEventListener exception",y)}}))}registerEventListener(p){this.eventListeners.push(p)}async getScript(){async function p(d){let{exec:y}=require("child_process");return new Promise((E,N)=>{y(d,F=>{F?(console.log("error executing cmd, ",F),N(F)):E()})})}switch(e(p,"execCmd"),this.options.scriptSource){case"file":return this.options.scriptFile;case"url":if(this.cacheScript)return this.options.scriptFile;try{return await p(`curl -o ${this.options.scriptFile} '${this.options.scriptURL}'`),this.options.scriptFile}catch(d){console.log("[web-driver] Failed fetching frontend script",d)}break}}async startJSCoverageTracking(){return await this.page.coverage.startJSCoverage(),[];return await this.cdpSession.send("Debugger.enable"),await this.cdpSession.send("Profiler.enable"),await this.cdpSession.send("Profiler.startPreciseCoverage",{callCount:!1,detailed:!0}),this.getCurrentJSCoverage()}stopJSCoverageTracking(){return this.page.coverage.stopJSCoverage()}async getCurrentJSCoverage(){let p=await this.page.coverage.stopJSCoverage();return await this.page.coverage.startJSCoverage(),p;return(await this.cdpSession.send("Profiler.takePreciseCoverage")).result}async startCSSCoverageTracking(){return await this.cdpSession.send("DOM.enable"),await this.cdpSession.send("CSS.enable"),await this.cdpSession.send("CSS.startRuleUsageTracking"),this.getCurrentCSSCoverage()}async getCurrentCSSCoverage(){return(await this.cdpSession.send("CSS.takeCoverageDelta")).coverage}getCDPSession(){return this.cdpSession}async navigate(p){return this.page.goto(p)}async setViewportSize(p,d){return this.page.setViewportSize({width:p,height:d})}async getStorageState(){return this.page.context().storageState()}async shutdown(){try{this.page&&(await this.page.close(),this.activePage=void 0),this.context&&(await this.context.close(),this.context=void 0),this.browser&&(await this.browser.close(),this.browser=void 0)}catch(p){console.warn("[WebDriver] shutdown error",p)}}async wrapWithBrowserLogs(p,{disabled:d=!1,onErrorOnly:y=!1}={}){if(d)return p();let E=[],N=e(V=>{E.push(V.text())},"log");this.page.on("console",N);let F,R;try{R=await p()}catch(V){F=V}if(this.page.off("console",N),(!y||F)&&console.log("browser console messages:",E),F)throw F;return R}async takeElementSnapshot(p,d,y={},E={}){if(p===this.lastSnapshot.selector&&d===this.lastSnapshot.eventCode)return{};if(!p)return{};try{let{snapshot:N,elementLocator:F}=await this.takeSnapshot(p,E,{frameLocatorSelector:y.frameLocatorSelector});return this.lastSnapshot={selector:p,eventCode:d},{snapshot:N,elementLocator:F}}catch(N){return console.error("takeElementSnapshot error",N),{}}}getScreenshotTimeout(p=!1){return p?this.snapshotTimeout:this.snapshotTimeout+5e3}async takePageSnapshot(p){let d=this.page.screenshot({...p,timeout:this.getScreenshotTimeout()});return await Promise.race([d,aA(this.getScreenshotTimeout(!0))])}async takeSnapshot(p,d,{frameLocatorSelector:y}={}){let E=y?this.page.frameLocator(y).locator(p):this.page.locator(p),N=E.screenshot({...d,timeout:this.getScreenshotTimeout()});return{snapshot:await Promise.race([N,aA(this.getScreenshotTimeout(!0))]),elementLocator:E}}async getCurrentURL(){return this.page.url()}async getClientScreenResolution(){return await this.page.evaluate(async()=>({width:window.screen.width,height:window.screen.height}))}async awaitContextClose(){return this.contextClosePromise||await aA(100),this.contextClosePromise}get page(){return this.activePage}getPage(){return this.activePage}startPlaywrightTrace(){return this.tracing=!0,this.context.tracing.start({name:"trace",screenshots:!0,snapshots:!0})}startPlaywrightTraceChunk(){return this.tracingChunk=!0,this.context.tracing.startChunk({name:`trace-chunk-${this.chunkIndex}`})}stopPlaywrightTraceChunk(p){return this.tracingChunk=!1,this.context.tracing.stopChunk({path:`${p.replace(".zip",`.${this.chunkIndex++}.zip`)}`})}stopPlaywrightTrace(p){return this.tracing=!1,this.context.tracing.stop({path:p})}isTracing(){return this.tracing}isTracingChunk(){return this.tracingChunk}};e(cQt,"WebDriver");var ROt=cQt;var uQt=class uQt{constructor(p,d,y,E,N,F={logPerformance:!1}){this.timeMachine=p;this.actionsManager=d;this.apiService=y;this.remoteSessionId=E;this.userStoryService=N;this.options=F;this.currentChecksumId="0"}rewriteLastActionThought(p){throw new Error("Method not implemented.")}async generateReductionPromptData(p,d){let y=this.getActionTimestamps(p,d);if(!y)return;let E=await this.timeMachine.executeReducedHTMLTask(y.before),N=await this.timeMachine.executeReducedHTMLTask(y.after);return{previousReducedHTML:E,reducedHTML:N,timestamp:y.after}}async generatePromptData(p,d,y){if(this.promptData)return{...this.promptData,assertionsData:d};let E=this.getActionTimestamps(p,y);if(!E)return;let N=await this.timeMachine.executeReducedHTMLTask(E.before),F=await this.timeMachine.executeReducedHTMLTask(E.after);return this.promptData={reduction:{reducedHTML:F,flashingHTML:[]},currentURL:"",previousReducedHTML:N,previousURL:"",actionId:p,assertionsData:d,timestamp:E.after},this.promptData}async generateThoughtPromptData(p,d){let y=await this.generateReductionPromptData(p,d.timestamp);if(!y)return;let E=this.actionsManager.actions.findIndex(R=>R.id===p);if(E===-1){Nh.error(`Action with id ${p} not found`);return}let N=this.actionsManager.actions[E],F=this.actionsManager.actions[E-1];return{...y,action:N,previousAction:F,assertion:d}}async callApi(p,d,y,E){let N=Date.now(),F=await this.generatePromptData(d,y,E);if(this.logPerformance(`- Generated prompt data for ${p}`,N),!F)return;N=Date.now();let R=await this.apiService.post(`assertions/${p}`,{sessionId:this.remoteSessionId,data:F});if(!R.ok){Nh.error(`Request for assertion generation ${p} failed with status ${R.status}`);return}let V=await R.json();return this.logPerformance(`- Received response for assertion generation ${p}`,N),V}async generateAssertions(p,d){try{let y=await this.callApi("generate",p,void 0,d);if(y)return y.timestamps=this.getActionTimestamps(p,d),y}catch(y){throw Nh.error(y),y}}async refactoringAssertions(p){try{return await this.callApi("refactor",p.actionId,p)}catch(d){throw Nh.error(d),d}}async filteringAssertions(p){try{return await this.callApi("filter",p.actionId,p)}catch(d){throw Nh.error(d),d}}getVariables(){return[]}getVariablesString(p){return""}getActionTimestamps(p,d){let y=this.actionsManager.actions,E=y.findIndex(R=>R.id===p);if(E===-1){Nh.warning(`[init] No action with id ${p} was found in executed actions`);return}let N=y[E],F=y[E+1];return{before:N.timestamp,after:(F==null?void 0:F.timestamp)??d}}logPerformance(p,d){this.options.logPerformance&&Nh(`${p} in`,Date.now()-d,"ms")}};e(uQt,"AssertionsAgent");var Crt=uQt;var lQt=class lQt extends XNe{constructor(d,y,E,N,F,R,V={logPerformance:!1}){super(d,y,E);this.actionsManager=d;this.apiService=y;this.userStoryService=E;this.timeMachine=N;this.webDriver=F;this.evaluationService=R;this.options=V;this.activeRemoteSessionIdByActionId=new Map}async init({retriesLeft:d=3,keepActionsWithoutDescription:y=!1,lastActionId:E=void 0}={}){await super.init({retriesLeft:d,keepActionsWithoutDescription:y,lastActionId:E}),this.activeRemoteSessionIdByActionId.set(E,this.remoteSessionId)}async generateAiAssertions({id:d,startedAt:y,processId:E}){this.options.logPerformance&&console.log(`generateAiAssertions for action ${d}`);let N=e(async(F=[],R=!1)=>{try{let V=F.map((H,Q)=>({...H,id:(Date.now()+Q).toString(),source:"ai",verified:!0,actionId:d})).filter(H=>{var Q;return!["withChecksumAI()","withChecksumAI"].includes(H.matcher)&&!((Q=H.usedVariablesNames)!=null&&Q.length)});return Nh.info(`Returned assertions results (${E})`,F.map(({matcher:H,thought:Q,locator:se})=>({matcher:H,thought:Q,locator:se}))),await this.webDriver.page.evaluate(({assertions:H,actionId:Q,error:se,processId:G})=>{window.vtg.onAsyncProcessResponse({actionId:Q,assertions:H,error:se,processId:G})},{assertions:V,actionId:d,error:R,processId:E}),V}catch(V){return Nh.error("Error in AI assertions generation",V),[]}},"sendResultToVTGWithoutUnsupported");try{if(this.isRunning(d))return Nh.warning("Already generating assertions for this action"),await N();let F=Date.now();if(await this.init({keepActionsWithoutDescription:!0,lastActionId:d}),this.logPerformance(`init for action ${d}`,F),!this.isRunning(d))return await N();let R=new Crt(this.timeMachine,this.actionsManager,this.apiService,this.remoteSessionId,this.userStoryService),V=await this.generateAssertions(R,d,y);if(!V||!this.isRunning(d))return await N();if(V.assertions.length===0){let{smartAssertion:H}=V;return H?(H.isSelected=!0,await N([H])):await N()}return vC.vtg.aiAssertions.allowRefactoring&&(V=await this.refactoringAssertions(R,V)),this.isRunning(d)?(V=await this.filteringAssertions(R,V),this.isRunning(d)?(this.logPerformance(`---------------- Overall - Generated assertions for action ${d} in`,F),await N(X6r(V))):await N()):await N()}catch(F){return Nh.error("Error in AI assertions generation",F),await N([],!0)}finally{this.activeRemoteSessionIdByActionId.delete(d)}}stopGenerateAiAssertions(d){this.activeRemoteSessionIdByActionId.delete(d)}isRunning(d){return this.activeRemoteSessionIdByActionId.has(d)}async generateAssertions(d,y,E=void 0){let N=Date.now(),F=N,R=await d.generateAssertions(y,E);if(this.logPerformance(`- generateAssertions for action ${y}`,N),!!R)return N=Date.now(),await this.setSelectionDataForAssertions(R),this.logPerformance(`- setSelectionData for action ${y}`,N),N=Date.now(),await this.validateAssertions(R.assertions,R.timestamps,d),this.logPerformance(`- validate assertions for action ${y}`,N),this.logPerformance(`Overall - Generated assertions for action ${y}`,F),R}async refactoringAssertions(d,y){let E=Date.now(),N=E;try{this.options.logPerformance&&console.log(`Refactoring assertions for action ${y.actionId}`),y=await d.refactoringAssertions(y),this.logPerformance(`- refactoringAssertions for action ${y.actionId}`,E),E=Date.now(),await this.validateAssertions(y.assertions,y.timestamps,d),this.logPerformance(`- validate assertions after refactoring for action ${y.actionId}`,E),this.logPerformance(`Overall - Refactored assertions for action ${y.actionId}`,N)}catch(F){Nh.error("[refactoringAssertions] Error in assertions refactoring",F)}return y}async filteringAssertions(d,y){try{let E=Date.now();this.options.logPerformance&&console.log(`Filtering assertions for action ${y.actionId}`);let N=await d.filteringAssertions(y);return this.logPerformance(`Overall - filteringAssertions for action ${y.actionId}`,E),N}catch(E){Nh.error("[filteringAssertions] Error in assertions filtering",E)}}async executeAssertion(d,y){let E=PZe.expect.configure({timeout:500}),N=DOt(d);await this.evaluationService.execute(N,{expect:E,page:y})}async validateLocatorMappedToCorrectRrwebId(d,y,E){if(d.locatorMappedToCorrectRrwebId)return;if(!await this.isLocatorMappedToCorrectRrwebId(d,y,E))return d.locatorMappedToCorrectRrwebId=!1,this.handleAssertionValidityError(new Error(`Locator not mapped to correct rrweb id for assertion: ${d.matcher}`),d,"locator not mapped to correct rrweb id")}async validateAssertionOnPreviousState(d,y,E){try{let N=await this.getLocatorsForLocatorString(d,y,E);if(N.length===0){if(NXt(d)&&!d.appliedBeforeAction)throw new Error(`Element not found before action for assertion: ${d.matcher}`);return}await Promise.all(N.map(async F=>{let R={...d,locator:F.toString(),matcher:d.appliedBeforeAction?d.matcher:xrt.getOppositeMatcherClause(d.matcher)};await this.executeAssertion(R,y)}))}catch(N){this.handleAssertionValidityError(N,d,d.appliedBeforeAction?"didn't apply BEFORE the action was executed and it should have":"applied BEFORE the action was executed and it shouldn't have")}}async validateAssertionOnCurrentState(d,y,E){try{await this.executeAssertion(d,y.frameLocator("iframe"))}catch(N){this.handleAssertionValidityError(N,d,"didn't apply AFTER the action")}}async getLocatorRrwebIds(d,y,E){let N=await this.getLocatorsForLocatorString(d,y,E);return await Promise.all(N.map(F=>F.evaluate(R=>R._rrwebid)))}async getLocatorsForLocatorString(d,y,E){if(akt(d))return[];let N=d.locator;if(!N)return[];let F=y.frameLocator("iframe"),R=`return await ${FXt(d)}.all();`;try{return await this.evaluationService.execute(R,{page:F})}catch(V){return Nh.error(`Error getting Locator[] for assertion with locator: ${N}`,R,V.message),[]}}async isLocatorMappedToCorrectRrwebId(d,y,E){if(akt(d))return!0;let N=await this.getLocatorRrwebIds(d,y,E);return N.length!==1?!1:N[0]===d.rrwebid}async validateAssertions(d,y,E){let N=d.filter(F=>F.isValid===void 0&&!akt(F));await this.executeValidationTasksOnState(N,y,E,{isPreviousState:!0}),N=N.filter(F=>F.isValid===void 0),await this.executeValidationTasksOnState(N,y,E,{isPreviousState:!1}),N.forEach(F=>{F.isValid??(F.isValid=!0)})}async setSelectionDataForAssertions(d){let y=e(F=>{var R;return(R=F.matcher)==null?void 0:R.startsWith("toBeHidden")},"shouldGetSelectionDataFromPreviousState"),[E,N]=d.assertions.reduce(([F,R],V)=>(y(V)?F.push(V):R.push(V),[F,R]),[[],[]]);await this.setSelectionDataForAssertionsInTimestamp(E,d.timestamps.before),await this.setSelectionDataForAssertionsInTimestamp(N,d.timestamps.after)}async setSelectionDataForAssertionsInTimestamp(d,y){if(!(!d||d.length===0))return this.timeMachine.executeTask(async E=>{await Promise.all(d.map(N=>this.setSelectionData(N,E)))},y,{name:"setSelectionDataForAssertionsInTimestamp"})}async executeValidationTasksOnState(d,y,E,{isPreviousState:N}){let F=N?"validateAssertionOnPreviousState":"validateAssertionOnCurrentState",R=(N?this.validateAssertionOnPreviousState:this.validateAssertionOnCurrentState).bind(this),V=N?y.before:y.after;await this.timeMachine.executeTask(async H=>{await Promise.all(d.flatMap(Q=>{let se=NXt(Q)===N,G=!Q.locatorMappedToCorrectRrwebId&&se,_e=this.validateLocatorMappedToCorrectRrwebId(Q,H,E),ne=R(Q,H,E);return G?[_e,ne]:[ne]}))},V,{name:F})}async setSelectionData(d,y){if(!d.rrwebid||d.locator)return;let E;try{let N=await y.evaluate(F=>window.checksum.testGenerator.getInspectedElementSelectionResultByRRwebId(F,{ignoredIframesSelectors:["iframe"],fromTimeMachine:!0}),parseInt(d.rrwebid,10));if(N){Object.assign(d,N,{locatorMappedToCorrectRrwebId:!0});return}else E=new Error("Inspected element result is undefined")}catch(N){E=N}d.locatorMappedToCorrectRrwebId=!1,this.handleAssertionValidityError(E,d,"invalid locator")}logPerformance(d,y){this.options.logPerformance&&console.log(`${d} in`,Date.now()-y,"ms")}handleAssertionValidityError(d,y,E){let N=d.message.split(`
1901
1900
  `);Nh.warning("Failed validating assertion",N.slice(0,Math.min(N.findIndex(F=>F.startsWith("Call log:")),6)).filter(F=>F).map(F=>F.substring(0,100)).join(`
1902
- `)),y&&(y.isValid=!1,y.invalidReason=E)}};e(lQt,"VtgAiAssertionsService");var BOt=lQt;var pQt=class pQt{constructor(p,d,y){this.webDriver=p;this.actionsManager=d;this.evaluatorService=y}setPage(p){this.page=p}async verifyOnLive({data:p,id:d,options:y}){if(!p.locator||!p.matcher)throw new Error("Matcher or locator is not provided");let E=await this.verify({assertion:p,context:this.webDriver.appMainFrame,timeout:y.singlePlay?1e3:void 0}),N=y.forceUpdateTimestamp?{id:d,timestamp:Date.now()}:void 0;return{...E,data:N}}async verifyOnTimeMachine({data:p}){try{return this.verify({assertion:p,context:this.webDriver.tmFrame.frameLocator("iframe"),timeout:1e3})}catch(d){return Nh.error(d),{success:!1,message:String(d)}}}async verify({assertion:p,timeout:d,context:y}){try{d&&(p.matcherOptions=p.matcherOptions?`({
1901
+ `)),y&&(y.isValid=!1,y.invalidReason=E)}};e(lQt,"VtgAiAssertionsService");var BOt=lQt;var pQt=class pQt{constructor(p,d,y){this.webDriver=p;this.actionsManager=d;this.evaluatorService=y}setPage(p){this.page=p}async verifyOnLive({data:p,id:d,options:y}){if(!p.locator||!p.matcher)throw new Error("Matcher or locator is not provided");let E=await this.verify({assertion:p,timeout:y.singlePlay?1e3:void 0}),N=y.forceUpdateTimestamp?{id:d,timestamp:Date.now()}:void 0;return{...E,data:N}}async verifyOnTimeMachine({data:p}){try{return this.verify({assertion:p,context:{page:this.webDriver.tmFrame.frameLocator("iframe")},timeout:1e3})}catch(d){return Nh.error(d),{success:!1,message:String(d)}}}async verify({assertion:p,timeout:d,context:y}){try{d&&(p.matcherOptions=p.matcherOptions?`({
1903
1902
  ...(${p.matcherOptions}),
1904
1903
  timeout: ${d}
1905
- })`:`{ timeout: ${d} }`);let E=YNe.generateSingleAssertionCode(p);return await this.evaluatorService.execute(E,{page:y}),{success:!0,message:"Assertion verified successfully!"}}catch(E){return Nh.error(String(E).slice(0,200)),{success:!1,message:String(E)}}}async updateAssertion({data:p,id:d}){if(this.actionsManager.actions.findIndex(({id:N})=>p.actionId===N)===-1)throw new Error(`[generateAssertionForAction] No action with id ${p.actionId} was found in executed actions`);let E={...p,selected:!0,id:d};return this.actionsManager.updateAssertionById(p.actionId,E),E}createAssertion(p){let{id:d,data:y,options:E,type:N}=p;switch(E==null?void 0:E.type){case"insertAfter":{let F=this.actionsManager.findActionOrAssertionById(E.afterStepId);return F.action||`${E.afterStepId}`,y.actionId=F.action.id,y.selected=!0,y.id=d,F.assertion?this.actionsManager.addAssertionToAction(y,F.assertion.id):this.actionsManager.addAssertionToAction(y),y}case"insertLast":return this.actionsManager.addAssertionToAction(y),y;default:throw new Error("Add all VTGStepAdditionType switch cases handle")}}};e(pQt,"VtgAssertionsService");var jOt=pQt;var NZe=class NZe{constructor(){this.cssFeaturesCache=new Map;this.parentChainCache=new Map}static getInstance(){return NZe.instance||(NZe.instance=new NZe),NZe.instance}getCSSKeyFeatures(p){return this.cssFeaturesCache.get(this.makeKey(p))}setCSSKeyFeatures(p,d){this.cssFeaturesCache.set(this.makeKey(p),d)}getParentChain(p){return this.parentChainCache.get(this.makeKey(p))}setParentChain(p,d){this.parentChainCache.set(this.makeKey(p),d)}makeKey(p){let{timestamp:d,rrwebId:y}=p;return`${d}_${y}`}};e(NZe,"LocatorsAssetsCache");var ZNe=NZe;var fQt=class fQt{log(...p){console.log(...p)}logError(...p){console.error(...p)}};e(fQt,"TMPAgentLoggerConsole");var JOt=fQt;var _Qt=class _Qt{constructor(p,d=null,y=async()=>null,E=new JOt){this.selectorGeneratorApi=p;this.variables=d;this.evaluate=y;this.logger=E}async generateSelectionForAction(p,d){var R,V;let{useCSSExtraction:y,useVariables:E,useArbitrarySelector:N}=d,F=!1;if(N&&!p.contextElements&&p.isPartOfListItem&&p.couldPickAnyListItem)try{this.logger.log("*** Will generate arbitrary selector");let H=await this.evaluate(async({checksumId:Q})=>window.checksum.testGenerator.buildArbitraryListItem(Q),{checksumId:p.action.checksumid});if(H)return H[0]}catch(H){console.error("Error generating arbitrary selector",H)}if(!F||!p.contextElements||!p.isPartOfListItem){let H=(R=await this.generateWithLLMFiltering(p.action.checksumid,await this.generateLocatorsForElement(p.action.checksumid,{isPartOfListItem:p.isPartOfListItem,isForContextElement:!1,useCSSExtraction:y}),null,this.testCandidates.bind(this),{isPartOfListItem:p.isPartOfListItem,useVariables:E}))==null?void 0:R[0];if(H)return p.isPartOfListItem&&!H.locator.endsWith(".first()")&&(H.selector+=" >> nth=0",H.locator+=".first()",(V=H.selectorWithVars)!=null&&V.length&&(H.selectorWithVars+=" >> nth=0",H.locatorWithVars+=".first()")),H}if(F&&p.contextElements){let H=await this.generateCompoundSelector(p.action.checksumid,p.isPartOfListItem);if(H)return{compoundSelector:H}}console.log("[SelectorGenerator] Failed to generate selection")}async generateLLMLocators(p){try{return await this.selectorGeneratorApi.generateLLMLocators(p)}catch(d){return console.error("Error generating LLM locators",d),[]}}async correctLLMLocators(p){try{return this.selectorGeneratorApi.correctLLMLocators(p)}catch(d){return console.error("Error in LLM locators correction",d),[]}}async generateWithLLMFiltering(p,d,y,E,{useImage:N=!0,useVariables:F=!0,isPartOfListItem:R=!1,isForContextElement:V=!1}={}){var H;try{if(R){let G=d.find(_e=>_e.isListSelector);if(G)return[G]}let Q=d.length>1||F&&Object.keys(((H=this.variables)==null?void 0:H.keyValue)??{}).length>0?await this.selectorGeneratorApi.runLLMFiltering(d,y??await this.getParentChainHTML(p),{useImage:N,useVariables:F}):d;if(!Q)return;let se=await E(Q.map(G=>({...G,selector:G.selector??""})),p,{testUniqueness:!(R||V),useVariables:F});return se?se.map(G=>({...G,alternateLocators:{origin:"filtered",locators:se.filter(_e=>_e!==G).map(_e=>_e.locator)}})):[]}catch(Q){this.logger.log("Error generating selector with LLM filtering",Q);return}}async generateCompoundSelector(p,d){try{this.logger.log("*** Will generate compound selector");let y=await this.selectorGeneratorApi.extractCompoundSelectionData(p);return this.processContextElements(y,d)}catch(y){this.logger.log("Error generating compound selector",y);return}}async processContextElements(p,d){let y=await this.evaluate(async({contextElementsMetadata:N,isPartOfListItem:F})=>window.checksum.testGenerator.getCompoundSelector().filter(N,{isPartOfListItem:F}).map(({element:R,...V})=>V),{contextElementsMetadata:p,isPartOfListItem:d});if(console.log(`Filtered context elements: ${y.length}`),y.length<2){this.logger.log("<!> No context elements found besides target, skipping");return}let E;try{if(E=await this.evaluate(async({contextElements:N,isPartOfListItem:F})=>window.checksum.testGenerator.getCompoundSelector().generate(N,{isPartOfListItem:F}),{contextElements:y,isPartOfListItem:d}),!E){this.logger.log("Error generating compound selector metadata for context elements");return}this.logger.log(`Generated compound selector metadata for ${y.length} context elements (including target)`)}catch(N){this.logger.log("Error generating compound selector metadata for context elements",N.message)}try{this.logger.log("** Generating selectors for context elements");let N=[];await Promise.all(y.map(async V=>{var Q;if(V.selection.type==="content"){N.push({element:{...V,selector:`internal:text="${V.selection.value}"`,locator:`getByText("${V.selection.value}")`}});return}let H=(Q=await this.generateWithLLMFiltering(V.selection.checksumid,await this.generateLocatorsForElement(V.selection.checksumid,{isForContextElement:!0,useCSSExtraction:!1,isPartOfListItem:!1}),null,this.testCandidates.bind(this),{useImage:!1,isForContextElement:!0}))==null?void 0:Q[0];if(!H)throw new Error("Failed to generate selector for context element");N.push({element:{...V,...H},alternateLocators:H.alternateLocators})}));let{targetSelection:F}=E,R=F.playwrightSelectors.length>0?F.playwrightSelectors[0]:{selector:F.cssSelectors[0]};if(!R.selector)throw new Error("Failed to get target relative selector");return this.logger.log("Generated customer facing compound selector - ",[...N.map(V=>V.element.selector),"target: "+R.selector]),{contextElements:N,targetRelativeSelector:R,metadata:E}}catch(N){this.logger.log("Error generating customer facing compound selector metadata for context elements",N)}}async testCandidates(p,d,{testUniqueness:y=!0,useVariables:E=!0}={}){var F;let N=[];for(let R of p)try{E=E&&!!((F=R.variables)!=null&&F.length);let V=await this.evaluate(async({checksumId:H,locator:Q,testVariables:se,testUniqueness:G})=>window.checksum.testGenerator.testElementSelector(Q,H,se,G),{checksumId:d,locator:E?this.implantVariablesValues(R):R.locator,testVariables:E?{locatorWithVars:R.locator,variablesCode:this.variables.code}:void 0,testUniqueness:y});V.valid&&N.push(V)}catch(V){console.error("Error testing selector",V);continue}return N}implantVariablesValues(p){var y;return(y=p.variables)!=null&&y.length?Object.entries(this.variables.keyValue).map(([E,N])=>[kNe+E,N]).filter(([E])=>p.variables.map(N=>N.name).includes(E)).reduce((E,[N,F])=>E.replace("${"+N+"}",F),p.selector):p.selector}async getParentChainHTML(p){try{return this.parentChainHTML||(this.parentChainHTML={}),this.parentChainHTML[p]||(this.parentChainHTML[p]=await this.evaluate(async({checksumId:d})=>window.checksum.testGenerator.getParentChainHTML(d),{checksumId:p})),this.parentChainHTML[p]}catch(d){throw this.logger.log("Error getting parent chain HTML",d),d}}async getExtractCSSKeyElements(p){try{let d=await this.getParentChainHTML(p);return this.selectorGeneratorApi.extractCSSKeyElements(d)}catch(d){return this.logger.log("Error generating prompt for CSS key elements",d),[]}}async generateLocatorsForElement(p,d={isPartOfListItem:!1,isForContextElement:!1,useCSSExtraction:!0}){try{console.log("Generating custom locators");let y=d.useCSSExtraction?await this.getExtractCSSKeyElements(p):[],E=await this.evaluate(async({checksumId:N,keyFeatures:F,...R})=>window.checksum.testGenerator.buildCustomPlaywrightSelectors(N,F,R),{checksumId:p,keyFeatures:y,...d});return this.logger.log("Generated locators for filtering (first is playwright's)",E),E}catch(y){throw this.logger.log("Error generating prompt for selectors",y),y}}};e(_Qt,"SelectorGenerator");var pkt=_Qt;var dQt=class dQt{constructor(p,d){this.promptAssets=p;this.apiService=d}async runLLMFiltering(p=[],d,{useImage:y=!0,useVariables:E=!0}={}){try{let N={title:this.promptAssets.title,steps:this.promptAssets.steps,thought:this.promptAssets.thought,parentChainHTML:d,generatedLocators:p,...y&&this.promptAssets.image?this.promptAssets.image:{}};return await(await this.apiService.post("vtg/locators/filter",N)).json()}catch(N){return Nh.error("Failed getting LLM filtering response from API",N.message),[]}}async extractCompoundSelectionData(p){throw new Error("Method not implemented.")}async extractCSSKeyElements(p){p||(p=this.promptAssets.parentChainHTML);let{title:d,steps:y,thought:E}=this.promptAssets,N={title:d,steps:y,thought:E,parentChainHTML:p};try{return await(await this.apiService.post("vtg/locators/extract-css",N)).json()}catch(F){throw Nh.error(F),F}}async generateLLMLocators(p){p||(p=this.promptAssets.parentChainHTML);let{title:d,steps:y,thought:E}=this.promptAssets,N={title:d,steps:y,thought:E,parentChainHTML:p};try{let F=await this.apiService.post("vtg/locators/generate",N);if(!F.ok)throw new Error(`HTTP error when calling generate locators, status: ${F.status}`);let R;try{R=await F.json()}catch(H){throw new Error("error parsing JSON, "+H.message)}return R}catch(F){throw Nh.error("Failed getting generate locators response from API",F.message),F}}async correctLLMLocators(p,d){d||(d=this.promptAssets.parentChainHTML);let{title:y,steps:E,thought:N}=this.promptAssets,F={title:y,steps:E,thought:N,parentChainHTML:d,locators:p};try{let R=await this.apiService.post("vtg/locators/correct",F);return JSON.parse(await R.text())}catch(R){throw Nh.error(R),R}}};e(dQt,"VTGSelectorGeneratorAPI");var Ert=dQt;var mQt=class mQt{constructor(p,d,y,E,N,F,R){this.processId=p;this.step=d;this.target=y;this.apiService=E;this.userStoryService=N;this.evaluationService=F;this.locatorInteractor=R;this.didCancel=!1}cancel(){this.didCancel=!0}async generateAILocators(){try{let p=this.getLocatorOwner();if(!p)throw new Error("Failed to get locator owner");let d=await this.locatorInteractor.getParentChainHTML(p);if(!d)throw new Error("Failed to get parent chain HTML");let y=[];return y=await this.generateLLMLocators(p,d),(y==null?void 0:y.length)>0?Array.from(new Set(y.concat(p.locator))):[]}catch(p){throw Nh.error(`Failed to generate AI locators (${this.processId})`,p),p}}async extractCSS(p=[]){try{let d=this.getLocatorOwner();if(!d)throw new Error("Failed to get locator owner");let y=await this.locatorInteractor.getParentChainHTML(d);if(!y)throw new Error("Failed to get parent chain HTML");if(this.didCancel)return;let E=await this.generateCSSKeyFeaturesLocators(y,d);if(!(E!=null&&E.length))throw new Error("No locators generated");let N=(await Promise.all(p.map(async R=>this.locatorExpressionToSelectorAndLocator(R)))).filter(R=>R),F=Array.from(new Set(E.concat(N)));return this.didCancel?void 0:F}catch(d){throw Nh.error(`Failed to extract CSS (${this.processId})`,d.message),d}}async filterLocators(p=[]){try{let d=this.getLocatorOwner();if(!d)throw new Error("Failed to get locator owner");let y=await this.locatorInteractor.getParentChainHTML(d);if(!y)throw new Error("Failed to get parent chain HTML");let E=e(()=>{let R=p.filter(Q=>Q),V=R.filter(Q=>Q.length>=100).sort((Q,se)=>Q.length-se.length).slice(0,5),H=R.filter(Q=>Q.length<100).concat(V).sort((Q,se)=>Q.length-se.length).slice(0,10);return Array.from(new Set(H))},"filterCandidates"),N=await Promise.all(E().map(async R=>this.locatorExpressionToSelectorAndLocator(R)));if(this.didCancel)return;let F=await this.runLLMFilteringForLocator(y,N,d);return this.didCancel?void 0:F}catch(d){throw Nh.error(`Failed to filter locators (${this.processId})`,d),d}}async runLLMFilteringForLocator(p,d,y,E){var H;let N={...this.getSelectorGeneratorBasePromptAssets(),parentChainHTML:p,generatedLocators:d,image:E},F="",R=new pkt(new Ert(N,this.apiService)),V=vC.vtg.aiLocators.useFakeAILocators?await this.getFakeSelectionData(y,d):(H=await R.generateWithLLMFiltering(F,d,p,async Q=>(await this.locatorInteractor.candidatesTester(Q,y,"runLLMFilteringForLocator",{verifyExactElement:this.isAssertion()})).filter(se=>se.success),{useImage:!!E,useVariables:!1,isPartOfListItem:!1,isForContextElement:!1}))==null?void 0:H[0];if(!V)throw new Error(`Failed generating selection data with LLM filtering (${this.processId})`);return V}async getFakeSelectionData(p,d){if(await aA(2e3),!!d.length)return{selector:`* >> ${d[0].selector}`,locator:p.locator,alternateLocators:{origin:"ai",locators:d.slice(1).map(y=>`* >> ${y.selector}`)}}}async generateCSSKeyFeaturesLocators(p,d){let y=await this.getCSSKeyFeatures(d,p),E=(await this.locatorInteractor.generateCustomPWLocators(d.locator,y,this.step)).filter(F=>F);return E.length?(await this.locatorInteractor.candidatesTester(E,d,"generateCSSKeyFeaturesLocators",{verifyExactElement:this.isAssertion()})).filter(F=>F.success):[]}async getCSSKeyFeatures(p,d){if(p.rrwebId){let E=ZNe.getInstance().getCSSKeyFeatures(p);if(E)return E}if(vC.vtg.aiLocators.useFakeAILocators)return await aA(3e3),[];let y=await this.getCSSKeyFeaturesFromAPI(d);return p.rrwebId&&ZNe.getInstance().setCSSKeyFeatures(p,y),y}async getCSSKeyFeaturesFromAPI(p){let d={...this.getSelectorGeneratorBasePromptAssets(),parentChainHTML:p};return new Ert(d,this.apiService).extractCSSKeyElements()}async locatorExpressionToSelectorAndLocator(p){try{return{selector:(await this.evaluationService.execute(`return ${J0e(p)}`))._selector,locator:p}}catch{return}}async generateLLMLocators(p,d){try{let y={...this.getSelectorGeneratorBasePromptAssets(),parentChainHTML:d.replace(/\s*checksumid="[^"]*"/g,"")},E=new pkt(new Ert(y,this.apiService)),N=await E.generateLLMLocators();if(!N.length)return[];if(this.didCancel)return[];let F=await this.locatorInteractor.candidatesTester(N.map(R=>({locator:R})),p,"generateLLMLocators",{verifyExactElement:this.isAssertion()});if(F.filter(R=>!R.success).length>=Math.ceil(F.length/2)){let R=await E.correctLLMLocators(F),V=await this.locatorInteractor.candidatesTester(R.map(H=>({locator:H})),p,"generateLLMLocatorsCorrection",{verifyExactElement:this.isAssertion()});if(this.didCancel)return[];F.push(...V)}return F.filter(R=>R.success).map(R=>R.locator)}catch(y){return Nh.error("Failed generating LLM locators",y),[]}}isAssertion(){return this.target.type==="assertion"}getLocatorOwner(){switch(this.target.type){case"assertion":case"action":return this.step;case"dropTarget":return{...this.step.dropTarget,timestamp:this.step.timestamp}}}getSelectorGeneratorBasePromptAssets(){try{let{goal:p,instructions:d}=this.getStory();return{title:p,steps:d,thought:this.step.thought}}catch(p){return Nh.error("Failed getting base prompt assets",p),{title:"",steps:"",thought:this.step.thought}}}getStory(){return this.userStoryService.getStory()}};e(mQt,"LocatorsAIAgent");var qOt=mQt;function Z7r(l,p=!1){return Kbn("javascript",l,p)[0]}e(Z7r,"asLocator");var Art,jbn=(Art=class{constructor(p){this.preferredQuote=p;this.preferredQuote=p}generateLocator(p,d,y,E={}){switch(d){case"default":return E.hasText!==void 0?`locator(${this.quote(y)}, { hasText: ${this.toHasText(E.hasText)} })`:E.hasNotText!==void 0?`locator(${this.quote(y)}, { hasNotText: ${this.toHasText(E.hasNotText)} })`:`locator(${this.quote(y)})`;case"frame":return`frameLocator(${this.quote(y)})`;case"nth":return`nth(${y})`;case"first":return"first()";case"last":return"last()";case"role":let N=[];UOt(E.name)?N.push(`name: ${this.regexToSourceString(E.name)}`):typeof E.name=="string"&&(N.push(`name: ${this.quote(E.name)}`),E.exact&&N.push("exact: true"));for(let{name:R,value:V}of E.attrs)N.push(`${R}: ${typeof V=="string"?this.quote(V):V}`);let F=N.length?`, { ${N.join(", ")} }`:"";return`getByRole(${this.quote(y)}${F})`;case"has-text":return`filter({ hasText: ${this.toHasText(y)} })`;case"has-not-text":return`filter({ hasNotText: ${this.toHasText(y)} })`;case"has":return`filter({ has: ${y} })`;case"hasNot":return`filter({ hasNot: ${y} })`;case"and":return`and(${y})`;case"or":return`or(${y})`;case"chain":return`locator(${y})`;case"test-id":return`getByTestId(${this.toTestIdValue(y)})`;case"text":return this.toCallWithExact("getByText",y,!!E.exact);case"alt":return this.toCallWithExact("getByAltText",y,!!E.exact);case"placeholder":return this.toCallWithExact("getByPlaceholder",y,!!E.exact);case"label":return this.toCallWithExact("getByLabel",y,!!E.exact);case"title":return this.toCallWithExact("getByTitle",y,!!E.exact);default:throw new Error("Unknown selector kind "+d)}}chainLocators(p){return p.join(".")}regexToSourceString(p){return txn(String(p))}toCallWithExact(p,d,y){return UOt(d)?`${p}(${this.regexToSourceString(d)})`:y?`${p}(${this.quote(d)}, { exact: true })`:`${p}(${this.quote(d)})`}toHasText(p){return UOt(p)?this.regexToSourceString(p):this.quote(p)}toTestIdValue(p){return UOt(p)?this.regexToSourceString(p):this.quote(p)}quote(p){let d;return Xbn(p,(d=this.preferredQuote)!=null?d:"'")}},e(Art,"JavaScriptLocatorFactory"),Art),Prt,nU=(Prt=class{constructor(){this.tokenType=""}toJSON(){return{token:this.tokenType}}toString(){return this.tokenType}toSource(){return""+this}},e(Prt,"CSSParserToken"),Prt),Nrt,lnt=(Nrt=class extends nU{constructor(d=void 0,y=void 0){super();this.value=d;this.mirror=y;this.value="",this.mirror=""}},e(Nrt,"GroupingToken"),Nrt),Frt,e4r=(Frt=class extends lnt{constructor(){super(),this.tokenType="(",this.value="(",this.mirror=")"}},e(Frt,"OpenParenToken"),Frt),Irt,t4r=(Irt=class extends nU{constructor(){super(),this.tokenType=","}},e(Irt,"CommaToken"),Irt),Ort,r4r=(Ort=class extends nU{constructor(){super(),this.tokenType=":"}},e(Ort,"ColonToken"),Ort),Lrt,Jbn=(Lrt=class extends nU{constructor(){super(),this.tokenType="~="}},e(Lrt,"IncludeMatchToken"),Lrt),Mrt,qbn=(Mrt=class extends nU{constructor(){super(),this.tokenType="|="}},e(Mrt,"DashMatchToken"),Mrt),Rrt,n4r=(Rrt=class extends lnt{constructor(){super(),this.tokenType="[",this.value="[",this.mirror="]"}},e(Rrt,"OpenSquareToken"),Rrt),Brt,Ubn=(Brt=class extends nU{constructor(){super(),this.tokenType="$="}},e(Brt,"SuffixMatchToken"),Brt),jrt,gQt=(jrt=class extends lnt{constructor(){super(),this.tokenType="]",this.value="]",this.mirror="["}},e(jrt,"CloseSquareToken"),jrt),Jrt,yQt=(Jrt=class extends nU{constructor(){super(),this.tokenType="WHITESPACE"}toString(){return"WS"}toSource(){return" "}},e(Jrt,"WhitespaceToken"),Jrt),qrt,Vbn=(qrt=class extends nU{constructor(){super(),this.tokenType="*="}},e(qrt,"SubstringMatchToken"),qrt),Urt,i4r=(Urt=class extends nU{constructor(){super(),this.tokenType=";"}},e(Urt,"SemicolonToken"),Urt),Vrt,VOt=(Vrt=class extends nU{constructor(){super(),this.tokenType="EOF"}toSource(){return""}},e(Vrt,"EOFToken"),Vrt),zrt,zbn=(zrt=class extends nU{constructor(){super(),this.tokenType="^="}},e(zrt,"PrefixMatchToken"),zrt),Wrt,a4r=(Wrt=class extends nU{constructor(){super(),this.tokenType="BADSTRING"}},e(Wrt,"BadStringToken"),Wrt),$rt,s4r=($rt=class extends nU{constructor(){super(),this.tokenType="CDO"}toSource(){return"<!--"}},e($rt,"CDOToken"),$rt),Hrt,o4r=(Hrt=class extends nU{constructor(){super(),this.tokenType="CDC"}toSource(){return"-->"}},e(Hrt,"CDCToken"),Hrt),Grt,c4r=(Grt=class extends lnt{constructor(){super(),this.tokenType="{",this.value="{",this.mirror="}"}},e(Grt,"OpenCurlyToken"),Grt),Krt,u4r=(Krt=class extends lnt{constructor(){super(),this.tokenType="}",this.value="}",this.mirror="{"}},e(Krt,"CloseCurlyToken"),Krt),Yrt,l4r=(Yrt=class extends nU{constructor(){super(),this.tokenType="||"}},e(Yrt,"ColumnToken"),Yrt),Xrt,p4r=(Xrt=class extends lnt{constructor(){super(),this.tokenType=")",this.value=")",this.mirror="("}},e(Xrt,"CloseParenToken"),Xrt),Qrt,pnt=(Qrt=class extends nU{constructor(d=void 0){super();this.value=d;this.value=""}ASCIIMatch(d){return this.value.toLowerCase()===d.toLowerCase()}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d}},e(Qrt,"StringValuedToken"),Qrt),Zrt,f4r=(Zrt=class extends pnt{constructor(p){super(),this.tokenType="IDENT",this.value=p}toString(){return"IDENT("+this.value+")"}toSource(){return dkt(this.value)}},e(Zrt,"IdentToken"),Zrt),ent,zOt=(ent=class extends nU{constructor(){super(),this.tokenType="BADURL"}},e(ent,"BadURLToken"),ent),tnt,WOt=(tnt=class extends pnt{constructor(d,y=void 0){super();this.mirror=y;this.tokenType="FUNCTION",this.value=d,this.mirror=")"}toString(){return"FUNCTION("+this.value+")"}toSource(){return dkt(this.value)+"("}},e(tnt,"FunctionToken"),tnt),rnt,_4r=(rnt=class extends pnt{constructor(p){super(),this.tokenType="AT-KEYWORD",this.value=p}toString(){return"AT("+this.value+")"}toSource(){return"@"+dkt(this.value)}},e(rnt,"AtKeywordToken"),rnt),nnt,d4r=(nnt=class extends pnt{constructor(d,y=void 0){super();this.type=y;this.tokenType="HASH",this.value=d,this.type="unrestricted"}toString(){return"HASH("+this.value+")"}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d.type=this.type,d}toSource(){return this.type==="id"?"#"+dkt(this.value):"#"+cxn(this.value)}},e(nnt,"HashToken"),nnt),int,m4r=(int=class extends pnt{constructor(p){super(),this.tokenType="STRING",this.value=p}toString(){return'"'+b4r(this.value)+'"'}},e(int,"StringToken"),int),ant,h4r=(ant=class extends pnt{constructor(p){super(),this.tokenType="URL",this.value=p}toString(){return"URL("+this.value+")"}toSource(){return'url("'+b4r(this.value)+'")'}},e(ant,"URLToken"),ant),snt,g4r=(snt=class extends nU{constructor(d=void 0,y=void 0,E=void 0,N=void 0){super();this.type=d;this.unit=y;this.repr=E;this.value=N;this.tokenType="NUMBER",this.type="integer",this.repr=""}toString(){return this.type==="integer"?"INT("+this.value+")":"NUMBER("+this.value+")"}toJSON(){let d=super.toJSON();return d.value=this.value,d.type=this.type,d.repr=this.repr,d}toSource(){return this.repr}},e(snt,"NumberToken"),snt),ont,y4r=(ont=class extends nU{constructor(d=void 0,y=void 0){super();this.repr=d;this.value=y;this.tokenType="PERCENTAGE",this.repr=""}toString(){return"PERCENTAGE("+this.value+")"}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d.repr=this.repr,d}toSource(){return this.repr+"%"}},e(ont,"PercentageToken"),ont),cnt,Wbn=(cnt=class extends nU{constructor(d=void 0,y=void 0,E=void 0,N=void 0){super();this.type=d;this.unit=y;this.repr=E;this.value=N;this.tokenType="DIMENSION",this.type="integer",this.repr="",this.unit=""}toString(){return"DIM("+this.value+","+this.unit+")"}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d.type=this.type,d.repr=this.repr,d.unit=this.unit,d}toSource(){let d=this.repr,y=dkt(this.unit);return y[0].toLowerCase()==="e"&&(y[1]==="-"||YV(y.charCodeAt(1),48,57))&&(y="\\65 "+y.slice(1,y.length)),d+y}},e(cnt,"DimensionToken"),cnt),$bn={javascript:jbn},unt,uce=(unt=class extends Error{},e(unt,"InvalidSelectorError"),unt),Y7r=new Set(["internal:has","internal:has-not","internal:and","internal:or","internal:chain","left-of","right-of","above","below","near"]),Hbn=new Set(["left-of","right-of","above","below","near"]),Gbn=new Set(["not","is","where","has","scope","light","visible","text","text-matches","text-is","has-text","above","below","right-of","left-of","near","nth-match"]);function Kbn(l,p,d=!1,y=20,E=void 0){try{return krt(new $bn[l](E),v4r(p),d,y)}catch(N){return console.error("failed to convert selector to locators",p,N),[`locator('${p}')`]}}e(Kbn,"asLocators");function krt(l,p,d=!1,y=20){let E=[...p.parts];for(let R=0;R<E.length-1;R++)if(E[R].name==="nth"&&E[R+1].name==="internal:control"&&E[R+1].body==="enter-frame"){let[V]=E.splice(R,1);E.splice(R+1,0,V)}let N=[],F=d?"frame-locator":"page";for(let R=0;R<E.length;R++){let V=E[R],H=F;if(F="locator",V.name==="nth"){V.body==="0"?N.push([l.generateLocator(H,"first",""),l.generateLocator(H,"nth","0")]):V.body==="-1"?N.push([l.generateLocator(H,"last",""),l.generateLocator(H,"nth","-1")]):N.push([l.generateLocator(H,"nth",V.body)]);continue}if(V.name==="internal:text"){let{exact:le,text:Ue}=fkt(V.body);N.push([l.generateLocator(H,"text",Ue,{exact:le})]);continue}if(V.name==="internal:has-text"){let{exact:le,text:Ue}=fkt(V.body);if(!le){N.push([l.generateLocator(H,"has-text",Ue,{exact:le})]);continue}}if(V.name==="internal:has-not-text"){let{exact:le,text:Ue}=fkt(V.body);if(!le){N.push([l.generateLocator(H,"has-not-text",Ue,{exact:le})]);continue}}if(V.name==="internal:has"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"has",Ue)));continue}if(V.name==="internal:has-not"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"hasNot",Ue)));continue}if(V.name==="internal:and"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"and",Ue)));continue}if(V.name==="internal:or"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"or",Ue)));continue}if(V.name==="internal:chain"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"chain",Ue)));continue}if(V.name==="internal:label"){let{exact:le,text:Ue}=fkt(V.body);N.push([l.generateLocator(H,"label",Ue,{exact:le})]);continue}if(V.name==="internal:role"){let le=hQt(V.body,!0),Ue={attrs:[]};for(let Xe of le.attributes)Xe.name==="name"?(Ue.exact=Xe.caseSensitive,Ue.name=Xe.value):(Xe.name==="level"&&typeof Xe.value=="string"&&(Xe.value=+Xe.value),Ue.attrs.push({name:Xe.name==="include-hidden"?"includeHidden":Xe.name,value:Xe.value}));N.push([l.generateLocator(H,"role",le.name,Ue)]);continue}if(V.name==="internal:testid"){let le=hQt(V.body,!0),{value:Ue}=le.attributes[0];N.push([l.generateLocator(H,"test-id",Ue)]);continue}if(V.name==="internal:attr"){let le=hQt(V.body,!0),{name:Ue,value:Xe,caseSensitive:rt}=le.attributes[0],Tt=Xe,Nt=!!rt;if(Ue==="placeholder"){N.push([l.generateLocator(H,"placeholder",Tt,{exact:Nt})]);continue}if(Ue==="alt"){N.push([l.generateLocator(H,"alt",Tt,{exact:Nt})]);continue}if(Ue==="title"){N.push([l.generateLocator(H,"title",Tt,{exact:Nt})]);continue}}let Q="default",se=E[R+1];se&&se.name==="internal:control"&&se.body==="enter-frame"&&(Q="frame",F="frame-locator",R++);let G=HOt({parts:[V]}),_e=l.generateLocator(H,Q,G);if(Q==="default"&&se&&["internal:has-text","internal:has-not-text"].includes(se.name)){let{exact:le,text:Ue}=fkt(se.body);if(!le){let Xe=l.generateLocator("locator",se.name==="internal:has-text"?"has-text":"has-not-text",Ue,{exact:le}),rt={};se.name==="internal:has-text"?rt.hasText=Ue:rt.hasNotText=Ue;let Tt=l.generateLocator(H,"default",G,rt);N.push([l.chainLocators([_e,Xe]),Tt]),R++;continue}}let ne;if(["xpath","css"].includes(V.name)){let le=HOt({parts:[V]},!0);ne=l.generateLocator(H,Q,le)}N.push([_e,ne].filter(Boolean))}return Ybn(l,N,y)}e(krt,"innerAsLocators");function Ybn(l,p,d){let y=p.map(()=>""),E=[],N=e(F=>{if(F===p.length)return E.push(l.chainLocators(y)),y.length<d;for(let R of p[F])if(y[F]=R,!N(F+1))return!1;return!0},"visit");return N(0),E}e(Ybn,"combineTokens");function HOt(l,p=void 0){return typeof l=="string"?l:l.parts.map((d,y)=>{let E=!0;!p&&y!==l.capture&&(d.name==="css"||d.name==="xpath"&&d.source.startsWith("//")||d.source.startsWith(".."))&&(E=!1);let N=E?d.name+"=":"";return`${y===l.capture?"*":""}${N}${d.source}`}).join(" >> ")}e(HOt,"stringifySelector");function fkt(l){let p=!1,d=l.match(/^\/(.*)\/([igm]*)$/);return d?{text:new RegExp(d[1],d[2])}:(l.endsWith('"')?(l=JSON.parse(l),p=!0):l.endsWith('"s')?(l=JSON.parse(l.substring(0,l.length-1)),p=!0):l.endsWith('"i')&&(l=JSON.parse(l.substring(0,l.length-1)),p=!1),{exact:p,text:l})}e(fkt,"detectExact");function hQt(l,p){let d=0,y=l.length===0,E=e(()=>l[d]||"","next"),N=e(()=>{let Ue=E();return++d,y=d>=l.length,Ue},"eat1"),F=e(Ue=>{throw y?new uce(`Unexpected end of selector while parsing selector \`${l}\``):new uce(`Error while parsing selector \`${l}\` - unexpected symbol "${E()}" at position ${d}`+(Ue?" during "+Ue:""))},"syntaxError");function R(){for(;!y&&/\s/.test(E());)N()}e(R,"skipSpaces");function V(Ue){return Ue>="\x80"||Ue>="0"&&Ue<="9"||Ue>="A"&&Ue<="Z"||Ue>="a"&&Ue<="z"||Ue>="0"&&Ue<="9"||Ue==="_"||Ue==="-"}e(V,"isCSSNameChar");function H(){let Ue="";for(R();!y&&V(E());)Ue+=N();return Ue}e(H,"readIdentifier");function Q(Ue){let Xe=N();for(Xe!==Ue&&F("parsing quoted string");!y&&E()!==Ue;)E()==="\\"&&N(),Xe+=N();return E()!==Ue&&F("parsing quoted string"),Xe+=N(),Xe}e(Q,"readQuotedString");function se(){N()!=="/"&&F("parsing regular expression");let Ue="",Xe=!1;for(;!y;){if(E()==="\\")Ue+=N(),y&&F("parsing regular expression");else if(Xe&&E()==="]")Xe=!1;else if(!Xe&&E()==="[")Xe=!0;else if(!Xe&&E()==="/")break;Ue+=N()}N()!=="/"&&F("parsing regular expression");let rt="";for(;!y&&E().match(/[dgimsuy]/);)rt+=N();try{return new RegExp(Ue,rt)}catch(Tt){throw new uce(`Error while parsing selector \`${l}\`: ${Tt.message}`)}}e(se,"readRegularExpression");function G(){let Ue="";return R(),E()==="'"||E()==='"'?Ue=Q(E()).slice(1,-1):Ue=H(),Ue||F("parsing property path"),Ue}e(G,"readAttributeToken");function _e(){R();let Ue="";return y||(Ue+=N()),!y&&Ue!=="="&&(Ue+=N()),["=","*=","^=","$=","|=","~="].includes(Ue)||F("parsing operator"),Ue}e(_e,"readOperator");function ne(){N();let Ue=[];for(Ue.push(G()),R();E()===".";)N(),Ue.push(G()),R();if(E()==="]")return N(),{name:Ue.join("."),jsonPath:Ue,op:"<truthy>",value:null,caseSensitive:!1};let Xe=_e(),rt,Tt=!0;if(R(),E()==="/"){if(Xe!=="=")throw new uce(`Error while parsing selector \`${l}\` - cannot use ${Xe} in attribute with regular expression`);rt=se()}else if(E()==="'"||E()==='"')rt=Q(E()).slice(1,-1),R(),E()==="i"||E()==="I"?(Tt=!1,N()):(E()==="s"||E()==="S")&&(Tt=!0,N());else{for(rt="";!y&&(V(E())||E()==="+"||E()===".");)rt+=N();rt==="true"?rt=!0:rt==="false"?rt=!1:p||(rt=+rt,Number.isNaN(rt)&&F("parsing attribute value"))}if(R(),E()!=="]"&&F("parsing attribute value"),N(),Xe!=="="&&typeof rt!="string")throw new uce(`Error while parsing selector \`${l}\` - cannot use ${Xe} in attribute with non-string matching value - ${rt}`);return{name:Ue.join("."),jsonPath:Ue,op:Xe,value:rt,caseSensitive:Tt}}e(ne,"readAttribute");let le={name:"",attributes:[]};for(le.name=H(),R();E()==="[";)le.attributes.push(ne()),R();if(y||F(void 0),!le.name&&!le.attributes.length)throw new uce(`Error while parsing selector \`${l}\` - selector cannot be empty`);return le}e(hQt,"parseAttributeSelector");function v4r(l){let p=Zbn(l),d=[];for(let y of p.parts){if(y.name==="css"||y.name==="css:light"){y.name==="css:light"&&(y.body=":light("+y.body+")");let E=exn(y.body,Gbn);d.push({name:"css",body:E.selector,source:y.body});continue}if(Y7r.has(y.name)){let E,N;try{let H=JSON.parse("["+y.body+"]");if(!Array.isArray(H)||H.length<1||H.length>2||typeof H[0]!="string")throw new uce(`Malformed selector: ${y.name}=`+y.body);if(E=H[0],H.length===2){if(typeof H[1]!="number"||!Hbn.has(y.name))throw new uce(`Malformed selector: ${y.name}=`+y.body);N=H[1]}}catch{throw new uce(`Malformed selector: ${y.name}=`+y.body)}let F={name:y.name,source:y.body,body:{parsed:v4r(E),distance:N}},R=[...F.body.parsed.parts].reverse().find(H=>H.name==="internal:control"&&H.body==="enter-frame"),V=R?F.body.parsed.parts.indexOf(R):-1;V!==-1&&Qbn(F.body.parsed.parts.slice(0,V+1),d.slice(0,V+1))&&F.body.parsed.parts.splice(0,V+1),d.push(F);continue}d.push({...y,source:y.body})}if(Y7r.has(d[0].name))throw new uce(`"${d[0].name}" selector cannot be first`);return{capture:p.capture,parts:d}}e(v4r,"parseSelector");function Xbn(l,p="'"){let d=JSON.stringify(l),y=d.substring(1,d.length-1).replace(/\\"/g,'"');if(p==="'")return p+y.replace(/[']/g,"\\'")+p;if(p==='"')return p+y.replace(/["]/g,'\\"')+p;if(p==="`")return p+y.replace(/[`]/g,"`")+p;throw new Error("Invalid escape char")}e(Xbn,"escapeWithQuotes");function UOt(l){return l instanceof RegExp}e(UOt,"isRegExp");function Qbn(l,p){return HOt({parts:l})===HOt({parts:p})}e(Qbn,"selectorPartsEqual");function Zbn(l){let p=0,d,y=0,E={parts:[]},N=e(()=>{let R=l.substring(y,p).trim(),V=R.indexOf("="),H,Q;V!==-1&&R.substring(0,V).trim().match(/^[a-zA-Z_0-9-+:*]+$/)?(H=R.substring(0,V).trim(),Q=R.substring(V+1)):R.length>1&&R[0]==='"'&&R[R.length-1]==='"'||R.length>1&&R[0]==="'"&&R[R.length-1]==="'"?(H="text",Q=R):/^\(*\/\//.test(R)||R.startsWith("..")?(H="xpath",Q=R):(H="css",Q=R);let se=!1;if(H[0]==="*"&&(se=!0,H=H.substring(1)),E.parts.push({name:H,body:Q}),se){if(E.capture!==void 0)throw new uce("Only one of the selectors can capture using * modifier");E.capture=E.parts.length-1}},"append");if(!l.includes(">>"))return p=l.length,N(),E;let F=e(()=>{let V=l.substring(y,p).match(/^\s*text\s*=(.*)$/);return!!V&&!!V[1]},"shouldIgnoreTextSelectorQuote");for(;p<l.length;){let R=l[p];R==="\\"&&p+1<l.length?p+=2:R===d?(d=void 0,p++):!d&&(R==='"'||R==="'"||R==="`")&&!F()?(d=R,p++):!d&&R===">"&&l[p+1]===">"?(N(),p+=2,y=p):p++}return N(),E}e(Zbn,"parseSelectorString");function exn(l,p){let d;try{d=rxn(l),d[d.length-1]instanceof VOt||d.push(new VOt)}catch(Yt){let _r=Yt.message+` while parsing selector "${l}"`,Pt=(Yt.stack||"").indexOf(Yt.message);throw Pt!==-1&&(Yt.stack=Yt.stack.substring(0,Pt)+_r+Yt.stack.substring(Pt+Yt.message.length)),Yt.message=_r,Yt}let y=d.find(Yt=>Yt instanceof _4r||Yt instanceof a4r||Yt instanceof zOt||Yt instanceof l4r||Yt instanceof s4r||Yt instanceof o4r||Yt instanceof i4r||Yt instanceof c4r||Yt instanceof u4r||Yt instanceof h4r||Yt instanceof y4r);if(y)throw new uce(`Unsupported token "${y.toSource()}" while parsing selector "${l}"`);let E=0,N=new Set;function F(){return new uce(`Unexpected token "${d[E].toSource()}" while parsing selector "${l}"`)}e(F,"unexpected");function R(){for(;d[E]instanceof yQt;)E++}e(R,"skipWhitespace");function V(Yt=E){return d[Yt]instanceof f4r}e(V,"isIdent");function H(Yt=E){return d[Yt]instanceof m4r}e(H,"isString");function Q(Yt=E){return d[Yt]instanceof g4r}e(Q,"isNumber");function se(Yt=E){return d[Yt]instanceof t4r}e(se,"isComma");function G(Yt=E){return d[Yt]instanceof e4r}e(G,"isOpenParen");function _e(Yt=E){return d[Yt]instanceof p4r}e(_e,"isCloseParen");function ne(Yt=E){return d[Yt]instanceof WOt}e(ne,"isFunction");function le(Yt=E){return d[Yt]instanceof aK&&d[Yt].value==="*"}e(le,"isStar");function Ue(Yt=E){return d[Yt]instanceof VOt}e(Ue,"isEOF");function Xe(Yt=E){return d[Yt]instanceof aK&&[">","+","~"].includes(d[Yt].value)}e(Xe,"isClauseCombinator");function rt(Yt=E){return se(Yt)||_e(Yt)||Ue(Yt)||Xe(Yt)||d[Yt]instanceof yQt}e(rt,"isSelectorClauseEnd");function Tt(){let Yt=[Nt()];for(;R(),!!se();)E++,Yt.push(Nt());return Yt}e(Tt,"consumeFunctionArguments");function Nt(){return R(),Q()||H()?d[E++].value:er()}e(Nt,"consumeArgument");function er(){let Yt={simples:[]};for(R(),Xe()?Yt.simples.push({selector:{functions:[{name:"scope",args:[]}]},combinator:""}):Yt.simples.push({selector:jt(),combinator:""});;){if(R(),Xe())Yt.simples[Yt.simples.length-1].combinator=d[E++].value,R();else if(rt())break;Yt.simples.push({combinator:"",selector:jt()})}return Yt}e(er,"consumeComplexSelector");function jt(){let Yt="",_r=[];for(;!rt();)if(V()||le())Yt+=d[E++].toSource();else if(d[E]instanceof d4r)Yt+=d[E++].toSource();else if(d[E]instanceof aK&&d[E].value===".")if(E++,V())Yt+="."+d[E++].toSource();else throw F();else if(d[E]instanceof r4r)if(E++,V())if(!p.has(d[E].value.toLowerCase()))Yt+=":"+d[E++].toSource();else{let Pt=d[E++].value.toLowerCase();_r.push({name:Pt,args:[]}),N.add(Pt)}else if(ne()){let Pt=d[E++].value.toLowerCase();if(p.has(Pt)?(_r.push({name:Pt,args:Tt()}),N.add(Pt)):Yt+=`:${Pt}(${Lt()})`,R(),!_e())throw F();E++}else throw F();else if(d[E]instanceof n4r){for(Yt+="[",E++;!(d[E]instanceof gQt)&&!Ue();)Yt+=d[E++].toSource();if(!(d[E]instanceof gQt))throw F();Yt+="]",E++}else throw F();if(!Yt&&!_r.length)throw F();return{css:Yt||void 0,functions:_r}}e(jt,"consumeSimpleSelector");function Lt(){let Yt="",_r=1;for(;!Ue()&&((G()||ne())&&_r++,_e()&&_r--,!!_r);)Yt+=d[E++].toSource();return Yt}e(Lt,"consumeBuiltinFunctionArguments");let zt=Tt();if(!Ue())throw F();if(zt.some(Yt=>typeof Yt!="object"||!("simples"in Yt)))throw new uce(`Error while parsing selector "${l}"`);return{selector:zt,names:Array.from(N)}}e(exn,"parseCSS");function txn(l){return l.replace(/(^|[^\\])(\\\\)*\\(['"`])/g,"$1$2$3")}e(txn,"normalizeEscapedRegexQuotes");function rxn(l){let p=nxn(l),d=-1,y=[],E,N=0,F=0,R=0,V=e(function(){N+=1,R=F,F=0},"incrLineno"),H={line:N,column:F},Q=e(function(pr){return pr>=p.length?-1:p[pr]},"codepoint"),se=e(function(pr=void 0){if(pr===void 0&&(pr=1),pr>3)throw"Spec Error: no more than three codepoints of lookahead.";return Q(d+pr)},"next"),G=e(function(pr=void 0){return pr===void 0&&(pr=1),d+=pr,E=Q(d),wrt(E)?V():F+=pr,!0},"consume"),_e=e(function(){return d-=1,wrt(E)?(N-=1,F=R):F-=1,H.line=N,H.column=F,!0},"reconsume"),ne=e(function(pr=void 0){return pr===void 0&&(pr=E),pr===-1},"eof"),le=e(function(){},"donothing"),Ue=e(function(){},"parseerror"),Xe=e(function(){if(rt(),G(),cPe(E)){for(;cPe(se());)G();return new yQt}else{if(E===34)return er();if(E===35)if(Q7r(se())||zt(se(1),se(2))){let pr=new d4r("");return _r(se(1),se(2),se(3))&&(pr.type="id"),pr.value=gt(),pr}else return new aK(E);else return E===36?se()===61?(G(),new Ubn):new aK(E):E===39?er():E===40?new e4r:E===41?new p4r:E===42?se()===61?(G(),new Vbn):new aK(E):E===43?Ut()?(_e(),Tt()):new aK(E):E===44?new t4r:E===45?Ut()?(_e(),Tt()):se(1)===45&&se(2)===62?(G(2),new o4r):Pt()?(_e(),Nt()):new aK(E):E===46?Ut()?(_e(),Tt()):new aK(E):E===58?new r4r:E===59?new i4r:E===60?se(1)===33&&se(2)===45&&se(3)===45?(G(3),new s4r):new aK(E):E===64?_r(se(1),se(2),se(3))?new _4r(gt()):new aK(E):E===91?new n4r:E===92?Yt()?(_e(),Nt()):(Ue(),new aK(E)):E===93?new gQt:E===94?se()===61?(G(),new zbn):new aK(E):E===123?new c4r:E===124?se()===61?(G(),new qbn):se()===124?(G(),new l4r):new aK(E):E===125?new u4r:E===126?se()===61?(G(),new Jbn):new aK(E):cce(E)?(_e(),Tt()):$Ot(E)?(_e(),Nt()):ne()?new VOt:new aK(E)}},"consumeAToken"),rt=e(function(){for(;se(1)===47&&se(2)===42;)for(G(2);;)if(G(),E===42&&se()===47){G();break}else if(ne()){Ue();return}},"consumeComments"),Tt=e(function(){let pr=Jt();if(_r(se(1),se(2),se(3))){let Mr=new Wbn;return Mr.value=pr.value,Mr.repr=pr.repr,Mr.type=pr.type,Mr.unit=gt(),Mr}else if(se()===37){G();let Mr=new y4r;return Mr.value=pr.value,Mr.repr=pr.repr,Mr}else{let Mr=new g4r;return Mr.value=pr.value,Mr.repr=pr.repr,Mr.type=pr.type,Mr}},"consumeANumericToken"),Nt=e(function(){let pr=gt();if(pr.toLowerCase()==="url"&&se()===40){for(G();cPe(se(1))&&cPe(se(2));)G();return se()===34||se()===39?new WOt(pr):cPe(se())&&(se(2)===34||se(2)===39)?new WOt(pr):jt()}else return se()===40?(G(),new WOt(pr)):new f4r(pr)},"consumeAnIdentlikeToken"),er=e(function(pr=void 0){pr===void 0&&(pr=E);let Mr="";for(;G();){if(E===pr||ne())return new m4r(Mr);if(wrt(E))return Ue(),_e(),new a4r;E===92?ne(se())?le():wrt(se())?G():Mr+=rH(Lt()):Mr+=rH(E)}throw new Error("Internal error")},"consumeAStringToken"),jt=e(function(){let pr=new h4r("");for(;cPe(se());)G();if(ne(se()))return pr;for(;G();){if(E===41||ne())return pr;if(cPe(E)){for(;cPe(se());)G();return se()===41||ne(se())?(G(),pr):(Qe(),new zOt)}else{if(E===34||E===39||E===40||lxn(E))return Ue(),Qe(),new zOt;if(E===92)if(Yt())pr.value+=rH(Lt());else return Ue(),Qe(),new zOt;else pr.value+=rH(E)}}throw new Error("Internal error")},"consumeAURLToken"),Lt=e(function(){if(G(),X7r(E)){let pr=[E];for(let Vr=0;Vr<5&&X7r(se());Vr++)G(),pr.push(E);cPe(se())&&G();let Mr=parseInt(pr.map(function(Vr){return String.fromCharCode(Vr)}).join(""),16);return Mr>uxn&&(Mr=65533),Mr}else return ne()?65533:E},"consumeEscape"),zt=e(function(pr,Mr){return!(pr!==92||wrt(Mr))},"areAValidEscape"),Yt=e(function(){return zt(E,se())},"startsWithAValidEscape"),_r=e(function(pr,Mr,Vr){return pr===45?$Ot(Mr)||Mr===45||zt(Mr,Vr):$Ot(pr)?!0:pr===92?zt(pr,Mr):!1},"wouldStartAnIdentifier"),Pt=e(function(){return _r(E,se(1),se(2))},"startsWithAnIdentifier"),qt=e(function(pr,Mr,Vr){return pr===43||pr===45?!!(cce(Mr)||Mr===46&&cce(Vr)):pr===46?!!cce(Mr):!!cce(pr)},"wouldStartANumber"),Ut=e(function(){return qt(E,se(1),se(2))},"startsWithANumber"),gt=e(function(){let pr="";for(;G();)if(Q7r(E))pr+=rH(E);else if(Yt())pr+=rH(Lt());else return _e(),pr;throw new Error("Internal parse error")},"consumeAName"),Jt=e(function(){let pr="",Mr="integer";for((se()===43||se()===45)&&(G(),pr+=rH(E));cce(se());)G(),pr+=rH(E);if(se(1)===46&&cce(se(2)))for(G(),pr+=rH(E),G(),pr+=rH(E),Mr="number";cce(se());)G(),pr+=rH(E);let Vr=se(1),bn=se(2),zr=se(3);if((Vr===69||Vr===101)&&cce(bn))for(G(),pr+=rH(E),G(),pr+=rH(E),Mr="number";cce(se());)G(),pr+=rH(E);else if((Vr===69||Vr===101)&&(bn===43||bn===45)&&cce(zr))for(G(),pr+=rH(E),G(),pr+=rH(E),G(),pr+=rH(E),Mr="number";cce(se());)G(),pr+=rH(E);let Ca=Wt(pr);return{type:Mr,value:Ca,repr:pr}},"consumeANumber"),Wt=e(function(pr){return+pr},"convertAStringToANumber"),Qe=e(function(){for(;G();){if(E===41||ne())return;Yt()&&Lt(),le()}},"consumeTheRemnantsOfABadURL"),Ir=0;for(;!ne(se());)if(y.push(Xe()),Ir++,Ir>p.length*2)throw new Error("I'm infinite-looping!");return y}e(rxn,"tokenize");function nxn(l){let p=[];for(let d=0;d<l.length;d++){let y=l.charCodeAt(d);if(y===13&&l.charCodeAt(d+1)===10&&(y=10,d++),(y===13||y===12)&&(y=10),y===0&&(y=65533),YV(y,55296,56319)&&YV(l.charCodeAt(d+1),56320,57343)){let E=y-55296,N=l.charCodeAt(d+1)-56320;y=Math.pow(2,16)+E*Math.pow(2,10)+N,d++}p.push(y)}return p}e(nxn,"preprocess");function rH(l){if(l<=65535)return String.fromCharCode(l);l-=Math.pow(2,16);let p=Math.floor(l/Math.pow(2,10))+55296,d=l%Math.pow(2,10)+56320;return String.fromCharCode(p)+String.fromCharCode(d)}e(rH,"stringFromCode");var YV=e(function(l,p,d){return l>=p&&l<=d},"between");function cPe(l){return wrt(l)||l===9||l===32}e(cPe,"whitespace");function wrt(l){return l===10}e(wrt,"newline");var vQt=class vQt extends nU{constructor(d,y=void 0){super();this.value=y;this.tokenType="DELIM",this.value="",this.value=rH(d)}toString(){return"DELIM("+this.value+")"}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d}toSource(){return this.value==="\\"?`\\
1904
+ })`:`{ timeout: ${d} }`);let E=YNe.generateSingleAssertionCode(p);return await this.evaluatorService.execute(E,y),{success:!0,message:"Assertion verified successfully!"}}catch(E){return Nh.error(String(E).slice(0,200)),{success:!1,message:String(E)}}}async updateAssertion({data:p,id:d}){if(this.actionsManager.actions.findIndex(({id:N})=>p.actionId===N)===-1)throw new Error(`[generateAssertionForAction] No action with id ${p.actionId} was found in executed actions`);let E={...p,selected:!0,id:d};return this.actionsManager.updateAssertionById(p.actionId,E),E}createAssertion(p){let{id:d,data:y,options:E,type:N}=p;switch(E==null?void 0:E.type){case"insertAfter":{let F=this.actionsManager.findActionOrAssertionById(E.afterStepId);return F.action||`${E.afterStepId}`,y.actionId=F.action.id,y.selected=!0,y.id=d,F.assertion?this.actionsManager.addAssertionToAction(y,F.assertion.id):this.actionsManager.addAssertionToAction(y),y}case"insertLast":return this.actionsManager.addAssertionToAction(y),y;default:throw new Error("Add all VTGStepAdditionType switch cases handle")}}};e(pQt,"VtgAssertionsService");var jOt=pQt;var NZe=class NZe{constructor(){this.cssFeaturesCache=new Map;this.parentChainCache=new Map}static getInstance(){return NZe.instance||(NZe.instance=new NZe),NZe.instance}getCSSKeyFeatures(p){return this.cssFeaturesCache.get(this.makeKey(p))}setCSSKeyFeatures(p,d){this.cssFeaturesCache.set(this.makeKey(p),d)}getParentChain(p){return this.parentChainCache.get(this.makeKey(p))}setParentChain(p,d){this.parentChainCache.set(this.makeKey(p),d)}makeKey(p){let{timestamp:d,rrwebId:y}=p;return`${d}_${y}`}};e(NZe,"LocatorsAssetsCache");var ZNe=NZe;var fQt=class fQt{log(...p){console.log(...p)}logError(...p){console.error(...p)}};e(fQt,"TMPAgentLoggerConsole");var JOt=fQt;var _Qt=class _Qt{constructor(p,d=null,y=async()=>null,E=new JOt){this.selectorGeneratorApi=p;this.variables=d;this.evaluate=y;this.logger=E}async generateSelectionForAction(p,d){var R,V;let{useCSSExtraction:y,useVariables:E,useArbitrarySelector:N}=d,F=!1;if(N&&!p.contextElements&&p.isPartOfListItem&&p.couldPickAnyListItem)try{this.logger.log("*** Will generate arbitrary selector");let H=await this.evaluate(async({checksumId:Q})=>window.checksum.testGenerator.buildArbitraryListItem(Q),{checksumId:p.action.checksumid});if(H)return H[0]}catch(H){console.error("Error generating arbitrary selector",H)}if(!F||!p.contextElements||!p.isPartOfListItem){let H=(R=await this.generateWithLLMFiltering(p.action.checksumid,await this.generateLocatorsForElement(p.action.checksumid,{isPartOfListItem:p.isPartOfListItem,isForContextElement:!1,useCSSExtraction:y}),null,this.testCandidates.bind(this),{isPartOfListItem:p.isPartOfListItem,useVariables:E}))==null?void 0:R[0];if(H)return p.isPartOfListItem&&!H.locator.endsWith(".first()")&&(H.selector+=" >> nth=0",H.locator+=".first()",(V=H.selectorWithVars)!=null&&V.length&&(H.selectorWithVars+=" >> nth=0",H.locatorWithVars+=".first()")),H}if(F&&p.contextElements){let H=await this.generateCompoundSelector(p.action.checksumid,p.isPartOfListItem);if(H)return{compoundSelector:H}}console.log("[SelectorGenerator] Failed to generate selection")}async generateLLMLocators(p){try{return await this.selectorGeneratorApi.generateLLMLocators(p)}catch(d){return console.error("Error generating LLM locators",d),[]}}async correctLLMLocators(p){try{return this.selectorGeneratorApi.correctLLMLocators(p)}catch(d){return console.error("Error in LLM locators correction",d),[]}}async generateWithLLMFiltering(p,d,y,E,{useImage:N=!0,useVariables:F=!0,isPartOfListItem:R=!1,isForContextElement:V=!1}={}){var H;try{if(R){let G=d.find(_e=>_e.isListSelector);if(G)return[G]}let Q=d.length>1||F&&Object.keys(((H=this.variables)==null?void 0:H.keyValue)??{}).length>0?await this.selectorGeneratorApi.runLLMFiltering(d,y??await this.getParentChainHTML(p),{useImage:N,useVariables:F}):d;if(!Q)return;let se=await E(Q.map(G=>({...G,selector:G.selector??""})),p,{testUniqueness:!(R||V),useVariables:F});return se?se.map(G=>({...G,alternateLocators:{origin:"filtered",locators:se.filter(_e=>_e!==G).map(_e=>_e.locator)}})):[]}catch(Q){this.logger.log("Error generating selector with LLM filtering",Q);return}}async generateCompoundSelector(p,d){try{this.logger.log("*** Will generate compound selector");let y=await this.selectorGeneratorApi.extractCompoundSelectionData(p);return this.processContextElements(y,d)}catch(y){this.logger.log("Error generating compound selector",y);return}}async processContextElements(p,d){let y=await this.evaluate(async({contextElementsMetadata:N,isPartOfListItem:F})=>window.checksum.testGenerator.getCompoundSelector().filter(N,{isPartOfListItem:F}).map(({element:R,...V})=>V),{contextElementsMetadata:p,isPartOfListItem:d});if(console.log(`Filtered context elements: ${y.length}`),y.length<2){this.logger.log("<!> No context elements found besides target, skipping");return}let E;try{if(E=await this.evaluate(async({contextElements:N,isPartOfListItem:F})=>window.checksum.testGenerator.getCompoundSelector().generate(N,{isPartOfListItem:F}),{contextElements:y,isPartOfListItem:d}),!E){this.logger.log("Error generating compound selector metadata for context elements");return}this.logger.log(`Generated compound selector metadata for ${y.length} context elements (including target)`)}catch(N){this.logger.log("Error generating compound selector metadata for context elements",N.message)}try{this.logger.log("** Generating selectors for context elements");let N=[];await Promise.all(y.map(async V=>{var Q;if(V.selection.type==="content"){N.push({element:{...V,selector:`internal:text="${V.selection.value}"`,locator:`getByText("${V.selection.value}")`}});return}let H=(Q=await this.generateWithLLMFiltering(V.selection.checksumid,await this.generateLocatorsForElement(V.selection.checksumid,{isForContextElement:!0,useCSSExtraction:!1,isPartOfListItem:!1}),null,this.testCandidates.bind(this),{useImage:!1,isForContextElement:!0}))==null?void 0:Q[0];if(!H)throw new Error("Failed to generate selector for context element");N.push({element:{...V,...H},alternateLocators:H.alternateLocators})}));let{targetSelection:F}=E,R=F.playwrightSelectors.length>0?F.playwrightSelectors[0]:{selector:F.cssSelectors[0]};if(!R.selector)throw new Error("Failed to get target relative selector");return this.logger.log("Generated customer facing compound selector - ",[...N.map(V=>V.element.selector),"target: "+R.selector]),{contextElements:N,targetRelativeSelector:R,metadata:E}}catch(N){this.logger.log("Error generating customer facing compound selector metadata for context elements",N)}}async testCandidates(p,d,{testUniqueness:y=!0,useVariables:E=!0}={}){var F;let N=[];for(let R of p)try{E=E&&!!((F=R.variables)!=null&&F.length);let V=await this.evaluate(async({checksumId:H,locator:Q,testVariables:se,testUniqueness:G})=>window.checksum.testGenerator.testElementSelector(Q,H,se,G),{checksumId:d,locator:E?this.implantVariablesValues(R):R.locator,testVariables:E?{locatorWithVars:R.locator,variablesCode:this.variables.code}:void 0,testUniqueness:y});V.valid&&N.push(V)}catch(V){console.error("Error testing selector",V);continue}return N}implantVariablesValues(p){var y;return(y=p.variables)!=null&&y.length?Object.entries(this.variables.keyValue).map(([E,N])=>[kNe+E,N]).filter(([E])=>p.variables.map(N=>N.name).includes(E)).reduce((E,[N,F])=>E.replace("${"+N+"}",F),p.selector):p.selector}async getParentChainHTML(p){try{return this.parentChainHTML||(this.parentChainHTML={}),this.parentChainHTML[p]||(this.parentChainHTML[p]=await this.evaluate(async({checksumId:d})=>window.checksum.testGenerator.getParentChainHTML(d),{checksumId:p})),this.parentChainHTML[p]}catch(d){throw this.logger.log("Error getting parent chain HTML",d),d}}async getExtractCSSKeyElements(p){try{let d=await this.getParentChainHTML(p);return this.selectorGeneratorApi.extractCSSKeyElements(d)}catch(d){return this.logger.log("Error generating prompt for CSS key elements",d),[]}}async generateLocatorsForElement(p,d={isPartOfListItem:!1,isForContextElement:!1,useCSSExtraction:!0}){try{console.log("Generating custom locators");let y=d.useCSSExtraction?await this.getExtractCSSKeyElements(p):[],E=await this.evaluate(async({checksumId:N,keyFeatures:F,...R})=>window.checksum.testGenerator.buildCustomPlaywrightSelectors(N,F,R),{checksumId:p,keyFeatures:y,...d});return this.logger.log("Generated locators for filtering (first is playwright's)",E),E}catch(y){throw this.logger.log("Error generating prompt for selectors",y),y}}};e(_Qt,"SelectorGenerator");var pkt=_Qt;var dQt=class dQt{constructor(p,d){this.promptAssets=p;this.apiService=d}async runLLMFiltering(p=[],d,{useImage:y=!0,useVariables:E=!0}={}){try{let N={title:this.promptAssets.title,steps:this.promptAssets.steps,thought:this.promptAssets.thought,parentChainHTML:d,generatedLocators:p,...y&&this.promptAssets.image?this.promptAssets.image:{}};return await(await this.apiService.post("vtg/locators/filter",N)).json()}catch(N){return Nh.error("Failed getting LLM filtering response from API",N.message),[]}}async extractCompoundSelectionData(p){throw new Error("Method not implemented.")}async extractCSSKeyElements(p){p||(p=this.promptAssets.parentChainHTML);let{title:d,steps:y,thought:E}=this.promptAssets,N={title:d,steps:y,thought:E,parentChainHTML:p};try{return await(await this.apiService.post("vtg/locators/extract-css",N)).json()}catch(F){throw Nh.error(F),F}}async generateLLMLocators(p){p||(p=this.promptAssets.parentChainHTML);let{title:d,steps:y,thought:E}=this.promptAssets,N={title:d,steps:y,thought:E,parentChainHTML:p};try{let F=await this.apiService.post("vtg/locators/generate",N);if(!F.ok)throw new Error(`HTTP error when calling generate locators, status: ${F.status}`);let R;try{R=await F.json()}catch(H){throw new Error("error parsing JSON, "+H.message)}return R}catch(F){throw Nh.error("Failed getting generate locators response from API",F.message),F}}async correctLLMLocators(p,d){d||(d=this.promptAssets.parentChainHTML);let{title:y,steps:E,thought:N}=this.promptAssets,F={title:y,steps:E,thought:N,parentChainHTML:d,locators:p};try{let R=await this.apiService.post("vtg/locators/correct",F);return JSON.parse(await R.text())}catch(R){throw Nh.error(R),R}}};e(dQt,"VTGSelectorGeneratorAPI");var Ert=dQt;var mQt=class mQt{constructor(p,d,y,E,N,F,R){this.processId=p;this.step=d;this.target=y;this.apiService=E;this.userStoryService=N;this.evaluationService=F;this.locatorInteractor=R;this.didCancel=!1}cancel(){this.didCancel=!0}async generateAILocators(){try{let p=this.getLocatorOwner();if(!p)throw new Error("Failed to get locator owner");let d=await this.locatorInteractor.getParentChainHTML(p);if(!d)throw new Error("Failed to get parent chain HTML");let y=[];return y=await this.generateLLMLocators(p,d),(y==null?void 0:y.length)>0?Array.from(new Set(y.concat(p.locator))):[]}catch(p){throw Nh.error(`Failed to generate AI locators (${this.processId})`,p),p}}async extractCSS(p=[]){try{let d=this.getLocatorOwner();if(!d)throw new Error("Failed to get locator owner");let y=await this.locatorInteractor.getParentChainHTML(d);if(!y)throw new Error("Failed to get parent chain HTML");if(this.didCancel)return;let E=await this.generateCSSKeyFeaturesLocators(y,d);if(!(E!=null&&E.length))throw new Error("No locators generated");let N=(await Promise.all(p.map(async R=>this.locatorExpressionToSelectorAndLocator(R)))).filter(R=>R),F=Array.from(new Set(E.concat(N)));return this.didCancel?void 0:F}catch(d){throw Nh.error(`Failed to extract CSS (${this.processId})`,d.message),d}}async filterLocators(p=[]){try{let d=this.getLocatorOwner();if(!d)throw new Error("Failed to get locator owner");let y=await this.locatorInteractor.getParentChainHTML(d);if(!y)throw new Error("Failed to get parent chain HTML");let E=e(()=>{let R=p.filter(Q=>Q),V=R.filter(Q=>Q.length>=100).sort((Q,se)=>Q.length-se.length).slice(0,5),H=R.filter(Q=>Q.length<100).concat(V).sort((Q,se)=>Q.length-se.length).slice(0,10);return Array.from(new Set(H))},"filterCandidates"),N=await Promise.all(E().map(async R=>this.locatorExpressionToSelectorAndLocator(R)));if(this.didCancel)return;let F=await this.runLLMFilteringForLocator(y,N,d);return this.didCancel?void 0:F}catch(d){throw Nh.error(`Failed to filter locators (${this.processId})`,d),d}}async runLLMFilteringForLocator(p,d,y,E){var H;let N={...this.getSelectorGeneratorBasePromptAssets(),parentChainHTML:p,generatedLocators:d,image:E},F="",R=new pkt(new Ert(N,this.apiService)),V=vC.vtg.aiLocators.useFakeAILocators?await this.getFakeSelectionData(y,d):(H=await R.generateWithLLMFiltering(F,d,p,async Q=>(await this.locatorInteractor.candidatesTester(Q,y,"runLLMFilteringForLocator",{verifyExactElement:this.isAssertion()})).filter(se=>se.success),{useImage:!!E,useVariables:!1,isPartOfListItem:!1,isForContextElement:!1}))==null?void 0:H[0];if(!V)throw new Error(`Failed generating selection data with LLM filtering (${this.processId})`);return V}async getFakeSelectionData(p,d){if(await aA(2e3),!!d.length)return{selector:`* >> ${d[0].selector}`,locator:p.locator,alternateLocators:{origin:"ai",locators:d.slice(1).map(y=>`* >> ${y.selector}`)}}}async generateCSSKeyFeaturesLocators(p,d){let y=await this.getCSSKeyFeatures(d,p),E=(await this.locatorInteractor.generateCustomPWLocators(d.locator,y,this.step)).filter(F=>F);return E.length?(await this.locatorInteractor.candidatesTester(E,d,"generateCSSKeyFeaturesLocators",{verifyExactElement:this.isAssertion()})).filter(F=>F.success):[]}async getCSSKeyFeatures(p,d){if(p.rrwebId){let E=ZNe.getInstance().getCSSKeyFeatures(p);if(E)return E}if(vC.vtg.aiLocators.useFakeAILocators)return await aA(3e3),[];let y=await this.getCSSKeyFeaturesFromAPI(d);return p.rrwebId&&ZNe.getInstance().setCSSKeyFeatures(p,y),y}async getCSSKeyFeaturesFromAPI(p){let d={...this.getSelectorGeneratorBasePromptAssets(),parentChainHTML:p};return new Ert(d,this.apiService).extractCSSKeyElements()}async locatorExpressionToSelectorAndLocator(p){try{return{selector:(await this.evaluationService.execute(`return ${J0e(p)}`))._selector,locator:p}}catch{return}}async generateLLMLocators(p,d){try{let y={...this.getSelectorGeneratorBasePromptAssets(),parentChainHTML:d.replace(/\s*checksumid="[^"]*"/g,"")},E=new pkt(new Ert(y,this.apiService)),N=await E.generateLLMLocators();if(!N.length)return[];if(this.didCancel)return[];let F=await this.locatorInteractor.candidatesTester(N.map(R=>({locator:R})),p,"generateLLMLocators",{verifyExactElement:this.isAssertion()});if(F.filter(R=>!R.success).length>=Math.ceil(F.length/2)){let R=await E.correctLLMLocators(F),V=await this.locatorInteractor.candidatesTester(R.map(H=>({locator:H})),p,"generateLLMLocatorsCorrection",{verifyExactElement:this.isAssertion()});if(this.didCancel)return[];F.push(...V)}return F.filter(R=>R.success).map(R=>R.locator)}catch(y){return Nh.error("Failed generating LLM locators",y),[]}}isAssertion(){return this.target.type==="assertion"}getLocatorOwner(){switch(this.target.type){case"assertion":case"action":return this.step;case"dropTarget":return{...this.step.dropTarget,timestamp:this.step.timestamp}}}getSelectorGeneratorBasePromptAssets(){try{let{goal:p,instructions:d}=this.getStory();return{title:p,steps:d,thought:this.step.thought}}catch(p){return Nh.error("Failed getting base prompt assets",p),{title:"",steps:"",thought:this.step.thought}}}getStory(){return this.userStoryService.getStory()}};e(mQt,"LocatorsAIAgent");var qOt=mQt;function Z7r(l,p=!1){return Kbn("javascript",l,p)[0]}e(Z7r,"asLocator");var Art,jbn=(Art=class{constructor(p){this.preferredQuote=p;this.preferredQuote=p}generateLocator(p,d,y,E={}){switch(d){case"default":return E.hasText!==void 0?`locator(${this.quote(y)}, { hasText: ${this.toHasText(E.hasText)} })`:E.hasNotText!==void 0?`locator(${this.quote(y)}, { hasNotText: ${this.toHasText(E.hasNotText)} })`:`locator(${this.quote(y)})`;case"frame":return`frameLocator(${this.quote(y)})`;case"nth":return`nth(${y})`;case"first":return"first()";case"last":return"last()";case"role":let N=[];UOt(E.name)?N.push(`name: ${this.regexToSourceString(E.name)}`):typeof E.name=="string"&&(N.push(`name: ${this.quote(E.name)}`),E.exact&&N.push("exact: true"));for(let{name:R,value:V}of E.attrs)N.push(`${R}: ${typeof V=="string"?this.quote(V):V}`);let F=N.length?`, { ${N.join(", ")} }`:"";return`getByRole(${this.quote(y)}${F})`;case"has-text":return`filter({ hasText: ${this.toHasText(y)} })`;case"has-not-text":return`filter({ hasNotText: ${this.toHasText(y)} })`;case"has":return`filter({ has: ${y} })`;case"hasNot":return`filter({ hasNot: ${y} })`;case"and":return`and(${y})`;case"or":return`or(${y})`;case"chain":return`locator(${y})`;case"test-id":return`getByTestId(${this.toTestIdValue(y)})`;case"text":return this.toCallWithExact("getByText",y,!!E.exact);case"alt":return this.toCallWithExact("getByAltText",y,!!E.exact);case"placeholder":return this.toCallWithExact("getByPlaceholder",y,!!E.exact);case"label":return this.toCallWithExact("getByLabel",y,!!E.exact);case"title":return this.toCallWithExact("getByTitle",y,!!E.exact);default:throw new Error("Unknown selector kind "+d)}}chainLocators(p){return p.join(".")}regexToSourceString(p){return txn(String(p))}toCallWithExact(p,d,y){return UOt(d)?`${p}(${this.regexToSourceString(d)})`:y?`${p}(${this.quote(d)}, { exact: true })`:`${p}(${this.quote(d)})`}toHasText(p){return UOt(p)?this.regexToSourceString(p):this.quote(p)}toTestIdValue(p){return UOt(p)?this.regexToSourceString(p):this.quote(p)}quote(p){let d;return Xbn(p,(d=this.preferredQuote)!=null?d:"'")}},e(Art,"JavaScriptLocatorFactory"),Art),Prt,nU=(Prt=class{constructor(){this.tokenType=""}toJSON(){return{token:this.tokenType}}toString(){return this.tokenType}toSource(){return""+this}},e(Prt,"CSSParserToken"),Prt),Nrt,lnt=(Nrt=class extends nU{constructor(d=void 0,y=void 0){super();this.value=d;this.mirror=y;this.value="",this.mirror=""}},e(Nrt,"GroupingToken"),Nrt),Frt,e4r=(Frt=class extends lnt{constructor(){super(),this.tokenType="(",this.value="(",this.mirror=")"}},e(Frt,"OpenParenToken"),Frt),Irt,t4r=(Irt=class extends nU{constructor(){super(),this.tokenType=","}},e(Irt,"CommaToken"),Irt),Ort,r4r=(Ort=class extends nU{constructor(){super(),this.tokenType=":"}},e(Ort,"ColonToken"),Ort),Lrt,Jbn=(Lrt=class extends nU{constructor(){super(),this.tokenType="~="}},e(Lrt,"IncludeMatchToken"),Lrt),Mrt,qbn=(Mrt=class extends nU{constructor(){super(),this.tokenType="|="}},e(Mrt,"DashMatchToken"),Mrt),Rrt,n4r=(Rrt=class extends lnt{constructor(){super(),this.tokenType="[",this.value="[",this.mirror="]"}},e(Rrt,"OpenSquareToken"),Rrt),Brt,Ubn=(Brt=class extends nU{constructor(){super(),this.tokenType="$="}},e(Brt,"SuffixMatchToken"),Brt),jrt,gQt=(jrt=class extends lnt{constructor(){super(),this.tokenType="]",this.value="]",this.mirror="["}},e(jrt,"CloseSquareToken"),jrt),Jrt,yQt=(Jrt=class extends nU{constructor(){super(),this.tokenType="WHITESPACE"}toString(){return"WS"}toSource(){return" "}},e(Jrt,"WhitespaceToken"),Jrt),qrt,Vbn=(qrt=class extends nU{constructor(){super(),this.tokenType="*="}},e(qrt,"SubstringMatchToken"),qrt),Urt,i4r=(Urt=class extends nU{constructor(){super(),this.tokenType=";"}},e(Urt,"SemicolonToken"),Urt),Vrt,VOt=(Vrt=class extends nU{constructor(){super(),this.tokenType="EOF"}toSource(){return""}},e(Vrt,"EOFToken"),Vrt),zrt,zbn=(zrt=class extends nU{constructor(){super(),this.tokenType="^="}},e(zrt,"PrefixMatchToken"),zrt),Wrt,a4r=(Wrt=class extends nU{constructor(){super(),this.tokenType="BADSTRING"}},e(Wrt,"BadStringToken"),Wrt),$rt,s4r=($rt=class extends nU{constructor(){super(),this.tokenType="CDO"}toSource(){return"<!--"}},e($rt,"CDOToken"),$rt),Hrt,o4r=(Hrt=class extends nU{constructor(){super(),this.tokenType="CDC"}toSource(){return"-->"}},e(Hrt,"CDCToken"),Hrt),Grt,c4r=(Grt=class extends lnt{constructor(){super(),this.tokenType="{",this.value="{",this.mirror="}"}},e(Grt,"OpenCurlyToken"),Grt),Krt,u4r=(Krt=class extends lnt{constructor(){super(),this.tokenType="}",this.value="}",this.mirror="{"}},e(Krt,"CloseCurlyToken"),Krt),Yrt,l4r=(Yrt=class extends nU{constructor(){super(),this.tokenType="||"}},e(Yrt,"ColumnToken"),Yrt),Xrt,p4r=(Xrt=class extends lnt{constructor(){super(),this.tokenType=")",this.value=")",this.mirror="("}},e(Xrt,"CloseParenToken"),Xrt),Qrt,pnt=(Qrt=class extends nU{constructor(d=void 0){super();this.value=d;this.value=""}ASCIIMatch(d){return this.value.toLowerCase()===d.toLowerCase()}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d}},e(Qrt,"StringValuedToken"),Qrt),Zrt,f4r=(Zrt=class extends pnt{constructor(p){super(),this.tokenType="IDENT",this.value=p}toString(){return"IDENT("+this.value+")"}toSource(){return dkt(this.value)}},e(Zrt,"IdentToken"),Zrt),ent,zOt=(ent=class extends nU{constructor(){super(),this.tokenType="BADURL"}},e(ent,"BadURLToken"),ent),tnt,WOt=(tnt=class extends pnt{constructor(d,y=void 0){super();this.mirror=y;this.tokenType="FUNCTION",this.value=d,this.mirror=")"}toString(){return"FUNCTION("+this.value+")"}toSource(){return dkt(this.value)+"("}},e(tnt,"FunctionToken"),tnt),rnt,_4r=(rnt=class extends pnt{constructor(p){super(),this.tokenType="AT-KEYWORD",this.value=p}toString(){return"AT("+this.value+")"}toSource(){return"@"+dkt(this.value)}},e(rnt,"AtKeywordToken"),rnt),nnt,d4r=(nnt=class extends pnt{constructor(d,y=void 0){super();this.type=y;this.tokenType="HASH",this.value=d,this.type="unrestricted"}toString(){return"HASH("+this.value+")"}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d.type=this.type,d}toSource(){return this.type==="id"?"#"+dkt(this.value):"#"+cxn(this.value)}},e(nnt,"HashToken"),nnt),int,m4r=(int=class extends pnt{constructor(p){super(),this.tokenType="STRING",this.value=p}toString(){return'"'+b4r(this.value)+'"'}},e(int,"StringToken"),int),ant,h4r=(ant=class extends pnt{constructor(p){super(),this.tokenType="URL",this.value=p}toString(){return"URL("+this.value+")"}toSource(){return'url("'+b4r(this.value)+'")'}},e(ant,"URLToken"),ant),snt,g4r=(snt=class extends nU{constructor(d=void 0,y=void 0,E=void 0,N=void 0){super();this.type=d;this.unit=y;this.repr=E;this.value=N;this.tokenType="NUMBER",this.type="integer",this.repr=""}toString(){return this.type==="integer"?"INT("+this.value+")":"NUMBER("+this.value+")"}toJSON(){let d=super.toJSON();return d.value=this.value,d.type=this.type,d.repr=this.repr,d}toSource(){return this.repr}},e(snt,"NumberToken"),snt),ont,y4r=(ont=class extends nU{constructor(d=void 0,y=void 0){super();this.repr=d;this.value=y;this.tokenType="PERCENTAGE",this.repr=""}toString(){return"PERCENTAGE("+this.value+")"}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d.repr=this.repr,d}toSource(){return this.repr+"%"}},e(ont,"PercentageToken"),ont),cnt,Wbn=(cnt=class extends nU{constructor(d=void 0,y=void 0,E=void 0,N=void 0){super();this.type=d;this.unit=y;this.repr=E;this.value=N;this.tokenType="DIMENSION",this.type="integer",this.repr="",this.unit=""}toString(){return"DIM("+this.value+","+this.unit+")"}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d.type=this.type,d.repr=this.repr,d.unit=this.unit,d}toSource(){let d=this.repr,y=dkt(this.unit);return y[0].toLowerCase()==="e"&&(y[1]==="-"||YV(y.charCodeAt(1),48,57))&&(y="\\65 "+y.slice(1,y.length)),d+y}},e(cnt,"DimensionToken"),cnt),$bn={javascript:jbn},unt,uce=(unt=class extends Error{},e(unt,"InvalidSelectorError"),unt),Y7r=new Set(["internal:has","internal:has-not","internal:and","internal:or","internal:chain","left-of","right-of","above","below","near"]),Hbn=new Set(["left-of","right-of","above","below","near"]),Gbn=new Set(["not","is","where","has","scope","light","visible","text","text-matches","text-is","has-text","above","below","right-of","left-of","near","nth-match"]);function Kbn(l,p,d=!1,y=20,E=void 0){try{return krt(new $bn[l](E),v4r(p),d,y)}catch(N){return console.error("failed to convert selector to locators",p,N),[`locator('${p}')`]}}e(Kbn,"asLocators");function krt(l,p,d=!1,y=20){let E=[...p.parts];for(let R=0;R<E.length-1;R++)if(E[R].name==="nth"&&E[R+1].name==="internal:control"&&E[R+1].body==="enter-frame"){let[V]=E.splice(R,1);E.splice(R+1,0,V)}let N=[],F=d?"frame-locator":"page";for(let R=0;R<E.length;R++){let V=E[R],H=F;if(F="locator",V.name==="nth"){V.body==="0"?N.push([l.generateLocator(H,"first",""),l.generateLocator(H,"nth","0")]):V.body==="-1"?N.push([l.generateLocator(H,"last",""),l.generateLocator(H,"nth","-1")]):N.push([l.generateLocator(H,"nth",V.body)]);continue}if(V.name==="internal:text"){let{exact:le,text:Ue}=fkt(V.body);N.push([l.generateLocator(H,"text",Ue,{exact:le})]);continue}if(V.name==="internal:has-text"){let{exact:le,text:Ue}=fkt(V.body);if(!le){N.push([l.generateLocator(H,"has-text",Ue,{exact:le})]);continue}}if(V.name==="internal:has-not-text"){let{exact:le,text:Ue}=fkt(V.body);if(!le){N.push([l.generateLocator(H,"has-not-text",Ue,{exact:le})]);continue}}if(V.name==="internal:has"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"has",Ue)));continue}if(V.name==="internal:has-not"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"hasNot",Ue)));continue}if(V.name==="internal:and"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"and",Ue)));continue}if(V.name==="internal:or"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"or",Ue)));continue}if(V.name==="internal:chain"){let le=krt(l,V.body.parsed,!1,y);N.push(le.map(Ue=>l.generateLocator(H,"chain",Ue)));continue}if(V.name==="internal:label"){let{exact:le,text:Ue}=fkt(V.body);N.push([l.generateLocator(H,"label",Ue,{exact:le})]);continue}if(V.name==="internal:role"){let le=hQt(V.body,!0),Ue={attrs:[]};for(let Xe of le.attributes)Xe.name==="name"?(Ue.exact=Xe.caseSensitive,Ue.name=Xe.value):(Xe.name==="level"&&typeof Xe.value=="string"&&(Xe.value=+Xe.value),Ue.attrs.push({name:Xe.name==="include-hidden"?"includeHidden":Xe.name,value:Xe.value}));N.push([l.generateLocator(H,"role",le.name,Ue)]);continue}if(V.name==="internal:testid"){let le=hQt(V.body,!0),{value:Ue}=le.attributes[0];N.push([l.generateLocator(H,"test-id",Ue)]);continue}if(V.name==="internal:attr"){let le=hQt(V.body,!0),{name:Ue,value:Xe,caseSensitive:rt}=le.attributes[0],Tt=Xe,Nt=!!rt;if(Ue==="placeholder"){N.push([l.generateLocator(H,"placeholder",Tt,{exact:Nt})]);continue}if(Ue==="alt"){N.push([l.generateLocator(H,"alt",Tt,{exact:Nt})]);continue}if(Ue==="title"){N.push([l.generateLocator(H,"title",Tt,{exact:Nt})]);continue}}let Q="default",se=E[R+1];se&&se.name==="internal:control"&&se.body==="enter-frame"&&(Q="frame",F="frame-locator",R++);let G=HOt({parts:[V]}),_e=l.generateLocator(H,Q,G);if(Q==="default"&&se&&["internal:has-text","internal:has-not-text"].includes(se.name)){let{exact:le,text:Ue}=fkt(se.body);if(!le){let Xe=l.generateLocator("locator",se.name==="internal:has-text"?"has-text":"has-not-text",Ue,{exact:le}),rt={};se.name==="internal:has-text"?rt.hasText=Ue:rt.hasNotText=Ue;let Tt=l.generateLocator(H,"default",G,rt);N.push([l.chainLocators([_e,Xe]),Tt]),R++;continue}}let ne;if(["xpath","css"].includes(V.name)){let le=HOt({parts:[V]},!0);ne=l.generateLocator(H,Q,le)}N.push([_e,ne].filter(Boolean))}return Ybn(l,N,y)}e(krt,"innerAsLocators");function Ybn(l,p,d){let y=p.map(()=>""),E=[],N=e(F=>{if(F===p.length)return E.push(l.chainLocators(y)),y.length<d;for(let R of p[F])if(y[F]=R,!N(F+1))return!1;return!0},"visit");return N(0),E}e(Ybn,"combineTokens");function HOt(l,p=void 0){return typeof l=="string"?l:l.parts.map((d,y)=>{let E=!0;!p&&y!==l.capture&&(d.name==="css"||d.name==="xpath"&&d.source.startsWith("//")||d.source.startsWith(".."))&&(E=!1);let N=E?d.name+"=":"";return`${y===l.capture?"*":""}${N}${d.source}`}).join(" >> ")}e(HOt,"stringifySelector");function fkt(l){let p=!1,d=l.match(/^\/(.*)\/([igm]*)$/);return d?{text:new RegExp(d[1],d[2])}:(l.endsWith('"')?(l=JSON.parse(l),p=!0):l.endsWith('"s')?(l=JSON.parse(l.substring(0,l.length-1)),p=!0):l.endsWith('"i')&&(l=JSON.parse(l.substring(0,l.length-1)),p=!1),{exact:p,text:l})}e(fkt,"detectExact");function hQt(l,p){let d=0,y=l.length===0,E=e(()=>l[d]||"","next"),N=e(()=>{let Ue=E();return++d,y=d>=l.length,Ue},"eat1"),F=e(Ue=>{throw y?new uce(`Unexpected end of selector while parsing selector \`${l}\``):new uce(`Error while parsing selector \`${l}\` - unexpected symbol "${E()}" at position ${d}`+(Ue?" during "+Ue:""))},"syntaxError");function R(){for(;!y&&/\s/.test(E());)N()}e(R,"skipSpaces");function V(Ue){return Ue>="\x80"||Ue>="0"&&Ue<="9"||Ue>="A"&&Ue<="Z"||Ue>="a"&&Ue<="z"||Ue>="0"&&Ue<="9"||Ue==="_"||Ue==="-"}e(V,"isCSSNameChar");function H(){let Ue="";for(R();!y&&V(E());)Ue+=N();return Ue}e(H,"readIdentifier");function Q(Ue){let Xe=N();for(Xe!==Ue&&F("parsing quoted string");!y&&E()!==Ue;)E()==="\\"&&N(),Xe+=N();return E()!==Ue&&F("parsing quoted string"),Xe+=N(),Xe}e(Q,"readQuotedString");function se(){N()!=="/"&&F("parsing regular expression");let Ue="",Xe=!1;for(;!y;){if(E()==="\\")Ue+=N(),y&&F("parsing regular expression");else if(Xe&&E()==="]")Xe=!1;else if(!Xe&&E()==="[")Xe=!0;else if(!Xe&&E()==="/")break;Ue+=N()}N()!=="/"&&F("parsing regular expression");let rt="";for(;!y&&E().match(/[dgimsuy]/);)rt+=N();try{return new RegExp(Ue,rt)}catch(Tt){throw new uce(`Error while parsing selector \`${l}\`: ${Tt.message}`)}}e(se,"readRegularExpression");function G(){let Ue="";return R(),E()==="'"||E()==='"'?Ue=Q(E()).slice(1,-1):Ue=H(),Ue||F("parsing property path"),Ue}e(G,"readAttributeToken");function _e(){R();let Ue="";return y||(Ue+=N()),!y&&Ue!=="="&&(Ue+=N()),["=","*=","^=","$=","|=","~="].includes(Ue)||F("parsing operator"),Ue}e(_e,"readOperator");function ne(){N();let Ue=[];for(Ue.push(G()),R();E()===".";)N(),Ue.push(G()),R();if(E()==="]")return N(),{name:Ue.join("."),jsonPath:Ue,op:"<truthy>",value:null,caseSensitive:!1};let Xe=_e(),rt,Tt=!0;if(R(),E()==="/"){if(Xe!=="=")throw new uce(`Error while parsing selector \`${l}\` - cannot use ${Xe} in attribute with regular expression`);rt=se()}else if(E()==="'"||E()==='"')rt=Q(E()).slice(1,-1),R(),E()==="i"||E()==="I"?(Tt=!1,N()):(E()==="s"||E()==="S")&&(Tt=!0,N());else{for(rt="";!y&&(V(E())||E()==="+"||E()===".");)rt+=N();rt==="true"?rt=!0:rt==="false"?rt=!1:p||(rt=+rt,Number.isNaN(rt)&&F("parsing attribute value"))}if(R(),E()!=="]"&&F("parsing attribute value"),N(),Xe!=="="&&typeof rt!="string")throw new uce(`Error while parsing selector \`${l}\` - cannot use ${Xe} in attribute with non-string matching value - ${rt}`);return{name:Ue.join("."),jsonPath:Ue,op:Xe,value:rt,caseSensitive:Tt}}e(ne,"readAttribute");let le={name:"",attributes:[]};for(le.name=H(),R();E()==="[";)le.attributes.push(ne()),R();if(y||F(void 0),!le.name&&!le.attributes.length)throw new uce(`Error while parsing selector \`${l}\` - selector cannot be empty`);return le}e(hQt,"parseAttributeSelector");function v4r(l){let p=Zbn(l),d=[];for(let y of p.parts){if(y.name==="css"||y.name==="css:light"){y.name==="css:light"&&(y.body=":light("+y.body+")");let E=exn(y.body,Gbn);d.push({name:"css",body:E.selector,source:y.body});continue}if(Y7r.has(y.name)){let E,N;try{let H=JSON.parse("["+y.body+"]");if(!Array.isArray(H)||H.length<1||H.length>2||typeof H[0]!="string")throw new uce(`Malformed selector: ${y.name}=`+y.body);if(E=H[0],H.length===2){if(typeof H[1]!="number"||!Hbn.has(y.name))throw new uce(`Malformed selector: ${y.name}=`+y.body);N=H[1]}}catch{throw new uce(`Malformed selector: ${y.name}=`+y.body)}let F={name:y.name,source:y.body,body:{parsed:v4r(E),distance:N}},R=[...F.body.parsed.parts].reverse().find(H=>H.name==="internal:control"&&H.body==="enter-frame"),V=R?F.body.parsed.parts.indexOf(R):-1;V!==-1&&Qbn(F.body.parsed.parts.slice(0,V+1),d.slice(0,V+1))&&F.body.parsed.parts.splice(0,V+1),d.push(F);continue}d.push({...y,source:y.body})}if(Y7r.has(d[0].name))throw new uce(`"${d[0].name}" selector cannot be first`);return{capture:p.capture,parts:d}}e(v4r,"parseSelector");function Xbn(l,p="'"){let d=JSON.stringify(l),y=d.substring(1,d.length-1).replace(/\\"/g,'"');if(p==="'")return p+y.replace(/[']/g,"\\'")+p;if(p==='"')return p+y.replace(/["]/g,'\\"')+p;if(p==="`")return p+y.replace(/[`]/g,"`")+p;throw new Error("Invalid escape char")}e(Xbn,"escapeWithQuotes");function UOt(l){return l instanceof RegExp}e(UOt,"isRegExp");function Qbn(l,p){return HOt({parts:l})===HOt({parts:p})}e(Qbn,"selectorPartsEqual");function Zbn(l){let p=0,d,y=0,E={parts:[]},N=e(()=>{let R=l.substring(y,p).trim(),V=R.indexOf("="),H,Q;V!==-1&&R.substring(0,V).trim().match(/^[a-zA-Z_0-9-+:*]+$/)?(H=R.substring(0,V).trim(),Q=R.substring(V+1)):R.length>1&&R[0]==='"'&&R[R.length-1]==='"'||R.length>1&&R[0]==="'"&&R[R.length-1]==="'"?(H="text",Q=R):/^\(*\/\//.test(R)||R.startsWith("..")?(H="xpath",Q=R):(H="css",Q=R);let se=!1;if(H[0]==="*"&&(se=!0,H=H.substring(1)),E.parts.push({name:H,body:Q}),se){if(E.capture!==void 0)throw new uce("Only one of the selectors can capture using * modifier");E.capture=E.parts.length-1}},"append");if(!l.includes(">>"))return p=l.length,N(),E;let F=e(()=>{let V=l.substring(y,p).match(/^\s*text\s*=(.*)$/);return!!V&&!!V[1]},"shouldIgnoreTextSelectorQuote");for(;p<l.length;){let R=l[p];R==="\\"&&p+1<l.length?p+=2:R===d?(d=void 0,p++):!d&&(R==='"'||R==="'"||R==="`")&&!F()?(d=R,p++):!d&&R===">"&&l[p+1]===">"?(N(),p+=2,y=p):p++}return N(),E}e(Zbn,"parseSelectorString");function exn(l,p){let d;try{d=rxn(l),d[d.length-1]instanceof VOt||d.push(new VOt)}catch(Yt){let _r=Yt.message+` while parsing selector "${l}"`,Pt=(Yt.stack||"").indexOf(Yt.message);throw Pt!==-1&&(Yt.stack=Yt.stack.substring(0,Pt)+_r+Yt.stack.substring(Pt+Yt.message.length)),Yt.message=_r,Yt}let y=d.find(Yt=>Yt instanceof _4r||Yt instanceof a4r||Yt instanceof zOt||Yt instanceof l4r||Yt instanceof s4r||Yt instanceof o4r||Yt instanceof i4r||Yt instanceof c4r||Yt instanceof u4r||Yt instanceof h4r||Yt instanceof y4r);if(y)throw new uce(`Unsupported token "${y.toSource()}" while parsing selector "${l}"`);let E=0,N=new Set;function F(){return new uce(`Unexpected token "${d[E].toSource()}" while parsing selector "${l}"`)}e(F,"unexpected");function R(){for(;d[E]instanceof yQt;)E++}e(R,"skipWhitespace");function V(Yt=E){return d[Yt]instanceof f4r}e(V,"isIdent");function H(Yt=E){return d[Yt]instanceof m4r}e(H,"isString");function Q(Yt=E){return d[Yt]instanceof g4r}e(Q,"isNumber");function se(Yt=E){return d[Yt]instanceof t4r}e(se,"isComma");function G(Yt=E){return d[Yt]instanceof e4r}e(G,"isOpenParen");function _e(Yt=E){return d[Yt]instanceof p4r}e(_e,"isCloseParen");function ne(Yt=E){return d[Yt]instanceof WOt}e(ne,"isFunction");function le(Yt=E){return d[Yt]instanceof aK&&d[Yt].value==="*"}e(le,"isStar");function Ue(Yt=E){return d[Yt]instanceof VOt}e(Ue,"isEOF");function Xe(Yt=E){return d[Yt]instanceof aK&&[">","+","~"].includes(d[Yt].value)}e(Xe,"isClauseCombinator");function rt(Yt=E){return se(Yt)||_e(Yt)||Ue(Yt)||Xe(Yt)||d[Yt]instanceof yQt}e(rt,"isSelectorClauseEnd");function Tt(){let Yt=[Nt()];for(;R(),!!se();)E++,Yt.push(Nt());return Yt}e(Tt,"consumeFunctionArguments");function Nt(){return R(),Q()||H()?d[E++].value:er()}e(Nt,"consumeArgument");function er(){let Yt={simples:[]};for(R(),Xe()?Yt.simples.push({selector:{functions:[{name:"scope",args:[]}]},combinator:""}):Yt.simples.push({selector:jt(),combinator:""});;){if(R(),Xe())Yt.simples[Yt.simples.length-1].combinator=d[E++].value,R();else if(rt())break;Yt.simples.push({combinator:"",selector:jt()})}return Yt}e(er,"consumeComplexSelector");function jt(){let Yt="",_r=[];for(;!rt();)if(V()||le())Yt+=d[E++].toSource();else if(d[E]instanceof d4r)Yt+=d[E++].toSource();else if(d[E]instanceof aK&&d[E].value===".")if(E++,V())Yt+="."+d[E++].toSource();else throw F();else if(d[E]instanceof r4r)if(E++,V())if(!p.has(d[E].value.toLowerCase()))Yt+=":"+d[E++].toSource();else{let Pt=d[E++].value.toLowerCase();_r.push({name:Pt,args:[]}),N.add(Pt)}else if(ne()){let Pt=d[E++].value.toLowerCase();if(p.has(Pt)?(_r.push({name:Pt,args:Tt()}),N.add(Pt)):Yt+=`:${Pt}(${Lt()})`,R(),!_e())throw F();E++}else throw F();else if(d[E]instanceof n4r){for(Yt+="[",E++;!(d[E]instanceof gQt)&&!Ue();)Yt+=d[E++].toSource();if(!(d[E]instanceof gQt))throw F();Yt+="]",E++}else throw F();if(!Yt&&!_r.length)throw F();return{css:Yt||void 0,functions:_r}}e(jt,"consumeSimpleSelector");function Lt(){let Yt="",_r=1;for(;!Ue()&&((G()||ne())&&_r++,_e()&&_r--,!!_r);)Yt+=d[E++].toSource();return Yt}e(Lt,"consumeBuiltinFunctionArguments");let zt=Tt();if(!Ue())throw F();if(zt.some(Yt=>typeof Yt!="object"||!("simples"in Yt)))throw new uce(`Error while parsing selector "${l}"`);return{selector:zt,names:Array.from(N)}}e(exn,"parseCSS");function txn(l){return l.replace(/(^|[^\\])(\\\\)*\\(['"`])/g,"$1$2$3")}e(txn,"normalizeEscapedRegexQuotes");function rxn(l){let p=nxn(l),d=-1,y=[],E,N=0,F=0,R=0,V=e(function(){N+=1,R=F,F=0},"incrLineno"),H={line:N,column:F},Q=e(function(pr){return pr>=p.length?-1:p[pr]},"codepoint"),se=e(function(pr=void 0){if(pr===void 0&&(pr=1),pr>3)throw"Spec Error: no more than three codepoints of lookahead.";return Q(d+pr)},"next"),G=e(function(pr=void 0){return pr===void 0&&(pr=1),d+=pr,E=Q(d),wrt(E)?V():F+=pr,!0},"consume"),_e=e(function(){return d-=1,wrt(E)?(N-=1,F=R):F-=1,H.line=N,H.column=F,!0},"reconsume"),ne=e(function(pr=void 0){return pr===void 0&&(pr=E),pr===-1},"eof"),le=e(function(){},"donothing"),Ue=e(function(){},"parseerror"),Xe=e(function(){if(rt(),G(),cPe(E)){for(;cPe(se());)G();return new yQt}else{if(E===34)return er();if(E===35)if(Q7r(se())||zt(se(1),se(2))){let pr=new d4r("");return _r(se(1),se(2),se(3))&&(pr.type="id"),pr.value=gt(),pr}else return new aK(E);else return E===36?se()===61?(G(),new Ubn):new aK(E):E===39?er():E===40?new e4r:E===41?new p4r:E===42?se()===61?(G(),new Vbn):new aK(E):E===43?Ut()?(_e(),Tt()):new aK(E):E===44?new t4r:E===45?Ut()?(_e(),Tt()):se(1)===45&&se(2)===62?(G(2),new o4r):Pt()?(_e(),Nt()):new aK(E):E===46?Ut()?(_e(),Tt()):new aK(E):E===58?new r4r:E===59?new i4r:E===60?se(1)===33&&se(2)===45&&se(3)===45?(G(3),new s4r):new aK(E):E===64?_r(se(1),se(2),se(3))?new _4r(gt()):new aK(E):E===91?new n4r:E===92?Yt()?(_e(),Nt()):(Ue(),new aK(E)):E===93?new gQt:E===94?se()===61?(G(),new zbn):new aK(E):E===123?new c4r:E===124?se()===61?(G(),new qbn):se()===124?(G(),new l4r):new aK(E):E===125?new u4r:E===126?se()===61?(G(),new Jbn):new aK(E):cce(E)?(_e(),Tt()):$Ot(E)?(_e(),Nt()):ne()?new VOt:new aK(E)}},"consumeAToken"),rt=e(function(){for(;se(1)===47&&se(2)===42;)for(G(2);;)if(G(),E===42&&se()===47){G();break}else if(ne()){Ue();return}},"consumeComments"),Tt=e(function(){let pr=Jt();if(_r(se(1),se(2),se(3))){let Mr=new Wbn;return Mr.value=pr.value,Mr.repr=pr.repr,Mr.type=pr.type,Mr.unit=gt(),Mr}else if(se()===37){G();let Mr=new y4r;return Mr.value=pr.value,Mr.repr=pr.repr,Mr}else{let Mr=new g4r;return Mr.value=pr.value,Mr.repr=pr.repr,Mr.type=pr.type,Mr}},"consumeANumericToken"),Nt=e(function(){let pr=gt();if(pr.toLowerCase()==="url"&&se()===40){for(G();cPe(se(1))&&cPe(se(2));)G();return se()===34||se()===39?new WOt(pr):cPe(se())&&(se(2)===34||se(2)===39)?new WOt(pr):jt()}else return se()===40?(G(),new WOt(pr)):new f4r(pr)},"consumeAnIdentlikeToken"),er=e(function(pr=void 0){pr===void 0&&(pr=E);let Mr="";for(;G();){if(E===pr||ne())return new m4r(Mr);if(wrt(E))return Ue(),_e(),new a4r;E===92?ne(se())?le():wrt(se())?G():Mr+=rH(Lt()):Mr+=rH(E)}throw new Error("Internal error")},"consumeAStringToken"),jt=e(function(){let pr=new h4r("");for(;cPe(se());)G();if(ne(se()))return pr;for(;G();){if(E===41||ne())return pr;if(cPe(E)){for(;cPe(se());)G();return se()===41||ne(se())?(G(),pr):(Qe(),new zOt)}else{if(E===34||E===39||E===40||lxn(E))return Ue(),Qe(),new zOt;if(E===92)if(Yt())pr.value+=rH(Lt());else return Ue(),Qe(),new zOt;else pr.value+=rH(E)}}throw new Error("Internal error")},"consumeAURLToken"),Lt=e(function(){if(G(),X7r(E)){let pr=[E];for(let Vr=0;Vr<5&&X7r(se());Vr++)G(),pr.push(E);cPe(se())&&G();let Mr=parseInt(pr.map(function(Vr){return String.fromCharCode(Vr)}).join(""),16);return Mr>uxn&&(Mr=65533),Mr}else return ne()?65533:E},"consumeEscape"),zt=e(function(pr,Mr){return!(pr!==92||wrt(Mr))},"areAValidEscape"),Yt=e(function(){return zt(E,se())},"startsWithAValidEscape"),_r=e(function(pr,Mr,Vr){return pr===45?$Ot(Mr)||Mr===45||zt(Mr,Vr):$Ot(pr)?!0:pr===92?zt(pr,Mr):!1},"wouldStartAnIdentifier"),Pt=e(function(){return _r(E,se(1),se(2))},"startsWithAnIdentifier"),qt=e(function(pr,Mr,Vr){return pr===43||pr===45?!!(cce(Mr)||Mr===46&&cce(Vr)):pr===46?!!cce(Mr):!!cce(pr)},"wouldStartANumber"),Ut=e(function(){return qt(E,se(1),se(2))},"startsWithANumber"),gt=e(function(){let pr="";for(;G();)if(Q7r(E))pr+=rH(E);else if(Yt())pr+=rH(Lt());else return _e(),pr;throw new Error("Internal parse error")},"consumeAName"),Jt=e(function(){let pr="",Mr="integer";for((se()===43||se()===45)&&(G(),pr+=rH(E));cce(se());)G(),pr+=rH(E);if(se(1)===46&&cce(se(2)))for(G(),pr+=rH(E),G(),pr+=rH(E),Mr="number";cce(se());)G(),pr+=rH(E);let Vr=se(1),bn=se(2),zr=se(3);if((Vr===69||Vr===101)&&cce(bn))for(G(),pr+=rH(E),G(),pr+=rH(E),Mr="number";cce(se());)G(),pr+=rH(E);else if((Vr===69||Vr===101)&&(bn===43||bn===45)&&cce(zr))for(G(),pr+=rH(E),G(),pr+=rH(E),G(),pr+=rH(E),Mr="number";cce(se());)G(),pr+=rH(E);let Ca=Wt(pr);return{type:Mr,value:Ca,repr:pr}},"consumeANumber"),Wt=e(function(pr){return+pr},"convertAStringToANumber"),Qe=e(function(){for(;G();){if(E===41||ne())return;Yt()&&Lt(),le()}},"consumeTheRemnantsOfABadURL"),Ir=0;for(;!ne(se());)if(y.push(Xe()),Ir++,Ir>p.length*2)throw new Error("I'm infinite-looping!");return y}e(rxn,"tokenize");function nxn(l){let p=[];for(let d=0;d<l.length;d++){let y=l.charCodeAt(d);if(y===13&&l.charCodeAt(d+1)===10&&(y=10,d++),(y===13||y===12)&&(y=10),y===0&&(y=65533),YV(y,55296,56319)&&YV(l.charCodeAt(d+1),56320,57343)){let E=y-55296,N=l.charCodeAt(d+1)-56320;y=Math.pow(2,16)+E*Math.pow(2,10)+N,d++}p.push(y)}return p}e(nxn,"preprocess");function rH(l){if(l<=65535)return String.fromCharCode(l);l-=Math.pow(2,16);let p=Math.floor(l/Math.pow(2,10))+55296,d=l%Math.pow(2,10)+56320;return String.fromCharCode(p)+String.fromCharCode(d)}e(rH,"stringFromCode");var YV=e(function(l,p,d){return l>=p&&l<=d},"between");function cPe(l){return wrt(l)||l===9||l===32}e(cPe,"whitespace");function wrt(l){return l===10}e(wrt,"newline");var vQt=class vQt extends nU{constructor(d,y=void 0){super();this.value=y;this.tokenType="DELIM",this.value="",this.value=rH(d)}toString(){return"DELIM("+this.value+")"}toJSON(){let d=this.constructor.prototype.constructor.prototype.toJSON.call(this);return d.value=this.value,d}toSource(){return this.value==="\\"?`\\
1906
1905
  `:this.value}};e(vQt,"DelimToken");var aK=vQt;function cce(l){return YV(l,48,57)}e(cce,"digit");function X7r(l){return cce(l)||YV(l,65,70)||YV(l,97,102)}e(X7r,"hexdigit");function ixn(l){return YV(l,65,90)}e(ixn,"uppercaseletter");function axn(l){return YV(l,97,122)}e(axn,"lowercaseletter");function sxn(l){return ixn(l)||axn(l)}e(sxn,"letter");function oxn(l){return l>=128}e(oxn,"nonascii");function $Ot(l){return sxn(l)||oxn(l)||l===95}e($Ot,"namestartchar");function Q7r(l){return $Ot(l)||cce(l)||l===45}e(Q7r,"namechar");function dkt(l){l=""+l;let p="",d=l.charCodeAt(0);for(let y=0;y<l.length;y++){let E=l.charCodeAt(y);if(E===0)throw new _kt("Invalid character: the input contains U+0000.");YV(E,1,31)||E===127||y===0&&YV(E,48,57)||y===1&&YV(E,48,57)&&d===45?p+="\\"+E.toString(16)+" ":E>=128||E===45||E===95||YV(E,48,57)||YV(E,65,90)||YV(E,97,122)?p+=l[y]:p+="\\"+l[y]}return p}e(dkt,"escapeIdent");function cxn(l){l=""+l;let p="";for(let d=0;d<l.length;d++){let y=l.charCodeAt(d);if(y===0)throw new _kt("Invalid character: the input contains U+0000.");y>=128||y===45||y===95||YV(y,48,57)||YV(y,65,90)||YV(y,97,122)?p+=l[d]:p+="\\"+y.toString(16)+" "}return p}e(cxn,"escapeHash");var bQt=class bQt extends Error{constructor(p){super(p),this.name="InvalidCharacterError"}};e(bQt,"InvalidCharacterError");var _kt=bQt;function b4r(l){l=""+l;let p="";for(let d=0;d<l.length;d++){let y=l.charCodeAt(d);if(y===0)throw new _kt("Invalid character: the input contains U+0000.");YV(y,1,31)||y===127?p+="\\"+y.toString(16)+" ":y===34||y===92?p+="\\"+l[d]:p+=l[d]}return p}e(b4r,"escapeString");var uxn=1114111;function lxn(l){return YV(l,0,8)||l===11||YV(l,14,31)||l===127}e(lxn,"nonprintable");var xQt=class xQt{constructor(p,d,y){this.webDriver=p;this.timeMachine=d;this.evaluationService=y}async verifyAndCompareLocatorOnTimemachine(p,d,y){return this.timeMachine.executeTask(E=>this.verifyLocatorOrSelector({type:"locator",value:p},d,E),y,{name:"verifyAndCompareLocatorOnTimemachine"})}async verifyLocatorOrSelector({type:p,value:d,verifyUniqueness:y=!0,verifyExactElement:E=!1,fetchRrwebId:N=!1},F,R=this.webDriver.tmFrame){let V=e((G,_e)=>({success:!1,value:d,error:G,message:_e}),"error"),H,Q,se=e(async()=>{if(F&&!await this.areLocatorsIdentical(F,H,R,E))return V("INCORRECT_TARGET","Locators points at different element");if(N)try{Q=await this.getRrwebIdFromLocator(R,H)}catch(G){Nh("Failed fetching rrwebid",G.message)}return{success:!0,value:d,rrwebId:Q}},"success");try{switch(p){case"locator":try{H=await this.evaluationService.execute(`return ${J0e(d)}`,{page:R.frameLocator("iframe")})}catch(_e){return V("INVALID",_e.message)}break;case"selector":H=R.frameLocator("iframe").locator(d);break}let G;try{if(!H)throw new Error;G=await H.count()}catch{return V("INVALID","Could not evaluate element")}if(!y)return se();if(G===2){for(let _e=0;_e<2;_e++)if(await H.nth(_e).evaluate(le=>le.matches(".element-inspector-ignore")))return se()}return G!==1?G===0?V("NOT_FOUND","No element found"):V("NON_UNIQUE",`Strict mode: ${G} elements found`):se()}catch(G){return V("INVALID",String(G))}}async generateCustomPWLocators(p,d,y){let E=e(async(F=!1)=>this.timeMachine.executeTask(async R=>{let V=await this.evaluationService.execute(`return await ${J0e(p)}.elementHandle()`,{page:R.frameLocator("iframe")});return await R.evaluate(async({element:H,cssKeyFeatures:Q,options:se})=>{try{if(!H)throw new Error("element not found");return window.checksum.testGenerator.buildCustomPlaywrightSelectors(H,Q,se,H.ownerDocument)}catch(G){return Nh.error("Error generating locators",G),[]}},{element:V,cssKeyFeatures:d,options:{isPartOfListItem:!1,isForContextElement:!1,addCSSSelectorGenerator:!1,bruteForceMode:F}})},y.timestamp,{name:"generateCustomPWLocators"}),"generate"),N=await E()??[];return(N==null?void 0:N.length)<3?E(!0):N}async getParentChainHTML(p){if(p.rrwebId){let E=ZNe.getInstance().getParentChain(p);if(E)return E}let{parentChainHTML:d,rrwebId:y}=await this.timeMachine.executeTask(async E=>{let N=await this.evaluationService.execute(`return await ${J0e(p.locator)}`,{page:E.frameLocator("iframe")}),F;try{F=await this.getRrwebIdFromLocator(E,N)}catch{}let R=await N.elementHandle();return{parentChainHTML:await E.evaluate(async({element:H})=>{try{if(!H)throw new Error("Element not found");let Q=await window.checksum.testGenerator.getParentChainHTML(H,!0);if(typeof Q!="string")throw new Error("Parent chain HTML is not a string, "+typeof Q);return Q}catch(Q){throw console.error("Error getting parent chain HTML",Q),Q}},{element:R}),rrwebId:F}},p.timestamp,{name:"getParentChainHTML "+p.locator});return y&&(p.rrwebId=y,ZNe.getInstance().setParentChain(p,d)),d}async candidatesTester(p,d,y,{verifyExactElement:E=!1}={}){if(!p.length)return[];let N=!!p[0].selector,F=e(H=>({value:N?H.selector:H.locator,type:N?"selector":"locator",verifyUniqueness:!0,verifyExactElement:E}),"inputTransformer"),R=e(async H=>({...H,...N?{selector:H.value,locator:Z7r(H.value)}:await this.locatorExpressionToSelectorAndLocator(H.value)}),"outputTransformer"),V=await this.timeMachine.executeTask(async H=>{try{Nh.info(`Will test ${p.length} locators`);let Q=await Promise.all(p.map(async se=>({...se,...await this.verifyLocatorOrSelector(F(se),d==null?void 0:d.locator,H)})));return Nh.info(`locator verification results: ${Q.filter(se=>se.success).length}/${Q.length}`),await Promise.all(Q.map(R))}catch(Q){Nh.error("Error testing selectors",Q)}},d.timestamp,{name:`${y}CandidatesTester`});return V||(Nh.warning("No valid selector found"),[])}async locatorExpressionToSelectorAndLocator(p){try{return{selector:(await this.evaluationService.execute(`return ${J0e(p)}`))._selector,locator:p}}catch{return}}async areLocatorsIdentical(p,d,y=this.timeMachine.getFrame(),E=!1){try{let N=await this.evaluationService.execute(`return await ${J0e(p)}.elementHandle()`,{page:y.frameLocator("iframe")}),F=await d.elementHandle();if(!N||!F)throw new Error("One or both locators did not resolve to an element.");return await N.evaluate((H,Q)=>H.isSameNode(Q),F)?!0:E?!1:!!await N.evaluate((H,Q)=>H.contains(Q)||H.parentElement===Q,F)}catch(N){return Nh.info("Error comparing locators:",N.message),!1}}async getRrwebIdFromLocator(p,d){let y=await d.elementHandle({timeout:5e3});return await p.evaluate(async E=>{var N;if(!E)throw new Error("Element not found");return(N=window.checksum.timeMachine.sessionReplayer.getMeta(E))==null?void 0:N.id},y)}};e(xQt,"LocatorInteractor");var GOt=xQt;var SQt=class SQt{constructor(p,d,y,E,N){this.webDriver=p;this.apiService=y;this.userStoryService=E;this.evaluationService=N;this.runningAgents={};this.locatorInteractor=new GOt(p,d,N)}async cancelProcess(p){this.runningAgents[p]&&(this.runningAgents[p].cancel(),delete this.runningAgents[p])}async verifyAndCompareLocatorOnTimemachine(p,d,y){return this.locatorInteractor.verifyAndCompareLocatorOnTimemachine(p,d,y)}async verifyLocatorOrSelector(p,d,y=this.webDriver.tmFrame){return this.locatorInteractor.verifyLocatorOrSelector(p,d,y)}createAgent(p,d,y){let E=new qOt(p,d,y,this.apiService,this.userStoryService,this.evaluationService,this.locatorInteractor);return this.runningAgents[p]=E,E}async generateAILocators(p,d,y){try{let N=await this.createAgent(y,p,d).generateAILocators();await this.updateVTGWithLocators(y,N[0],N.slice(1),"ai")}catch(E){Nh.error(`Failed to generate AI locators (${y})`,E),this.markError(y)}finally{delete this.runningAgents[y]}}async extractCSS(p,d,y,E=[]){try{let F=await this.createAgent(y,p,d).extractCSS(E);await this.updateVTGWithLocators(y,F[0].locator,F.slice(1).map(R=>R.locator),"withCSSKeyFeatures")}catch(N){Nh.error(`Failed to extract CSS (${y})`,N.message),this.markError(y)}finally{delete this.runningAgents[y]}}async filterLocators(p,d,y,E=[]){try{let F=await this.createAgent(y,p,d).filterLocators(E);await this.updateVTGWithLocators(y,F.locator,F.alternateLocators.locators.filter(R=>R!==F.locator),"filtered")}catch(N){Nh.error(`Failed to filter locators (${y})`,N),this.markError(y)}finally{delete this.runningAgents[y]}}async updateVTGWithLocators(p,d,y=[],E,N=!1){try{await this.webDriver.page.evaluate(F=>{window.vtg.onAsyncProcessResponse(F)},{locator:d,alternates:y,origin:E,error:N,processId:p}),d&&Nh.info(`Updated VTG with ${y.length+1} locators on state ${E} (${p})`)}catch(F){Nh.error("Failed to update VTG with locators",F)}}async markError(p){await this.updateVTGWithLocators(p,void 0,void 0,void 0,!0),Nh.info(`Updated VTG with Error (${p})`)}};e(SQt,"VtgLocatorsService");var KOt=SQt;function mkt(l,p){return e(function(){return l.apply(p,arguments)},"wrap")}e(mkt,"bind");var{toString:pxn}=Object.prototype,{getPrototypeOf:CQt}=Object,XOt=(l=>p=>{let d=pxn.call(p);return l[d]||(l[d]=d.slice(8,-1).toLowerCase())})(Object.create(null)),Dxe=e(l=>(l=l.toLowerCase(),p=>XOt(p)===l),"kindOfTest"),QOt=e(l=>p=>typeof p===l,"typeOfTest"),{isArray:fnt}=Array,hkt=QOt("undefined");function fxn(l){return l!==null&&!hkt(l)&&l.constructor!==null&&!hkt(l.constructor)&&rde(l.constructor.isBuffer)&&l.constructor.isBuffer(l)}e(fxn,"isBuffer");var T4r=Dxe("ArrayBuffer");function _xn(l){let p;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?p=ArrayBuffer.isView(l):p=l&&l.buffer&&T4r(l.buffer),p}e(_xn,"isArrayBufferView");var dxn=QOt("string"),rde=QOt("function"),D4r=QOt("number"),ZOt=e(l=>l!==null&&typeof l=="object","isObject"),mxn=e(l=>l===!0||l===!1,"isBoolean"),YOt=e(l=>{if(XOt(l)!=="object")return!1;let p=CQt(l);return(p===null||p===Object.prototype||Object.getPrototypeOf(p)===null)&&!(Symbol.toStringTag in l)&&!(Symbol.iterator in l)},"isPlainObject"),hxn=Dxe("Date"),gxn=Dxe("File"),yxn=Dxe("Blob"),vxn=Dxe("FileList"),bxn=e(l=>ZOt(l)&&rde(l.pipe),"isStream"),xxn=e(l=>{let p;return l&&(typeof FormData=="function"&&l instanceof FormData||rde(l.append)&&((p=XOt(l))==="formdata"||p==="object"&&rde(l.toString)&&l.toString()==="[object FormData]"))},"isFormData"),Sxn=Dxe("URLSearchParams"),[Txn,Dxn,Cxn,Exn]=["ReadableStream","Request","Response","Headers"].map(Dxe),kxn=e(l=>l.trim?l.trim():l.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),"trim");function gkt(l,p,{allOwnKeys:d=!1}={}){if(l===null||typeof l>"u")return;let y,E;if(typeof l!="object"&&(l=[l]),fnt(l))for(y=0,E=l.length;y<E;y++)p.call(null,l[y],y,l);else{let N=d?Object.getOwnPropertyNames(l):Object.keys(l),F=N.length,R;for(y=0;y<F;y++)R=N[y],p.call(null,l[R],R,l)}}e(gkt,"forEach");function C4r(l,p){p=p.toLowerCase();let d=Object.keys(l),y=d.length,E;for(;y-- >0;)if(E=d[y],p===E.toLowerCase())return E;return null}e(C4r,"findKey");var FZe=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,E4r=e(l=>!hkt(l)&&l!==FZe,"isContextDefined");function DQt(){let{caseless:l}=E4r(this)&&this||{},p={},d=e((y,E)=>{let N=l&&C4r(p,E)||E;YOt(p[N])&&YOt(y)?p[N]=DQt(p[N],y):YOt(y)?p[N]=DQt({},y):fnt(y)?p[N]=y.slice():p[N]=y},"assignValue");for(let y=0,E=arguments.length;y<E;y++)arguments[y]&&gkt(arguments[y],d);return p}e(DQt,"merge");var wxn=e((l,p,d,{allOwnKeys:y}={})=>(gkt(p,(E,N)=>{d&&rde(E)?l[N]=mkt(E,d):l[N]=E},{allOwnKeys:y}),l),"extend"),Axn=e(l=>(l.charCodeAt(0)===65279&&(l=l.slice(1)),l),"stripBOM"),Pxn=e((l,p,d,y)=>{l.prototype=Object.create(p.prototype,y),l.prototype.constructor=l,Object.defineProperty(l,"super",{value:p.prototype}),d&&Object.assign(l.prototype,d)},"inherits"),Nxn=e((l,p,d,y)=>{let E,N,F,R={};if(p=p||{},l==null)return p;do{for(E=Object.getOwnPropertyNames(l),N=E.length;N-- >0;)F=E[N],(!y||y(F,l,p))&&!R[F]&&(p[F]=l[F],R[F]=!0);l=d!==!1&&CQt(l)}while(l&&(!d||d(l,p))&&l!==Object.prototype);return p},"toFlatObject"),Fxn=e((l,p,d)=>{l=String(l),(d===void 0||d>l.length)&&(d=l.length),d-=p.length;let y=l.indexOf(p,d);return y!==-1&&y===d},"endsWith"),Ixn=e(l=>{if(!l)return null;if(fnt(l))return l;let p=l.length;if(!D4r(p))return null;let d=new Array(p);for(;p-- >0;)d[p]=l[p];return d},"toArray"),Oxn=(l=>p=>l&&p instanceof l)(typeof Uint8Array<"u"&&CQt(Uint8Array)),Lxn=e((l,p)=>{let y=(l&&l[Symbol.iterator]).call(l),E;for(;(E=y.next())&&!E.done;){let N=E.value;p.call(l,N[0],N[1])}},"forEachEntry"),Mxn=e((l,p)=>{let d,y=[];for(;(d=l.exec(p))!==null;)y.push(d);return y},"matchAll"),Rxn=Dxe("HTMLFormElement"),Bxn=e(l=>l.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,e(function(d,y,E){return y.toUpperCase()+E},"replacer")),"toCamelCase"),x4r=(({hasOwnProperty:l})=>(p,d)=>l.call(p,d))(Object.prototype),jxn=Dxe("RegExp"),k4r=e((l,p)=>{let d=Object.getOwnPropertyDescriptors(l),y={};gkt(d,(E,N)=>{let F;(F=p(E,N,l))!==!1&&(y[N]=F||E)}),Object.defineProperties(l,y)},"reduceDescriptors"),Jxn=e(l=>{k4r(l,(p,d)=>{if(rde(l)&&["arguments","caller","callee"].indexOf(d)!==-1)return!1;let y=l[d];if(rde(y)){if(p.enumerable=!1,"writable"in p){p.writable=!1;return}p.set||(p.set=()=>{throw Error("Can not rewrite read-only method '"+d+"'")})}})},"freezeMethods"),qxn=e((l,p)=>{let d={},y=e(E=>{E.forEach(N=>{d[N]=!0})},"define");return fnt(l)?y(l):y(String(l).split(p)),d},"toObjectSet"),Uxn=e(()=>{},"noop"),Vxn=e((l,p)=>l!=null&&Number.isFinite(l=+l)?l:p,"toFiniteNumber"),TQt="abcdefghijklmnopqrstuvwxyz",S4r="0123456789",w4r={DIGIT:S4r,ALPHA:TQt,ALPHA_DIGIT:TQt+TQt.toUpperCase()+S4r},zxn=e((l=16,p=w4r.ALPHA_DIGIT)=>{let d="",{length:y}=p;for(;l--;)d+=p[Math.random()*y|0];return d},"generateString");function Wxn(l){return!!(l&&rde(l.append)&&l[Symbol.toStringTag]==="FormData"&&l[Symbol.iterator])}e(Wxn,"isSpecCompliantForm");var $xn=e(l=>{let p=new Array(10),d=e((y,E)=>{if(ZOt(y)){if(p.indexOf(y)>=0)return;if(!("toJSON"in y)){p[E]=y;let N=fnt(y)?[]:{};return gkt(y,(F,R)=>{let V=d(F,E+1);!hkt(V)&&(N[R]=V)}),p[E]=void 0,N}}return y},"visit");return d(l,0)},"toJSONObject"),Hxn=Dxe("AsyncFunction"),Gxn=e(l=>l&&(ZOt(l)||rde(l))&&rde(l.then)&&rde(l.catch),"isThenable"),A4r=((l,p)=>l?setImmediate:p?((d,y)=>(FZe.addEventListener("message",({source:E,data:N})=>{E===FZe&&N===d&&y.length&&y.shift()()},!1),E=>{y.push(E),FZe.postMessage(d,"*")}))(`axios@${Math.random()}`,[]):d=>setTimeout(d))(typeof setImmediate=="function",rde(FZe.postMessage)),Kxn=typeof queueMicrotask<"u"?queueMicrotask.bind(FZe):typeof process<"u"&&process.nextTick||A4r,f_={isArray:fnt,isArrayBuffer:T4r,isBuffer:fxn,isFormData:xxn,isArrayBufferView:_xn,isString:dxn,isNumber:D4r,isBoolean:mxn,isObject:ZOt,isPlainObject:YOt,isReadableStream:Txn,isRequest:Dxn,isResponse:Cxn,isHeaders:Exn,isUndefined:hkt,isDate:hxn,isFile:gxn,isBlob:yxn,isRegExp:jxn,isFunction:rde,isStream:bxn,isURLSearchParams:Sxn,isTypedArray:Oxn,isFileList:vxn,forEach:gkt,merge:DQt,extend:wxn,trim:kxn,stripBOM:Axn,inherits:Pxn,toFlatObject:Nxn,kindOf:XOt,kindOfTest:Dxe,endsWith:Fxn,toArray:Ixn,forEachEntry:Lxn,matchAll:Mxn,isHTMLForm:Rxn,hasOwnProperty:x4r,hasOwnProp:x4r,reduceDescriptors:k4r,freezeMethods:Jxn,toObjectSet:qxn,toCamelCase:Bxn,noop:Uxn,toFiniteNumber:Vxn,findKey:C4r,global:FZe,isContextDefined:E4r,ALPHABET:w4r,generateString:zxn,isSpecCompliantForm:Wxn,toJSONObject:$xn,isAsyncFn:Hxn,isThenable:Gxn,setImmediate:A4r,asap:Kxn};function _nt(l,p,d,y,E){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=l,this.name="AxiosError",p&&(this.code=p),d&&(this.config=d),y&&(this.request=y),E&&(this.response=E,this.status=E.status?E.status:null)}e(_nt,"AxiosError");f_.inherits(_nt,Error,{toJSON:e(function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:f_.toJSONObject(this.config),code:this.code,status:this.status}},"toJSON")});var P4r=_nt.prototype,N4r={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(l=>{N4r[l]={value:l}});Object.defineProperties(_nt,N4r);Object.defineProperty(P4r,"isAxiosError",{value:!0});_nt.from=(l,p,d,y,E,N)=>{let F=Object.create(P4r);return f_.toFlatObject(l,F,e(function(V){return V!==Error.prototype},"filter"),R=>R!=="isAxiosError"),_nt.call(F,l.message,p,d,y,E),F.cause=l,F.name=l.name,N&&Object.assign(F,N),F};var d2=_nt;var pSr=x7(lSr(),1),nLt=pSr.default;function MQt(l){return f_.isPlainObject(l)||f_.isArray(l)}e(MQt,"isVisitable");function _Sr(l){return f_.endsWith(l,"[]")?l.slice(0,-2):l}e(_Sr,"removeBrackets");function fSr(l,p,d){return l?l.concat(p).map(e(function(E,N){return E=_Sr(E),!d&&N?"["+E+"]":E},"each")).join(d?".":""):p}e(fSr,"renderKey");function I6n(l){return f_.isArray(l)&&!l.some(MQt)}e(I6n,"isFlatArray");var O6n=f_.toFlatObject(f_,{},null,e(function(p){return/^is[A-Z]/.test(p)},"filter"));function L6n(l,p,d){if(!f_.isObject(l))throw new TypeError("target must be an object");p=p||new(nLt||FormData),d=f_.toFlatObject(d,{metaTokens:!0,dots:!1,indexes:!1},!1,e(function(le,Ue){return!f_.isUndefined(Ue[le])},"defined"));let y=d.metaTokens,E=d.visitor||Q,N=d.dots,F=d.indexes,V=(d.Blob||typeof Blob<"u"&&Blob)&&f_.isSpecCompliantForm(p);if(!f_.isFunction(E))throw new TypeError("visitor must be a function");function H(ne){if(ne===null)return"";if(f_.isDate(ne))return ne.toISOString();if(!V&&f_.isBlob(ne))throw new d2("Blob is not supported. Use a Buffer instead.");return f_.isArrayBuffer(ne)||f_.isTypedArray(ne)?V&&typeof Blob=="function"?new Blob([ne]):Buffer.from(ne):ne}e(H,"convertValue");function Q(ne,le,Ue){let Xe=ne;if(ne&&!Ue&&typeof ne=="object"){if(f_.endsWith(le,"{}"))le=y?le:le.slice(0,-2),ne=JSON.stringify(ne);else if(f_.isArray(ne)&&I6n(ne)||(f_.isFileList(ne)||f_.endsWith(le,"[]"))&&(Xe=f_.toArray(ne)))return le=_Sr(le),Xe.forEach(e(function(Tt,Nt){!(f_.isUndefined(Tt)||Tt===null)&&p.append(F===!0?fSr([le],Nt,N):F===null?le:le+"[]",H(Tt))},"each")),!1}return MQt(ne)?!0:(p.append(fSr(Ue,le,N),H(ne)),!1)}e(Q,"defaultVisitor");let se=[],G=Object.assign(O6n,{defaultVisitor:Q,convertValue:H,isVisitable:MQt});function _e(ne,le){if(!f_.isUndefined(ne)){if(se.indexOf(ne)!==-1)throw Error("Circular reference detected in "+le.join("."));se.push(ne),f_.forEach(ne,e(function(Xe,rt){(!(f_.isUndefined(Xe)||Xe===null)&&E.call(p,Xe,f_.isString(rt)?rt.trim():rt,le,G))===!0&&_e(Xe,le?le.concat(rt):[rt])},"each")),se.pop()}}if(e(_e,"build"),!f_.isObject(l))throw new TypeError("data must be an object");return _e(l),p}e(L6n,"toFormData");var eFe=L6n;function dSr(l){let p={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(l).replace(/[!'()~]|%20|%00/g,e(function(y){return p[y]},"replacer"))}e(dSr,"encode");function mSr(l,p){this._pairs=[],l&&eFe(l,this,p)}e(mSr,"AxiosURLSearchParams");var hSr=mSr.prototype;hSr.append=e(function(p,d){this._pairs.push([p,d])},"append");hSr.toString=e(function(p){let d=p?function(y){return p.call(this,y,dSr)}:dSr;return this._pairs.map(e(function(E){return d(E[0])+"="+d(E[1])},"each"),"").join("&")},"toString");var gSr=mSr;function M6n(l){return encodeURIComponent(l).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e(M6n,"encode");function IZe(l,p,d){if(!p)return l;let y=d&&d.encode||M6n;f_.isFunction(d)&&(d={serialize:d});let E=d&&d.serialize,N;if(E?N=E(p,d):N=f_.isURLSearchParams(p)?p.toString():new gSr(p,d).toString(y),N){let F=l.indexOf("#");F!==-1&&(l=l.slice(0,F)),l+=(l.indexOf("?")===-1?"?":"&")+N}return l}e(IZe,"buildURL");var jQt=class jQt{constructor(){this.handlers=[]}use(p,d,y){return this.handlers.push({fulfilled:p,rejected:d,synchronous:y?y.synchronous:!1,runWhen:y?y.runWhen:null}),this.handlers.length-1}eject(p){this.handlers[p]&&(this.handlers[p]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(p){f_.forEach(this.handlers,e(function(y){y!==null&&p(y)},"forEachHandler"))}};e(jQt,"InterceptorManager");var RQt=jQt,BQt=RQt;var dnt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var ySr=x7(require("url"),1),vSr=ySr.default.URLSearchParams;var bSr={isNode:!0,classes:{URLSearchParams:vSr,FormData:nLt,Blob:typeof Blob<"u"&&Blob||null},protocols:["http","https","file","data"]};var UQt={};Vfr(UQt,{hasBrowserEnv:()=>qQt,hasStandardBrowserEnv:()=>R6n,hasStandardBrowserWebWorkerEnv:()=>B6n,navigator:()=>JQt,origin:()=>j6n});var qQt=typeof window<"u"&&typeof document<"u",JQt=typeof navigator=="object"&&navigator||void 0,R6n=qQt&&(!JQt||["ReactNative","NativeScript","NS"].indexOf(JQt.product)<0),B6n=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",j6n=qQt&&window.location.href||"http://localhost";var R9={...UQt,...bSr};function VQt(l,p){return eFe(l,new R9.classes.URLSearchParams,Object.assign({visitor:e(function(d,y,E,N){return R9.isNode&&f_.isBuffer(d)?(this.append(y,d.toString("base64")),!1):N.defaultVisitor.apply(this,arguments)},"visitor")},p))}e(VQt,"toURLEncodedForm");function J6n(l){return f_.matchAll(/\w+|\[(\w*)]/g,l).map(p=>p[0]==="[]"?"":p[1]||p[0])}e(J6n,"parsePropPath");function q6n(l){let p={},d=Object.keys(l),y,E=d.length,N;for(y=0;y<E;y++)N=d[y],p[N]=l[N];return p}e(q6n,"arrayToObject");function U6n(l){function p(d,y,E,N){let F=d[N++];if(F==="__proto__")return!0;let R=Number.isFinite(+F),V=N>=d.length;return F=!F&&f_.isArray(E)?E.length:F,V?(f_.hasOwnProp(E,F)?E[F]=[E[F],y]:E[F]=y,!R):((!E[F]||!f_.isObject(E[F]))&&(E[F]=[]),p(d,y,E[F],N)&&f_.isArray(E[F])&&(E[F]=q6n(E[F])),!R)}if(e(p,"buildPath"),f_.isFormData(l)&&f_.isFunction(l.entries)){let d={};return f_.forEachEntry(l,(y,E)=>{p(J6n(y),E,d,0)}),d}return null}e(U6n,"formDataToJSON");var iLt=U6n;function V6n(l,p,d){if(f_.isString(l))try{return(p||JSON.parse)(l),f_.trim(l)}catch(y){if(y.name!=="SyntaxError")throw y}return(d||JSON.stringify)(l)}e(V6n,"stringifySafely");var zQt={transitional:dnt,adapter:["xhr","http","fetch"],transformRequest:[e(function(p,d){let y=d.getContentType()||"",E=y.indexOf("application/json")>-1,N=f_.isObject(p);if(N&&f_.isHTMLForm(p)&&(p=new FormData(p)),f_.isFormData(p))return E?JSON.stringify(iLt(p)):p;if(f_.isArrayBuffer(p)||f_.isBuffer(p)||f_.isStream(p)||f_.isFile(p)||f_.isBlob(p)||f_.isReadableStream(p))return p;if(f_.isArrayBufferView(p))return p.buffer;if(f_.isURLSearchParams(p))return d.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),p.toString();let R;if(N){if(y.indexOf("application/x-www-form-urlencoded")>-1)return VQt(p,this.formSerializer).toString();if((R=f_.isFileList(p))||y.indexOf("multipart/form-data")>-1){let V=this.env&&this.env.FormData;return eFe(R?{"files[]":p}:p,V&&new V,this.formSerializer)}}return N||E?(d.setContentType("application/json",!1),V6n(p)):p},"transformRequest")],transformResponse:[e(function(p){let d=this.transitional||zQt.transitional,y=d&&d.forcedJSONParsing,E=this.responseType==="json";if(f_.isResponse(p)||f_.isReadableStream(p))return p;if(p&&f_.isString(p)&&(y&&!this.responseType||E)){let F=!(d&&d.silentJSONParsing)&&E;try{return JSON.parse(p)}catch(R){if(F)throw R.name==="SyntaxError"?d2.from(R,d2.ERR_BAD_RESPONSE,this,null,this.response):R}}return p},"transformResponse")],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:R9.classes.FormData,Blob:R9.classes.Blob},validateStatus:e(function(p){return p>=200&&p<300},"validateStatus"),headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};f_.forEach(["delete","get","head","post","put","patch"],l=>{zQt.headers[l]={}});var mnt=zQt;var z6n=f_.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),xSr=e(l=>{let p={},d,y,E;return l&&l.split(`
1907
1906
  `).forEach(e(function(F){E=F.indexOf(":"),d=F.substring(0,E).trim().toLowerCase(),y=F.substring(E+1).trim(),!(!d||p[d]&&z6n[d])&&(d==="set-cookie"?p[d]?p[d].push(y):p[d]=[y]:p[d]=p[d]?p[d]+", "+y:y)},"parser")),p},"default");var SSr=Symbol("internals");function ykt(l){return l&&String(l).trim().toLowerCase()}e(ykt,"normalizeHeader");function aLt(l){return l===!1||l==null?l:f_.isArray(l)?l.map(aLt):String(l)}e(aLt,"normalizeValue");function W6n(l){let p=Object.create(null),d=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,y;for(;y=d.exec(l);)p[y[1]]=y[2];return p}e(W6n,"parseTokens");var $6n=e(l=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(l.trim()),"isValidHeaderName");function WQt(l,p,d,y,E){if(f_.isFunction(y))return y.call(this,p,d);if(E&&(p=d),!!f_.isString(p)){if(f_.isString(y))return p.indexOf(y)!==-1;if(f_.isRegExp(y))return y.test(p)}}e(WQt,"matchHeaderValue");function H6n(l){return l.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(p,d,y)=>d.toUpperCase()+y)}e(H6n,"formatHeader");function G6n(l,p){let d=f_.toCamelCase(" "+p);["get","set","has"].forEach(y=>{Object.defineProperty(l,y+d,{value:e(function(E,N,F){return this[y].call(this,p,E,N,F)},"value"),configurable:!0})})}e(G6n,"buildAccessors");var $Qt=class $Qt{constructor(p){p&&this.set(p)}set(p,d,y){let E=this;function N(R,V,H){let Q=ykt(V);if(!Q)throw new Error("header name must be a non-empty string");let se=f_.findKey(E,Q);(!se||E[se]===void 0||H===!0||H===void 0&&E[se]!==!1)&&(E[se||V]=aLt(R))}e(N,"setHeader");let F=e((R,V)=>f_.forEach(R,(H,Q)=>N(H,Q,V)),"setHeaders");if(f_.isPlainObject(p)||p instanceof this.constructor)F(p,d);else if(f_.isString(p)&&(p=p.trim())&&!$6n(p))F(xSr(p),d);else if(f_.isHeaders(p))for(let[R,V]of p.entries())N(V,R,y);else p!=null&&N(d,p,y);return this}get(p,d){if(p=ykt(p),p){let y=f_.findKey(this,p);if(y){let E=this[y];if(!d)return E;if(d===!0)return W6n(E);if(f_.isFunction(d))return d.call(this,E,y);if(f_.isRegExp(d))return d.exec(E);throw new TypeError("parser must be boolean|regexp|function")}}}has(p,d){if(p=ykt(p),p){let y=f_.findKey(this,p);return!!(y&&this[y]!==void 0&&(!d||WQt(this,this[y],y,d)))}return!1}delete(p,d){let y=this,E=!1;function N(F){if(F=ykt(F),F){let R=f_.findKey(y,F);R&&(!d||WQt(y,y[R],R,d))&&(delete y[R],E=!0)}}return e(N,"deleteHeader"),f_.isArray(p)?p.forEach(N):N(p),E}clear(p){let d=Object.keys(this),y=d.length,E=!1;for(;y--;){let N=d[y];(!p||WQt(this,this[N],N,p,!0))&&(delete this[N],E=!0)}return E}normalize(p){let d=this,y={};return f_.forEach(this,(E,N)=>{let F=f_.findKey(y,N);if(F){d[F]=aLt(E),delete d[N];return}let R=p?H6n(N):String(N).trim();R!==N&&delete d[N],d[R]=aLt(E),y[R]=!0}),this}concat(...p){return this.constructor.concat(this,...p)}toJSON(p){let d=Object.create(null);return f_.forEach(this,(y,E)=>{y!=null&&y!==!1&&(d[E]=p&&f_.isArray(y)?y.join(", "):y)}),d}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([p,d])=>p+": "+d).join(`
1908
1907
  `)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(p){return p instanceof this?p:new this(p)}static concat(p,...d){let y=new this(p);return d.forEach(E=>y.set(E)),y}static accessor(p){let y=(this[SSr]=this[SSr]={accessors:{}}).accessors,E=this.prototype;function N(F){let R=ykt(F);y[R]||(G6n(E,F),y[R]=!0)}return e(N,"defineAccessor"),f_.isArray(p)?p.forEach(N):N(p),this}};e($Qt,"AxiosHeaders");var hnt=$Qt;hnt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);f_.reduceDescriptors(hnt.prototype,({value:l},p)=>{let d=p[0].toUpperCase()+p.slice(1);return{get:e(()=>l,"get"),set(y){this[d]=y}}});f_.freezeMethods(hnt);var eB=hnt;function vkt(l,p){let d=this||mnt,y=p||d,E=eB.from(y.headers),N=y.data;return f_.forEach(l,e(function(R){N=R.call(d,N,E.normalize(),p?p.status:void 0)},"transform")),E.normalize(),N}e(vkt,"transformData");function bkt(l){return!!(l&&l.__CANCEL__)}e(bkt,"isCancel");function TSr(l,p,d){d2.call(this,l??"canceled",d2.ERR_CANCELED,p,d),this.name="CanceledError"}e(TSr,"CanceledError");f_.inherits(TSr,d2,{__CANCEL__:!0});var nde=TSr;function $7e(l,p,d){let y=d.config.validateStatus;!d.status||!y||y(d.status)?l(d):p(new d2("Request failed with status code "+d.status,[d2.ERR_BAD_REQUEST,d2.ERR_BAD_RESPONSE][Math.floor(d.status/100)-4],d.config,d.request,d))}e($7e,"settle");function HQt(l){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(l)}e(HQt,"isAbsoluteURL");function GQt(l,p){return p?l.replace(/\/?\/$/,"")+"/"+p.replace(/^\/+/,""):l}e(GQt,"combineURLs");function OZe(l,p){return l&&!HQt(p)?GQt(l,p):p}e(OZe,"buildFullPath");var GSr=x7(CSr(),1),KSr=x7(require("http"),1),YSr=x7(require("https"),1),XSr=x7(require("util"),1),QSr=x7(FSr(),1),lPe=x7(require("zlib"),1);var RZe="1.7.9";function Ckt(l){let p=/^([-+\w]{1,25})(:?\/\/|:)/.exec(l);return p&&p[1]||""}e(Ckt,"parseProtocol");var p7n=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;function oZt(l,p,d){let y=d&&d.Blob||R9.classes.Blob,E=Ckt(l);if(p===void 0&&y&&(p=!0),E==="data"){l=E.length?l.slice(E.length+1):l;let N=p7n.exec(l);if(!N)throw new d2("Invalid URL",d2.ERR_INVALID_URL);let F=N[1],R=N[2],V=N[3],H=Buffer.from(decodeURIComponent(V),R?"base64":"utf8");if(p){if(!y)throw new d2("Blob is not supported",d2.ERR_NOT_SUPPORT);return new y([H],{type:F})}return H}throw new d2("Unsupported protocol "+E,d2.ERR_NOT_SUPPORT)}e(oZt,"fromDataURI");var BZe=x7(require("stream"),1);var ISr=x7(require("stream"),1);var cZt=Symbol("internals"),pZt=class pZt extends ISr.default.Transform{constructor(p){p=f_.toFlatObject(p,{maxRate:0,chunkSize:64*1024,minChunkSize:100,timeWindow:500,ticksRate:2,samplesCount:15},null,(y,E)=>!f_.isUndefined(E[y])),super({readableHighWaterMark:p.chunkSize});let d=this[cZt]={timeWindow:p.timeWindow,chunkSize:p.chunkSize,maxRate:p.maxRate,minChunkSize:p.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null};this.on("newListener",y=>{y==="progress"&&(d.isCaptured||(d.isCaptured=!0))})}_read(p){let d=this[cZt];return d.onReadCallback&&d.onReadCallback(),super._read(p)}_transform(p,d,y){let E=this[cZt],N=E.maxRate,F=this.readableHighWaterMark,R=E.timeWindow,V=1e3/R,H=N/V,Q=E.minChunkSize!==!1?Math.max(E.minChunkSize,H*.01):0,se=e((_e,ne)=>{let le=Buffer.byteLength(_e);E.bytesSeen+=le,E.bytes+=le,E.isCaptured&&this.emit("progress",E.bytesSeen),this.push(_e)?process.nextTick(ne):E.onReadCallback=()=>{E.onReadCallback=null,process.nextTick(ne)}},"pushChunk"),G=e((_e,ne)=>{let le=Buffer.byteLength(_e),Ue=null,Xe=F,rt,Tt=0;if(N){let Nt=Date.now();(!E.ts||(Tt=Nt-E.ts)>=R)&&(E.ts=Nt,rt=H-E.bytes,E.bytes=rt<0?-rt:0,Tt=0),rt=H-E.bytes}if(N){if(rt<=0)return setTimeout(()=>{ne(null,_e)},R-Tt);rt<Xe&&(Xe=rt)}Xe&&le>Xe&&le-Xe>Q&&(Ue=_e.subarray(Xe),_e=_e.subarray(0,Xe)),se(_e,Ue?()=>{process.nextTick(ne,null,Ue)}:ne)},"transformChunk");G(p,e(function _e(ne,le){if(ne)return y(ne);le?G(le,_e):y(null)},"transformNextChunk"))}};e(pZt,"AxiosTransformStream");var uZt=pZt,lZt=uZt;var ZSr=require("events");var LSr=x7(require("util"),1),MSr=require("stream");var{asyncIterator:OSr}=Symbol,f7n=e(async function*(l){l.stream?yield*l.stream():l.arrayBuffer?yield await l.arrayBuffer():l[OSr]?yield*l[OSr]():yield l},"readBlob"),sLt=f7n;var _7n=f_.ALPHABET.ALPHA_DIGIT+"-_",Ekt=typeof TextEncoder=="function"?new TextEncoder:new LSr.default.TextEncoder,tFe=`\r
@@ -1915,7 +1914,7 @@ if (typeof globalThis.requireTs === "undefined") {
1915
1914
  `).find(d=>d.includes(".checksum.spec.ts"));if(p)return{lineNumber:parseInt(p.split(":")[1]),columnNumber:parseInt(p.split(":")[2])}},"findCodeLocationFromStackTrace"),Orr=class Orr{constructor(){this.store={};this.activeVariablesSet=new Set;return new Proxy(this,this)}clearAll(){for(let p in this.store)Object.prototype.hasOwnProperty.call(this.store,p)&&delete this.store[p];this.activeVariablesSet.clear()}getActiveVariables(){return Array.from(this.activeVariablesSet).map(p=>this.store[p])}setVariable(p,d){this.store[p]={name:p,value:d,type:d instanceof Function?"RandomValueGenerator":"FillValue"}}set(p,d,y){if(typeof d!="string")return!1;let E=UAn();return p.store[d]={name:d,value:y,type:y instanceof Function?"RandomValueGenerator":"FillValue",...E,line:""},!0}get(p,d){var y;if(d in p)return p[d];if(!(d in p.store))throw new Error(`Variable ${d} is not defined`);return p.activeVariablesSet.add(d),(y=p.store[d])==null?void 0:y.value}};e(Orr,"VariableStore");var iRt=Orr;var Lrr=class Lrr{constructor(p=new iRt){this._variableStore=p}get variableStore(){return this._variableStore}};e(Lrr,"VTGVariableStoreService");var aRt=Lrr;var _VtgEvaluatorService=class _VtgEvaluatorService{constructor(l,p){this.variableStoreService=l;this.vtgTestFileMode=p;this.listenerBody=e(async({vtg})=>{await vtg.eval(async(code,callback)=>{try{callback(null,await eval(`(async () => {
1916
1915
  ${code}
1917
1916
  })()`))}catch(l){callback(l,null)}})},"listenerBody")}setPage(l){this.page=l}async execute(l,p={}){return this.vtgTestFileMode?this.executeInPlaywrightTest(l,p):this.executeOnLive(l,p)}get vtgContext(){return{page:this.page,vs:this.variableStoreService.variableStore,expect:PZe.expect,checksumAI:e((l,p)=>p(),"checksumAI")}}async executeOnLive(l,p={}){let d={...this.vtgContext,...p},y=this.wrapCodeInContext(l,d);return await(0,eval)(y)(d)}wrapCodeInContext(l,p){return`(async ({${Object.keys(p).join(", ")}}) => { ${l} })`}async executeInPlaywrightTest(l,p={}){let d=p?this.wrapCodeInContext(l,p)+"(context)":l;return new Promise((y,E)=>{this.listener&&this.listener(d,p,(N,F)=>{N?E(N):y(F)})})}async listenForExecution(l){return new Promise(p=>{this.resolveEvaluator=p,this.listener=l})}stopListening(){this.resolveEvaluator()}getFunctionContentToInject(){return this.listenerBody.toString()}};e(_VtgEvaluatorService,"VtgEvaluatorService");var sRt=_VtgEvaluatorService;var Rrr=class Rrr extends sce{constructor(d,y=!1){y||(y=!!d.find(E=>E==="--debug"));super(d,y);this.checksumScriptFilePath="node_modules/@checksum-ai/runtime/checksumlib.js";this.vtgMode="start";this.initTimeMachine=e(async()=>{await this.webDriver.tmFrame.evaluate(()=>window.checksum.visualTestGenerator.init(!1))},"initTimeMachine");this.initVtgMode(d),Nh.setLogLevel(y?"all":vC.isDevMode?vC.logLevel:"errors")}async run(d){await this.init(d),this.buildServices(),this.buildServer();let y=await this.getInitialServicesData();y&&this.setServicesData(y),await this.start()}async init(d){await this.patchPlaywright(),this.loadChecksumData(),this.loadPlaywrightConfigForVTG(),this.webDriver=this.buildWebDriver(d),this.webDriver.registerEventListener(this),this.taskTimeMachine=new wNe(this.webDriver.frameMsgBroker,this.webDriver.injectedScriptManager,{headless:!vC.vtg.taskTimeMachine.showTaskTimeMachine,timestampBatchingEnabled:!1,sortByTimestamp:!0,taskTimeout:vC.vtg.taskTimeMachine.taskTimeout}),this.pageInteractor=new pEt(this.webDriver.evaluateWithChecksum.bind(this.webDriver),()=>this.webDriver.appMainFrame,this.webDriver.getTimeMachine.bind(this.webDriver),{log:Nh.info,logError:Nh.error},{...this.getTimeoutParams(),waitActionDelay:1e3,testAssetsDir:__dirname,listenToDialog:!0,listenToFileChooser:!1},new _Et(this.config)),this.testAssetsManager=new KMt(this.projectRootDirectory,this.checksumRoot,this.vtgTestFileRunConfig),(vC.vtg.writeLogFile||this.debugMode)&&this.addLogFile()}buildServices(){this.actionsManager=new CLt,this.apiService=new wOt(this.config),this.userStoryService=new DLt(this.apiService,this.config),this.variableStoreService=new aRt,this.evaluatorService=new sRt(this.variableStoreService,this.vtgTestFileMode),this.actionsService=new COt(this.config,this.checksumRoot,this.pageInteractor,this.apiService,this.userStoryService,this.actionsManager,this.testAssetsManager,this.webDriver,this.evaluatorService),this.assertionsService=new jOt(this.webDriver,this.actionsManager,this.evaluatorService),this.locatorsService=new KOt(this.webDriver,this.taskTimeMachine,this.apiService,this.userStoryService,this.evaluatorService),this.aiTestGenerationService=new kOt(this.webDriver,this.pageInteractor,this.actionsService,this.actionsManager,this.apiService,this.userStoryService),this.aiAssertionsService=new BOt(this.actionsManager,this.apiService,this.userStoryService,this.taskTimeMachine,this.webDriver,this.evaluatorService),this.aiThoughtsService=new nRt(this.actionsManager,this.apiService,this.userStoryService,this.taskTimeMachine,this.webDriver),this.storageService=new TLt(this.config,this.userStoryService,this.apiService,this.actionsManager,this.testAssetsManager,this.actionsService,this.vtgTestFileRunConfig,this.evaluatorService),this.settingsService=new tRt(this.checksumRoot),this.actionsManager.setStorageService(this.storageService)}buildServer(){this.reactAppServer=new HMt(this.actionsService,this.assertionsService,this.locatorsService,this.aiTestGenerationService,this.aiAssertionsService,this.aiThoughtsService,this.actionsManager,this.storageService,this.settingsService)}loadPlaywrightConfigForVTG(){try{let d=`${this.checksumRoot}/playwright.config.ts`;if((0,wwt.existsSync)(d)){let y=require(d).default;y&&(this.playwrightConfigForVTG=y)}}catch{console.warn("Could not find playwright config file, will run with defaults")}}async getInitialServicesData(){if(this.vtgMode==="cloud")return this.getInitialServicesDataFromCloud();if(this.vtgMode==="edit")return this.vtgTestFileMode?await this.getInitialServicesDataByInternalTestId():this.getInitialServicesDataFromEditLocationPath()}getInitialServicesDataFromEditLocationPath(){let d=this.storageService.getLocalSavedData(this.editLocationPath);return{actions:d.executedActions,story:d.story,testGenerationData:d.testGenerationData}}async getInitialServicesDataFromCloud(){let y=await(await this.apiService.post(`test-generation/${this.cloudTestGenerationId}/info`)).json(),{actionsDownloadSignedURL:E,story:N,testGenerationData:F}=y,R=await fetch(E,{mode:"cors",credentials:"same-origin",headers:{"Content-Type":"application/json"}});if(!R.ok)throw new Error(`HTTP error! Status: ${R.status}`);let V=await R.json();return{actions:this.addIdsToActionsAndAssertions(V),story:N,testGenerationData:F}}addIdsToActionsAndAssertions(d){return d.map((y,E)=>({...y,id:(0,Mrr.randomUUID)(),assertions:(y.assertions??[]).map(N=>({...N,id:(0,Mrr.randomUUID)()}))}))}async getInitialServicesDataByInternalTestId(){var N,F,R;if(((N=this.vtgTestFileRunConfig)==null?void 0:N.mode)!=="edit")return;let d=[];d=this.storageService.readJsonFile((F=this.vtgTestFileRunConfig)==null?void 0:F.actionsJsonFilePath),d=this.addIdsToActionsAndAssertions(d);let y=await this.apiService.post(`test-generation-by-internal-test-id/${(R=this.vtgTestFileRunConfig)==null?void 0:R.internalTestId}/info`);if(!y.ok)throw new Error(`Error fetching test generation data: ${y.statusText}`);let E=await y.json();return{actions:d,story:E.story,testGenerationData:E.testGenerationData}}setServicesData({actions:d,story:y,testGenerationData:E}){this.actionsManager.setActions(d),this.userStoryService.setStoryInfo(y,E),this.testAssetsManager.setCurrentSaveAsLocation(this.editLocationPath),this.storyId=y.id}async start({createAssetsFolder:d=!0}={}){var N,F;(this.vtgMode==="start"||this.vtgTestFileMode)&&await this.userStoryService.fetchStory(this.storyId),d&&this.testAssetsManager.createTestGenerationAssetsFolders(),this.testAssetsManager.createTestGenerationLocalAutoSaveFolder(this.storyId);let{environment:y}=this.userStoryService.getEnvInfo();await this.webDriver.prepare({baseURL:y.baseURL,shutdown:!this.vtgTestFileMode}),await this.webDriver.addHARMockAPIRecordings(this.testAssetsManager.getHarFilePath()),await this.initTimeMachine(),this.pageInteractor.init(),this.assertionsService.setPage(this.webDriver.appMainFrame.page()),this.actionsService.setPage(this.webDriver.appMainFrame.page()),this.evaluatorService.setPage(this.webDriver.appMainFrame.page()),await this.taskTimeMachine.prepare(this.webDriver.appMainFrame,void 0,R=>this.webDriver.registerTimeMachineFrame(R)),await this.reactAppServer.start(),await this.reactAppServer.evaluateServerPort(this.webDriver.page);let E=(()=>{let R=this.config.environments.find(V=>V.name===y.name);return!R||!R.baseURL?"/":R.baseURL})();this.webDriver.appMainFrame?await this.webDriver.appMainFrame.goto(E,{waitUntil:"domcontentloaded",timeout:0}):Nh.error("Iframe not found"),await this.webDriver.getTimeMachine().toggleTimeMachineHandleEvents(!1),this.vtgMode==="start"&&(await this.actionsService.addInitialLoginAction(),await this.actionsService.addStartURLNavigationAction(),this.vtgTestFileMode&&await this.storageService.saveTestFile()),console.log("VTG is ready",(N=this.userStoryService.getStory())==null?void 0:N.goal),await this.webDriver.page.evaluate(({localSaveFolderPath:R,actions:V,appViewport:H,userStoryGoal:Q,isLoadedFromFile:se})=>{window.vtg.initClient(R,V,H,this.checksumRuntimeVersion,Q,se)},{localSaveFolderPath:this.editLocationPath,actions:this.actionsManager.actions,appViewport:this.webDriver.getApplicationViewport(),userStoryGoal:(F=this.userStoryService.getStory())==null?void 0:F.goal,isLoadedFromFile:this.vtgTestFileMode}),this.vtgTestFileMode||await new Promise(()=>{})}getTimeoutParams(){var E,N,F,R;let d=((N=(E=this.playwrightConfigForVTG)==null?void 0:E.use)==null?void 0:N.navigationTimeout)||3e4,y=((R=(F=this.playwrightConfigForVTG)==null?void 0:F.use)==null?void 0:R.actionTimeout)||5e3;return{navigationTimeout:d,actionTimeout:y}}getPlaywrightProxySettings(){var F,R;let d=(R=(F=this.playwrightConfigForVTG)==null?void 0:F.use)==null?void 0:R.proxy,{server:y,username:E,password:N}=d||{};if(E&&N&&y)return{username:E,password:N,server:y}}getPlaywrightViewportSettings(){var E,N;let{width:d=1280,height:y=720}=((N=(E=this.playwrightConfigForVTG)==null?void 0:E.use)==null?void 0:N.viewport)||{};return{width:d,height:y}}buildWebDriver(d){var N;let y=this.getPlaywrightProxySettings(),E=this.getPlaywrightViewportSettings();return new ZMt({scriptSource:vC.checksumScript.source,scriptURL:vC.checksumScript.url,scriptFile:vC.checksumScript.path,isScriptFileAbsolute:!0,fullScreenResolution:!1,hostWindowViewport:!0,baseURL:(N=this.config.environments.find(F=>F.default))==null?void 0:N.baseURL,useProxy:!!y,webProxy:y,disableWebSecurity:!0,allowFileAccess:!0,remoteDebugging:vC.vtg.remoteDebugging},{devtools:!1,headless:!1},{frontendAppSpecificRules:{},frontendTestGenerationConfig:{logPrefix:"$checksum"},viewport:E},d)}async onWebDriverContextClose(){var d,y,E;this.evaluatorService.stopListening(),(d=this.vtgTestFileRunConfig)!=null&&d.evalFilePath&&(0,wwt.rmSync)((y=this.vtgTestFileRunConfig)==null?void 0:y.evalFilePath,{force:!0}),this.vtgTestFileRunConfig.mode==="edit"&&(0,wwt.rmSync)((E=this.vtgTestFileRunConfig)==null?void 0:E.actionsJsonFilePath,{force:!0})}initVtgMode(d){var N;let y=d.indexOf("--edit"),E=d.indexOf("--cloud");if(d.indexOf("--test-file")!==-1){this.vtgTestFileMode=!0,this.vtgTestFileRunConfig=JSON.parse(process.env.CHECKSUM_VTG_TEST_FILE_RUN_CONFIG),this.vtgMode=this.vtgTestFileRunConfig.mode,this.storyId=((N=this.vtgTestFileRunConfig)==null?void 0:N.mode)==="start"?this.vtgTestFileRunConfig.storyId:void 0;return}y!==-1&&(this.vtgMode="edit",this.editLocationPath=d.at(y+1)),E!==-1&&(this.vtgMode="cloud",this.cloudTestGenerationId=d.at(E+1)),this.vtgMode==="start"&&(this.storyId=d[0])}addLogFile(){let d=require("fs"),y=`${this.testAssetsManager.getLogsPath()}/vtg_${new Date().toISOString()}.log`;d.existsSync(this.testAssetsManager.getLogsPath())||d.mkdirSync(this.testAssetsManager.getLogsPath(),{recursive:!0}),Nh.addLogListener({onLog:e((...E)=>{let N=E.map(F=>{if(typeof F=="object")try{return JSON.stringify(F,null,2)}catch{}return String(F)}).join(" ")+`
1918
- `;try{d.appendFile(y,N,F=>{F&&console.error(F)})}catch{}},"onLog")})}async eval(d){return this.evaluatorService.listenForExecution(d)}};e(Rrr,"VisualTestGenerator");var Awt=Rrr;var gce=x7(Kae());var Brr=class Brr{constructor(p,d=!1){this.desiredType=p;this.recursive=d}changeAssignmentType(p){let d=p.declarationList.declarations.map(E=>gce.factory.createVariableDeclaration(E.name,E.exclamationToken,E.type,E.initializer)),y=gce.factory.createVariableDeclarationList(d,this.desiredType);return gce.factory.updateVariableStatement(p,p.modifiers,y)}transform(p){let d=e(y=>(gce.isVariableStatement(y)&&(y=this.changeAssignmentType(y)),gce.isSourceFile(y)||gce.isStatement(y)||this.recursive?gce.visitEachChild(y,d,p):y),"visit");return y=>gce.visitNode(y,d)}};e(Brr,"ChangeAllAssignmentsTypesTransformer");var oRt=Brr;var H5r=x7(Kae());var jrr=class jrr extends sce{constructor(d,y=!1){super(d,y);this.MAX_COMPLETION_WAIT=2*3600*1e3;this.TEST_RUN_MONITOR_PATH=(0,a4e.join)(__dirname,"test-run-monitor.js");this.didFail=!1;this.isolationMode=!1;this.trmMessagesBuffer="";this.completeIndicators={upload:!1,tests:!1,report:!1};this.uploadProgress=0;this.fileNameTimestamp=new Date().toString().split(" ").slice(0,5).join(" ")}get replMode(){return this.getChecksumArg("repl")??!1}get vtgFileMode(){return this.getChecksumArg("file")||this.getChecksumArg("new-file")||!1}get vtgEditMode(){return this.getChecksumArg("file")||!1}async run(){var F;if(this.loadTracer(),this.loadChecksumData(),this.validateAuthExists(),this.vtgFileMode&&(this.config.options.hostReports=!1),!await this.getSession())return;this.trace.log(`Project root found at ${this.projectRootDirectory}`,`Checksum root found at ${this.checksumRoot}`);let d;try{d=await Dj(this.startTestRunMonitor(this.testSession),1e4,"test run monitor timeout")}catch{this.logAndTrace("Error starting test run monitor. Test results will not be available on checksum.","Test Run Monitor Error")}this.buildVolatileConfig();let y={CHECKSUM_ROOT_FOLDER:this.checksumRoot};d&&(y.CHECKSUM_UPLOAD_AGENT_PORT=d),this.config.options.hostReports&&(y.PW_TEST_HTML_REPORT_OPEN="never"),this.testSession&&this.testSession!=="isolated-session"&&(y.CHECKSUM_TEST_SUITE_ID=this.testSession),this.replMode&&(y.CHECKSUM_REPL="true"),(F=this.trace)!=null&&F.internalId&&(y.CHECKSUM_TRACE_INTERNAL_ID=this.trace.internalId),this.getChecksumArg("tm")&&(y.CHECKSUM_SHOW_TIME_MACHINE="true");let E=this.getNonChecksumArgs();if(this.vtgFileMode&&(E.unshift("--reporter=line"),y.CHECKSUM_VTG_TEST_FILE_MODE="true",this.vtgEditMode?y.CHECKSUM_VTG_TEST_FILE_EDIT_MODE="true":y.CHECKSUM_VTG_STORY_ID=E[E.length-1],y.PW_TEST_HTML_REPORT_OPEN="never"),this.vtgFileMode){let R,V;if(this.vtgEditMode){R=E[E.length-1];let H=this.loadVtgTestFileMirror(R);this.createActionJsonFileForExistingChecksumSpec(H,R),this.createEvalFileForExistingChecksumSpec(H,R),V={mode:"edit",actionsJsonFilePath:this.getActionJsonFilePath(R),internalTestId:H.testMirrors[0].internalTestId,evalFilePath:this.getEvalFilePath(R),sourceFilePath:R}}else this.createEvalFileForNewChecksumSpec(),cRt.writeFileSync(this.getSavePathForNewChecksumSpec(),SXt({body:"",testFunctionParams:["page","vs"]})),V={mode:"start",sourceFilePath:this.getSavePathForNewChecksumSpec(),evalFilePath:this.getEvalFilePath(),storyId:E[E.length-1]};y.CHECKSUM_VTG_TEST_FILE_RUN_CONFIG=JSON.stringify(V),E[E.length-1]=this.getEvalFilePath(this.vtgEditMode?R:void 0)}this.replMode&&E.push("--debug");let N=`npx playwright test --config "${this.getPlaywrightConfigFilePath()}" ${E.map(R=>R.includes(" ")?Y6r(R):R).join(" ")}`;await this.patchPlaywright();try{console.log(`Tests running with @checksum-ai/runtime version ${this.checksumRuntimeVersion}`),this.replMode?(console.log("Running in REPL mode"),this.execCmd(N,y),await this.execCmd(`node ${__dirname}/repl.js`,y)):(this.trace.testsStart(),await this.execCmd(N,y),this.trace.testsEnd()),console.log("Tests execution finished")}catch{this.didFail=!0,console.log("Error during test execution: Failed passing test"),this.trace.testsFailed()}finally{this.isolationMode||console.log("Waiting for test files to upload to Checksum..."),this.sendReportUploadRequest(),await this.patchPlaywright(!0),this.completeIndicators.tests=!0,await this.handleCompleteMessage()}}createEvalFileForExistingChecksumSpec(d,y){let E=new wZe(d.sourceFile);E.transformSourceFile([new grt(y),new yrt(d.sourceFile,d.testMirrors.map(N=>N.testBody),SOt(EXt),["page","vs","vtg"]),new oRt(H5r.NodeFlags.Let,!0)]),E.write(this.getEvalFilePath(y))}loadVtgTestFileMirror(d){if(!d||!d.startsWith("/"))throw new Error("Currently vtg mode can only run with absolute path to file");let y=new sPe(d);return y.loadTestFromFile(),y}createActionJsonFileForExistingChecksumSpec(d,y){let E=d.testMirrors[0].translateStatementsToActions(),N=this.getActionJsonFilePath(y);cRt.writeFileSync(N,JSON.stringify(E,null,2))}createFolderIfNotExists(d){return(0,Pwt.existsSync)(d)||(0,Pwt.mkdirSync)(d,{recursive:!0}),d}getSavePathForNewChecksumSpec(){let d=this.createFolderIfNotExists((0,a4e.join)(this.checksumRoot,"tests"));return(0,a4e.join)(d,`test-${this.fileNameTimestamp}.checksum.spec.ts`)}createEvalFileForNewChecksumSpec(){let d=this.getEvalFilePath();cRt.writeFileSync(d,SXt({body:EXt,testFunctionParams:["page","vs","vtg"],importMode:"require",useLocalChecksumImport:!!process.env.DEV_MODE}))}getTempFolder(){return this.createFolderIfNotExists((0,a4e.join)(this.checksumRoot,"drafts","temp"))}getActionJsonFilePath(d){let y=this.getFileName(d).replace(".spec.ts",".json");return(0,a4e.join)(this.getTempFolder(),y)}getFileName(d){return d.split("/").pop()}getEvalFilePath(d){let y=d?this.getFileName(d).replace(/(\.eval)?(\.checksum\.spec\.ts)$/,(E,N,F)=>N?F:".eval"+F):`test-${this.fileNameTimestamp}.eval.checksum.spec.ts`;return(0,a4e.join)(this.getTempFolder(),y)}getPlaywrightReportPath(){var E;let d=e(N=>(XG("Using report folder",N),(0,a4e.join)(N,"index.html")),"makeFilePath");if(process.env.PLAYWRIGHT_HTML_OUTPUT_DIR)return d(process.env.PLAYWRIGHT_HTML_OUTPUT_DIR);let y=(E=this.playwrightConfig)==null?void 0:E.reporter;if(y instanceof Array){let F=y.filter(R=>R instanceof Array&&R[0]==="html").find(R=>{var V;return(V=R[1])==null?void 0:V.outputFolder});if(F)return d((0,a4e.join)(this.checksumRoot,F[1].outputFolder))}return d((0,a4e.join)(this.projectRootDirectory,"playwright-report"))}sendReportUploadRequest(){let d=this.getPlaywrightReportPath();if(!(0,Pwt.existsSync)(d)){this.logAndTrace(`Could not find report file at ${d}`,"Runtime Error"),this.completeIndicators.report=!0,this.testRunMonitorProcess.stdin.write("cli:report=false");return}XG("Sending report upload request",d),this.testRunMonitorProcess.stdin.write(`cli:report=${d}`)}startTestRunMonitor(d){return new Promise(y=>{console.log("Starting test run monitor"),this.testRunMonitorProcess=$5r.spawn("node",[this.TEST_RUN_MONITOR_PATH,JSON.stringify({sessionId:d,apiURL:this.config.apiURL,apiKey:this.config.apiKey}),...this.isolationMode?["isolated"]:[]]),this.testRunMonitorProcess.stdout.on("data",E=>{let N=this.parseTRMMessages(E.toString().trim());if(N.length){this.logTRMMessage(N);for(let F of N){if(F.startsWith("trace")&&this.handleTestRunMonitorTrace(F.substring("trace".length+1)),!F.startsWith("monitor"))continue;let R=F.substring("monitor".length+1),V=R.indexOf("=");if(V===-1){this.handleTestRunMonitorMessage(R,"");continue}let[H,Q]=[R.substring(0,V),R.substring(V+1)];if(!Object.values(HUt).includes(H)){console.warn(`Unknown test run monitor message: ${H}`);continue}H==="port"?y(Q):this.handleTestRunMonitorMessage(H,Q)}}}),this.testRunMonitorProcess.on("exit",(E,N)=>{this.logAndTrace(`test run monitor process exited with code ${E} and signal ${N}`,"Test Run Monitor Error")}),this.testRunMonitorProcess.stderr.on("data",E=>{this.logAndTrace(`TRM Error: ${E.toString().substring(0,300)}`,"Test Run Monitor Error")}),this.testRunMonitorProcess.on("error",E=>{this.logAndTrace(`Error starting test run monitor: ${E.message}`,"Test Run Monitor Error")})})}parseTRMMessages(d){let y=this.trmMessagesBuffer+d,E,N,F=e(()=>{E=y.indexOf("{trm}"),N=y.indexOf("{/trm}")},"findIndexes");F();let R=[];for(;E!==-1&&N!==-1&&N>E;){if(R.push(y.substring(E+"{trm}".length,N)),y=y.slice(N+"{/trm}".length).trim(),y.length&&!y.startsWith("{trm}"))return console.warn("Buffered data does not start with start delimiter",y),this.trmMessagesBuffer="",R;this.trmMessagesBuffer=y,F()}return R}async handleTestRunMonitorTrace(d){let y=d.indexOf("="),[E,N]=y>-1?[d.substring(0,y),d.substring(y+1)]:[d,""];if(!Object.values(irt).includes(E)){XG("Unknown trace event",E);return}try{let F=N?JSON.parse(N):{};switch(E){case"Upload Start":this.trace.uploadStart(F.filename);break;case"Upload Complete":this.trace.uploadComplete(F.filename);break;case"Upload Failed":this.trace.uploadFailed(F.filename,F.error);break}}catch(F){XG(`Error parsing trace payload, ${F.message}`)}}async handleTestRunMonitorMessage(d,y){switch(d){case"uploads-complete-with-errors":console.log("Error uploading test files to Checksum");try{let N=JSON.parse(y);this.trace.uploadsCompleteWithErrors(N)}catch{}this.sendProcessingError().then(()=>{this.completeIndicators.upload=!0});break;case"uploads-complete":this.isolationMode||console.log("Test files uploaded successfully"),this.trace.allUploadsComplete(),this.sendUploadsComplete().then(()=>{this.completeIndicators.upload=!0});break;case"report-complete":{if(this.isolationMode){this.completeIndicators.report=!0;break}let N=y.slice(0,y.indexOf(":"))==="true",F=y.slice(y.indexOf(":")+1),R={};try{F&&F.length>0?R=JSON.parse(F):XG("No stats received from test run monitor")}catch(V){this.logAndTrace(`Error parsing stats - ${V.message}`,"Runtime Error")}if(await this.sendTestRunEnd(R),this.completeIndicators.report=!0,N){let V=`${this.checksumAppUrl}/#/test-runs/${this.testSession}`,H=`Checksum report URL: ${V}`,Q="*".repeat(H.length);console.log(`${Q}
1917
+ `;try{d.appendFile(y,N,F=>{F&&console.error(F)})}catch{}},"onLog")})}async eval(d){return this.evaluatorService.listenForExecution(d)}};e(Rrr,"VisualTestGenerator");var Awt=Rrr;var gce=x7(Kae());var Brr=class Brr{constructor(p,d=!1){this.desiredType=p;this.recursive=d}changeAssignmentType(p){let d=p.declarationList.declarations.map(E=>gce.factory.createVariableDeclaration(E.name,E.exclamationToken,E.type,E.initializer)),y=gce.factory.createVariableDeclarationList(d,this.desiredType);return gce.factory.updateVariableStatement(p,p.modifiers,y)}transform(p){let d=e(y=>(gce.isVariableStatement(y)&&(y=this.changeAssignmentType(y)),gce.isSourceFile(y)||gce.isStatement(y)||this.recursive?gce.visitEachChild(y,d,p):y),"visit");return y=>gce.visitNode(y,d)}};e(Brr,"ChangeAllAssignmentsTypesTransformer");var oRt=Brr;var H5r=x7(Kae());var jrr=class jrr extends sce{constructor(d,y=!1,E=!1){super(d,y);this.vtgMode=E;this.MAX_COMPLETION_WAIT=2*3600*1e3;this.TEST_RUN_MONITOR_PATH=(0,a4e.join)(__dirname,"test-run-monitor.js");this.didFail=!1;this.isolationMode=!1;this.trmMessagesBuffer="";this.completeIndicators={upload:!1,tests:!1,report:!1};this.uploadProgress=0;this.fileNameTimestamp=new Date().toString().split(" ").slice(0,5).join(" ")}get replMode(){return this.getChecksumArg("repl")??!1}get vtgLegacyMode(){return this.getChecksumArg("legacy")||!1}get vtgEditMode(){return this.getChecksumArg("edit")||!1}async run(){var F;if(this.loadTracer(),this.loadChecksumData(),this.validateAuthExists(),this.vtgMode&&!this.vtgLegacyMode&&(this.config.options.hostReports=!1),!await this.getSession())return;this.trace.log(`Project root found at ${this.projectRootDirectory}`,`Checksum root found at ${this.checksumRoot}`);let d;try{d=await Dj(this.startTestRunMonitor(this.testSession),1e4,"test run monitor timeout")}catch{this.logAndTrace("Error starting test run monitor. Test results will not be available on checksum.","Test Run Monitor Error")}this.buildVolatileConfig();let y={CHECKSUM_ROOT_FOLDER:this.checksumRoot};d&&(y.CHECKSUM_UPLOAD_AGENT_PORT=d),this.config.options.hostReports&&(y.PW_TEST_HTML_REPORT_OPEN="never"),this.testSession&&this.testSession!=="isolated-session"&&(y.CHECKSUM_TEST_SUITE_ID=this.testSession),this.replMode&&(y.CHECKSUM_REPL="true"),(F=this.trace)!=null&&F.internalId&&(y.CHECKSUM_TRACE_INTERNAL_ID=this.trace.internalId),this.getChecksumArg("tm")&&(y.CHECKSUM_SHOW_TIME_MACHINE="true");let E=this.getNonChecksumArgs();if(this.vtgMode&&!this.vtgLegacyMode&&(E.unshift("--reporter=line"),y.CHECKSUM_VTG_TEST_FILE_MODE="true",this.vtgEditMode?y.CHECKSUM_VTG_TEST_FILE_EDIT_MODE="true":y.CHECKSUM_VTG_STORY_ID=E[E.length-1],y.PW_TEST_HTML_REPORT_OPEN="never"),this.vtgMode&&!this.vtgLegacyMode){let R,V;if(this.vtgEditMode){R=E[E.length-1];let H=this.loadVtgTestFileMirror(R);this.createActionJsonFileForExistingChecksumSpec(H,R),this.createEvalFileForExistingChecksumSpec(H,R),V={mode:"edit",actionsJsonFilePath:this.getActionJsonFilePath(R),internalTestId:H.testMirrors[0].internalTestId,evalFilePath:this.getEvalFilePath(R),sourceFilePath:R}}else this.createEvalFileForNewChecksumSpec(),cRt.writeFileSync(this.getSavePathForNewChecksumSpec(),SXt({body:"",testFunctionParams:["page","vs"]})),V={mode:"start",sourceFilePath:this.getSavePathForNewChecksumSpec(),evalFilePath:this.getEvalFilePath(),storyId:E[E.length-1]};y.CHECKSUM_VTG_TEST_FILE_RUN_CONFIG=JSON.stringify(V),E[E.length-1]=this.getEvalFilePath(this.vtgEditMode?R:void 0)}this.replMode&&E.push("--debug");let N=`npx playwright test --config "${this.getPlaywrightConfigFilePath()}" ${E.map(R=>R.includes(" ")?Y6r(R):R).join(" ")}`;await this.patchPlaywright();try{console.log(`Tests running with @checksum-ai/runtime version ${this.checksumRuntimeVersion}`),this.replMode?(console.log("Running in REPL mode"),this.execCmd(N,y),await this.execCmd(`node ${__dirname}/repl.js`,y)):(this.trace.testsStart(),await this.execCmd(N,y),this.trace.testsEnd()),console.log("Tests execution finished")}catch{this.didFail=!0,console.log("Error during test execution: Failed passing test"),this.trace.testsFailed()}finally{this.isolationMode||console.log("Waiting for test files to upload to Checksum..."),this.sendReportUploadRequest(),await this.patchPlaywright(!0),this.completeIndicators.tests=!0,await this.handleCompleteMessage()}}createEvalFileForExistingChecksumSpec(d,y){let E=new wZe(d.sourceFile);E.transformSourceFile([new grt(y),new yrt(d.sourceFile,d.testMirrors.map(N=>N.testBody),SOt(EXt),["page","vs","vtg"]),new oRt(H5r.NodeFlags.Let,!0)]),E.write(this.getEvalFilePath(y))}loadVtgTestFileMirror(d){if(!d||!d.startsWith("/"))throw new Error("Currently vtg mode can only run with absolute path to file");let y=new sPe(d);return y.loadTestFromFile(),y}createActionJsonFileForExistingChecksumSpec(d,y){let E=d.testMirrors[0].translateStatementsToActions(),N=this.getActionJsonFilePath(y);cRt.writeFileSync(N,JSON.stringify(E,null,2))}createFolderIfNotExists(d){return(0,Pwt.existsSync)(d)||(0,Pwt.mkdirSync)(d,{recursive:!0}),d}getSavePathForNewChecksumSpec(){let d=this.createFolderIfNotExists((0,a4e.join)(this.checksumRoot,"tests"));return(0,a4e.join)(d,`test-${this.fileNameTimestamp}.checksum.spec.ts`)}createEvalFileForNewChecksumSpec(){let d=this.getEvalFilePath();cRt.writeFileSync(d,SXt({body:EXt,testFunctionParams:["page","vs","vtg"],importMode:"require",useLocalChecksumImport:!!process.env.DEV_MODE}))}getTempFolder(){return this.createFolderIfNotExists((0,a4e.join)(this.checksumRoot,"drafts","temp"))}getActionJsonFilePath(d){let y=this.getFileName(d).replace(".spec.ts",".json");return(0,a4e.join)(this.getTempFolder(),y)}getFileName(d){return d.split("/").pop()}getEvalFilePath(d){let y=d?this.getFileName(d).replace(/(\.eval)?(\.checksum\.spec\.ts)$/,(E,N,F)=>N?F:".eval"+F):`test-${this.fileNameTimestamp}.eval.checksum.spec.ts`;return(0,a4e.join)(this.getTempFolder(),y)}getPlaywrightReportPath(){var E;let d=e(N=>(XG("Using report folder",N),(0,a4e.join)(N,"index.html")),"makeFilePath");if(process.env.PLAYWRIGHT_HTML_OUTPUT_DIR)return d(process.env.PLAYWRIGHT_HTML_OUTPUT_DIR);let y=(E=this.playwrightConfig)==null?void 0:E.reporter;if(y instanceof Array){let F=y.filter(R=>R instanceof Array&&R[0]==="html").find(R=>{var V;return(V=R[1])==null?void 0:V.outputFolder});if(F)return d((0,a4e.join)(this.checksumRoot,F[1].outputFolder))}return d((0,a4e.join)(this.projectRootDirectory,"playwright-report"))}sendReportUploadRequest(){let d=this.getPlaywrightReportPath();if(!(0,Pwt.existsSync)(d)){this.logAndTrace(`Could not find report file at ${d}`,"Runtime Error"),this.completeIndicators.report=!0,this.testRunMonitorProcess.stdin.write("cli:report=false");return}XG("Sending report upload request",d),this.testRunMonitorProcess.stdin.write(`cli:report=${d}`)}startTestRunMonitor(d){return new Promise(y=>{console.log("Starting test run monitor"),this.testRunMonitorProcess=$5r.spawn("node",[this.TEST_RUN_MONITOR_PATH,JSON.stringify({sessionId:d,apiURL:this.config.apiURL,apiKey:this.config.apiKey}),...this.isolationMode?["isolated"]:[]]),this.testRunMonitorProcess.stdout.on("data",E=>{let N=this.parseTRMMessages(E.toString().trim());if(N.length){this.logTRMMessage(N);for(let F of N){if(F.startsWith("trace")&&this.handleTestRunMonitorTrace(F.substring("trace".length+1)),!F.startsWith("monitor"))continue;let R=F.substring("monitor".length+1),V=R.indexOf("=");if(V===-1){this.handleTestRunMonitorMessage(R,"");continue}let[H,Q]=[R.substring(0,V),R.substring(V+1)];if(!Object.values(HUt).includes(H)){console.warn(`Unknown test run monitor message: ${H}`);continue}H==="port"?y(Q):this.handleTestRunMonitorMessage(H,Q)}}}),this.testRunMonitorProcess.on("exit",(E,N)=>{this.logAndTrace(`test run monitor process exited with code ${E} and signal ${N}`,"Test Run Monitor Error")}),this.testRunMonitorProcess.stderr.on("data",E=>{this.logAndTrace(`TRM Error: ${E.toString().substring(0,300)}`,"Test Run Monitor Error")}),this.testRunMonitorProcess.on("error",E=>{this.logAndTrace(`Error starting test run monitor: ${E.message}`,"Test Run Monitor Error")})})}parseTRMMessages(d){let y=this.trmMessagesBuffer+d,E,N,F=e(()=>{E=y.indexOf("{trm}"),N=y.indexOf("{/trm}")},"findIndexes");F();let R=[];for(;E!==-1&&N!==-1&&N>E;){if(R.push(y.substring(E+"{trm}".length,N)),y=y.slice(N+"{/trm}".length).trim(),y.length&&!y.startsWith("{trm}"))return console.warn("Buffered data does not start with start delimiter",y),this.trmMessagesBuffer="",R;this.trmMessagesBuffer=y,F()}return R}async handleTestRunMonitorTrace(d){let y=d.indexOf("="),[E,N]=y>-1?[d.substring(0,y),d.substring(y+1)]:[d,""];if(!Object.values(irt).includes(E)){XG("Unknown trace event",E);return}try{let F=N?JSON.parse(N):{};switch(E){case"Upload Start":this.trace.uploadStart(F.filename);break;case"Upload Complete":this.trace.uploadComplete(F.filename);break;case"Upload Failed":this.trace.uploadFailed(F.filename,F.error);break}}catch(F){XG(`Error parsing trace payload, ${F.message}`)}}async handleTestRunMonitorMessage(d,y){switch(d){case"uploads-complete-with-errors":console.log("Error uploading test files to Checksum");try{let N=JSON.parse(y);this.trace.uploadsCompleteWithErrors(N)}catch{}this.sendProcessingError().then(()=>{this.completeIndicators.upload=!0});break;case"uploads-complete":this.isolationMode||console.log("Test files uploaded successfully"),this.trace.allUploadsComplete(),this.sendUploadsComplete().then(()=>{this.completeIndicators.upload=!0});break;case"report-complete":{if(this.isolationMode){this.completeIndicators.report=!0;break}let N=y.slice(0,y.indexOf(":"))==="true",F=y.slice(y.indexOf(":")+1),R={};try{F&&F.length>0?R=JSON.parse(F):XG("No stats received from test run monitor")}catch(V){this.logAndTrace(`Error parsing stats - ${V.message}`,"Runtime Error")}if(await this.sendTestRunEnd(R),this.completeIndicators.report=!0,N){let V=`${this.checksumAppUrl}/#/test-runs/${this.testSession}`,H=`Checksum report URL: ${V}`,Q="*".repeat(H.length);console.log(`${Q}
1919
1918
  ${H}
1920
1919
  ${Q}`),this.trace.reportComplete(R,V)}else this.trace.event("Report Upload Error"),console.log("An error occurred while uploading the test report to Checksum");break}case"upload-progress":{if(this.isolationMode)break;let N=parseInt(y);(N<this.uploadProgress||N>=this.uploadProgress+10||N===100&&this.uploadProgress!==100)&&(this.uploadProgress=N,console.log(`[ Uploads progress: ${this.uploadProgress}% ]`))}break;case"log":console.log(y);break;case"trace":let E=y;if(!Object.values(irt).includes(E))return;this.trace.event(E);break;case"playwrightConfig":try{this.playwrightConfig||(this.playwrightConfig=JSON.parse(y),this.trace.playwrightConfig(this.playwrightConfig))}catch(N){this.logAndTrace(`Error parsing playwright config - ${N.message}`,"Runtime Error")}break;default:this.logAndTrace(`Unhandled test run monitor message: ${d}=${y}`,"Runtime Error")}}async handleCompleteMessage(){let d=Date.now(),y=12;for(;;){if(Date.now()-d>this.MAX_COMPLETION_WAIT){console.log("Warning: Checksum wasn't able to upload all test assets or expected a file the couldn't be found. This might cause issues when viewing the report/trace."),this.trace.event("Runtime Timeout"),this.shutdown(1);return}if(Object.keys(this.completeIndicators).find(E=>!this.completeIndicators[E]))XG(this.completeIndicators),--y===0&&(this.trace.completionStatus(this.completeIndicators),y=12),await aA(5e3);else{this.trace.event("Runtime Complete"),console.log("Checksum test run complete"),await this.shutdown(this.didFail?1:0);return}}}async shutdown(d=0){await this.cleanup(),process.exit(d)}async cleanup(){var d,y;await super.cleanup(),(d=this.testRunMonitorProcess)==null||d.stdin.write("cli:shutdown"),(y=this.testRunMonitorProcess)==null||y.kill()}async getSession(){let d,y;try{if(!this.config.options.hostReports)return this.setIsolatedMode(),!0;if(y=this.config.apiKey,!y||y==="<API key>")return this.logAndTrace("No API key found in checksum config - please set it in the config file - checksum.config.ts","Checksum Config Error",!0),this.shutdown(1),!1;let E=await this.getEnvInfo(),N=JSON.stringify({...E,isHidden:!!this.config.options.hideReports}),F=await fetch(`${this.config.apiURL}/client-api/test-runs`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",ChecksumAppCode:y},body:N}),{uuid:R,appName:V}=await F.json();return this.testSession=R,E.commit=E.name,E.name=V,await this.trace.identify(this.testSession,{...E,company:V,apiKey:y}),!0}catch(E){return this.logAndTrace(`Error connecting to Checksum, the report will not be hosted - ${E.message}`,"Initialization Error"),this.setIsolatedMode(),!0}}setIsolatedMode(){this.isolationMode=!0,this.testSession="isolated-session",this.trace.setIsolatedMode()}async sendTestRunEnd(d){if(!this.isolationMode)try{let y="{}";try{y=JSON.stringify({...d,endedAt:Date.now()})}catch(E){this.logAndTrace(`Error stringifying stats ${E.message}`,"Runtime Error")}await this.updateTestRun(`${this.config.apiURL}/client-api/test-runs/${this.testSession}`,"PATCH",y)}catch(y){return this.logAndTrace(`Error sending test run end ${y.message}`,"Runtime Error"),null}}async sendUploadsComplete(){if(!this.isolationMode)try{await this.updateTestRun(`${this.config.apiURL}/client-api/test-runs/${this.testSession}/uploads-completed`,"PATCH")}catch(d){this.logAndTrace(`Error sending test run uploads complete - ${d.message}`,"Runtime Error")}}async sendProcessingError(){if(!this.isolationMode)try{await this.updateTestRun(`${this.config.apiURL}/client-api/test-runs/${this.testSession}/process-error`,"PATCH")}catch(d){this.logAndTrace(`Error sending test run processing error - ${d.message}`,"Runtime Error")}}async updateTestRun(d,y,E=void 0){let N=await fetch(d,{method:y,headers:{Accept:"application/json","Content-Type":"application/json",ChecksumAppCode:this.config.apiKey},body:E});return XG("Received update test run response from url:",d),await this.logApiResponse(N),N}async logApiResponse(d){try{if(!d.ok){let{status:E,statusText:N}=d,F=await d.text();this.trace.runtimeError({status:E,statusText:N,errorText:F});return}d.headers.get("Content-Type").includes("application/json")?d.json().then(E=>{XG("API Response:",E)}):d.text().then(E=>{XG("API Response:",E)})}catch(y){this.trace.eventWithMessage("Runtime Error",`Error logging API response - ${y.message}`)}}logTRMMessage(d){(Array.isArray(d)?d:[d]).forEach(y=>{XG("\x1B[33m","[trm]","\x1B[0m",y)})}};e(jrr,"TestsRunner");var Nwt=jrr;var Jrr=class Jrr extends sce{constructor(p,d=!1){super(p,d)}async run(p){switch(p){default:console.log(`
1921
1920
  Checksum CLI
@@ -1929,7 +1928,7 @@ show-report [options] [report] show HTML report
1929
1928
  `);break;case"test":try{let y=(await this.getCmdOutput("npx playwright test --help")).replace(/npx playwright/g,"yarn checksum").split(`
1930
1929
  `);y.splice(5,0," --cksm-config=<config> Checksum configuration in JSON format").join(`
1931
1930
  `),console.log(y.join(`
1932
- `))}catch(d){console.log("Error",d.message)}break;case"show-report":try{let y=(await this.getCmdOutput("npx playwright show-report --help")).replace(/npx playwright/g,"yarn checksum");console.log(y)}catch(d){console.log("Error",d.message)}break;case"generate":console.log("Not implemented yet");break}}};e(Jrr,"CLIHelp");var Fwt=Jrr;var qrr=class qrr extends sce{constructor(p,d=!1){super(p,d)}async run(){let d=`npx playwright show-report ${this.getNonChecksumArgs().join(" ")}`;try{await this.execCmd(d)}catch(y){console.log("Error showing report",y.message)}}};e(qrr,"CLIShowReport");var uRt=qrr;var Xee=require("fs"),dPe=require("path");var Urr=class Urr extends sce{constructor(p,d=!1){super(p,d)}run(){console.log("Creating Checksum directory and necessary files to run your tests");try{this.findProjectRoot()}catch(N){console.log(N.message),process.exit(1)}let p=(0,dPe.join)(process.cwd(),kPt);if((0,Xee.existsSync)(p)||(0,Xee.mkdirSync)(p),!(0,Xee.existsSync)(this.getChecksumRootOrigin()))throw new Error("Could not find checksum root directory, please install @checksum-ai/runtime package");let d=(0,Xee.existsSync)((0,dPe.join)(p,"checksum.config.ts"));Qfr({isInit:!d}).forEach(N=>{let F=(0,dPe.join)(p,N);(0,Xee.existsSync)(F)||(0,Xee.copyFileSync)((0,dPe.join)(this.getChecksumRootOrigin(),N),F)});let y=(0,dPe.join)(p,".gitignore.example"),E=(0,dPe.join)(p,".gitignore");(0,Xee.existsSync)(y)&&!(0,Xee.existsSync)(E)&&((0,Xee.copyFileSync)(y,E),(0,Xee.unlinkSync)(y)),this.validateAuthExists(),(0,Xee.mkdirSync)((0,dPe.join)(p,"tests"),{recursive:!0}),["esra","har","trace","log"].forEach(N=>{(0,Xee.mkdirSync)((0,dPe.join)(p,"test-data",N),{recursive:!0})})}};e(Urr,"CLIInstall");var lRt=Urr;var Vrr=class Vrr extends sce{constructor(p,d=!1){super(p,d);let y=p[0];this.vtgTestFileParser=new sPe(y)}async run(){this.vtgTestFileParser.loadTestsFromFile();let p=this.vtgTestFileParser.testMirrors[0].translateStatementsToSteps();console.log(JSON.stringify(p,null,2))}};e(Vrr,"VtgTestFileParser");var pRt=Vrr;var zrr=class zrr{constructor(){}async execute(){let p=!!process.argv.find(y=>y==="--cksm-clidebug"||y==="--cksm-repl");p&&yEt(!0);let d=process.argv.slice(3);switch(process.argv.find(y=>y==="--help"||y==="-h")&&(await new Fwt(d,p).run(process.argv[2]),process.exit(0)),process.argv[2]){case"init":new lRt(d,p).run();break;case"test":await new Nwt(d,p).run();break;case"show-report":await new uRt(d,p).run();break;case"generate":try{await new Awt(d,p).run()}catch(y){console.log("Error",y.message)}break;case"vtg":try{let y=["--cksm-file","--cksm-new-file"];d.find(E=>y.includes(E))?await new Nwt(["--headed",...d],p).run():await new Awt(d,p).run()}catch(y){console.log("Error",y.message)}break;case"vtg-test-parser":await new pRt(d,p).run();default:await new Fwt(d,p).run()}process.exit(0)}};e(zrr,"CLIDispatcher");var fRt=zrr;(async()=>await new fRt().execute())();
1931
+ `))}catch(d){console.log("Error",d.message)}break;case"show-report":try{let y=(await this.getCmdOutput("npx playwright show-report --help")).replace(/npx playwright/g,"yarn checksum");console.log(y)}catch(d){console.log("Error",d.message)}break;case"generate":console.log("Not implemented yet");break}}};e(Jrr,"CLIHelp");var Fwt=Jrr;var qrr=class qrr extends sce{constructor(p,d=!1){super(p,d)}async run(){let d=`npx playwright show-report ${this.getNonChecksumArgs().join(" ")}`;try{await this.execCmd(d)}catch(y){console.log("Error showing report",y.message)}}};e(qrr,"CLIShowReport");var uRt=qrr;var Xee=require("fs"),dPe=require("path");var Urr=class Urr extends sce{constructor(p,d=!1){super(p,d)}run(){console.log("Creating Checksum directory and necessary files to run your tests");try{this.findProjectRoot()}catch(N){console.log(N.message),process.exit(1)}let p=(0,dPe.join)(process.cwd(),kPt);if((0,Xee.existsSync)(p)||(0,Xee.mkdirSync)(p),!(0,Xee.existsSync)(this.getChecksumRootOrigin()))throw new Error("Could not find checksum root directory, please install @checksum-ai/runtime package");let d=(0,Xee.existsSync)((0,dPe.join)(p,"checksum.config.ts"));Qfr({isInit:!d}).forEach(N=>{let F=(0,dPe.join)(p,N);(0,Xee.existsSync)(F)||(0,Xee.copyFileSync)((0,dPe.join)(this.getChecksumRootOrigin(),N),F)});let y=(0,dPe.join)(p,".gitignore.example"),E=(0,dPe.join)(p,".gitignore");(0,Xee.existsSync)(y)&&!(0,Xee.existsSync)(E)&&((0,Xee.copyFileSync)(y,E),(0,Xee.unlinkSync)(y)),this.validateAuthExists(),(0,Xee.mkdirSync)((0,dPe.join)(p,"tests"),{recursive:!0}),["esra","har","trace","log"].forEach(N=>{(0,Xee.mkdirSync)((0,dPe.join)(p,"test-data",N),{recursive:!0})})}};e(Urr,"CLIInstall");var lRt=Urr;var Vrr=class Vrr extends sce{constructor(p,d=!1){super(p,d);let y=p[0];this.vtgTestFileParser=new sPe(y)}async run(){this.vtgTestFileParser.loadTestsFromFile();let p=this.vtgTestFileParser.testMirrors[0].translateStatementsToSteps();console.log(JSON.stringify(p,null,2))}};e(Vrr,"VtgTestFileParser");var pRt=Vrr;var zrr=class zrr{constructor(){}async execute(){let p=!!process.argv.find(y=>y==="--cksm-clidebug"||y==="--cksm-repl");p&&yEt(!0);let d=process.argv.slice(3);switch(process.argv.find(y=>y==="--help"||y==="-h")&&(await new Fwt(d,p).run(process.argv[2]),process.exit(0)),process.argv[2]){case"init":new lRt(d,p).run();break;case"test":await new Nwt(d,p).run();break;case"show-report":await new uRt(d,p).run();break;case"generate":try{await new Awt(d,p).run()}catch(E){console.log("Error",E.message)}break;case"vtg":let y=e(E=>d.find(N=>N===E),"hasArg");if(y("--cksm-new-file"))throw Error("VTG new file mode is now the default. Remove the --cksm-new-file flag and run again with `vtg [story-id]`");if(y("--cksm-file"))throw Error("VTG edit file mode is now run using the --cksm-edit instead of --cksm-file flag, Run again with `vtg --cksm-edit [absolute-path-to-file]`");if(y("--cloud")&&!y("--cksm-legacy"))throw Error("VTG cloud mode can only be run in legacy mode. Use the --cksm-legacy flag to run in legacy mode with `vtg [story-id] --cksm-legacy --cloud`");try{if(y("--cksm-legacy"))await new Awt(d,p).run();else{let E=y("--headed")?d:["--headed",...d];await new Nwt(E,p,!0).run()}}catch(E){console.log("Error",E.message)}break;case"vtg-test-parser":await new pRt(d,p).run();default:await new Fwt(d,p).run()}process.exit(0)}};e(zrr,"CLIDispatcher");var fRt=zrr;(async()=>await new fRt().execute())();
1933
1932
  /*! Bundled license information:
1934
1933
 
1935
1934
  typescript/lib/typescript.js: