@unotest/web 0.11.0 → 0.13.0
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/.claude/skills/write-e2e-test/SKILL.md +9 -4
- package/.claude/skills/write-e2e-test-ground/SKILL.md +9 -4
- package/CHANGELOG.md +115 -0
- package/dist/config/schema.d.ts +49 -15
- package/dist/config/schema.js +1 -1
- package/dist/driver/index.d.ts +4 -2
- package/dist/driver/index.js +1 -1
- package/dist/dsl/index.d.ts +13 -2
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/web-dsl-language-service.js +1 -1
- package/dist/inspection/page-inject.d.ts +1 -1
- package/dist/{interfaces-MxHi1Air.d.ts → interfaces-XvuefHHC.d.ts} +5 -0
- package/dist/mcp/server.js +1 -1
- package/dist/runner/cli.js +1 -1
- package/dist/runner/init/chrome-probe.js +1 -1
- package/dist/runner/init.js +1 -1
- package/dist/runner/install-chromium.js +1 -1
- package/dist/runner/prepare-fix.js +1 -1
- package/dist/runner/scaffold-workspace.js +1 -1
- package/dist/runner/serve-fixture.js +1 -1
- package/dist/runner/web-runner-adapter.js +1 -1
- package/guides/agent-integration.md +29 -0
- package/guides/dsl-reference.md +172 -10
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
function _0x5f21(_0x1d7224,_0x1aa1fa){_0x1d7224=_0x1d7224-0x186;const _0x92880c=_0x9288();let _0x5f2129=_0x92880c[_0x1d7224];if(_0x5f21['HmbwBi']===undefined){var _0x5c26a1=function(_0x3304ef){const _0x4a31b1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x24650c='',_0xd5a10d='';for(let _0x2350b9=0x0,_0x70ac1c,_0x37d184,_0x5c4835=0x0;_0x37d184=_0x3304ef['charAt'](_0x5c4835++);~_0x37d184&&(_0x70ac1c=_0x2350b9%0x4?_0x70ac1c*0x40+_0x37d184:_0x37d184,_0x2350b9++%0x4)?_0x24650c+=String['fromCharCode'](0xff&_0x70ac1c>>(-0x2*_0x2350b9&0x6)):0x0){_0x37d184=_0x4a31b1['indexOf'](_0x37d184);}for(let _0x1babfa=0x0,_0x39ed32=_0x24650c['length'];_0x1babfa<_0x39ed32;_0x1babfa++){_0xd5a10d+='%'+('00'+_0x24650c['charCodeAt'](_0x1babfa)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xd5a10d);};_0x5f21['qoWtft']=_0x5c26a1,_0x5f21['JcQlWh']={},_0x5f21['HmbwBi']=!![];}const _0x44852a=_0x92880c[0x0],_0x2c7dd3=_0x1d7224+_0x44852a,_0xec3923=_0x5f21['JcQlWh'][_0x2c7dd3];return!_0xec3923?(_0x5f2129=_0x5f21['qoWtft'](_0x5f2129),_0x5f21['JcQlWh'][_0x2c7dd3]=_0x5f2129):_0x5f2129=_0xec3923,_0x5f2129;}const _0x3ee982=_0x5f21;(function(_0x2ce18c,_0x2c08d4){const _0x4423db={_0x12e61c:0x197,_0x124743:0x18c,_0x567e3b:0x196,_0x10d6df:0x19f},_0x163100=_0x5f21,_0x30ad7a=_0x2ce18c();while(!![]){try{const _0xf10bb0=parseInt(_0x163100(0x198))/0x1*(parseInt(_0x163100(0x194))/0x2)+parseInt(_0x163100(0x19b))/0x3*(-parseInt(_0x163100(_0x4423db._0x12e61c))/0x4)+-parseInt(_0x163100(0x193))/0x5+parseInt(_0x163100(0x191))/0x6*(-parseInt(_0x163100(_0x4423db._0x124743))/0x7)+parseInt(_0x163100(0x18b))/0x8+-parseInt(_0x163100(0x18d))/0x9*(parseInt(_0x163100(_0x4423db._0x567e3b))/0xa)+parseInt(_0x163100(_0x4423db._0x10d6df))/0xb*(parseInt(_0x163100(0x189))/0xc);if(_0xf10bb0===_0x2c08d4)break;else _0x30ad7a['push'](_0x30ad7a['shift']());}catch(_0x1d74c9){_0x30ad7a['push'](_0x30ad7a['shift']());}}}(_0x9288,0xed073));var __defProp=Object[_0x3ee982(0x18e)],__name=(_0x24650c,_0xd5a10d)=>__defProp(_0x24650c,_0x3ee982(0x187),{'value':_0xd5a10d,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';var templates={'scenarioTemplate':_0x3ee982(0x19a),'agentsMd':_0x3ee982(0x192),'claudeMdBody':_0x3ee982(0x186),'examples':{'01-smoke.js':_0x3ee982(0x1a2),'02-form-fill.js':'//\x20Example\x2002\x20—\x20fill\x20an\x20input\x20+\x20assert\x20the\x20app\x20reacted.\x0a//\x0a//\x20Against\x20playground.unotest.com/scenarios/big-table.\x20Demonstrates\x20getByRole\x0a//\x20for\x20a\x20labelled\x20input,\x20typed\x20input\x20via\x20fill(),\x20and\x20a\x20locator\x20method-chain\x0a//\x20(getByRole(\x27row\x27).filter({hasText}).first())\x20in\x20an\x20assertion.\x0a//\x20Run\x20with:\x20\x20npx\x20@unotest/web\x20e2e\x20examples/02-form-fill\x0a\x0afunction\x20test_form_fill_happy_path()\x20{\x0a\x20\x20step(\x22Filter\x20the\x20Big\x20Table\x20by\x20a\x20name\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27/scenarios/big-table\x27);\x0a\x20\x20\x20\x20fill(getByRole(\x27textbox\x27,\x20{name:\x20\x27Filter\x20by\x20name\x27}),\x20\x27Uma\x20Quinn\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Filtering\x20reveals\x20the\x20Clear\x20filter\x20control\x20and\x20matching\x20rows\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27button\x27,\x20{name:\x20\x27Clear\x20filter\x27}));\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27row\x27).filter({hasText:\x20\x27Uma\x20Quinn\x27}).first());\x0a\x20\x20});\x0a}\x0a'},'secretsExample':_0x3ee982(0x1a1),'envExample':_0x3ee982(0x199)};function unotestConfigMjs(_0x2350b9){const _0x1916e7={_0x75644f:0x190,_0x160810:0x1a0,_0x1297c1:0x1a3,_0x33aacf:0x19d},_0x22ebdd=_0x3ee982,_0x70ac1c=_0x2350b9===void 0x0?_0x22ebdd(_0x1916e7._0x75644f):'\x20\x20channel:\x20'+JSON[_0x22ebdd(_0x1916e7._0x160810)](_0x2350b9)+',';return _0x22ebdd(_0x1916e7._0x1297c1)+_0x70ac1c+_0x22ebdd(_0x1916e7._0x33aacf);}function _0x9288(){const _0x2279a1=['nfjXuxzrra','n1bQshrPva','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','nta4ndG1m1rnD2XyqG','y2HHBM5LBa','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','mdeTC21VA2uUANm','ndy5mte3EgXsA2j3','C3rYAw5NAwz5','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4Guhv0ig5VBI1ZzwnYzxqGDMfSDwvZicHvuKXZlcbLBwfPBhmSigLKCYKGAw4GDw5VDgvZDc8Uzw52lGOJcImGrKXfrvrFrvHbtvbmrqPmt0DjtJ0kueftu1DpuKq9cLrps0vopqO','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO','lY8GqhvUB3rLC3qVD2vIihbYB2PLy3qGy29UzMLNlIbbBgWGzMLLBgrZigfYzsbVChrPB25HBcdIGjqGzgvMyxvSDhmGyxbWBhKklY8GD2HLBIbVBwL0DgvKlGOVlWOVlYbtyxzLzcbHCYaUBwPZihnVihrOzsbYDw50Aw1LigXVywrZigL0igfZievttsbYzwDHCMrSzxnZig9MihrOzsbWCM9Qzwn0j3mklY8GCgfJA2fNzs5QC29Uicj0ExbLiIbMAwvSzc4GrM9YieLersbHDxrVy29TCgXLDguSihr5CguTAw1WB3j0ihrOzsbZy2HLBwe6cI8VcI8VicaGlYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcI8VicaGzxHWB3j0igrLzMf1BhqGEYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYb9oWOklYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcMv4Cg9YDcbKzwzHDwX0ihSkicaVlYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYWkicaVlYbICM93C2vYCZOGwYDJAhjVBwL1BsCSicDMAxjLzM94jYWGj3DLyMTPDcDDlcaGlY8Gq0KGB3zLCNjPzgukicaVlYb2Awv3Cg9YDdOGEYb3Awr0AdOGmti4mcWGAgvPz2H0oIa3mJaGFsWkicaVlYbYzxrYEtOGEYbJB3vUDdOGmsWGB246ifSNDhjHBNnPzw50j10GFsWGicaGicaGic8Vienjig92zxjYAwrLcIaGlY8GC3rVCMfNzvn0yxrLoIaNlNvUB3rLC3qVy2fJAguVyxv0Ac5QC29UjYWGicaGicaVlYbZzwuGAgvSCgvYCWO','zw52rxHHBxbSzq','lMvUDG','ztjL','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','BMfTzq','C2nHzMzVBgrxB3jRC3bHy2u','mtiXmNrdsvDXza','ChvZAa','mtqXotmZnMPRzg9PCW','mZqZsxbHBejv','ow5zqwfkBa','zgvMAw5LuhjVCgvYDhK','Dw5VDgvZDa','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','mtKZotyYCvjHzhHI','iYbaDw5VDgvZDc93zwiG4OcuigD1AwrLigzVCIbbssbHz2vUDhmGkgfUzcbODw1HBNmPcGPuAgLZihbYB2PLy3qGDxnLCYbByeb1BM90zxn0l3DLyMbDkgH0DhbZoI8VD3D3lM5WBwPZlMnVBs9WywnRywDLl0b1BM90zxn0l3DLyIKkzM9YigvUzc10BY1LBMqGDgvZDgLUzYbVzIb3zwiGyxbWBgLJyxrPB25ZlGOkiYmGv3jPDgLUzYbHihrLC3qG4OcuihvZzsb0AguGC2TPBgWGkYbnq1akcKzVCIbbtLKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4GztjLihrLC3q6cGOXlIbpCgvUihrOzsaQkMb3CML0zs1LmMuTDgvZDgaQkIbZA2LSBcdIGjqGyc5JBgf1zguVC2TPBgXZl3DYAxrLlwuYzs10zxn0l1nlsuXmlM1KyaOGicaOAw4Gq2XHDwrLienVzguGEw91ignHBIbHBhnVihj1BIbGl3DYAxrLlwuYzs10zxn0ycKG4OcuigfUzcbMB2XSB3CGAxqUcJiUierYAxzLihrOzsbICM93C2vYihrOCM91z2GGDgHLicOQyhvUB3rLC3qTD2vIycbnq1aGDg9VBhmQkJOGyg5LD19JB250zxH0ycdIHPikicaGygv4CgXVCMvFC3rHCNrGiokgKIbGzxHWBg9Yzv9ZDgvWycdIHPiGygDLDf9WywDLx3nUyxbZAg90ycdIHPiGyhj1BL90zxn0yc4kcKrVie5pvcbOyw5Klwf1DgHVCIb0zxn0CYbIBgLUzcbVCIbTyxaGDgHLihbYB2PLy3qGD2L0AcbGzMLUzgaVygXZyc9GyxDRycdIGjqGDgHLcNnRAwXSj3mGugHHC2uGmcbUyw1LCYb0AguGzxHHy3qGzMLSzxmGDg8GCMvHzc4GuNvUBMfIBguSignVChKTCgfZDgvHyMXLcMv4yw1WBgvZigXPDMuGAw4GyhvUB3rLC3qVztjLl2v4yw1WBgvZl2aUcGOJiYbmyxLVDxqkcI0GyhvUB3rLC3qVztjLlZXMzwf0DxjLpI88BMfTzt4UANnGiokaLcb0zxn0ihnJzw5HCMLVCYWGz3jVDxbLzcbIEsbMzwf0DxjLl3bHz2ukicaOB25Ligb0zxn0xYPGigz1BMn0Aw9UihbLCIbMAwXLks4GkIPszxf1AxjLzdOQkIbLDMvYEsbZy2vUyxjPBYbSAxzLCYbPBIbHcIaGzMvHDhvYzsbZDwjMB2XKzxiUieeGDgvZDcbMAwXLihbSywnLzcbKAxjLy3rSEsbPBIbGDw5VDgvZDc9LmMuVycbPCYbYzwPLy3rLzaOGigj5ihrOzsbSAw50zxiGkgbSAw50oNnJzw5HCMLVlwLUlxjVB3rGks4klsbGDw5VDgvZDc9LmMuVx2HLBhbLCNmVycdIGjqGChjVAMvJDc1ZCgvJAwzPyYbOzwXWzxjZicH2AxnPyMXLihrVigfSBcbZy2vUyxjPB3mPcI0GyhvUB3rLC3qVztjLl190zw1WBgf0zs5QC2aG4Ocuihn0yxj0Aw5NlxbVAw50ihrLBxbSyxrLicHJB3b5igLUDg8GysbMzwf0DxjLigzVBgrLCIKkcImJierttcbJB252zw50Aw9UCWOkvgHLierttcbPCYbHihn0CMLJDcbkuYbZDwjZzxqGCgfYC2vKigj5ieb1BM90zxn0l2rZBc4Gtwv0Ag9KignOywLUCYWGB3b0Aw9UCY0kB2jQzwn0CYWGyw5KihzHCMLHyMXLCYbHCMuGywXSB3DLzc4GtxvSDgKTBgLUzsbZDhjPBMDZihvZzqPIywnRDgLJA3mGyNv0igaKEY4UlN1GigLUDgvYCg9SyxrPB24GAxmGzM9YyMLKzgvUicHZyw5KyM94igjVDw5Kyxj5iokaLaPWyxnZihzHBhvLCYb2AweGCg9ZAxrPB25HBcbHCMDZks4kcIOQrxzLCNKGC3rLCcbTDxn0ihnPDcbPBNnPzguGysbGC3rLCcGIzgvZy3jPChrPB24IlcaOksa9pIb7iokaPIb9kwaGyMXVy2SGkgXPBNrLCGPLBMzVCMnLCYKUkIOGvgHLihrPDgXLigLZihbSywLUluvUz2XPC2GGAw50zw50oYb0AguGC3rLChmGAw5ZAwrLigfYzsb0AgukAw1WBgvTzw50yxrPB24UifDOzw4GysbZDgvWigXHDgvYigjYzwfRCYaOC2vSzwn0B3iGzhjPzNqPlcb5B3uGCMvHzcb0AgukDgL0BguGDg8GDw5KzxjZDgfUzcb3Agf0ihrOzsbNCM91Ccb3yxmGDhj5Aw5NihrVigrVigfUzcbYzxbHAxiGAxqUieDYB3vWigj5cMLUDgvUDcWGB25LigjSB2nRihbLCIbSB2DPy2fSignODw5RoGOkygbGANmkzNvUy3rPB24GDgvZDf9SB2DPBIGPihSkicbZDgvWkcjtAwDUigLUigfZihrOzsbKzw1VihvZzxiIlcaOksa9pIb7cIaGicbNB3rVkcDODhrWCZOVl2fWCc5LEgfTCgXLlMnVBs9SB2DPBICPoWOGicaGzMLSBcHNzxrcEuXHyMvSkcDfBwfPBcCPlcaNzgvTB0bLEgfTCgXLlMnVBsCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDIDxr0B24Nlcb7BMfTztOGj0XVzYbPBID9ksK7cIaGFsK7cGOGihn0zxaOiKrHC2HIB2fYzcbZAg93CYb0AguGC2LNBMvKlwLUihvZzxiIlcaOksa9pIb7cIaGicbHC3nLCNruzxH0kgDLDej5uM9SzsGNAgvHzgLUzYCPlcaNv2vSy29TzsCPoWOGih0PoWP9cMbGyaOkkIPcyxnLifvstcdIGjqGD3jPDguGCMvSyxrPDMuGCgf0AhmUkIOGyefquf9cqvnfx1vstgaGkgLUigb1BM90zxn0lY5LBNzGksbPCYb0AgukyxbWj3mGyMfZztSGygDVDg8OjY9SB2DPBICPycbYzxnVBhzLCYbHz2fPBNn0igL0lIbeB24NDcbJB25JyxrLBMf0zqOOygDVDg8Oqvbqx0jbu0vFvvjmicSGjY9SB2DPBICPycKG4OcuigP1C3qGCgfZCYb0AguGCgf0AdOkcMbGygPZcMDVDg8OjY9SB2DPBICPoWPMAwXSkgDLDej5tgfIzwWOj1bHC3n3B3jKjYKSifrfu1rFvvnfuL9qqvntv09srcK7cMbGyaOkkIPfBNzPCM9UBwvUDhmUkIOGt3zLCNjPzguGyefquf9cqvnfx1vstgaGkgfUzcbHBNKGDMfYksbWzxiGzw52AxjVBM1LBNqGD2L0AaPVDMvYBgf5igzPBgvZiokaLcbGDw5VDgvZDc8Uzw52lNn0ywDPBMDGlcbGDw5VDgvZDc8Uzw52lNbYB2r1y3rPB25GicHZzwnYzxrZoGPGDw5VDgvZDc8UC2vJCMv0CY48zw52pMaPlIbtzwXLy3qGB25Ligf0ihj1BIb0Aw1LoIbGBNb4ieb1BM90zxn0l3DLyIbLmMuGpg5HBwu+cI0Tzw52ihn0ywDPBMDGlIbuAguGB3zLCMXHEsbSyxLLCNmGB3zLCIb0AguGyMfZzsbGlMvUDMaGkg92zxjSyxKGD2LUCYKUcGOQkKv4DgvYBMfSihzHCMLHyMXLCYaMihnLy3jLDhm6kIOGCMvMzxjLBMnLigXVz2LUCYaVihrVA2vUCYbIEsbHigjHCMukyfvquevsx1noquTfycbUyw1LiokaLcbYzxnVBhzLzcbMCM9Tigb1BM90zxn0lY5LBNzGicHUB3jTywWPig9Yigb1BM90zxn0lY5ZzwnYzxrZyaOOC2vJCMv0lcbTyxnRzwqGAw4GBg9NCYKUie5VigbLBNyOkwaVyhnLy3jLDcGPycb3CMfWCgvYlIbbigXVD2vYy2fZzsbUyw1LigLZigfUcMLUlxnJzw5HCMLVigjPBMrPBMC7igfUihvUA25VD24Gyfvquevsx1noquTfycbMywLSCYb0AguGCNvUigfZA2LUzYb5B3uGDg8GywrKigL0cNrVigb1BM90zxn0lY5LBNzGlGOkkIPtzwXLy3rVCIbOAwvYyxjJAhKGkeqTmJiG4OcuigXPBNrLCIbLBMzVCMnLCYK6kIOkms4GygDLDej5vgvZDeLKkgLKkwaG4Ocuig1VC3qGC3rHyMXLcJiUigbNzxrcEvjVBguOCM9SzsWGE25HBwv9kwaG4OcuihnLBwfUDgLJlcbHmtf5lwf3yxjLcJmUigbNzxrcEuXHyMvSkhrLEhqPycdIGjqGzM9YigzVCM0GzMLLBgrZcJqUigbNzxrcEvrLEhqODgv4DcLGiokaLcbMB3iGDw5PCxvLihrLEhqkns4GygXVy2f0B3iOy3nZkwaG4OcuigXHC3qGCMvZB3j0icHSAw50zxiGD2fYBNmPcGPgDwXSihjLzMvYzw5JzsbZAgLWCgvKihDPDgGGDgHLihbHy2THz2u6cI0Gyg5VzgvFBw9KDwXLCY9aDw5VDgvZDc93zwiVz3vPzgvZl2rZBc1YzwzLCMvUy2uUBwrGiokaLcbeu0WGzNvUy3rPB25ZicSGBgLUDgvYignVzgvZcGOJiYbsDw5UAw5NicHdteKPcGOTigbUChGGqhvUB3rLC3qVD2vIiguYzsa8zMvHDhvYzt4Vpg5HBwu+ycdIGjqGCNvUigeGC2nLBMfYAw8GyNKGBMfTzqOTigbUChGGqhvUB3rLC3qVD2vIigXPBNrGiokaLcbZDgf0AwmGy2HLy2SGB2yGywXSihnJzw5HCMLVCYaRigHLBhbLCNmklsbGBNb4ieb1BM90zxn0l3DLyIbTy3bGiokaLcbZDgfYDcb0AguGtunqihnLCNzLCIbMB3iGywDLBNqGy29UDhjVBaOkiYmGvMLHie1ducaOq2XHDwrLienVzguGlYbdBgf1zguGrgvZA3rVCcaVien1CNnVCIKkcLrOzsbnq1aGC2vYDMvYigv4Cg9Zzxm6cI0Gyhj1BL90zxn0ig5HBwu9iJXUyw1LpIiGBw9Kzt0IC3rLCciGCgf1C2vpBKzHAwX1CMu9Dhj1zwaG4Ocuihj1BIb3AxrOihn0zxaTBw9KzqOTigbZDgvWycaVigbYzxn1BwvGiokaLcbHzhzHBMnLig9Uzsbbu1qGBM9KzsaVihj1BIb1BNrPBcbUzxH0ihbHDxnLcI0GygLUC3bLy3rFCNvUDgLTzwaG4Ocuign1CNjLBNqGC3rHDguSigXHC3qGzxjYB3iSigXVy2fSCYbKDw1WcI0GygfIB3j0x3j1BNrPBwvGiokaLcbRAwXSigeGCgf1C2vKihj1BNrPBwukcKzVCIbHz2vUDc1MAxGGD29YA2zSB3DZig9UigzSywT5ihrLC3rZoIbGywDLBNrFzML4ihrLC3rjzd0IpgLKpIjGihjLDhvYBNmGyqPZDhj1y3r1CMvKignVBNrLEhqGyNvUzgXLicHZzwuGrc0YnsdIGjqGD2uGBMv2zxiGy2fSBcbmte1Zig9Yigf1Dg8TyxbWBhKkzgLMzNmSihrOzsbKAwzMignVBwvZigzYB20GEw91CIbnq1aTAg9ZDcbHz2vUDcKUcG','mJC0nta5me93tePrEq','mJCWnty2z0nMA0D4','zxHHBxbSzxm','nJmYodG2merhAgLKBW'];_0x9288=function(){return _0x2279a1;};return _0x9288();}__name(unotestConfigMjs,'unotestConfigMjs');async function scaffoldWorkspace(_0x37d184,_0x5c4835={}){const _0x4b4373={_0x19f125:0x195,_0x1171a1:0x1a6,_0x4194bf:0x1a5,_0x6c7795:0x18f,_0x5bfd45:0x19e},_0x4818dd=_0x3ee982,_0x1babfa=[],_0x39ed32=[];await mkdir(join(_0x37d184,'unotest',_0x4818dd(0x1a6),_0x4818dd(_0x4b4373._0x19f125)),{'recursive':!![]}),await mkdir(join(_0x37d184,'unotest',_0x4818dd(_0x4b4373._0x1171a1),'_helpers'),{'recursive':!![]});const _0x20d599=[{'rel':'unotest.config.mjs','content':unotestConfigMjs(_0x5c4835[_0x4818dd(0x19c)])},{'rel':join('unotest',_0x4818dd(_0x4b4373._0x4194bf)),'content':templates[_0x4818dd(0x1a4)]},{'rel':join(_0x4818dd(_0x4b4373._0x6c7795),_0x4818dd(0x1a6),_0x4818dd(_0x4b4373._0x19f125),'01-smoke.js'),'content':templates['examples'][_0x4818dd(_0x4b4373._0x5bfd45)]}];for(const {rel:_0x24a0ad,content:_0x2eb32c}of _0x20d599){const _0xd08239=join(_0x37d184,_0x24a0ad);if(existsSync(_0xd08239)){_0x39ed32[_0x4818dd(0x18a)](_0x24a0ad);continue;}await writeFile(_0xd08239,_0x2eb32c),_0x1babfa[_0x4818dd(0x18a)](_0x24a0ad);}return{'projectRoot':_0x37d184,'created':_0x1babfa,'skipped':_0x39ed32};}__name(scaffoldWorkspace,_0x3ee982(0x188));export{scaffoldWorkspace};
|
|
1
|
+
const _0x36726a=_0x2f30;(function(_0x3110ff,_0x31f147){const _0x1cd54c={_0x11f4f5:0x101,_0x532b22:0xf9,_0x2877e6:0xf1,_0x6d264f:0x106,_0x283f52:0xea,_0x369df1:0xec,_0x228f4e:0xfe},_0x216b1c=_0x2f30,_0x430716=_0x3110ff();while(!![]){try{const _0x402b7e=-parseInt(_0x216b1c(0xf7))/0x1*(-parseInt(_0x216b1c(_0x1cd54c._0x11f4f5))/0x2)+parseInt(_0x216b1c(_0x1cd54c._0x532b22))/0x3*(-parseInt(_0x216b1c(_0x1cd54c._0x2877e6))/0x4)+parseInt(_0x216b1c(_0x1cd54c._0x6d264f))/0x5*(parseInt(_0x216b1c(0xed))/0x6)+parseInt(_0x216b1c(0x105))/0x7+-parseInt(_0x216b1c(_0x1cd54c._0x283f52))/0x8*(parseInt(_0x216b1c(_0x1cd54c._0x369df1))/0x9)+-parseInt(_0x216b1c(_0x1cd54c._0x228f4e))/0xa+parseInt(_0x216b1c(0xf0))/0xb;if(_0x402b7e===_0x31f147)break;else _0x430716['push'](_0x430716['shift']());}catch(_0x2ced05){_0x430716['push'](_0x430716['shift']());}}}(_0x467b,0xeb8f6));var __defProp=Object['defineProperty'],__name=(_0x1677cf,_0x29d865)=>__defProp(_0x1677cf,_0x36726a(0xff),{'value':_0x29d865,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';function _0x467b(){const _0x573fd8=['BMfTzq','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO','mNfuwxzmwq','mdeTC21VA2uUANm','zxHHBxbSzxm','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','mZa2nJa1nK9xC2zxuq','nuXvEgDJCa','ztjL','mtm4nZeXmMn1uhnHBa','lMvUDG','nJnvCgXmENG','ode1ndz0BeDABeW','x2HLBhbLCNm','zw52rxHHBxbSzq','mZaXotiWmdHdAe9PEMi','nJq0zgnSu0Do','Dw5VDgvZDenVBMzPz01QCW','lY8Gtw92zsaRihjLBMfTzsb0AgLZigzPBguGDg8GpgzLyxr1CMu+lZX5B3vYx25HBwu+lMPZicHLlMCUcI8Vigf1DgGVBg9NAw4UANmPigfUzcb0AguGzNvUy3rPB24GyMvSB3CGDg8GDgvZDf88Ew91CL9Uyw1LpIGPlIbty2vUyxjPB3mGBgL2zqOVlYbPBIbMzwf0DxjLihn1yMzVBgrLCNmSie5pvcb0AguGztjLihjVB3qG4OcuihrOzsbSAw50zxiGkgXPBNq6C2nLBMfYAw8TAw4TCM9VDcKklY8GCMvQzwn0CYbHihrLC3qGzMLSzsbWBgfJzwqGzgLYzwn0BhKGAw4GDw5VDgvZDc9LmMuVlIbuAguGBg9HzgvYigrLCML2zxmGDgHLcI8VigvUDhj5ig5HBwuGzNjVBsb0AguGzMLSzsbIyxnLBMfTzsdIGjqGA2vIywiTy2fZzsbKyxnOzxmGyMvJB21LihvUzgvYC2nVCMvZlGOklY8GrxzLCNKGzxHLy3v0ywjSzsbZDgvWig11C3qGC2L0igLUC2LKzsbHihn0zxaOiI4UlIiSicGPid0+ihSG4OcMih0PigjSB2nRlIbuAguklY8GDgL0BguGAxmGysbWBgfPBI1fBMDSAxnOigrLC2nYAxb0Aw9Uig9MihrOzsbNCM91CdSGDgHLihn0zxbZigLUC2LKzsbHCMuklY8GDgHLigLTCgXLBwvUDgf0Aw9UlIbhCM91CcbIEsbPBNrLBNqGkfnLDhvWic8Grw50zxiGlYbby3qGlYbbC3nLCNqGB3iklY8GD2HHDgv2zxiGCMvHzhmGD2vSBcKG4Ocuig9UzsbIBg9JAYbWzxiGBg9NAwnHBcbJAhvUAY4kcMz1BMn0Aw9UihrLC3rFEw91CL9Uyw1Lx2HLCMuOksb7cIaGC3rLCcGIu2vLzcbHigTUB3DUihvZzxiGDMLHiercic8GqvbjigzPEhr1CMvZigzYB20Gx2HLBhbLCNmViIWGkcKGpt4GEWOGicaGlY8GicaGD2LWzv9LmMvFDxnLCNmOktSkicaGic8VicaGihvZzxjFAwqGpsbZzwvKx3vZzxiOj2fSAwnLqgv4yw1WBguUy29TjYWGj3nLy3jLDcCPoWOGih0PoWOkicbZDgvWkcjtAwDUigLUigfZihrOzsbZzwvKzwqGDxnLCIiSicGPid0+ihSkicaGigDVDg8Oj2H0DhbZoI8VEw91CI1HChaUDgvZDc9SB2DPBICPoWOGicaGlY8GicaGzMLSBcHNzxrcEuXHyMvSkcDfBwfPBcCPlcaNywXPy2vazxHHBxbSzs5JB20NktSkicaGic8VicaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGj3nLy3jLDcCPoWOGicaGlY8GicaGy2XPy2SOz2v0qNLsB2XLkcDIDxr0B24Nlcb7BMfTztOGj0XVzYbPBID9ksK7cIaGFsK7cGOGihn0zxaOiKfZC2vYDcb0AguGzgfZAgjVyxjKihnOB3DZihrOzsbZAwDUzwqTAw4GDxnLCIiSicGPid0+ihSkicaGic8VicaGigfZC2vYDfvYBcGNl2rHC2HIB2fYzcCPoWOGicaGlY8GicaGyxnZzxj0vgv4DcHNzxrcEvjVBguOj2HLywrPBMCNksWGj1DLBgnVBwuSiefSAwnLjYK7cIaGicaVlYaGicbJB3vUDca9igrIuxvLCNKOj1nftevdvcbJB3vUDcGQksbguK9nihvZzxjZifDirvjfigfJDgL2zsa9ihrYDwuNktSkicaGic8VicaGigfZC2vYDfrYDwuOy291BNqGpIaWlcaNzxHWzwn0zwqGyxqGBgvHC3qGB25LigfJDgL2zsb1C2vYjYK7cIaGFsK7cN0k','C3rYAw5NAwz5','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4GqsbZDwjWCM9JzxnZihrOyxqGz2vUDwLUzwX5ig5LzwrZig9UzsaOysbSAxn0zw5LCIb3AxrOigekiYb0B2TLBIKGz2v0CYbPDcb2AweGDgHLigv4CgXPy2L0igfSBg93BgLZDcbPBIb1BM90zxn0lMnVBMzPzY4QoGOJicaGC2fUzgjVEdOGEYbLEhbVCNrtzwnYzxrZoIbBj1rps0voj10GFqOJifb1DcbUB24TC2vJCMv0ihzHBhvLCYaOvvjmCYWGzw1HAwXZlcbPzhmPigLUihvUB3rLC3qVlMvUDI4kiWOJiezmruvux0vyqu1qteukte9hsu49cLbbu1nxt1jepqPut0TftJ0k','Dw5VDgvZDc5JB25MAwCUBwPZ','otuWoduZthLfDeXg','icbJAgfUBMvSoIa','mJa3ndvvv3LXs1e','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','ChvZAa','y2HHBM5LBa','Dw5VDgvZDa','odu1mJG4merYu1LAzq'];_0x467b=function(){return _0x573fd8;};return _0x467b();}import{join}from'path';var templates={'scenarioTemplate':_0x36726a(0xf3),'agentsMd':_0x36726a(0xfa),'claudeMdBody':'##\x20E2E\x20testing\x20with\x20@unotest/web\x0a\x0a@AGENTS.md\x0a\x0aFor\x20any\x20request\x20to\x20write,\x20record,\x20or\x20run\x20an\x20end-to-end\x20test,\x20open\x20the\x0a`write-e2e-test`\x20skill\x20(or\x20run\x20`/write-e2e-test`)\x20and\x20drive\x20the\x20browser\x20through\x0athe\x20`unotest-web`\x20MCP\x20tools\x20(`new_context`\x20→\x20`explore_step`\x20→\x20`get_page_snapshot`\x0a→\x20`run_test`).\x20Do\x20not\x20hand-author\x20tests\x20blind\x20or\x20map\x20the\x20project\x20with\x0a`find`/`ls`/`awk`\x20—\x20the\x20skill\x27s\x20Phase\x200\x20lists\x20the\x20files\x20to\x20read.','examples':{'01-smoke.js':_0x36726a(0x100),'02-form-fill.js':'//\x20Example\x2002\x20—\x20fill\x20an\x20input\x20+\x20assert\x20the\x20app\x20reacted.\x0a//\x0a//\x20Against\x20playground.unotest.com/scenarios/big-table.\x20Demonstrates\x20getByRole\x0a//\x20for\x20a\x20labelled\x20input,\x20typed\x20input\x20via\x20fill(),\x20and\x20a\x20locator\x20method-chain\x0a//\x20(getByRole(\x27row\x27).filter({hasText}).first())\x20in\x20an\x20assertion.\x0a//\x20Run\x20with:\x20\x20npx\x20@unotest/web\x20e2e\x20examples/02-form-fill\x0a\x0afunction\x20test_form_fill_happy_path()\x20{\x0a\x20\x20step(\x22Filter\x20the\x20Big\x20Table\x20by\x20a\x20name\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27/scenarios/big-table\x27);\x0a\x20\x20\x20\x20fill(getByRole(\x27textbox\x27,\x20{name:\x20\x27Filter\x20by\x20name\x27}),\x20\x27Uma\x20Quinn\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Filtering\x20reveals\x20the\x20Clear\x20filter\x20control\x20and\x20matching\x20rows\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27button\x27,\x20{name:\x20\x27Clear\x20filter\x27}));\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27row\x27).filter({hasText:\x20\x27Uma\x20Quinn\x27}).first());\x0a\x20\x20});\x0a}\x0a'},'secretsExample':_0x36726a(0xf5),'envExample':'#\x20unotest-web\x20—\x20copied\x20to\x20unotest/.env\x20by\x20`init`\x20if\x20not\x20present.\x0a#\x0a#\x20Fill\x20in\x20values\x20that\x20apply\x20to\x20your\x20project.\x20Variables\x20are\x20loaded\x20by\x20the\x0a#\x20runner\x20at\x20scenario\x20start.\x0a#\x0a#\x20Reference\x20any\x20variable\x20from\x20a\x20scenario\x20by\x20its\x20bare\x20UPPER_SNAKE\x20name\x20—\x0a#\x20no\x20env()/secret()\x20wrapper:\x0a#\x0a#\x20\x20\x20goto(\x27/login\x27);\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20relative\x20—\x20see\x20APP_BASE_URL\x0a#\x20\x20\x20fill(getByLabel(\x27Email\x27),\x20TEST_USER_EMAIL);\x0a#\x0a#\x20Secret\x20values\x20(passwords,\x20tokens)\x20go\x20in\x20unotest/.secrets\x20instead\x20—\x20same\x0a#\x20format,\x20but\x20masked\x20in\x20every\x20log.\x20An\x20unknown\x20UPPER_SNAKE\x20name\x20fails\x20the\x0a#\x20run\x20with\x20a\x20clear\x20\x22add\x20it\x20to\x20unotest/.env\x22\x20message.\x0a#\x0a#\x20Environments:\x20override\x20any\x20value\x20per\x20environment\x20with\x20overlay\x20files\x20—\x0a#\x20unotest/.env.staging,\x20unotest/.env.production\x20(secrets:\x20.secrets.<env>).\x0a#\x20Select\x20one:\x20`npx\x20@unotest/web\x20e2e\x20<name>\x20--env\x20staging`.\x20The\x20overlay\x20layers\x0a#\x20over\x20this\x20base\x20file\x20(overlay\x20wins);\x20the\x20shell\x20environment\x20wins\x20over\x20both.\x0a\x0a#\x20---\x20App\x20under\x20test\x20--------------------------------------------------------\x0a#\x20The\x20app\x27s\x20base\x20URL.\x20Relative\x20goto(\x27/path\x27)\x20resolves\x20against\x20it\x20(wired\x20into\x0a#\x20Playwright\x27s\x20baseURL\x20automatically),\x20so\x20write\x20goto(\x27/login\x27)\x20—\x20never\x0a#\x20goto(APP_BASE_URL\x20+\x20\x27/login\x27).\x20Also\x20used\x20for\x20assertUrl\x20substring\x20matching.\x0a#\x20Defaults\x20to\x20the\x20unotest\x20playground\x20so\x20the\x20example\x20scenarios\x20run\x20out\x20of\x20the\x0a#\x20box;\x20point\x20it\x20at\x20your\x20own\x20app.\x0aAPP_BASE_URL=https://playground.unotest.com\x0a\x0a#\x20---\x20Database\x20--------------------------------------------------------------\x0a#\x20Used\x20by\x20dbQuery\x20/\x20dbExec.\x20Install\x20the\x20matching\x20driver\x20as\x20a\x20peer-dep:\x0a#\x20\x20\x20pnpm\x20add\x20-D\x20pg\x20@types/pg\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20for\x20postgresql://\x0a#\x20\x20\x20pnpm\x20add\x20-D\x20mysql2\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20for\x20mysql://\x0a#\x20(SQLite\x20via\x20better-sqlite3\x20—\x20install\x20only\x20if\x20needed.)\x0aDATABASE_URL=postgresql://postgres:postgres@localhost:5432/myapp_test\x0a\x0a#\x20---\x20Extra\x20API\x20hosts\x20-------------------------------------------------------\x0a#\x20apiCall(...)\x20goes\x20against\x20sandbox.apiBaseUrl\x20from\x20unotest.config.*\x20by\x0a#\x20default.\x20A\x20setup\x20that\x20talks\x20to\x20MORE\x20hosts\x20names\x20them\x20here\x20and\x20picks\x20one\x0a#\x20per\x20call\x20by\x20the\x20variable\x20NAME\x20(URLs\x20never\x20appear\x20in\x20scenarios):\x0a#\x20\x20\x20apiCall(\x27POST\x27,\x20\x27/things\x27,\x20body,\x20headers,\x20{base:\x20\x27API_BASE_CHAT\x27})\x0a#\x20API_BASE_CHAT=https://chatbackend.example.com\x0a\x0a#\x20---\x20Runner\x20--------------------------------------------------------------\x0a#\x20Show\x20the\x20browser\x20window\x20during\x20runs\x20(default:\x20headless).\x0a#\x20UNOTEST_HEADED=1\x0a#\x20Slow\x20each\x20Playwright\x20op\x20by\x20N\x20ms\x20(default:\x200).\x20Pairs\x20with\x20HEADED\x20for\x0a#\x20watching\x20the\x20agent\x20at\x20work.\x0a#\x20UNOTEST_SLOW_MO=100\x0a#\x20Browser\x20used\x20by\x20the\x20CLI\x20(chromium\x20|\x20firefox\x20|\x20webkit).\x20Default:\x20chromium.\x0a#\x20UNOTEST_BROWSER=chromium\x0a#\x20Default\x20action\x20timeout\x20in\x20milliseconds\x20—\x20applied\x20to\x20every\x20click\x20/\x0a#\x20fill\x20/\x20waitFor\x20/\x20etc.\x20via\x20Playwright\x27s\x20setDefaultTimeout.\x20Default\x203000.\x0a#\x20Bump\x20if\x20your\x20app\x20is\x20slow;\x20per-action\x20override\x20via\x20the\x20action\x27s\x0a#\x20options.timeout.\x20Playwright\x27s\x20stock\x2030000\x20strands\x20interactive\x20agents.\x0a#\x20UNOTEST_DEFAULT_TIMEOUT_MS=3000\x0a#\x20Default\x20navigation\x20timeout\x20in\x20milliseconds\x20—\x20applied\x20to\x20goto\x20/\x20reload\x20/\x0a#\x20waitForUrl,\x20click\x27s\x20post-action\x20navigation\x20wait,\x20AND\x20setPage\x27s\x20wait\x20for\x20a\x0a#\x20newly\x20opened\x20tab\x20to\x20appear\x20+\x20load.\x20Real-world\x20pages\x20routinely\x20take\x205–15s\x0a#\x20to\x20fire\x20\x27load\x27;\x20keep\x20this\x20separate\x20from\x20the\x20action\x20timeout\x20above.\x0aUNOTEST_DEFAULT_NAVIGATION_TIMEOUT_MS=15000\x0a\x0a#\x20Per-run\x20wall-clock\x20budget\x20in\x20milliseconds\x20—\x20a\x20run\x20aborts\x20once\x20it\x20exceeds\x0a#\x20this.\x20Guards\x20against\x20a\x20stuck\x20scenario\x20hanging\x20the\x20agent\x20indefinitely.\x0a#\x20Invalid\x20or\x20non-positive\x20values\x20fall\x20back\x20to\x20the\x20default.\x20Default\x20300000.\x0a#\x20UNOTEST_MAX_DURATION_MS=300000\x0a\x0a#\x20---\x20Locale\x20+\x20timezone\x20---------------------------------------------------\x0a#\x20Pin\x20the\x20browser\x20context\x27s\x20Accept-Language\x20/\x20navigator.language.\x20Without\x0a#\x20these,\x20tests\x20inherit\x20the\x20OS\x20locale\x20—\x20accessible-name\x20selectors\x0a#\x20(`getByRole(name)`)\x20on\x20i18n\x27d\x20apps\x20will\x20break\x20across\x20machines.\x0a#\x20UNOTEST_LOCALE=en-US\x0a#\x20UNOTEST_TIMEZONE=UTC\x0a\x0a#\x20---\x20Recording\x20(explore_*)\x20----------------------------------------------\x0a#\x20Grace\x20window\x20in\x20ms\x20after\x20each\x20explore_step\x20action.\x20If\x20a\x20click\x20opens\x20a\x0a#\x20new\x20tab/popup,\x20the\x20MCP\x20server\x20auto-switches\x20the\x20active\x20page\x20to\x20it\x20AND\x0a#\x20inserts\x20setPage(N)\x20into\x20the\x20generated\x20DSL\x20trace.\x20Set\x20to\x200\x20to\x20disable\x0a#\x20(strict\x20mode).\x20Has\x20NO\x20effect\x20on\x20run_test\x20—\x20there\x20setPage\x20already\x20waits\x0a#\x20for\x20the\x20tab\x20to\x20appear\x20on\x20its\x20own.\x20Range:\x20[0,\x2010000].\x20Default:\x202000.\x0a#\x20UNOTEST_POPUP_GRACE_MS=2000\x0a\x0a#\x20---\x20Logging\x20-------------------------------------------------------------\x0a#\x20debug\x20|\x20info\x20|\x20warn\x20|\x20error.\x20Default:\x20info.\x0aUNOTEST_LOG_LEVEL=info\x0a\x0a#\x20---\x20Debug\x20diagnostics\x20---------------------------------------------------\x0a#\x20Off\x20by\x20default.\x20Set\x20to\x201\x20to\x20record\x20a\x20structured\x20JSONL\x20log\x20+\x20per-call\x0a#\x20folders\x20under\x20unotest/.debug/\x20—\x20then\x20restart\x20the\x20MCP\x20server.\x20Each\x20tool\x0a#\x20call\x20gets\x20a\x20folder\x20with\x20the\x20full\x20snapshot\x20JSON,\x20the\x20outerHTML\x20of\x20the\x0a#\x20element\x20a\x20locator\x20resolved\x20to,\x20and\x20(on\x20failure)\x20page.html\x20+\x20a\x20screenshot,\x0a#\x20so\x20you\x20(and\x20the\x20AI\x20agent,\x20via\x20get_last_mcp_log)\x20can\x20verify\x20the\x20snapshot\x0a#\x20didn\x27t\x20glitch\x20and\x20the\x20locator\x20hit\x20the\x20right\x20element\x20—\x20instead\x20of\x20guessing\x0a#\x20from\x20a\x20truncated\x20error.\x20audit_last_run\x20then\x20checks\x20the\x20run\x20against\x20the\x0a#\x20testing\x20rules.\x20Also\x20turns\x20on\x20full\x20CLI\x20stack\x20traces.\x20Use\x20\x27summary\x27\x20for\x20a\x0a#\x20lighter\x20log\x20(tool\x20+\x20snapshot\x20layers\x20only,\x20no\x20artifacts).\x20NOTE:\x20tool\x0a#\x20arguments\x20are\x20logged\x20verbatim,\x20so\x20a\x20fill()\x20with\x20a\x20password\x20lands\x20in\x20the\x0a#\x20local\x20(gitignored)\x20log\x20—\x20keep\x20this\x20off\x20unless\x20you\x27re\x20debugging.\x0a#\x20UNOTEST_DEBUG=1\x0a\x0a#\x20---\x20Capture\x20(viewer\x20inspector)\x20------------------------------------------\x0a#\x20Record\x20the\x20browser\x20console\x20+\x20network\x20requests\x20into\x20each\x20run\x27s\x20dir\x20so\x20the\x0a#\x20viewer\x27s\x20Console\x20/\x20Network\x20inspector\x20tabs\x20are\x20populated.\x20Set\x20to\x200\x20to\x20disable.\x0aUNOTEST_NETWORK=1\x0aUNOTEST_CONSOLE=1\x0a#\x20Set\x20to\x201\x20to\x20also\x20capture\x20a\x20screenshot\x20after\x20EVERY\x20executed\x20step\x20(into\x0a#\x20unotest/.runs/<runId>/screenshot/;\x20click\x20a\x20step\x20row\x20in\x20the\x20viewer\x20to\x20see\x0a#\x20it).\x20On\x20failure,\x20a\x20screenshot\x20+\x20page.html\x20always\x20land\x20in\x0a#\x20unotest/.runs/<runId>/failure/\x20—\x20no\x20flag\x20needed.\x0a#\x20UNOTEST_STEP_SCREENSHOTS=1\x0a'};function _0x2f30(_0x12eb2c,_0x169852){_0x12eb2c=_0x12eb2c-0xe9;const _0x467b57=_0x467b();let _0x2f3037=_0x467b57[_0x12eb2c];if(_0x2f30['bmLLCk']===undefined){var _0x16e063=function(_0x43aa4a){const _0x523a4a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1677cf='',_0x29d865='';for(let _0x16acb6=0x0,_0x1b25d5,_0x4b1232,_0xa95bdd=0x0;_0x4b1232=_0x43aa4a['charAt'](_0xa95bdd++);~_0x4b1232&&(_0x1b25d5=_0x16acb6%0x4?_0x1b25d5*0x40+_0x4b1232:_0x4b1232,_0x16acb6++%0x4)?_0x1677cf+=String['fromCharCode'](0xff&_0x1b25d5>>(-0x2*_0x16acb6&0x6)):0x0){_0x4b1232=_0x523a4a['indexOf'](_0x4b1232);}for(let _0xa73159=0x0,_0x29a174=_0x1677cf['length'];_0xa73159<_0x29a174;_0xa73159++){_0x29d865+='%'+('00'+_0x1677cf['charCodeAt'](_0xa73159)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x29d865);};_0x2f30['HGPiVR']=_0x16e063,_0x2f30['jHbggR']={},_0x2f30['bmLLCk']=!![];}const _0x30dc32=_0x467b57[0x0],_0x1ad19f=_0x12eb2c+_0x30dc32,_0x275472=_0x2f30['jHbggR'][_0x1ad19f];return!_0x275472?(_0x2f3037=_0x2f30['HGPiVR'](_0x2f3037),_0x2f30['jHbggR'][_0x1ad19f]=_0x2f3037):_0x2f3037=_0x275472,_0x2f3037;}function unotestConfigMjs(_0x16acb6){const _0x17be92={_0xf5bbaa:0xf8,_0x2a1a5b:0xf4,_0x7c3aa7:0x104},_0x1212f3=_0x36726a,_0x1b25d5=_0x16acb6===void 0x0?'\x20\x20//\x20channel:\x20\x27chrome\x27,\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20\x27chrome\x27\x20/\x20\x27msedge\x27\x20/\x20null\x20(bundled)':_0x1212f3(_0x17be92._0xf5bbaa)+JSON[_0x1212f3(_0x17be92._0x2a1a5b)](_0x16acb6)+',';return'//\x20@unotest/web\x20project\x20config.\x20All\x20fields\x20are\x20optional\x20—\x20defaults\x20apply\x0a//\x20when\x20omitted.\x0a//\x0a//\x20Saved\x20as\x20.mjs\x20so\x20the\x20runtime\x20loads\x20it\x20as\x20ESM\x20regardless\x20of\x20the\x20project\x27s\x0a//\x20package.json\x20\x22type\x22\x20field.\x20For\x20IDE\x20autocomplete,\x20type-import\x20the\x20schema:\x0a//\x0a//\x20\x20\x20/**\x20@type\x20{Partial<import(\x27@unotest/web\x27).UnotestConfig>}\x20*/\x0a//\x20\x20\x20export\x20default\x20{\x20baseUrl:\x20\x27https://your-app.test\x27\x20};\x0a\x0a/**\x20@type\x20{Partial<import(\x27@unotest/web\x27).UnotestConfig>}\x20*/\x0aexport\x20default\x20{\x0a\x20\x20//\x20baseUrl:\x20\x27https://your-app.test\x27,\x0a\x20\x20//\x20browsers:\x20[\x27chromium\x27,\x20\x27firefox\x27,\x20\x27webkit\x27],\x20\x20//\x20CI\x20override\x0a\x20\x20//\x20viewport:\x20{\x20width:\x201280,\x20height:\x20720\x20},\x0a\x20\x20//\x20retry:\x20{\x20count:\x201,\x20on:\x20[\x27transient\x27]\x20},\x20\x20\x20\x20\x20\x20\x20\x20//\x20CI\x20override\x0a\x20\x20//\x20storageState:\x20\x27.unotest/cache/auth.json\x27,\x20\x20\x20\x20\x20\x20//\x20see\x20helpers\x0a'+_0x1b25d5+_0x1212f3(_0x17be92._0x7c3aa7);}__name(unotestConfigMjs,_0x36726a(0xf2));async function scaffoldWorkspace(_0x4b1232,_0xa95bdd={}){const _0x3e08bc={_0x22d232:0xe9,_0xe7d0d8:0xee,_0x5c8457:0xfc,_0x3da873:0xfd,_0x5d4b50:0xeb,_0x530bc7:0x103,_0x591248:0x102,_0x49a9c4:0xfb},_0x4dd94a=_0x36726a,_0xa73159=[],_0x29a174=[];await mkdir(join(_0x4b1232,'unotest',_0x4dd94a(_0x3e08bc._0x22d232),_0x4dd94a(0x103)),{'recursive':!![]}),await mkdir(join(_0x4b1232,_0x4dd94a(0xfd),_0x4dd94a(0xe9),_0x4dd94a(_0x3e08bc._0xe7d0d8)),{'recursive':!![]});const _0x1630e8=[{'rel':_0x4dd94a(0xf6),'content':unotestConfigMjs(_0xa95bdd[_0x4dd94a(_0x3e08bc._0x5c8457)])},{'rel':join(_0x4dd94a(_0x3e08bc._0x3da873),_0x4dd94a(_0x3e08bc._0x5d4b50)),'content':templates[_0x4dd94a(0xef)]},{'rel':join(_0x4dd94a(_0x3e08bc._0x3da873),_0x4dd94a(_0x3e08bc._0x22d232),_0x4dd94a(_0x3e08bc._0x530bc7),_0x4dd94a(_0x3e08bc._0x591248)),'content':templates['examples'][_0x4dd94a(0x102)]}];for(const {rel:_0xa0d412,content:_0x131ef1}of _0x1630e8){const _0x540f64=join(_0x4b1232,_0xa0d412);if(existsSync(_0x540f64)){_0x29a174[_0x4dd94a(0xfb)](_0xa0d412);continue;}await writeFile(_0x540f64,_0x131ef1),_0xa73159[_0x4dd94a(_0x3e08bc._0x49a9c4)](_0xa0d412);}return{'projectRoot':_0x4b1232,'created':_0xa73159,'skipped':_0x29a174};}__name(scaffoldWorkspace,'scaffoldWorkspace');export{scaffoldWorkspace};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var _0x54cd77=_0xcb77;function _0xcb77(_0x56fffd,_0x5d4acf){_0x56fffd=_0x56fffd-0x6a;var _0x56dfcb=_0x56df();var _0xcb77d7=_0x56dfcb[_0x56fffd];if(_0xcb77['iwGvxI']===undefined){var _0x5f1214=function(_0x345a5c){var _0xdc6539='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0xf9dcbe='',_0x17a350='';for(var _0x46a2ab=0x0,_0x436840,_0x4ddf4e,_0x88f26=0x0;_0x4ddf4e=_0x345a5c['charAt'](_0x88f26++);~_0x4ddf4e&&(_0x436840=_0x46a2ab%0x4?_0x436840*0x40+_0x4ddf4e:_0x4ddf4e,_0x46a2ab++%0x4)?_0xf9dcbe+=String['fromCharCode'](0xff&_0x436840>>(-0x2*_0x46a2ab&0x6)):0x0){_0x4ddf4e=_0xdc6539['indexOf'](_0x4ddf4e);}for(var _0x20f043=0x0,_0x4926b1=_0xf9dcbe['length'];_0x20f043<_0x4926b1;_0x20f043++){_0x17a350+='%'+('00'+_0xf9dcbe['charCodeAt'](_0x20f043)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x17a350);};_0xcb77['dALbhe']=_0x5f1214,_0xcb77['zaIoES']={},_0xcb77['iwGvxI']=!![];}var _0x594e26=_0x56dfcb[0x0],_0x47afe4=_0x56fffd+_0x594e26,_0x55125=_0xcb77['zaIoES'][_0x47afe4];return!_0x55125?(_0xcb77d7=_0xcb77['dALbhe'](_0xcb77d7),_0xcb77['zaIoES'][_0x47afe4]=_0xcb77d7):_0xcb77d7=_0x55125,_0xcb77d7;}(function(_0x1c5855,_0x3d4f72){var _0x1b4269={_0xada5f6:0x78,_0x5d932b:0x6b,_0x7fede2:0x73,_0xf16bca:0x7d,_0x915bed:0x77},_0x520136=_0xcb77,_0x557dae=_0x1c5855();while(!![]){try{var _0x12cc08=-parseInt(_0x520136(_0x1b4269._0xada5f6))/0x1*(-parseInt(_0x520136(_0x1b4269._0x5d932b))/0x2)+-parseInt(_0x520136(0x74))/0x3+-parseInt(_0x520136(0x70))/0x4+parseInt(_0x520136(0x71))/0x5+-parseInt(_0x520136(_0x1b4269._0x7fede2))/0x6*(parseInt(_0x520136(_0x1b4269._0xf16bca))/0x7)+-parseInt(_0x520136(0x7b))/0x8*(-parseInt(_0x520136(0x75))/0x9)+parseInt(_0x520136(_0x1b4269._0x915bed))/0xa;if(_0x12cc08===_0x3d4f72)break;else _0x557dae['push'](_0x557dae['shift']());}catch(_0x248c9e){_0x557dae['push'](_0x557dae['shift']());}}}(_0x56df,0xb3b6c));import{fileURLToPath}from'url';import{dirname,resolve}from'path';import{spawn}from'child_process';import{existsSync}from'fs';var here=dirname(fileURLToPath(import.meta.url)),candidates=[resolve(here,_0x54cd77(0x72)),resolve(here,_0x54cd77(0x6a))],serverEntry=candidates[_0x54cd77(0x6c)](_0xf9dcbe=>existsSync(_0xf9dcbe));!serverEntry&&(process[_0x54cd77(0x6d)]['write']('serve-fixture:\x20cannot\x20locate\x20fixture\x20server\x20entry.\x20Tried:\x0a'+candidates[_0x54cd77(0x6e)](_0x17a350=>'\x20\x20'+_0x17a350+'\x0a')[_0x54cd77(0x7a)]('')+'Did\x20you\x20publish\x20without\x20examples/fixtures/?\x0a'),process['exit'](0x1));var child=spawn(process[_0x54cd77(0x7e)],[serverEntry,...process[_0x54cd77(0x6f)][_0x54cd77(0x7c)](0x2)],{'stdio':_0x54cd77(0x79)});child['on'](_0x54cd77(0x76),_0x46a2ab=>process[_0x54cd77(0x76)](_0x46a2ab??0x1));function _0x56df(){var _0x1be9c7=['yxjNDG','mtGYmtC4me5sC0HQzq','mZKZmte0mgziqK5era','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','nda2ofr1CerAsq','ndm2nZK3ow1eq3nkwG','mtaWmJeWntLYsxDryw8','zxHPDa','mtaXnZi3nJbbrfDHAfK','ntDdBwPZAuW','Aw5OzxjPDa','AM9PBG','offMwwnIqq','C2XPy2u','mti0mdrrrgfVy04','zxHLy1bHDgG','lI4VlI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','mZi3mdjou3jNuw8','zMLUza','C3rKzxjY','BwfW'];_0x56df=function(){return _0x1be9c7;};return _0x56df();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x27fbae=_0x1fe2;(function(_0x38f9a2,_0x32502a){const _0x74d110={_0x510192:0x12b,_0x4d2eac:0x130,_0x2c9d96:0x10a,_0x1ad60e:0x137},_0xa0b935=_0x1fe2,_0x36fbcd=_0x38f9a2();while(!![]){try{const _0x55fbd9=parseInt(_0xa0b935(0xf1))/0x1+-parseInt(_0xa0b935(_0x74d110._0x510192))/0x2+-parseInt(_0xa0b935(0x108))/0x3*(-parseInt(_0xa0b935(0x10b))/0x4)+-parseInt(_0xa0b935(_0x74d110._0x4d2eac))/0x5*(parseInt(_0xa0b935(0xf4))/0x6)+-parseInt(_0xa0b935(_0x74d110._0x2c9d96))/0x7+parseInt(_0xa0b935(_0x74d110._0x1ad60e))/0x8*(-parseInt(_0xa0b935(0x144))/0x9)+parseInt(_0xa0b935(0x13f))/0xa;if(_0x55fbd9===_0x32502a)break;else _0x36fbcd['push'](_0x36fbcd['shift']());}catch(_0x9a7a05){_0x36fbcd['push'](_0x36fbcd['shift']());}}}(_0x1571,0x1d5df));function _0x1fe2(_0x4fd5d5,_0x35d668){_0x4fd5d5=_0x4fd5d5-0xe2;const _0x1571aa=_0x1571();let _0x1fe2f7=_0x1571aa[_0x4fd5d5];if(_0x1fe2['fKIlLP']===undefined){var _0x4995bf=function(_0x416d3){const _0x423e7c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x15fc8b='',_0x3ecd13='';for(let _0x5028a0=0x0,_0x2883dd,_0x5b8b24,_0x10e10c=0x0;_0x5b8b24=_0x416d3['charAt'](_0x10e10c++);~_0x5b8b24&&(_0x2883dd=_0x5028a0%0x4?_0x2883dd*0x40+_0x5b8b24:_0x5b8b24,_0x5028a0++%0x4)?_0x15fc8b+=String['fromCharCode'](0xff&_0x2883dd>>(-0x2*_0x5028a0&0x6)):0x0){_0x5b8b24=_0x423e7c['indexOf'](_0x5b8b24);}for(let _0xcca118=0x0,_0x1319be=_0x15fc8b['length'];_0xcca118<_0x1319be;_0xcca118++){_0x3ecd13+='%'+('00'+_0x15fc8b['charCodeAt'](_0xcca118)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ecd13);};_0x1fe2['ReYNfG']=_0x4995bf,_0x1fe2['kGfYoc']={},_0x1fe2['fKIlLP']=!![];}const _0x53bb15=_0x1571aa[0x0],_0x3073d1=_0x4fd5d5+_0x53bb15,_0x25d8cf=_0x1fe2['kGfYoc'][_0x3073d1];return!_0x25d8cf?(_0x1fe2f7=_0x1fe2['ReYNfG'](_0x1fe2f7),_0x1fe2['kGfYoc'][_0x3073d1]=_0x1fe2f7):_0x1fe2f7=_0x25d8cf,_0x1fe2f7;}var __defProp=Object[_0x27fbae(0x10f)],__name=(_0x3ecd13,_0x5028a0)=>__defProp(_0x3ecd13,_0x27fbae(0xed),{'value':_0x5028a0,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x15fc8b}from'fs';function _0x1571(){const _0x59b01d=['xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','ChjVyMvdAhjVBwvczxrH','BxnLzgDL','nJu1surUzuzg','yNvPBgrfBNy','C3vWCg9YDgvKs2LUzhm','AM9PBG','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','BgfIzwW','AgvHzgvK','mJy3mKDIAvziAa','ztjL','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','DxrMoa','A2LUza','uhjVz3jHBuzPBgvZ','ls1ICMvHAW','ndK1mdu5mhbjC3L6AG','y2HYB21PDw0TyNjVD3nLCG','DgfYz2v0ia','r29Vz2XLienOCM9Tzq','CMvZB2X2zujPBG','ntK0ovvMDerMwa','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','v2vIuNvUBMvYqwrHChrLCG','C3rHCNrZv2L0Aa','qhvUB3rLC3qVD2vI','zg9JDg9Y','zw52','u3LZDgvTigjYB3DZzxi','yNvPBgrbCMDZ','yNjLywTWB2LUDhm','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','D29YA2vYCW','D2LUmZi','vu5pvevtvf9iruferuq','zgvIDwC','BMfTzq','y2HLy2TxCML0ywjSzun3za','zxjYB3i','vgfYz2v0igrPCMvJDg9YEq','mJG5ndnYuePHy2C','AxngAw5PDgu','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','mJuYnK5Nvu9bBq','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2uTC3rHyMXL','y2HYB21PDw0','yxv0Ag9YAw5N','y2HHBM5LBa','CgLJA0jPBG','y2HLy2TtExn0zw1cCM93C2vY','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','te9dquXbufbeqvrb','yxbWlxnLCNzLCG','DhjPBq','tM9Kzs5QCYb2zxjZAw9U','BgvUz3rO','ChjVAMvJDfjVB3q','Dw5VDgvZDc13zwi','D2HPy2G','ls1Kzwj1zW','ls13B3jRzxjZpq','ls1IywLS','nKPAsKjpqW','yMfPBa','mJiXmJyZsKPJBgH0','mJaYmZi0CezsAxbS','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','y29SBgvJDgLVBG','ChjVyMvtExn0zw1cCM93C2vY','zgvMAw5LuhjVCgvYDhK','r29Vz2XLienOCM9TzsbczxrH','ChvZAa','CgfYC2u','D2fYBMLUzW','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','igrVzxmGBM90igv4Axn0','uhjVz3jHBuzPBgvZkhG4nIK','CMvZB2X2zq','y3DK','twLJCM9ZB2z0ievKz2u','Cgf0Aa','C3bSAxq','D2HPy2HpzG','yxbWu2vYDMvYqxjNCW','BM9Kzq','y2HYB21L','ChjVyMvdAhjVBwu','l3bHy2THz2uUANnVBG','CgXHDgzVCM0','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','yMLU','zgfYD2LU','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','C3vMzML4','C2nLBMfYAw8','DMfSDwvZ','mZK0nJG2AhzqB09Y','DMvYC2LVBNm'];_0x1571=function(){return _0x59b01d;};return _0x1571();}import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x3979f6={_0x30da4a:0xf9},_0xf260c9=_0x27fbae;for(const _0x2883dd of[probeChrome,probeEdge,probeChromeBeta]){const _0x5b8b24=_0x2883dd();if(_0x5b8b24[_0xf260c9(_0x3979f6._0x30da4a)]!==null)return _0x5b8b24;}return{'channel':null};}__name(probeSystemBrowser,_0x27fbae(0x10e));function probeChrome(){const _0x2e6262={_0x221ee2:0x120},_0x17efe9=_0x27fbae,_0x10e10c=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x10e10c)return{'channel':_0x17efe9(_0x2e6262._0x221ee2),'path':_0x10e10c,'label':_0x17efe9(0x142)};return{'channel':null};}__name(probeChrome,_0x27fbae(0x121));function probeEdge(){const _0xa917ab=_0x27fbae,_0xcca118=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0xcca118)return{'channel':_0xa917ab(0x12f),'path':_0xcca118,'label':_0xa917ab(0x11a)};return{'channel':null};}__name(probeEdge,'probeEdge');function probeChromeBeta(){const _0x4fd733=_0x27fbae,_0x1319be=firstExistingPath(CHROME_BETA_PATHS);if(_0x1319be)return{'channel':'chrome-beta','path':_0x1319be,'label':_0x4fd733(0x110)};return{'channel':null};}__name(probeChromeBeta,_0x27fbae(0x12e));var CHROME_PATHS=((()=>{const _0x138f67={_0x42731c:0x126,_0x2a9c16:0xea,_0x25ad88:0x13d,_0x149dc5:0xf5,_0x1e9219:0xe4,_0x45db23:0x117,_0x2921f7:0x13a,_0xf13f83:0x139},_0x31c159=_0x27fbae;switch(process['platform']){case _0x31c159(_0x138f67._0x42731c):return['/Applications/Google\x20Chrome.app/Contents/MacOS/Google\x20Chrome'];case _0x31c159(_0x138f67._0x2a9c16):return[process['env'][_0x31c159(_0x138f67._0x25ad88)]+_0x31c159(_0x138f67._0x149dc5),process[_0x31c159(_0x138f67._0x1e9219)][_0x31c159(_0x138f67._0x45db23)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe',process[_0x31c159(0xe4)][_0x31c159(0xfd)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe'];default:return[_0x31c159(_0x138f67._0x2921f7),'/usr/bin/google-chrome-stable','/snap/bin/google-chrome','/usr/bin/chromium',_0x31c159(_0x138f67._0xf13f83)];}})()),CHROME_BIN_NAMES=['google-chrome',_0x27fbae(0x145),_0x27fbae(0xf7),_0x27fbae(0x140)],EDGE_PATHS=((()=>{const _0x58382c={_0x31b90d:0x114,_0x4d972e:0xe4,_0x34fab5:0x124,_0x357fb8:0x117,_0x20b2ae:0xe8},_0x37ca02=_0x27fbae;switch(process[_0x37ca02(0x123)]){case'darwin':return[_0x37ca02(_0x58382c._0x31b90d)];case'win32':return[process[_0x37ca02(_0x58382c._0x4d972e)]['ProgramFiles']+_0x37ca02(_0x58382c._0x34fab5),process[_0x37ca02(0xe4)][_0x37ca02(_0x58382c._0x357fb8)]+_0x37ca02(0x124)];default:return[_0x37ca02(_0x58382c._0x20b2ae),_0x37ca02(0xf6)];}})()),EDGE_BIN_NAMES=['microsoft-edge',_0x27fbae(0x10c)],CHROME_BETA_PATHS=((()=>{const _0xe64779={_0x24c3ab:0x123,_0x4a8126:0xe4,_0x18a310:0x134},_0x25d6ea=_0x27fbae;switch(process[_0x25d6ea(_0xe64779._0x24c3ab)]){case _0x25d6ea(0x126):return['/Applications/Google\x20Chrome\x20Beta.app/Contents/MacOS/Google\x20Chrome\x20Beta'];case'win32':return[process[_0x25d6ea(_0xe64779._0x4a8126)][_0x25d6ea(0x13d)]+_0x25d6ea(0x12d)];default:return[_0x25d6ea(_0xe64779._0x18a310)];}})());function firstExistingPath(_0x23fbaa){const _0x55e6c1=_0x27fbae;for(const _0x34613c of _0x23fbaa){if(!_0x34613c||_0x34613c[_0x55e6c1(0x147)]('undefined'))continue;if(existsSync(_0x34613c))return _0x34613c;}return null;}__name(firstExistingPath,'firstExistingPath');function whichOf(_0x48d543){const _0x2c8c77={_0x487f1d:0x123,_0x33db95:0x13b,_0x96e831:0xff},_0x19b1ef=_0x27fbae;if(process[_0x19b1ef(_0x2c8c77._0x487f1d)]===_0x19b1ef(0xea))return void 0x0;for(const _0x130d67 of _0x48d543){try{const _0x51d8ab=execFileSync(_0x19b1ef(0x104),[_0x130d67],{'encoding':_0x19b1ef(_0x2c8c77._0x33db95)})[_0x19b1ef(_0x2c8c77._0x96e831)]();if(_0x51d8ab[_0x19b1ef(0x101)]>0x0&&existsSync(_0x51d8ab))return _0x51d8ab;}catch{}}return void 0x0;}__name(whichOf,_0x27fbae(0x11d));function runEnvironmentChecks(_0x3edcc5={}){const _0x154174={_0x1cb485:0x119},_0x190bc4=_0x27fbae,_0x58f7cb=_0x3edcc5[_0x190bc4(_0x154174._0x1cb485)]??process[_0x190bc4(_0x154174._0x1cb485)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x58f7cb)];}__name(runEnvironmentChecks,'runEnvironmentChecks');function checkNodeVersion(){const _0x11aafd={_0x4f5440:0x12c,_0x328821:0x11f,_0x57a6d5:0x11c,_0x1fbeea:0xef},_0x2968fe=_0x27fbae,_0x26f638=process[_0x2968fe(_0x11aafd._0x4f5440)][_0x2968fe(_0x11aafd._0x328821)],_0x557ac7=Number(_0x26f638[_0x2968fe(_0x11aafd._0x57a6d5)]('.')[0x0]);if(!Number[_0x2968fe(0xf2)](_0x557ac7)||_0x557ac7<0x14)return{'name':_0x2968fe(0x100),'severity':_0x2968fe(_0x11aafd._0x1fbeea),'message':'requires\x20Node\x20≥20\x20(running\x20'+_0x26f638+')','detail':_0x2968fe(0xf3)};return{'name':'Node.js\x20version','severity':'ok','message':_0x26f638};}__name(checkNodeVersion,'checkNodeVersion');function checkSystemBrowser(){const _0x25887b={_0x5b1508:0x135,_0x2001ba:0xe5,_0x58707c:0x113,_0x49e93d:0x127},_0xf46669=_0x27fbae,_0x27d530=probeSystemBrowser();if(_0x27d530[_0xf46669(0xf9)]!==null)return{'name':_0xf46669(0xe5),'severity':'ok','message':_0x27d530[_0xf46669(_0x25887b._0x5b1508)]+'\x20found','detail':_0x27d530[_0xf46669(0x11b)]};return{'name':_0xf46669(_0x25887b._0x2001ba),'severity':_0xf46669(_0x25887b._0x58707c),'message':'no\x20Chrome\x20/\x20Edge\x20/\x20Chromium\x20detected','detail':_0xf46669(_0x25887b._0x49e93d)};}__name(checkSystemBrowser,_0x27fbae(0xfb));function checkWritableCwd(_0x44f1ce){const _0x5e3491=_0x27fbae;if(!_0x15fc8b(_0x44f1ce))return{'name':'Target\x20directory','severity':_0x5e3491(0xef),'message':_0x5e3491(0x141)+_0x44f1ce+_0x5e3491(0x116),'detail':_0x5e3491(0x115)};return{'name':_0x5e3491(0xf0),'severity':'ok','message':_0x44f1ce};}__name(checkWritableCwd,_0x27fbae(0xee));var PACKAGE_NAME=_0x27fbae(0xe2),WebRunnerAdapter=class{static{__name(this,_0x27fbae(0x146));}[_0x27fbae(0xed)]=PACKAGE_NAME;[_0x27fbae(0x128)]='';[_0x27fbae(0xec)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x27fbae(0x132)]=['scenario','collection','authoring'];[_0x27fbae(0x143)](){const _0x4c2177={_0x40fad0:0xfc},_0x11e64d=_0x27fbae,_0x4394a5=createRequire(import.meta.url),_0x8fde3=_0x4394a5[_0x11e64d(0x118)](PACKAGE_NAME+_0x11e64d(0x122)),_0x4148e3=JSON[_0x11e64d(0x112)](readFileSync(_0x8fde3,'utf8')),_0x1d149e=pickBin(_0x4148e3);if(!_0x1d149e)throw new Error(PACKAGE_NAME+_0x11e64d(_0x4c2177._0x40fad0));return join(dirname(_0x8fde3),_0x1d149e);}[_0x27fbae(0xe6)](_0x532486){const _0x5e2444={_0x45f272:0xec,_0x5abf4d:0x101,_0x926ca2:0x13e,_0x231f14:0x133,_0x3ee2cc:0x13c,_0x50ffb5:0xe9,_0x101294:0xe9,_0x18bed6:0x109,_0x1a5122:0xf8,_0x2fd7af:0x129,_0x319850:0x13c},_0x328dab=_0x27fbae;if(_0x532486[_0x328dab(0x13c)]===_0x328dab(0x129)){const _0x3de5ee=[_0x328dab(0x138),_0x532486['scenario']];if(_0x532486[_0x328dab(_0x5e2444._0x45f272)])_0x3de5ee['push'](_0x328dab(0x105));return _0x532486[_0x328dab(0xe7)]&&_0x532486[_0x328dab(0xe7)][_0x328dab(_0x5e2444._0x5abf4d)]>0x0&&_0x3de5ee[_0x328dab(0x111)](_0x328dab(_0x5e2444._0x926ca2),_0x532486['breakpoints'][_0x328dab(_0x5e2444._0x231f14)](',')),_0x3de5ee;}if(_0x532486[_0x328dab(_0x5e2444._0x3ee2cc)]===_0x328dab(0x10d)){const _0x567cfe=['collection',_0x532486[_0x328dab(0x10d)]];_0x532486[_0x328dab(_0x5e2444._0x50ffb5)]!==void 0x0&&_0x532486[_0x328dab(0xe9)]>0x1&&_0x567cfe[_0x328dab(0x111)](_0x328dab(0x106)+_0x532486[_0x328dab(_0x5e2444._0x101294)]);if(_0x532486[_0x328dab(_0x5e2444._0x18bed6)])_0x567cfe[_0x328dab(0x111)](_0x328dab(0x107));return _0x567cfe;}if(_0x532486[_0x328dab(_0x5e2444._0x3ee2cc)]===_0x328dab(_0x5e2444._0x1a5122))return['author',_0x532486[_0x328dab(_0x5e2444._0x2fd7af)]];const _0x21f5fa=_0x532486;throw new UnsupportedRunKindError(_0x21f5fa[_0x328dab(_0x5e2444._0x319850)],this[_0x328dab(0xed)]);}[_0x27fbae(0x131)](_0x4bdb9e){const _0x24ecd5={_0x55d7a2:0x136},_0x5b993d=_0x27fbae,_0x307bff={};if(_0x4bdb9e[_0x5b993d(_0x24ecd5._0x55d7a2)])_0x307bff[_0x5b993d(0xeb)]='1';return _0x307bff;}[_0x27fbae(0x11e)](){const _0x1f633a={_0x448790:0xfe},_0x22cf89=_0x27fbae;return[_0x22cf89(_0x1f633a._0x448790)];}async[_0x27fbae(0xe3)](_0x4a6131){const _0x153c32={_0x27cff5:0x102},_0x30e276=_0x27fbae;return runEnvironmentChecks({'cwd':_0x4a6131[_0x30e276(_0x153c32._0x27cff5)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x345248){const _0x26f6fc={_0x5c1d71:0x125,_0x30c56c:0x103,_0xfb960b:0x12a},_0xd20272=_0x27fbae;if(typeof _0x345248[_0xd20272(0x125)]==='string')return _0x345248[_0xd20272(0x125)];if(_0x345248[_0xd20272(0x125)]&&typeof _0x345248[_0xd20272(0x125)]==='object')return _0x345248[_0xd20272(_0x26f6fc._0x5c1d71)][_0xd20272(_0x26f6fc._0x30c56c)]??Object[_0xd20272(_0x26f6fc._0xfb960b)](_0x345248[_0xd20272(0x125)])[0x0]??null;return null;}__name(pickBin,_0x27fbae(0xfa));export{web_runner_adapter_default as default,webRunnerAdapter};
|
|
1
|
+
function _0x3ddf(_0x4f5781,_0x26fbaa){_0x4f5781=_0x4f5781-0x190;const _0x41f04e=_0x41f0();let _0x3ddf89=_0x41f04e[_0x4f5781];if(_0x3ddf['zmSIfH']===undefined){var _0x59644f=function(_0x499549){const _0x36df2f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x42dba8='',_0x24e765='';for(let _0x543b72=0x0,_0x2497c0,_0x47e3f5,_0x204ac3=0x0;_0x47e3f5=_0x499549['charAt'](_0x204ac3++);~_0x47e3f5&&(_0x2497c0=_0x543b72%0x4?_0x2497c0*0x40+_0x47e3f5:_0x47e3f5,_0x543b72++%0x4)?_0x42dba8+=String['fromCharCode'](0xff&_0x2497c0>>(-0x2*_0x543b72&0x6)):0x0){_0x47e3f5=_0x36df2f['indexOf'](_0x47e3f5);}for(let _0x38325c=0x0,_0x5b3246=_0x42dba8['length'];_0x38325c<_0x5b3246;_0x38325c++){_0x24e765+='%'+('00'+_0x42dba8['charCodeAt'](_0x38325c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x24e765);};_0x3ddf['lDxuHg']=_0x59644f,_0x3ddf['oAdCSY']={},_0x3ddf['zmSIfH']=!![];}const _0x9cfa99=_0x41f04e[0x0],_0x2d6a36=_0x4f5781+_0x9cfa99,_0x3f75b9=_0x3ddf['oAdCSY'][_0x2d6a36];return!_0x3f75b9?(_0x3ddf89=_0x3ddf['lDxuHg'](_0x3ddf89),_0x3ddf['oAdCSY'][_0x2d6a36]=_0x3ddf89):_0x3ddf89=_0x3f75b9,_0x3ddf89;}const _0x5b16b4=_0x3ddf;(function(_0x16b456,_0x4ad11c){const _0x434c5d={_0x5aa8b9:0x1df,_0x443697:0x190,_0x5ab978:0x1c1,_0x324253:0x194,_0x128f43:0x1a7},_0x5ad448=_0x3ddf,_0x9105c4=_0x16b456();while(!![]){try{const _0x85daa7=parseInt(_0x5ad448(0x1ef))/0x1*(parseInt(_0x5ad448(_0x434c5d._0x5aa8b9))/0x2)+parseInt(_0x5ad448(0x1eb))/0x3*(parseInt(_0x5ad448(0x199))/0x4)+-parseInt(_0x5ad448(_0x434c5d._0x443697))/0x5+-parseInt(_0x5ad448(_0x434c5d._0x5ab978))/0x6+parseInt(_0x5ad448(0x1d5))/0x7+-parseInt(_0x5ad448(_0x434c5d._0x324253))/0x8+-parseInt(_0x5ad448(_0x434c5d._0x128f43))/0x9;if(_0x85daa7===_0x4ad11c)break;else _0x9105c4['push'](_0x9105c4['shift']());}catch(_0xc52dd2){_0x9105c4['push'](_0x9105c4['shift']());}}}(_0x41f0,0xd9b41));function _0x41f0(){const _0x584067=['y3DK','mJG0nJbqq1zJwvK','D2HPy2HpzG','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','vgfYz2v0igrPCMvJDg9YEq','ChjVyMvtExn0zw1cCM93C2vY','CgfYC2u','DhjPBq','D2LUmZi','y2HLy2TtExn0zw1cCM93C2vY','twLJCM9ZB2z0ievKz2u','Dw5VDgvZDc13zwi','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','mtHSvwzxD0K','C3rYAw5N','uhjVz3jHBuzPBgvZ','vu5pvevtvf9iruferuq','odLSAuXPBu8','C3rHCNrZv2L0Aa','ls1ICMvHAW','ztjL','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','mta2mteYnuXMBfzPAG','D2HPy2G','r29Vz2XLienOCM9Tzq','l3bHy2THz2uUANnVBG','mtaXmJe3ntjZCxPHzey','BgfIzwW','zxjYB3i','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2uTC3rHyMXL','zgvIDwC','nZy2mZe2q3zWwLLs','yNjLywTWB2LUDhm','B2jQzwn0','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','ChvZAa','qhvUB3rLC3qVD2vI','uhjVz3jHBuzPBgvZkhG4nIK','C3bSAxq','yxv0Ag9YAw5N','C2nLBMfYAw8','BgvUz3rO','yMLU','D2fYBMLUzW','yNvPBgrfBNy','ndaWndC4nezxqLrOza','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','BwLJCM9ZB2z0lwvKz2u','z29Vz2XLlwnOCM9Tzq','CgLJA0jPBG','y2HHBM5LBa','AxngAw5PDgu','BM8Gq2HYB21Lic8GrwrNzsaVienOCM9TAxvTigrLDgvJDgvK','yMfPBa','C3vMzML4','y2HYB21PDw0TyNjVD3nLCG','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','yxv0Ag9Y','CMvZB2X2zujPBG','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','te9dquXbufbeqvrb','yxbWu2vYDMvYqxjNCW','tM9Kzs5QCYb2zxjZAw9U','igzVDw5K','CgXHDgzVCM0','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','D29YA2vYCW','zg9JDg9Y','nteZodeWnKnvDKXOzq','ls1Kzwj1zW','DxrMoa','DMfSDwvZ','ChjVAMvJDfjVB3q','v2vIuNvUBMvYqwrHChrLCG','CMvZB2X2zq','zw52','ls13B3jRzxjZpq','CNvUrw52AxjVBM1LBNrdAgvJA3m','yxbWlxnLCNzLCG','BMfTzq','CMvXDwLYzxmGtM9KzsdIIAuYmcaOCNvUBMLUzYa','A2LUza','ChjVyMvdAhjVBwu','DMvYC2LVBNm','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','BxnLzgDL','zgfYD2LU','ls1IywLS','odC4mtC4me5eDMrbAG','AM9PBG','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','y29SBgvJDgLVBG','y2HYB21LlwjLDge','u3LZDgvTigjYB3DZzxi','igrVzxmGBM90igv4Axn0','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','Cgf0Aa'];_0x41f0=function(){return _0x584067;};return _0x41f0();}var __defProp=Object['defineProperty'],__name=(_0x24e765,_0x543b72)=>__defProp(_0x24e765,_0x5b16b4(0x1cc),{'value':_0x543b72,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x42dba8}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){for(const _0x2497c0 of[probeChrome,probeEdge,probeChromeBeta]){const _0x47e3f5=_0x2497c0();if(_0x47e3f5['channel']!==null)return _0x47e3f5;}return{'channel':null};}__name(probeSystemBrowser,_0x5b16b4(0x1e3));function probeChrome(){const _0x346552={_0xbcbb59:0x192},_0xb04f05=_0x5b16b4,_0x204ac3=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x204ac3)return{'channel':'chrome','path':_0x204ac3,'label':_0xb04f05(_0x346552._0xbcbb59)};return{'channel':null};}__name(probeChrome,_0x5b16b4(0x1cf));function probeEdge(){const _0x26203b={_0x45e04c:0x1d2},_0x516f0e=_0x5b16b4,_0x38325c=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x38325c)return{'channel':_0x516f0e(_0x26203b._0x45e04c),'path':_0x38325c,'label':_0x516f0e(0x1e8)};return{'channel':null};}__name(probeEdge,'probeEdge');function probeChromeBeta(){const _0x4e06e9={_0x52e0c3:0x1d9},_0x2ae084=_0x5b16b4,_0x5b3246=firstExistingPath(CHROME_BETA_PATHS);if(_0x5b3246)return{'channel':_0x2ae084(_0x4e06e9._0x52e0c3),'path':_0x5b3246,'label':'Google\x20Chrome\x20Beta'};return{'channel':null};}__name(probeChromeBeta,'probeChromeBeta');var CHROME_PATHS=((()=>{const _0xab427b={_0x4aa304:0x1bc,_0x20c3db:0x1c8,_0x463e26:0x1ed,_0x4023c7:0x19c,_0x1aa61d:0x1a8},_0x24c5fe=_0x5b16b4;switch(process[_0x24c5fe(_0xab427b._0x4aa304)]){case _0x24c5fe(0x1d3):return[_0x24c5fe(0x1e1)];case _0x24c5fe(0x1e6):return[process[_0x24c5fe(_0xab427b._0x20c3db)][_0x24c5fe(_0xab427b._0x463e26)]+_0x24c5fe(0x19c),process['env'][_0x24c5fe(0x19f)]+_0x24c5fe(0x19c),process['env'][_0x24c5fe(0x1b8)]+_0x24c5fe(_0xab427b._0x4023c7)];default:return[_0x24c5fe(0x1f3),'/usr/bin/google-chrome-stable',_0x24c5fe(0x1bd),'/usr/bin/chromium',_0x24c5fe(_0xab427b._0x1aa61d)];}})()),CHROME_BIN_NAMES=[_0x5b16b4(0x1aa),_0x5b16b4(0x1d7),'chromium',_0x5b16b4(0x1b1)],EDGE_PATHS=((()=>{const _0x2bbf21={_0x3c044c:0x1bc,_0x239a44:0x1be,_0x517cd8:0x1c8,_0x32a9af:0x1ed,_0x1361bc:0x1b7,_0x1140eb:0x19f,_0x1124ee:0x197},_0x1094e5=_0x5b16b4;switch(process[_0x1094e5(_0x2bbf21._0x3c044c)]){case _0x1094e5(0x1d3):return[_0x1094e5(_0x2bbf21._0x239a44)];case'win32':return[process[_0x1094e5(_0x2bbf21._0x517cd8)][_0x1094e5(_0x2bbf21._0x32a9af)]+_0x1094e5(_0x2bbf21._0x1361bc),process[_0x1094e5(0x1c8)][_0x1094e5(_0x2bbf21._0x1140eb)]+'\x5cMicrosoft\x5cEdge\x5cApplication\x5cmsedge.exe'];default:return[_0x1094e5(0x1b6),_0x1094e5(_0x2bbf21._0x1124ee)];}})()),EDGE_BIN_NAMES=[_0x5b16b4(0x1a9),_0x5b16b4(0x1ea)],CHROME_BETA_PATHS=((()=>{const _0x16f068={_0x46dca1:0x1bc,_0x4725f4:0x1e6,_0x4b030f:0x1c8,_0x518b7c:0x1ed},_0x296b47=_0x5b16b4;switch(process[_0x296b47(_0x16f068._0x46dca1)]){case _0x296b47(0x1d3):return[_0x296b47(0x1dc)];case _0x296b47(_0x16f068._0x4725f4):return[process[_0x296b47(_0x16f068._0x4b030f)][_0x296b47(_0x16f068._0x518b7c)]+'\x5cGoogle\x5cChrome\x20Beta\x5cApplication\x5cchrome.exe'];default:return['/usr/bin/google-chrome-beta'];}})());function firstExistingPath(_0x52278c){const _0x3b16e3={_0x1203c5:0x1f0},_0x3dbe2b=_0x5b16b4;for(const _0x48e802 of _0x52278c){if(!_0x48e802||_0x48e802[_0x3dbe2b(_0x3b16e3._0x1203c5)]('undefined'))continue;if(existsSync(_0x48e802))return _0x48e802;}return null;}__name(firstExistingPath,'firstExistingPath');function whichOf(_0x5b51ee){const _0x3f9c58={_0x46b5ba:0x1bc,_0x519be1:0x1a3},_0x9d08f2=_0x5b16b4;if(process[_0x9d08f2(_0x3f9c58._0x46b5ba)]===_0x9d08f2(0x1e6))return void 0x0;for(const _0x502df7 of _0x5b51ee){try{const _0x4a8bc0=execFileSync(_0x9d08f2(0x191),[_0x502df7],{'encoding':_0x9d08f2(0x1c3)})[_0x9d08f2(0x1e5)]();if(_0x4a8bc0[_0x9d08f2(_0x3f9c58._0x519be1)]>0x0&&existsSync(_0x4a8bc0))return _0x4a8bc0;}catch{}}return void 0x0;}__name(whichOf,_0x5b16b4(0x1e0));function runEnvironmentChecks(_0x54bdbf={}){const _0x5a2214={_0x5184b1:0x1de},_0x5e2b8b=_0x5b16b4,_0x3fba7d=_0x54bdbf[_0x5e2b8b(_0x5a2214._0x5184b1)]??process[_0x5e2b8b(0x1de)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x3fba7d)];}__name(runEnvironmentChecks,_0x5b16b4(0x1ca));function checkNodeVersion(){const _0x47f579={_0x206924:0x1d0,_0x4e424f:0x1a0,_0x2850f2:0x196},_0x4410c1=_0x5b16b4,_0xa1c747=process[_0x4410c1(_0x47f579._0x206924)]['node'],_0xf45dcb=Number(_0xa1c747[_0x4410c1(_0x47f579._0x4e424f)]('.')[0x0]);if(!Number[_0x4410c1(0x1ad)](_0xf45dcb)||_0xf45dcb<0x14)return{'name':_0x4410c1(0x1ba),'severity':_0x4410c1(_0x47f579._0x2850f2),'message':_0x4410c1(0x1cd)+_0xa1c747+')','detail':_0x4410c1(0x1b2)};return{'name':'Node.js\x20version','severity':'ok','message':_0xa1c747};}__name(checkNodeVersion,'checkNodeVersion');function checkSystemBrowser(){const _0x710c60={_0x34fbef:0x1dd,_0x5c4179:0x1a5,_0x562c68:0x1ae,_0x1223f2:0x1d1},_0x47d575=_0x5b16b4,_0x669d25=probeSystemBrowser();if(_0x669d25[_0x47d575(0x1ac)]!==null)return{'name':'System\x20browser','severity':'ok','message':_0x669d25[_0x47d575(0x195)]+_0x47d575(0x1bb),'detail':_0x669d25[_0x47d575(_0x710c60._0x34fbef)]};return{'name':_0x47d575(0x1da),'severity':_0x47d575(_0x710c60._0x5c4179),'message':_0x47d575(_0x710c60._0x562c68),'detail':_0x47d575(_0x710c60._0x1223f2)};}__name(checkSystemBrowser,_0x5b16b4(0x1e7));function checkWritableCwd(_0x462164){const _0x44198a={_0x20ab49:0x1e2},_0xdd8ff2=_0x5b16b4;if(!_0x42dba8(_0x462164))return{'name':_0xdd8ff2(_0x44198a._0x20ab49),'severity':'error','message':'target\x20'+_0x462164+_0xdd8ff2(0x1db),'detail':'Create\x20the\x20directory\x20or\x20run\x20init\x20in\x20an\x20existing\x20project\x20root.'};return{'name':_0xdd8ff2(0x1e2),'severity':'ok','message':_0x462164};}__name(checkWritableCwd,'checkWritableCwd');var PACKAGE_NAME=_0x5b16b4(0x19e),WebRunnerAdapter=class{static{__name(this,_0x5b16b4(0x1c6));}[_0x5b16b4(0x1cc)]=PACKAGE_NAME;[_0x5b16b4(0x1b0)]='';[_0x5b16b4(0x198)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};['supportedKinds']=['scenario',_0x5b16b4(0x1d8),'authoring'];[_0x5b16b4(0x1b4)](){const _0x44fe9d={_0x3e2f63:0x1c7,_0x5b8a00:0x193,_0x1748a7:0x1b5},_0xf66d00=_0x5b16b4,_0x4cdb9c=createRequire(import.meta.url),_0x293623=_0x4cdb9c[_0xf66d00(_0x44fe9d._0x3e2f63)](PACKAGE_NAME+_0xf66d00(_0x44fe9d._0x5b8a00)),_0x1867a8=JSON[_0xf66d00(0x1e4)](readFileSync(_0x293623,_0xf66d00(0x1c3))),_0x5b3883=pickBin(_0x1867a8);if(!_0x5b3883)throw new Error(PACKAGE_NAME+_0xf66d00(_0x44fe9d._0x1748a7));return join(dirname(_0x293623),_0x5b3883);}['buildArgs'](_0x102b2f){const _0x2fbf53={_0x34aef7:0x1ce,_0x4e286c:0x1a2,_0x5fd618:0x1c2,_0x5939cb:0x1d6,_0x4ad0df:0x1ce,_0x3fd33a:0x1d8,_0x50fa75:0x1bf,_0x5c474b:0x19d,_0x1d94e1:0x1c9,_0x42cc4f:0x1af,_0x3cac17:0x1d4,_0x193339:0x1b3},_0x1c4f09=_0x5b16b4;if(_0x102b2f[_0x1c4f09(_0x2fbf53._0x34aef7)]===_0x1c4f09(_0x2fbf53._0x4e286c)){const _0x29cc9a=[_0x1c4f09(0x1f2),_0x102b2f[_0x1c4f09(_0x2fbf53._0x4e286c)]];if(_0x102b2f['debug'])_0x29cc9a[_0x1c4f09(0x19d)](_0x1c4f09(_0x2fbf53._0x5fd618));return _0x102b2f[_0x1c4f09(0x19a)]&&_0x102b2f['breakpoints'][_0x1c4f09(0x1a3)]>0x0&&_0x29cc9a[_0x1c4f09(0x19d)](_0x1c4f09(0x1f1),_0x102b2f['breakpoints'][_0x1c4f09(_0x2fbf53._0x5939cb)](',')),_0x29cc9a;}if(_0x102b2f[_0x1c4f09(_0x2fbf53._0x4ad0df)]==='collection'){const _0x97697f=[_0x1c4f09(0x1d8),_0x102b2f[_0x1c4f09(_0x2fbf53._0x3fd33a)]];_0x102b2f[_0x1c4f09(_0x2fbf53._0x50fa75)]!==void 0x0&&_0x102b2f[_0x1c4f09(_0x2fbf53._0x50fa75)]>0x1&&_0x97697f[_0x1c4f09(_0x2fbf53._0x5c474b)](_0x1c4f09(_0x2fbf53._0x1d94e1)+_0x102b2f[_0x1c4f09(0x1bf)]);if(_0x102b2f[_0x1c4f09(_0x2fbf53._0x42cc4f)])_0x97697f[_0x1c4f09(0x19d)](_0x1c4f09(_0x2fbf53._0x3cac17));return _0x97697f;}if(_0x102b2f[_0x1c4f09(0x1ce)]===_0x1c4f09(0x1a1))return[_0x1c4f09(_0x2fbf53._0x193339),_0x102b2f[_0x1c4f09(0x1a2)]];const _0x141e5f=_0x102b2f;throw new UnsupportedRunKindError(_0x141e5f[_0x1c4f09(0x1ce)],this[_0x1c4f09(0x1cc)]);}[_0x5b16b4(0x1a6)](_0x4925bc){const _0x473354={_0x271f0d:0x1ee},_0x10e3bb=_0x5b16b4,_0x2655e3={};if(_0x4925bc['headed'])_0x2655e3[_0x10e3bb(_0x473354._0x271f0d)]='1';return _0x2655e3;}[_0x5b16b4(0x1b9)](){const _0x19f414={_0x54e36d:0x1cb},_0x51f5d8=_0x5b16b4;return[_0x51f5d8(_0x19f414._0x54e36d)];}async[_0x5b16b4(0x1c0)](_0x43b5d9){const _0x35fc42={_0x3b8093:0x1c5},_0x54e913=_0x5b16b4;return runEnvironmentChecks({'cwd':_0x43b5d9[_0x54e913(_0x35fc42._0x3b8093)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x123857){const _0x304242={_0x10dfd7:0x1a4,_0x4b3142:0x1ec,_0x32df3c:0x1a4,_0x359cac:0x1c4,_0x528ffb:0x1a4},_0x4c3b09=_0x5b16b4;if(typeof _0x123857[_0x4c3b09(_0x304242._0x10dfd7)]===_0x4c3b09(_0x304242._0x4b3142))return _0x123857[_0x4c3b09(_0x304242._0x10dfd7)];if(_0x123857['bin']&&typeof _0x123857['bin']===_0x4c3b09(0x19b))return _0x123857[_0x4c3b09(_0x304242._0x32df3c)][_0x4c3b09(0x1e9)]??Object[_0x4c3b09(_0x304242._0x359cac)](_0x123857[_0x4c3b09(_0x304242._0x528ffb)])[0x0]??null;return null;}__name(pickBin,_0x5b16b4(0x1ab));export{web_runner_adapter_default as default,webRunnerAdapter};
|
|
@@ -268,6 +268,35 @@ the last failed call plus recent failing exits. `filter:"layer:resolver"`
|
|
|
268
268
|
`filter:"tool:explore_step"` → recent events for that tool. `limit` caps
|
|
269
269
|
the count (default 50).
|
|
270
270
|
|
|
271
|
+
## Variable environments (dev / staging / prod)
|
|
272
|
+
|
|
273
|
+
Scenario variables come from `unotest/.env` + `unotest/.secrets`.
|
|
274
|
+
Setting `UNOTEST_ENV=<name>` layers `unotest/.env.<name>` /
|
|
275
|
+
`unotest/.secrets.<name>` on top (overlay wins — it holds only the keys
|
|
276
|
+
that differ; ambient shell env beats every file).
|
|
277
|
+
|
|
278
|
+
For MCP sessions the default environment is fixed at server start:
|
|
279
|
+
`run_test` / `explore_*` resolve against the `UNOTEST_ENV` the server
|
|
280
|
+
process inherited — set it in the MCP client's `env` block (e.g.
|
|
281
|
+
`.mcp.json`) and restart the server to switch the default.
|
|
282
|
+
|
|
283
|
+
Per-call overrides on top of that default:
|
|
284
|
+
|
|
285
|
+
- `run_test` accepts `env`: the spawned runner child gets
|
|
286
|
+
`UNOTEST_ENV=<env>` for that run only.
|
|
287
|
+
- `explore_start` accepts `env`: THAT session's variables, secrets and
|
|
288
|
+
`APP_BASE_URL` resolve against the `<env>` overlays; other sessions
|
|
289
|
+
and the server keep their own. A session recorded with an override
|
|
290
|
+
also autoRuns (`explore_steps`) against it.
|
|
291
|
+
- CLI runs take `--env <name>` per invocation.
|
|
292
|
+
|
|
293
|
+
You never have to guess the active state: `explore_start` and
|
|
294
|
+
`run_test` replies carry an `environment` field — the active name
|
|
295
|
+
(`null` = base) and every layer file with an `exists` flag — plus the
|
|
296
|
+
effective `baseUrl`. A missing variable error also lists the searched
|
|
297
|
+
layers, and every CLI run prints a one-line header with the layers and
|
|
298
|
+
the effective baseUrl.
|
|
299
|
+
|
|
271
300
|
## Debug logging
|
|
272
301
|
|
|
273
302
|
Set `UNOTEST_DEBUG=1` in `unotest/.env` and restart the MCP server to
|
package/guides/dsl-reference.md
CHANGED
|
@@ -53,8 +53,9 @@ function test_my_scenario() {
|
|
|
53
53
|
- [Multi-context](#multi-context) — multi-tab / iframes
|
|
54
54
|
- [Storage](#storage) — localStorage / cookies
|
|
55
55
|
- [Edge actions](#edge-actions) — drag, upload, paste
|
|
56
|
-
- [Sandbox primitives](#sandbox-primitives) — shell / db / HTTP
|
|
56
|
+
- [Sandbox primitives](#sandbox-primitives) — shell / db / HTTP / files
|
|
57
57
|
- [Typed getters](#typed-getters) — page properties
|
|
58
|
+
- [Generators](#generators) — random fixture data + time
|
|
58
59
|
- [`evaluate`](#evaluate) — escape hatch into the page
|
|
59
60
|
- [Logging](#logging)
|
|
60
61
|
|
|
@@ -189,6 +190,16 @@ Prefer `getByRole` + `filter({hasText})` over `nth()` — `nth()`-by-index is
|
|
|
189
190
|
flagged by `lint:disambig-by-index` because element order in the DOM is
|
|
190
191
|
brittle.
|
|
191
192
|
|
|
193
|
+
### Scoped builders — `loc.getByRole(...)`, `loc.locator(css)`, …
|
|
194
|
+
|
|
195
|
+
Every builder from the section above also works as a chain step: the
|
|
196
|
+
receiver scopes the query to its subtree — the Playwright semantics.
|
|
197
|
+
|
|
198
|
+
```js
|
|
199
|
+
getByRole('row', {name: /^Row R-00002:/}).getByRole('button', {name: 'Edit'})
|
|
200
|
+
locator('.sidebar').getByText('Settings')
|
|
201
|
+
```
|
|
202
|
+
|
|
192
203
|
### `contentFrame()`
|
|
193
204
|
|
|
194
205
|
Treat the matched element as an iframe and return a locator scoped to
|
|
@@ -330,8 +341,8 @@ assertUrl('https://example.com/checkout')
|
|
|
330
341
|
Generic boolean assert. Throws with `message` when `value` is falsy.
|
|
331
342
|
|
|
332
343
|
```js
|
|
333
|
-
|
|
334
|
-
assertTrue(
|
|
344
|
+
probe = shell('grep', '-q', 'ready', 'app.log', {allowNonZero: true});
|
|
345
|
+
assertTrue(probe.code == 0, 'app.log should contain "ready"');
|
|
335
346
|
```
|
|
336
347
|
|
|
337
348
|
---
|
|
@@ -350,6 +361,22 @@ Empty string when the element has no text node (does not throw).
|
|
|
350
361
|
|
|
351
362
|
### `isVisible(loc)` → `boolean`
|
|
352
363
|
|
|
364
|
+
### `isDisabled(loc)` → `boolean` / `isEnabled(loc)` → `boolean`
|
|
365
|
+
|
|
366
|
+
Disabled = native `:disabled` (covers `<fieldset disabled>` inheritance)
|
|
367
|
+
**or** `aria-disabled="true"`. Use these — not `getAttribute(loc,
|
|
368
|
+
'disabled')`, which cannot distinguish a present boolean attribute from
|
|
369
|
+
an absent one (both read as `""`).
|
|
370
|
+
|
|
371
|
+
```js
|
|
372
|
+
assertTrue(isEnabled(getByRole('button', {name: 'Send'})), 'send button should be active');
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### `hasAttribute(loc, name)` → `boolean`
|
|
376
|
+
|
|
377
|
+
Whether the attribute is present at all — the honest probe for boolean
|
|
378
|
+
attributes (`disabled`, `readonly`, `required`, …).
|
|
379
|
+
|
|
353
380
|
```js
|
|
354
381
|
n = count(getByRole('row'));
|
|
355
382
|
if (n > 10) {
|
|
@@ -415,6 +442,26 @@ waitForText(/\bhi\b/, {timeout: 60000}); // word-boundary, long poll
|
|
|
415
442
|
|
|
416
443
|
`state: 'hidden'` waits until **no** visible occurrence remains.
|
|
417
444
|
|
|
445
|
+
**Echo trap — wait for the reply, not your own message.** In a chat/feed
|
|
446
|
+
UI the text you just sent is itself on the page, so
|
|
447
|
+
`waitForText('Bot Service')` after
|
|
448
|
+
`fill(box, '@Bot Service what is …')` goes green **before** the bot
|
|
449
|
+
answers — the wait matched your own input. The linter flags this
|
|
450
|
+
statically (`lint:echo-assert`). The robust pattern: count the messages,
|
|
451
|
+
send, then wait for the count to grow — and only then assert on reply
|
|
452
|
+
content:
|
|
453
|
+
|
|
454
|
+
```js
|
|
455
|
+
n = count(locator('[data-message]'));
|
|
456
|
+
fill(getByRole('textbox'), '@Bot Service ' + question);
|
|
457
|
+
press(getByRole('textbox'), 'Enter');
|
|
458
|
+
waitForCount(locator('[data-message]'), n + 2, {timeout: 90000}); // echo + reply
|
|
459
|
+
waitForText(/Ital/i, {timeout: 90000}); // reply content
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
A unique marker (`randomWord(8)`) in the outgoing message plus a wait on
|
|
463
|
+
reply-specific text also works when the feed has no stable item locator.
|
|
464
|
+
|
|
418
465
|
### `waitForCount(loc, count, options?)`
|
|
419
466
|
|
|
420
467
|
Poll until the locator matches **at least** `count` elements. The chat
|
|
@@ -435,14 +482,18 @@ waitForText(/\bshipping\b/i, {timeout: 90000});
|
|
|
435
482
|
### `pause(ms)`
|
|
436
483
|
|
|
437
484
|
Hard sleep. **Avoid** — the linter flags it (`lint:pause-explicit`). Use
|
|
438
|
-
`waitFor` / `waitForText` / assertion polling instead.
|
|
439
|
-
|
|
485
|
+
`waitFor` / `waitForText` / assertion polling instead. A justified
|
|
486
|
+
occurrence is silenced per-line with `// lint-ok: <reason>` (the reason
|
|
487
|
+
is required — a bare `// lint-ok` suppresses nothing):
|
|
440
488
|
|
|
441
489
|
```js
|
|
442
|
-
//
|
|
443
|
-
pause(500);
|
|
490
|
+
pause(500); // lint-ok: third-party widget has no completion signal to hook into
|
|
444
491
|
```
|
|
445
492
|
|
|
493
|
+
`// lint-ok:` works for any warning/info diagnostic on its line (legacy
|
|
494
|
+
helpers with known warnings stop drowning out new ones). Error-severity
|
|
495
|
+
diagnostics are never suppressible.
|
|
496
|
+
|
|
446
497
|
---
|
|
447
498
|
|
|
448
499
|
## Multi-context
|
|
@@ -558,20 +609,76 @@ apiBaseUrl}` — the scenario **cannot** override.
|
|
|
558
609
|
export default {
|
|
559
610
|
sandbox: {
|
|
560
611
|
shellCwd: process.cwd(),
|
|
612
|
+
shellTimeoutMs: 120000, // wall-clock budget per shell() call
|
|
613
|
+
exportSecrets: ['STAND_TOKEN'], // .secrets vars exported to shell() children
|
|
561
614
|
database: 'postgres://app:app@localhost:5432/myapp_test',
|
|
562
615
|
apiBaseUrl: 'http://localhost:3000/api',
|
|
563
616
|
},
|
|
564
617
|
};
|
|
565
618
|
```
|
|
566
619
|
|
|
567
|
-
### `shell(cmd, ...args)` → `{stdout, stderr, code}`
|
|
620
|
+
### `shell(cmd, ...args, options?)` → `{stdout, stderr, code}`
|
|
568
621
|
|
|
569
622
|
`execFile`-style — **no shell interpretation**, no `&&` / `|` /
|
|
570
623
|
redirection. cwd from `sandbox.shellCwd`.
|
|
571
624
|
|
|
625
|
+
Semantics:
|
|
626
|
+
|
|
627
|
+
- **Non-zero exit code fails the step** (typed error with the exit code
|
|
628
|
+
and stderr/stdout tails). To inspect the code yourself — e.g. a probe
|
|
629
|
+
where non-zero is expected — pass `{allowNonZero: true}` as the last
|
|
630
|
+
argument; the call then resolves with `{stdout, stderr, code}`.
|
|
631
|
+
- A missing binary / permission fault is a distinct "failed to start"
|
|
632
|
+
error, never a fake `code: 1`.
|
|
633
|
+
- **Timeout**: each call has a wall-clock budget —
|
|
634
|
+
`sandbox.shellTimeoutMs` (default 120 000 ms) or per-call
|
|
635
|
+
`{timeoutMs}`. On expiry the child is killed and the step fails.
|
|
636
|
+
- Output capture is limited to 10 MiB per stream; exceeding it fails the
|
|
637
|
+
step (write bulk output to a file instead).
|
|
638
|
+
- **Env**: the child inherits the runner's `process.env` (which includes
|
|
639
|
+
`unotest/.env` layers). Secrets from `.secrets*` are **not** inherited;
|
|
640
|
+
export them explicitly via the `sandbox.exportSecrets` allowlist
|
|
641
|
+
(values stay masked in logs).
|
|
642
|
+
|
|
572
643
|
```js
|
|
573
|
-
out = shell('pnpm', 'db:create-user', 'alice');
|
|
574
|
-
|
|
644
|
+
out = shell('pnpm', 'db:create-user', 'alice'); // non-zero exit → step fails
|
|
645
|
+
probe = shell('grep', '-q', 'ready', 'app.log', {allowNonZero: true});
|
|
646
|
+
if (probe.code == 0) { /* … */ }
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
**Background / detached processes.** `shell()` waits for the child's
|
|
650
|
+
stdout/stderr pipes to close, not just for the command to exit. A
|
|
651
|
+
command that spawns a background process (`nohup node listener.js &`
|
|
652
|
+
inside a wrapper script) keeps the pipes open — the call runs until the
|
|
653
|
+
timeout. Recipe: fully detach the worker inside the wrapper script by
|
|
654
|
+
redirecting all its descriptors, then await its output with
|
|
655
|
+
`waitForFile`:
|
|
656
|
+
|
|
657
|
+
```bash
|
|
658
|
+
#!/bin/sh
|
|
659
|
+
# start-listener.sh — detach completely: new session, no inherited fds
|
|
660
|
+
node listener.js < /dev/null > listener.log 2>&1 &
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
```js
|
|
664
|
+
step("Start the listener", () => {
|
|
665
|
+
shell('./scripts/start-listener.sh');
|
|
666
|
+
waitForFile('listener.log', 'listening on', {timeoutMs: 10000});
|
|
667
|
+
});
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
### `waitForFile(path, pattern?, options?)` → `string`
|
|
671
|
+
|
|
672
|
+
The file-side analogue of `waitForText` — polls a file until it exists
|
|
673
|
+
and (optionally) contains `pattern` (substring or regex literal), then
|
|
674
|
+
returns the file content. Relative `path` resolves against
|
|
675
|
+
`sandbox.shellCwd`. `options`: `{timeoutMs}` (default 20 000 ms). On
|
|
676
|
+
expiry the step fails with the file path and the last observed state.
|
|
677
|
+
|
|
678
|
+
```js
|
|
679
|
+
step("Wait for the bot reply in the JSONL feed", () => {
|
|
680
|
+
line = waitForFile('events.jsonl', /"type":"reply"/, {timeoutMs: 30000});
|
|
681
|
+
});
|
|
575
682
|
```
|
|
576
683
|
|
|
577
684
|
### `dbQuery(sql, ...params)` → `rows[]`
|
|
@@ -657,6 +764,11 @@ Read page properties directly into a local variable.
|
|
|
657
764
|
href = getAttribute(getByRole('link', {name: 'Docs'}), 'href');
|
|
658
765
|
```
|
|
659
766
|
|
|
767
|
+
Returns `""` when the attribute is missing — which makes it **blind to
|
|
768
|
+
boolean attributes**: `<button disabled>` and a button without the
|
|
769
|
+
attribute both read `""`. For those use `isDisabled(loc)` /
|
|
770
|
+
`hasAttribute(loc, name)`.
|
|
771
|
+
|
|
660
772
|
### `getInnerText(loc)` → `string`
|
|
661
773
|
|
|
662
774
|
Like `textContent` but trimmed and rendered (display-aware).
|
|
@@ -676,6 +788,49 @@ Active page URL.
|
|
|
676
788
|
|
|
677
789
|
---
|
|
678
790
|
|
|
791
|
+
## Generators
|
|
792
|
+
|
|
793
|
+
Random fixture data and time values — no imports, no `Date` / `Math` in
|
|
794
|
+
scenarios.
|
|
795
|
+
|
|
796
|
+
### `randomFirstName()` / `randomLastName()` / `randomEmail()` → `string`
|
|
797
|
+
|
|
798
|
+
### `randomText(length)` → `string`
|
|
799
|
+
|
|
800
|
+
Lorem-style prose cut to `length` characters.
|
|
801
|
+
|
|
802
|
+
### `randomWord(length?)` → `string`
|
|
803
|
+
|
|
804
|
+
Random lowercase letters, default 8 — digit-free unique markers for apps
|
|
805
|
+
whose content filters reject numbers in text.
|
|
806
|
+
|
|
807
|
+
```js
|
|
808
|
+
marker = randomWord(10);
|
|
809
|
+
fill(getByRole('textbox'), textJoin(['ping ', marker]));
|
|
810
|
+
waitForText(marker);
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
### `textJoin(parts)` → `string`
|
|
814
|
+
|
|
815
|
+
Concatenate an array of parts into one string (numbers are coerced).
|
|
816
|
+
This is THE string-concatenation primitive — `+` on strings is rejected
|
|
817
|
+
by the validator and points here.
|
|
818
|
+
|
|
819
|
+
```js
|
|
820
|
+
goto(textJoin(['/list?page=', pageNo, '&q=', query]));
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
### `nowMs()` → `number`
|
|
824
|
+
|
|
825
|
+
Current epoch milliseconds — unique numeric suffixes.
|
|
826
|
+
|
|
827
|
+
### `today()` → `string` / `daysFromNow(n)` → `string`
|
|
828
|
+
|
|
829
|
+
Local date as `YYYY-MM-DD`; `daysFromNow` accepts negative `n` for past
|
|
830
|
+
dates.
|
|
831
|
+
|
|
832
|
+
---
|
|
833
|
+
|
|
679
834
|
## `evaluate`
|
|
680
835
|
|
|
681
836
|
`evaluate(js, ...args)` — escape hatch. Runs `js` in the active page
|
|
@@ -783,6 +938,13 @@ The DSL is JavaScript-shaped but parsed by a small AST engine
|
|
|
783
938
|
- **Method chains** — `getByRole('row').filter({hasText:'X'}).click()`.
|
|
784
939
|
- **Backticks** — multi-line raw strings, no `${}` interpolation.
|
|
785
940
|
- **Booleans, numbers, strings, `null`**.
|
|
941
|
+
- **Comparison operators** — `==` / `!=` (loose: `"1" == 1` is true,
|
|
942
|
+
numeric strings coerce), `===` / `!==` (strict: type AND value must
|
|
943
|
+
match, `1 === "1"` is false), `<` `<=` `>` `>=`, logical `&&` / `||`.
|
|
944
|
+
Caveat: DOM reads (`textContent`, `getInputValue`, `getAttribute`)
|
|
945
|
+
return **strings** — for comparing against a number use `==`
|
|
946
|
+
(`getAttribute(loc, "data-count") === 5` is always false; write
|
|
947
|
+
`== 5` or compare with a string).
|
|
786
948
|
|
|
787
949
|
Not supported (and intentionally so): `while` / `do…while` /
|
|
788
950
|
`continue` (bound loops keep every scenario terminating), `++`/`--`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unotest/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "AI-native E2E testing for web applications. MCP server (run_test / step / resume / inspect_runtime / agent_fix) + CLI runner + JavaScript DSL scenarios on a sandboxed AST engine + semantic DOM snapshots.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -79,17 +79,17 @@
|
|
|
79
79
|
"tsx": "^4.19.2",
|
|
80
80
|
"yaml": "^2.6.0",
|
|
81
81
|
"zod": "^3.23.8",
|
|
82
|
-
"@unotest/core": "^0.
|
|
83
|
-
"@unotest/dsl": "^0.
|
|
84
|
-
"@unotest/
|
|
85
|
-
"@unotest/
|
|
86
|
-
"@unotest/viewer": "^0.
|
|
82
|
+
"@unotest/core": "^0.13.0",
|
|
83
|
+
"@unotest/dsl": "^0.13.0",
|
|
84
|
+
"@unotest/protocol": "^0.13.0",
|
|
85
|
+
"@unotest/grounder-client": "^0.13.0",
|
|
86
|
+
"@unotest/viewer": "^0.13.0"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
89
|
"@types/node": "^22.10.0",
|
|
90
90
|
"javascript-obfuscator": "^4.1.1",
|
|
91
91
|
"tsup": "^8.5.1",
|
|
92
92
|
"typescript": "^5.7.2",
|
|
93
|
-
"@unotest/grounder": "^0.
|
|
93
|
+
"@unotest/grounder": "^0.13.0"
|
|
94
94
|
}
|
|
95
95
|
}
|