@unotest/web 0.27.0 → 0.29.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 +1 -1
- package/.claude/skills/write-e2e-test-ground/SKILL.md +1 -1
- package/CHANGELOG.md +138 -0
- package/README.md +33 -16
- package/dist/config/schema.d.ts +12 -12
- package/dist/config/schema.js +1 -1
- package/dist/driver/index.js +1 -1
- package/dist/dsl/index.d.ts +0 -1
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/web-dsl-language-service.js +1 -1
- 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.d.ts +2 -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 +1 -1
- package/guides/dsl-reference.md +14 -2
- package/package.json +8 -8
- package/types/unotest-dsl.d.ts +1 -1
|
@@ -2,7 +2,8 @@ import { BrowserChannel } from '../config/schema.js';
|
|
|
2
2
|
import 'zod';
|
|
3
3
|
|
|
4
4
|
interface ScaffoldWorkspaceOptions {
|
|
5
|
-
/** Playwright system-browser channel written into
|
|
5
|
+
/** Playwright system-browser channel written into
|
|
6
|
+
* `unotest/unotest.config.mjs`:
|
|
6
7
|
* `'chrome'` / `'msedge'` / … for a system browser, `null` for bundled
|
|
7
8
|
* Chromium, `undefined` to leave the field commented (default applies).
|
|
8
9
|
* The studio resolves this via the same chrome-probe `init` uses. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x547870=_0x1fbd;(function(_0x167525,_0x2eb35b){const _0x3b66d2={_0x38cbde:0xf9,_0x249595:0x118,_0x4d94a5:0xff,_0x22d2df:0x103,_0x37053e:0x108,_0x59cd27:0x10f},_0x3155b8=_0x1fbd,_0x228c3e=_0x167525();while(!![]){try{const _0x456c21=parseInt(_0x3155b8(_0x3b66d2._0x38cbde))/0x1*(parseInt(_0x3155b8(0x10a))/0x2)+-parseInt(_0x3155b8(0x111))/0x3+parseInt(_0x3155b8(_0x3b66d2._0x249595))/0x4+-parseInt(_0x3155b8(0x115))/0x5*(-parseInt(_0x3155b8(_0x3b66d2._0x4d94a5))/0x6)+parseInt(_0x3155b8(0x113))/0x7*(-parseInt(_0x3155b8(_0x3b66d2._0x22d2df))/0x8)+parseInt(_0x3155b8(_0x3b66d2._0x37053e))/0x9+-parseInt(_0x3155b8(_0x3b66d2._0x59cd27))/0xa*(parseInt(_0x3155b8(0xfb))/0xb);if(_0x456c21===_0x2eb35b)break;else _0x228c3e['push'](_0x228c3e['shift']());}catch(_0x4e7097){_0x228c3e['push'](_0x228c3e['shift']());}}}(_0x5035,0xd0a15));var __defProp=Object[_0x547870(0x10b)],__name=(_0x190d03,_0x47b32e)=>__defProp(_0x190d03,_0x547870(0x10d),{'value':_0x47b32e,'configurable':!![]});function _0x1fbd(_0x23a389,_0x43fb93){_0x23a389=_0x23a389-0xf9;const _0x5035f2=_0x5035();let _0x1fbdc9=_0x5035f2[_0x23a389];if(_0x1fbd['mgECbn']===undefined){var _0x1b7555=function(_0x425692){const _0x251703='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x190d03='',_0x47b32e='';for(let _0x464b7a=0x0,_0x20357e,_0x20ccf2,_0xc474dd=0x0;_0x20ccf2=_0x425692['charAt'](_0xc474dd++);~_0x20ccf2&&(_0x20357e=_0x464b7a%0x4?_0x20357e*0x40+_0x20ccf2:_0x20ccf2,_0x464b7a++%0x4)?_0x190d03+=String['fromCharCode'](0xff&_0x20357e>>(-0x2*_0x464b7a&0x6)):0x0){_0x20ccf2=_0x251703['indexOf'](_0x20ccf2);}for(let _0xbfd066=0x0,_0x408c7c=_0x190d03['length'];_0xbfd066<_0x408c7c;_0xbfd066++){_0x47b32e+='%'+('00'+_0x190d03['charCodeAt'](_0xbfd066)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x47b32e);};_0x1fbd['kRVBsG']=_0x1b7555,_0x1fbd['UCWKMq']={},_0x1fbd['mgECbn']=!![];}const _0x40d33c=_0x5035f2[0x0],_0x54d307=_0x23a389+_0x40d33c,_0x56d0cf=_0x1fbd['UCWKMq'][_0x54d307];return!_0x56d0cf?(_0x1fbdc9=_0x1fbd['kRVBsG'](_0x1fbdc9),_0x1fbd['UCWKMq'][_0x54d307]=_0x1fbdc9):_0x1fbdc9=_0x56d0cf,_0x1fbdc9;}import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';var templates={'jsconfigJson':'{\x0a\x20\x20\x22compilerOptions\x22:\x20{\x0a\x20\x20\x20\x20\x22checkJs\x22:\x20false,\x0a\x20\x20\x20\x20\x22target\x22:\x20\x22es2022\x22,\x0a\x20\x20\x20\x20\x22lib\x22:\x20[\x22es2022\x22],\x0a\x20\x20\x20\x20\x22types\x22:\x20[]\x0a\x20\x20},\x0a\x20\x20\x22include\x22:\x20[\x0a\x20\x20\x20\x20\x22**/*.js\x22,\x0a\x20\x20\x20\x20\x22../.unotest/types/env.d.ts\x22,\x0a\x20\x20\x20\x20\x22../node_modules/@unotest/web/types/unotest-dsl.d.ts\x22\x0a\x20\x20]\x0a}\x0a','scenarioTemplate':'//\x20Move\x20+\x20rename\x20this\x20file\x20to\x20<feature>/<your_name>.js\x20(e.g.\x0a//\x20auth/login.js)\x20and\x20the\x20function\x20below\x20to\x20test_<your_name>().\x20Scenarios\x20live\x0a//\x20in\x20feature\x20subfolders,\x20NOT\x20the\x20e2e\x20root\x20—\x20the\x20linter\x20(lint:scenario-in-root)\x0a//\x20rejects\x20a\x20test\x20file\x20placed\x20directly\x20in\x20unotest/e2e/.\x20The\x20loader\x20derives\x20the\x0a//\x20entry\x20name\x20from\x20the\x20file\x20basename\x20—\x20kebab-case\x20dashes\x20become\x20underscores.\x0a\x0a//\x20Every\x20executable\x20step\x20must\x20sit\x20inside\x20a\x20step(\x22...\x22,\x20()\x20=>\x20{\x20…\x20})\x20block.\x20The\x0a//\x20title\x20is\x20a\x20plain-English\x20description\x20of\x20the\x20group;\x20the\x20steps\x20inside\x20are\x0a//\x20the\x20implementation.\x20Group\x20by\x20intent\x20(Setup\x20/\x20Enter\x20/\x20Act\x20/\x20Assert\x20or\x0a//\x20whatever\x20reads\x20well)\x20—\x20one\x20block\x20per\x20logical\x20chunk.\x0a\x0afunction\x20test_your_name_here()\x20{\x0a\x20\x20step(\x22Seed\x20a\x20known\x20user\x20via\x20DB\x20/\x20API\x20fixtures\x20from\x20_helpers/\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20//\x20\x20\x20\x20wipe_e2e_users();\x0a\x20\x20\x20\x20//\x20\x20\x20\x20user_id\x20=\x20seed_user(\x27alice@example.com\x27,\x20\x27secret\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Sign\x20in\x20as\x20the\x20seeded\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27https://your-app.test/login\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20fill(getByLabel(\x27Email\x27),\x20\x27alice@example.com\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20fill(getByLabel(\x27Password\x27),\x20\x27secret\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20click(getByRole(\x27button\x27,\x20{name:\x20\x27Log\x20in\x27}));\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Assert\x20the\x20dashboard\x20shows\x20the\x20signed-in\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertUrl(\x27/dashboard\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertText(getByRole(\x27heading\x27),\x20\x27Welcome,\x20Alice\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20count\x20=\x20dbQuery(\x27SELECT\x20count(*)\x20FROM\x20users\x20WHERE\x20active\x20=\x20true\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertTrue(count\x20>\x200,\x20\x27expected\x20at\x20least\x20one\x20active\x20user\x27);\x0a\x20\x20});\x0a}\x0a','agentsMd':_0x547870(0x11a),'claudeMdBody':_0x547870(0xfa),'examples':{'01-smoke.js':_0x547870(0x112),'02-form-fill.js':_0x547870(0x104)},'secretsExample':_0x547870(0x117),'envExample':_0x547870(0x105)};function unotestConfigMjs(_0x464b7a){const _0x7d6e7b={_0xd2e2c4:0x110,_0x2d2432:0x119},_0x7fa960=_0x547870,_0x20357e=_0x464b7a===void 0x0?_0x7fa960(0x107):_0x7fa960(_0x7d6e7b._0xd2e2c4)+JSON['stringify'](_0x464b7a)+',';return _0x7fa960(_0x7d6e7b._0x2d2432)+_0x20357e+_0x7fa960(0x100);}__name(unotestConfigMjs,_0x547870(0x10c));async function scaffoldWorkspace(_0x20ccf2,_0xc474dd={}){const _0x2a477d={_0xe4328b:0x101,_0x9ac341:0x116,_0x39cf7f:0xfd,_0x26dc8d:0xfd,_0x3ec266:0x10e,_0x28b62c:0x106,_0x3fd0ae:0x101,_0x7d4a6b:0x116,_0x4e4083:0x109},_0x4f9118=_0x547870,_0xbfd066=[],_0x408c7c=[];await mkdir(join(_0x20ccf2,_0x4f9118(0xfd),_0x4f9118(_0x2a477d._0xe4328b),_0x4f9118(_0x2a477d._0x9ac341)),{'recursive':!![]}),await mkdir(join(_0x20ccf2,_0x4f9118(_0x2a477d._0x39cf7f),_0x4f9118(_0x2a477d._0xe4328b),_0x4f9118(0xfe)),{'recursive':!![]});const _0x152565=[{'rel':'unotest.config.mjs','content':unotestConfigMjs(_0xc474dd[_0x4f9118(0xfc)])},{'rel':join(_0x4f9118(_0x2a477d._0x26dc8d),_0x4f9118(_0x2a477d._0x3ec266)),'content':templates[_0x4f9118(_0x2a477d._0x28b62c)]},{'rel':join('unotest','jsconfig.json'),'content':templates[_0x4f9118(0x114)]},{'rel':join(_0x4f9118(0xfd),_0x4f9118(_0x2a477d._0x3fd0ae),_0x4f9118(_0x2a477d._0x7d4a6b),_0x4f9118(0x102)),'content':templates[_0x4f9118(0x116)][_0x4f9118(0x102)]}];for(const {rel:_0x58162b,content:_0x3847d8}of _0x152565){const _0x41a775=join(_0x20ccf2,_0x58162b);if(existsSync(_0x41a775)){_0x408c7c[_0x4f9118(0x109)](_0x58162b);continue;}await writeFile(_0x41a775,_0x3847d8),_0xbfd066[_0x4f9118(_0x2a477d._0x4e4083)](_0x58162b);}return{'projectRoot':_0x20ccf2,'created':_0xbfd066,'skipped':_0x408c7c};}__name(scaffoldWorkspace,'scaffoldWorkspace');export{scaffoldWorkspace};function _0x5035(){const _0x2e6d96=['icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','mti1otC0mZveEMjiEvO','ChvZAa','mMX6ywrAqW','zgvMAw5LuhjVCgvYDhK','Dw5VDgvZDenVBMzPz01QCW','BMfTzq','lMvUDG','mtbdr3Livxi','icbJAgfUBMvSoIa','mJKWndyYmxDsrNfjuq','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO','otq2mJeXn1zYvNDpEa','ANnJB25MAwDkC29U','ntmZndy4nwfRt3n1za','zxHHBxbSzxm','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4GqsbZDwjWCM9JzxnZihrOyxqGz2vUDwLUzwX5ig5LzwrZig9UzsaOysbSAxn0zw5LCIb3AxrOigekiYb0B2TLBIKGz2v0CYbPDcb2AweGDgHLigv4CgXPy2L0igfSBg93BgLZDcbPBIb1BM90zxn0lMnVBMzPzY4QoGOJicaGC2fUzgjVEdOGEYbLEhbVCNrtzwnYzxrZoIbBj1rps0voj10GFqOJifb1DcbUB24TC2vJCMv0ihzHBhvLCYaOvvjmCYWGzw1HAwXZlcbPzhmPigLUihvUB3rLC3qVlMvUDI4kiWOJiezmruvux0vyqu1qteukte9hsu49cLbbu1nxt1jepqPut0TftJ0k','mZmZnJm2meXuq0virG','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','mZa0nJuYrwH3CMHg','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','ndCZotK3n1nOExHevG','y2HHBM5LBa','Dw5VDgvZDa','x2HLBhbLCNm','nMXptgzotG','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','ztjL','mdeTC21VA2uUANm','ogThzM1Nzq','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','zw52rxHHBxbSzq'];_0x5035=function(){return _0x2e6d96;};return _0x5035();}
|
|
1
|
+
const _0x2bef8e=_0x5e37;(function(_0x2f30d0,_0x6e742f){const _0x26deb7={_0x64a1f0:0x1ab,_0x82f708:0x18b,_0x1dd0ed:0x194,_0x213c5f:0x1ad,_0x1fecd4:0x1aa,_0x121347:0x1a9,_0x386be8:0x199,_0x2e10e9:0x185,_0x1d955f:0x1a6,_0x2023c3:0x1a8},_0x188778=_0x5e37,_0x175056=_0x2f30d0();while(!![]){try{const _0x3bbfee=parseInt(_0x188778(_0x26deb7._0x64a1f0))/0x1+parseInt(_0x188778(0x1a1))/0x2*(-parseInt(_0x188778(_0x26deb7._0x82f708))/0x3)+-parseInt(_0x188778(0x196))/0x4*(-parseInt(_0x188778(_0x26deb7._0x1dd0ed))/0x5)+-parseInt(_0x188778(_0x26deb7._0x213c5f))/0x6+-parseInt(_0x188778(_0x26deb7._0x1fecd4))/0x7*(parseInt(_0x188778(_0x26deb7._0x121347))/0x8)+parseInt(_0x188778(_0x26deb7._0x386be8))/0x9*(-parseInt(_0x188778(_0x26deb7._0x2e10e9))/0xa)+parseInt(_0x188778(_0x26deb7._0x1d955f))/0xb*(parseInt(_0x188778(_0x26deb7._0x2023c3))/0xc);if(_0x3bbfee===_0x6e742f)break;else _0x175056['push'](_0x175056['shift']());}catch(_0x3343b1){_0x175056['push'](_0x175056['shift']());}}}(_0x22c2,0xad977));var __defProp=Object[_0x2bef8e(0x195)],__name=(_0x580e5e,_0x1f0ec2)=>__defProp(_0x580e5e,_0x2bef8e(0x1ac),{'value':_0x1f0ec2,'configurable':!![]});function _0x22c2(){const _0x358ce7=['BMfTzq','nJaXnJm4BxHPyKrf','zw52rxHHBxbSzq','mZbmzfbmtKK','Dw5VDgvZDc1ZDwL0zq','zxHHBxbSzxm','ANnJB25MAwDkC29U','igHHCYbUBYb1C2fIBguGiNzLCNnPB24IigzPzwXK','C3rYAw5NAwz5','oxfIr1zora','Dw5VDgvZDa','lMvUDG','BgvUz3rO','C2nHzMzVBgrxB3jRC3bHy2u','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','CgfJA2fNzs5QC29U','C3vPDgvqywnRywDLsNnVBG','ztjL','mJy3nvzjqwnHsa','zgvMAw5LuhjVCgvYDhK','mZK2ngPIvvDgzG','DMvYC2LVBG','ChvZAa','nZC2mJG2swrKrfDN','EWOGicjJB21WAwXLCK9WDgLVBNmIoIb7cIaGicaIy2HLy2TkCYi6igzHBhnLlaOGicaGiNrHCMDLDci6icjLCZiWmJiIlaOGicaGiMXPyIi6ifSIzxmYmdiYiL0ScIaGicaIDhLWzxmIoIbBxqOGih0ScIaGiMLUy2X1zguIoIbBcIaGicaIkIOVkI5QCYiScIaGicaIlI4VlNvUB3rLC3qVDhLWzxmVzw52lMqUDhmIlaOGicaGiI4VBM9Kzv9TB2r1BgvZl0b1BM90zxn0l3DLyI90ExbLCY91BM90zxn0lwrZBc5KlNrZiGOGif0kFqO','C3rYAw5N','y2HHBM5LBa','x2HLBhbLCNm','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','lI4VlI4VCgfJA2fNzs5QC29U','CgfYC2u','nJK4AefKzLnJ','Dw5VDgvZDenVBMzPz01QCW','mdeTC21VA2uUANm','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','mZnsBNjSDu0','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4GqsbZDwjWCM9JzxnZihrOyxqGz2vUDwLUzwX5ig5LzwrZig9UzsaOysbSAxn0zw5LCIb3AxrOigekiYb0B2TLBIKGz2v0CYbPDcb2AweGDgHLigv4CgXPy2L0igfSBg93BgLZDcbPBIb1BM90zxn0lMnVBMzPzY4QoGOJicaGC2fUzgjVEdOGEYbLEhbVCNrtzwnYzxrZoIbBj1rps0voj10GFqOJifb1DcbUB24TC2vJCMv0ihzHBhvLCYaOvvjmCYWGzw1HAwXZlcbPzhmPigLUihvUB3rLC3qVlMvUDI4kiWOJiezmruvux0vyqu1qteukte9hsu49cLbbu1nxt1jepqPut0TftJ0k','mZe3mJm5mMzssgnZua','mtG0sMvLweLs','mJyZmtmWtxrKvwvH','nJeYndaWBurXD2Li'];_0x22c2=function(){return _0x358ce7;};return _0x22c2();}import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';var templates={'jsconfigJson':_0x2bef8e(0x19a),'scenarioTemplate':'//\x20Move\x20+\x20rename\x20this\x20file\x20to\x20<feature>/<your_name>.js\x20(e.g.\x0a//\x20auth/login.js)\x20and\x20the\x20function\x20below\x20to\x20test_<your_name>().\x20Scenarios\x20live\x0a//\x20in\x20feature\x20subfolders,\x20NOT\x20the\x20e2e\x20root\x20—\x20the\x20linter\x20(lint:scenario-in-root)\x0a//\x20rejects\x20a\x20test\x20file\x20placed\x20directly\x20in\x20unotest/e2e/.\x20The\x20loader\x20derives\x20the\x0a//\x20entry\x20name\x20from\x20the\x20file\x20basename\x20—\x20kebab-case\x20dashes\x20become\x20underscores.\x0a\x0a//\x20Every\x20executable\x20step\x20must\x20sit\x20inside\x20a\x20step(\x22...\x22,\x20()\x20=>\x20{\x20…\x20})\x20block.\x20The\x0a//\x20title\x20is\x20a\x20plain-English\x20description\x20of\x20the\x20group;\x20the\x20steps\x20inside\x20are\x0a//\x20the\x20implementation.\x20Group\x20by\x20intent\x20(Setup\x20/\x20Enter\x20/\x20Act\x20/\x20Assert\x20or\x0a//\x20whatever\x20reads\x20well)\x20—\x20one\x20block\x20per\x20logical\x20chunk.\x0a\x0afunction\x20test_your_name_here()\x20{\x0a\x20\x20step(\x22Seed\x20a\x20known\x20user\x20via\x20DB\x20/\x20API\x20fixtures\x20from\x20_helpers/\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20//\x20\x20\x20\x20wipe_e2e_users();\x0a\x20\x20\x20\x20//\x20\x20\x20\x20user_id\x20=\x20seed_user(\x27alice@example.com\x27,\x20\x27secret\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Sign\x20in\x20as\x20the\x20seeded\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27https://your-app.test/login\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20fill(getByLabel(\x27Email\x27),\x20\x27alice@example.com\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20fill(getByLabel(\x27Password\x27),\x20\x27secret\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20click(getByRole(\x27button\x27,\x20{name:\x20\x27Log\x20in\x27}));\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Assert\x20the\x20dashboard\x20shows\x20the\x20signed-in\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertUrl(\x27/dashboard\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertText(getByRole(\x27heading\x27),\x20\x27Welcome,\x20Alice\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20count\x20=\x20dbQuery(\x27SELECT\x20count(*)\x20FROM\x20users\x20WHERE\x20active\x20=\x20true\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertTrue(count\x20>\x200,\x20\x27expected\x20at\x20least\x20one\x20active\x20user\x27);\x0a\x20\x20});\x0a}\x0a','agentsMd':'#\x20@unotest/web\x20—\x20guide\x20for\x20AI\x20agents\x20(and\x20humans)\x0a\x0aThis\x20project\x20uses\x20[`@unotest/web`](https://www.npmjs.com/package/@unotest/web)\x0afor\x20end-to-end\x20testing\x20of\x20web\x20applications.\x0a\x0a##\x20Writing\x20a\x20test\x20—\x20use\x20the\x20skill\x20+\x20MCP\x0a\x0aFor\x20ANY\x20request\x20to\x20write,\x20record,\x20or\x20run\x20an\x20e2e\x20test:\x0a\x0a1.\x20Open\x20the\x20**`write-e2e-test`**\x20skill\x20—\x20`.claude/skills/write-e2e-test/SKILL.md`\x0a\x20\x20\x20(in\x20Claude\x20Code\x20you\x20can\x20also\x20run\x20`/write-e2e-test`)\x20—\x20and\x20follow\x20it.\x0a2.\x20Drive\x20the\x20browser\x20through\x20the\x20**`unotest-web`\x20MCP\x20tools**:\x20`new_context`\x20→\x0a\x20\x20\x20`explore_start`\x20→\x20`explore_step`\x20→\x20`get_page_snapshot`\x20→\x20`run_test`.\x0a\x0aDo\x20NOT\x20hand-author\x20tests\x20blind\x20or\x20map\x20the\x20project\x20with\x20`find`/`ls`/`awk`\x20—\x20the\x0askill\x27s\x20Phase\x200\x20names\x20the\x20exact\x20files\x20to\x20read.\x20Runnable,\x20copy-pasteable\x0aexamples\x20live\x20in\x20`unotest/e2e/examples/`.\x0a\x0a##\x20Layout\x0a\x0a-\x20`unotest/e2e/<feature>/<name>.js`\x20—\x20test\x20scenarios,\x20grouped\x20by\x20feature/page\x0a\x20\x20(one\x20`test_*`\x20function\x20per\x20file).\x20**Required:**\x20every\x20scenario\x20lives\x20in\x20a\x0a\x20\x20feature\x20subfolder.\x20A\x20test\x20file\x20placed\x20directly\x20in\x20`unotest/e2e/`\x20is\x20rejected\x0a\x20\x20by\x20the\x20linter\x20(`lint:scenario-in-root`).\x0a-\x20`unotest/e2e/_helpers/`\x20—\x20project-specific\x20helpers\x20(visible\x20to\x20all\x20scenarios)\x0a-\x20`unotest/e2e/_template.js`\x20—\x20starting-point\x20template\x20(copy\x20into\x20a\x20feature\x20folder)\x0a\x0a##\x20DSL\x20conventions\x0a\x0aThe\x20DSL\x20is\x20a\x20strict\x20JS\x20subset\x20parsed\x20by\x20@unotest/dsl.\x20Method\x20chains,\x20options-\x0aobjects,\x20and\x20variables\x20are\x20allowed.\x20Multi-line\x20strings\x20use\x0abackticks\x20but\x20`${...}`\x20interpolation\x20is\x20forbidden\x20(sandbox\x20boundary\x20—\x0apass\x20values\x20via\x20positional\x20args).\x0a\x0a**Every\x20step\x20must\x20sit\x20inside\x20a\x20`step(\x22description\x22,\x20()\x20=>\x20{\x20…\x20})`\x20block\x20(linter\x0aenforces).**\x20The\x20title\x20is\x20plain-English\x20intent;\x20the\x20steps\x20inside\x20are\x20the\x0aimplementation.\x20When\x20a\x20step\x20later\x20breaks\x20(selector\x20drift),\x20you\x20read\x20the\x0atitle\x20to\x20understand\x20what\x20the\x20group\x20was\x20trying\x20to\x20do\x20and\x20repair\x20it.\x20Group\x20by\x0aintent,\x20one\x20block\x20per\x20logical\x20chunk:\x0a\x0a```js\x0afunction\x20test_login()\x20{\x0a\x20\x20step(\x22Sign\x20in\x20as\x20the\x20demo\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27https://app.example.com/login\x27);\x0a\x20\x20\x20\x20fill(getByLabel(\x27Email\x27),\x20\x27demo@example.com\x27);\x0a\x20\x20\x20\x20click(getByRole(\x27button\x27,\x20{name:\x20\x27Log\x20in\x27}));\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Dashboard\x20shows\x20the\x20signed-in\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20assertText(getByRole(\x27heading\x27),\x20\x27Welcome\x27);\x0a\x20\x20});\x0a}\x0a```\x0a\x0a**Base\x20URL\x20—\x20write\x20relative\x20paths.**\x20`APP_BASE_URL`\x20(in\x20`unotest/.env`)\x20is\x20the\x0aapp\x27s\x20base;\x20`goto(\x27/login\x27)`\x20resolves\x20against\x20it.\x20Don\x27t\x20concatenate\x0a(`goto(APP_BASE_URL\x20+\x20\x27/login\x27)`)\x20—\x20just\x20pass\x20the\x20path:\x0a\x0a```js\x0agoto(\x27/login\x27);\x0afill(getByLabel(\x27Password\x27),\x20TEST_USER_PASSWORD);\x0a```\x0a\x0a**Environments.**\x20Override\x20`APP_BASE_URL`\x20(and\x20any\x20var)\x20per\x20environment\x20with\x0aoverlay\x20files\x20—\x20`unotest/.env.staging`,\x20`unotest/.env.production`\x20(secrets:\x0a`unotest/.secrets.<env>`).\x20Select\x20one\x20at\x20run\x20time:\x20`npx\x20@unotest/web\x20e2e\x20<name>\x0a--env\x20staging`.\x20The\x20overlay\x20layers\x20over\x20the\x20base\x20`.env`\x20(overlay\x20wins).\x0a\x0a**External\x20variables\x20&\x20secrets:**\x20reference\x20logins\x20/\x20tokens\x20by\x20a\x20bare\x0a`UPPER_SNAKE`\x20name\x20—\x20resolved\x20from\x20`unotest/.env`\x20(normal)\x20or\x20`unotest/.secrets`\x0a(secret,\x20masked\x20in\x20logs).\x20No\x20`env()`/`secret()`\x20wrapper.\x20A\x20lowercase\x20name\x20is\x20an\x0ain-scenario\x20binding;\x20an\x20unknown\x20`UPPER_SNAKE`\x20fails\x20the\x20run\x20asking\x20you\x20to\x20add\x20it\x0ato\x20`unotest/.env`.\x0a\x0a**Selector\x20hierarchy\x20(D-22\x20—\x20linter\x20enforces):**\x0a1.\x20`getByTestId(id)`\x20—\x20most\x20stable\x0a2.\x20`getByRole(role,\x20{name})`\x20—\x20semantic,\x20a11y-aware\x0a3.\x20`getByLabel(text)`\x20—\x20for\x20form\x20fields\x0a4.\x20`getByText(text)`\x20—\x20for\x20unique\x20text\x0a5.\x20`locator(css)`\x20—\x20last\x20resort\x20(linter\x20warns)\x0a\x0aFull\x20reference\x20shipped\x20with\x20the\x20package:\x0a-\x20`node_modules/@unotest/web/guides/dsl-reference.md`\x20—\x20DSL\x20functions\x20+\x20linter\x20codes\x0a\x0a##\x20Running\x20(CLI)\x0a\x0a-\x20`npx\x20@unotest/web\x20e2e\x20<feature>/<name>`\x20—\x20run\x20a\x20scenario\x20by\x20name\x0a-\x20`npx\x20@unotest/web\x20lint`\x20—\x20static\x20check\x20of\x20all\x20scenarios\x20+\x20helpers\x0a-\x20`npx\x20@unotest/web\x20mcp`\x20—\x20start\x20the\x20MCP\x20server\x20for\x20agent\x20control\x0a\x0a##\x20Via\x20MCP\x20(Claude\x20Code\x20/\x20Claude\x20Desktop\x20/\x20Cursor)\x0a\x0aThe\x20MCP\x20server\x20exposes:\x0a-\x20`run_test\x20name=\x22<name>\x22\x20mode=\x22step\x22\x20pauseOnFailure=true`\x20—\x20run\x20with\x20step-mode\x0a-\x20`step`\x20/\x20`resume`\x20—\x20advance\x20one\x20AST\x20node\x20/\x20run\x20until\x20next\x20pause\x0a-\x20`inspect_runtime`\x20—\x20current\x20state,\x20last\x20error,\x20locals\x20dump\x0a-\x20`abort_runtime`\x20—\x20kill\x20a\x20paused\x20runtime\x0a\x0aFor\x20agent-fix\x20workflows\x20on\x20flaky\x20tests:\x20`agent_fix\x20testId=\x22<id>\x22`\x20returns\x20a\x0astructured\x20context\x20bundle\x20(see\x20D-25\x20—\x20we\x20never\x20call\x20LLMs\x20or\x20auto-apply\x0adiffs,\x20the\x20diff\x20comes\x20from\x20your\x20MCP-host\x20agent).\x0a','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':_0x2bef8e(0x1a4),'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':_0x2bef8e(0x1a7),'envExample':_0x2bef8e(0x19e)};function unotestConfigMjs(_0x3f879a){const _0x5a372e={_0x513e79:0x18a,_0x4bca36:0x1a5},_0x4dcb43=_0x2bef8e,_0x5f310c=_0x3f879a===void 0x0?_0x4dcb43(0x190):'\x20\x20channel:\x20'+JSON[_0x4dcb43(_0x5a372e._0x513e79)](_0x3f879a)+',';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\x20\x20//\x20sandbox:\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\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20apiCall\x20/\x20upload\x20/\x20dbQuery\x20/\x20shell\x0a\x20\x20//\x20\x20\x20apiBaseUrl:\x20\x27https://api.your-app.test\x27,\x20\x20\x20\x20\x20//\x20base\x20for\x20apiCall(\x27POST\x27,\x20\x27/path\x27,\x20…)\x0a\x20\x20//\x20\x20\x20uploadDir:\x20\x27unotest/fixtures\x27,\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20root\x20for\x20upload(\x27doc.pdf\x27)\x20paths;\x0a\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\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20default:\x20project\x20root.\x20Uploads\x20may\x0a\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\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20not\x20escape\x20it\x20(relative\x20paths\x20only).\x0a\x20\x20//\x20\x20\x20database:\x20\x27postgresql://localhost:5432/app_test\x27,\x20\x20//\x20dbQuery\x20/\x20dbExec\x0a\x20\x20//\x20},\x0a'+_0x5f310c+_0x4dcb43(_0x5a372e._0x4bca36);}__name(unotestConfigMjs,_0x2bef8e(0x1a2));function suitePackageJson(_0x4a3523){const _0x378516={_0x5147e6:0x186},_0x4d0ec3=_0x2bef8e;return JSON['stringify']({'name':_0x4d0ec3(_0x378516._0x5147e6),'private':!![],'devDependencies':{'@unotest/web':'^'+_0x4a3523}},null,0x2)+'\x0a';}__name(suitePackageJson,_0x2bef8e(0x192));import{readFileSync}from'fs';import{dirname,resolve}from'path';import{fileURLToPath}from'url';function _0x5e37(_0xb9d320,_0x3f5aa2){_0xb9d320=_0xb9d320-0x184;const _0x22c2e0=_0x22c2();let _0x5e3781=_0x22c2e0[_0xb9d320];if(_0x5e37['rbBKbV']===undefined){var _0x129889=function(_0x344d5b){const _0x1c7a9c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x580e5e='',_0x1f0ec2='';for(let _0x3f879a=0x0,_0x5f310c,_0x4a3523,_0x58a54e=0x0;_0x4a3523=_0x344d5b['charAt'](_0x58a54e++);~_0x4a3523&&(_0x5f310c=_0x3f879a%0x4?_0x5f310c*0x40+_0x4a3523:_0x4a3523,_0x3f879a++%0x4)?_0x580e5e+=String['fromCharCode'](0xff&_0x5f310c>>(-0x2*_0x3f879a&0x6)):0x0){_0x4a3523=_0x1c7a9c['indexOf'](_0x4a3523);}for(let _0x1eed7d=0x0,_0x2819f9=_0x580e5e['length'];_0x1eed7d<_0x2819f9;_0x1eed7d++){_0x1f0ec2+='%'+('00'+_0x580e5e['charCodeAt'](_0x1eed7d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1f0ec2);};_0x5e37['rZFPhi']=_0x129889,_0x5e37['gHitmH']={},_0x5e37['rbBKbV']=!![];}const _0x4a6c52=_0x22c2e0[0x0],_0x1f5375=_0xb9d320+_0x4a6c52,_0x60a962=_0x5e37['gHitmH'][_0x1f5375];return!_0x60a962?(_0x5e3781=_0x5e37['rZFPhi'](_0x5e3781),_0x5e37['gHitmH'][_0x1f5375]=_0x5e3781):_0x5e3781=_0x60a962,_0x5e3781;}function readOwnVersion(){const _0x14d9a7={_0x1a6cf2:0x1a0,_0x227373:0x197,_0x1a5b45:0x197,_0x554607:0x189},_0xed49e6=_0x2bef8e,_0x58a54e=dirname(fileURLToPath(import.meta.url)),_0x1eed7d=resolve(_0x58a54e,_0xed49e6(0x19f)),_0x2819f9=readFileSync(_0x1eed7d,'utf8'),_0x45558e=JSON[_0xed49e6(_0x14d9a7._0x1a6cf2)](_0x2819f9);if(typeof _0x45558e[_0xed49e6(_0x14d9a7._0x227373)]!==_0xed49e6(0x19b)||_0x45558e[_0xed49e6(_0x14d9a7._0x1a5b45)][_0xed49e6(0x18e)]===0x0)throw new Error('package.json\x20at\x20'+_0x1eed7d+_0xed49e6(_0x14d9a7._0x554607));return _0x45558e[_0xed49e6(0x197)];}__name(readOwnVersion,'readOwnVersion');async function scaffoldWorkspace(_0x2f6ba2,_0x243239={}){const _0x2a1271={_0x49c4ad:0x18c,_0x5cd094:0x18d,_0x2da642:0x184,_0x1a4223:0x188,_0x3a8103:0x187,_0x5ab5b7:0x1a3,_0xb649dc:0x198},_0x23873e=_0x2bef8e,_0x1e7ea8=[],_0x4f6db0=[];await mkdir(join(_0x2f6ba2,_0x23873e(_0x2a1271._0x49c4ad),_0x23873e(0x193),'examples'),{'recursive':!![]}),await mkdir(join(_0x2f6ba2,_0x23873e(0x18c),_0x23873e(0x193),_0x23873e(0x19d)),{'recursive':!![]});const _0x42a248=[{'rel':join(_0x23873e(_0x2a1271._0x49c4ad),'unotest.config.mjs'),'content':unotestConfigMjs(_0x243239[_0x23873e(0x19c)])},{'rel':join(_0x23873e(0x18c),_0x23873e(0x191)),'content':suitePackageJson(readOwnVersion())},{'rel':join('unotest',_0x23873e(_0x2a1271._0x5cd094)),'content':templates[_0x23873e(_0x2a1271._0x2da642)]},{'rel':join(_0x23873e(_0x2a1271._0x49c4ad),'jsconfig.json'),'content':templates[_0x23873e(_0x2a1271._0x1a4223)]},{'rel':join(_0x23873e(0x18c),'e2e',_0x23873e(_0x2a1271._0x3a8103),_0x23873e(_0x2a1271._0x5ab5b7)),'content':templates[_0x23873e(0x187)]['01-smoke.js']}];for(const {rel:_0x45a722,content:_0x581d1b}of _0x42a248){const _0x1be298=join(_0x2f6ba2,_0x45a722);if(existsSync(_0x1be298)){_0x4f6db0[_0x23873e(_0x2a1271._0xb649dc)](_0x45a722);continue;}await writeFile(_0x1be298,_0x581d1b),_0x1e7ea8[_0x23873e(0x198)](_0x45a722);}return{'projectRoot':_0x2f6ba2,'created':_0x1e7ea8,'skipped':_0x4f6db0};}__name(scaffoldWorkspace,_0x2bef8e(0x18f));export{scaffoldWorkspace};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function _0x5935(){var _0x5d88ae=['mJb3z1zky3a','C3rKzxjY','mJe2mtmZogjeyxP3AG','mteWotLLDNrXsvK','rgLKihLVDsbWDwjSAxnOihDPDgHVDxqGzxHHBxbSzxmVzML4DhvYzxmVpWO','mJK2mJKYnvnwzNPfEG','mJa3A3n5rhjM','lI4VlI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','zxHPDa','C2vYDMuTzML4DhvYztOGy2fUBM90igXVy2f0zsbMAxH0DxjLihnLCNzLCIbLBNrYEs4GvhjPzwq6cG','nZCXog5vEvnqEq','mZq3mZmZEfPiBKTz','mZjyrM9zAgG','zxHLy1bHDgG','otiXoduYEMTTu0Ln','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','nJeYnfDrzxrwuq','D3jPDgu','BwfW','mtaWnxbJChDTsq'];_0x5935=function(){return _0x5d88ae;};return _0x5935();}function _0x2a9a(_0x9151b3,_0x1e8bbb){_0x9151b3=_0x9151b3-0x1bb;var _0x59356f=_0x5935();var _0x2a9a9c=_0x59356f[_0x9151b3];if(_0x2a9a['wfhywG']===undefined){var _0x4c2591=function(_0xdb1020){var _0x21f712='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x7ba5e9='',_0x54d233='';for(var _0x406354=0x0,_0x1201aa,_0x110136,_0x182a74=0x0;_0x110136=_0xdb1020['charAt'](_0x182a74++);~_0x110136&&(_0x1201aa=_0x406354%0x4?_0x1201aa*0x40+_0x110136:_0x110136,_0x406354++%0x4)?_0x7ba5e9+=String['fromCharCode'](0xff&_0x1201aa>>(-0x2*_0x406354&0x6)):0x0){_0x110136=_0x21f712['indexOf'](_0x110136);}for(var _0x1480d1=0x0,_0x4f82cf=_0x7ba5e9['length'];_0x1480d1<_0x4f82cf;_0x1480d1++){_0x54d233+='%'+('00'+_0x7ba5e9['charCodeAt'](_0x1480d1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x54d233);};_0x2a9a['tXnMnK']=_0x4c2591,_0x2a9a['RkalHv']={},_0x2a9a['wfhywG']=!![];}var _0x185069=_0x59356f[0x0],_0x4aa2ff=_0x9151b3+_0x185069,_0x40b28f=_0x2a9a['RkalHv'][_0x4aa2ff];return!_0x40b28f?(_0x2a9a9c=_0x2a9a['tXnMnK'](_0x2a9a9c),_0x2a9a['RkalHv'][_0x4aa2ff]=_0x2a9a9c):_0x2a9a9c=_0x40b28f,_0x2a9a9c;}var _0x47904d=_0x2a9a;(function(_0x34785c,_0x1cacaf){var _0x486303={_0xe049b6:0x1bc,_0x21fffa:0x1bb,_0x373167:0x1c1,_0x3bdc47:0x1c4,_0x4e71df:0x1c5},_0x233e19=_0x2a9a,_0x478122=_0x34785c();while(!![]){try{var _0x27f27a=-parseInt(_0x233e19(_0x486303._0xe049b6))/0x1+parseInt(_0x233e19(_0x486303._0x21fffa))/0x2*(-parseInt(_0x233e19(0x1cb))/0x3)+parseInt(_0x233e19(_0x486303._0x373167))/0x4*(-parseInt(_0x233e19(_0x486303._0x3bdc47))/0x5)+parseInt(_0x233e19(0x1c7))/0x6+parseInt(_0x233e19(0x1ca))/0x7+-parseInt(_0x233e19(0x1bd))/0x8*(-parseInt(_0x233e19(0x1bf))/0x9)+parseInt(_0x233e19(_0x486303._0x4e71df))/0xa*(-parseInt(_0x233e19(0x1c8))/0xb);if(_0x27f27a===_0x1cacaf)break;else _0x478122['push'](_0x478122['shift']());}catch(_0x19d2e3){_0x478122['push'](_0x478122['shift']());}}}(_0x5935,0x41e21));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,_0x47904d(0x1c0)),resolve(here,_0x47904d(0x1cc))],serverEntry=candidates['find'](_0x7ba5e9=>existsSync(_0x7ba5e9));!serverEntry&&(process[_0x47904d(0x1c6)][_0x47904d(0x1c2)](_0x47904d(0x1ce)+candidates[_0x47904d(0x1c3)](_0x54d233=>'\x20\x20'+_0x54d233+'\x0a')['join']('')+_0x47904d(0x1c9)),process[_0x47904d(0x1cd)](0x1));var child=spawn(process[_0x47904d(0x1be)],[serverEntry,...process['argv']['slice'](0x2)],{'stdio':'inherit'});child['on'](_0x47904d(0x1cd),_0x406354=>process[_0x47904d(0x1cd)](_0x406354??0x1));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x5d37d0=_0x3ae6;(function(_0x17bae8,_0x573b74){const _0x13a312={_0xf409b6:0xa7,_0x376aee:0xc8,_0xb4556:0x7c,_0x19c9e2:0x7b,_0x2e1214:0x8f},_0x2b957a=_0x3ae6,_0x391806=_0x17bae8();while(!![]){try{const _0x5c5cfb=-parseInt(_0x2b957a(_0x13a312._0xf409b6))/0x1*(parseInt(_0x2b957a(_0x13a312._0x376aee))/0x2)+parseInt(_0x2b957a(0x82))/0x3+parseInt(_0x2b957a(0xa2))/0x4+-parseInt(_0x2b957a(_0x13a312._0xb4556))/0x5*(-parseInt(_0x2b957a(0x80))/0x6)+parseInt(_0x2b957a(_0x13a312._0x19c9e2))/0x7+parseInt(_0x2b957a(0x84))/0x8+parseInt(_0x2b957a(0xd6))/0x9*(-parseInt(_0x2b957a(_0x13a312._0x2e1214))/0xa);if(_0x5c5cfb===_0x573b74)break;else _0x391806['push'](_0x391806['shift']());}catch(_0x26b415){_0x391806['push'](_0x391806['shift']());}}}(_0x16f6,0xaf091));var __defProp=Object['defineProperty'],__name=(_0x2db266,_0xd19d42)=>__defProp(_0x2db266,_0x5d37d0(0xd3),{'value':_0xd19d42,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x1d4d27}from'fs';function _0x16f6(){const _0x47ed8f=['BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','ChvZAa','zxjYB3i','ChjVyMvtExn0zw1cCM93C2vY','ChjVyMvfzgDL','uhjVz3jHBuzPBgvZ','ChjVyMvdAhjVBwvczxrH','y2HLy2TxCML0ywjSzun3za','yxbWu2vYDMvYqxjNCW','y2HYB21PDw0','yxv0Ag9Y','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','BgvUz3rO','yNvPBgrbCMDZ','y2HHBM5LBa','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1ZDgfIBgu','C3vWCg9YDgvKs2LUzhm','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','DMfSDwvZ','C2nOzwr1BgvZqxjNCW','yMLU','mJCWofnoq0vtDG','CgXHDgzVCM0','qhvUB3rLC3qVD2vI','BM8Gq2HYB21Lic8GrwrNzsaVienOCM9TAxvTigrLDgvJDgvK','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','ChjVyMvdAhjVBwu','CMvXDwLYzxmGtM9KzsdIIAuYmcaOCNvUBMLUzYa','BwLJCM9ZB2z0lwvKz2u','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','y3DK','vgfYz2v0igrPCMvJDg9YEq','BMfTzq','u3LZDgvTigjYB3DZzxi','y29SBgvJDgLVBG','mZe0nJiWmLztyK1Qza','yNvPBgrfBNy','Dw5KzwzPBMvK','zgfYD2LU','D29YA2vYCW','ls1IywLS','l3vZCI9IAw4Vy2HYB21PDw0','C3bSAxq','BxnLzgDL','ChjVAMvJDfjVB3q','DxrMoa','yNjLywTWB2LUDhm','zg9JDg9Y','mJuXnty2yKrOD01K','odaWodmWvgnOD1jc','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2uTC3rHyMXL','yMfPBa','mtjtExj5Dhq','y2HLy2ToB2rLvMvYC2LVBG','mZiZnJy1oeT5qvHTBW','ztjL','mtaYnde5odrjzNzMwhe','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','C2nLBMfYAw8','CgLJA0jPBG','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','D2LUmZi','yxv0Ag9YAw5N','AM9PBG','tM9Kzs5QCYb2zxjZAw9U','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','CMvZB2X2zujPBG','ntbVsNj3DMi','ls13B3jRzxjZpq','r29Vz2XLienOCM9TzsbczxrH','C2nOzwr1BgvZ','C3rHCNrZv2L0Aa','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','uhjVz3jHBuzPBgvZkhG4nIK','zw52','A2LUza','D2HPy2HpzG','AxngAw5PDgu','r29Vz2XLienOCM9Tzq','y2HYB21PDw0TyNjVD3nLCG','y2HYB21LlwjLDge','DMvYC2LVBNm','y2HYB21L','DhjPBq','D2fYBMLUzW','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','mJmYodu2nhjvtxrAta','D2HPy2G','BM9Kzq','BgfIzwW','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','nJe1rwHMr0H4','C3rYAw5N','z29Vz2XLlwnOCM9Tzq','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','igzVDw5K','zgvIDwC','l3bHy2THz2uUANnVBG','Dw5VDgvZDc13zwi','ls1Kzwj1zW','CNvUrw52AxjVBM1LBNrdAgvJA3m','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/'];_0x16f6=function(){return _0x47ed8f;};return _0x16f6();}import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x18b00c={_0x354244:0xc0},_0x4f6893=_0x5d37d0;for(const _0x5e08af of[probeChrome,probeEdge,probeChromeBeta]){const _0x794e07=_0x5e08af();if(_0x794e07[_0x4f6893(_0x18b00c._0x354244)]!==null)return _0x794e07;}return{'channel':null};}__name(probeSystemBrowser,_0x5d37d0(0xb5));function probeChrome(){const _0x48e8e0={_0xa63224:0x9e},_0x28e95d=_0x5d37d0,_0xb4f581=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0xb4f581)return{'channel':_0x28e95d(_0x48e8e0._0xa63224),'path':_0xb4f581,'label':_0x28e95d(0x9a)};return{'channel':null};}__name(probeChrome,_0x5d37d0(0xcd));function probeEdge(){const _0x11e924={_0x23dae7:0x76},_0x2b7a9c=_0x5d37d0,_0x251c56=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x251c56)return{'channel':_0x2b7a9c(_0x11e924._0x23dae7),'path':_0x251c56,'label':'Microsoft\x20Edge'};return{'channel':null};}__name(probeEdge,_0x5d37d0(0xb6));function probeChromeBeta(){const _0x13e182={_0x546206:0x9c,_0x1d9675:0x91},_0x15f48b=_0x5d37d0,_0x4090bd=firstExistingPath(CHROME_BETA_PATHS);if(_0x4090bd)return{'channel':_0x15f48b(_0x13e182._0x546206),'path':_0x4090bd,'label':_0x15f48b(_0x13e182._0x1d9675)};return{'channel':null};}__name(probeChromeBeta,_0x5d37d0(0xb8));var CHROME_PATHS=((()=>{const _0x2e2b59={_0x4aff38:0xd9,_0x35e060:0x8d,_0x5ebef6:0x96,_0x206cf2:0xcc,_0x19aa0e:0xcc,_0x1a02a8:0xc2,_0x17511d:0xaa,_0x328495:0xdc,_0x16f413:0xa1},_0x581eb2=_0x5d37d0;switch(process[_0x581eb2(0xc9)]){case _0x581eb2(_0x2e2b59._0x4aff38):return[_0x581eb2(_0x2e2b59._0x35e060)];case _0x581eb2(0x89):return[process[_0x581eb2(_0x2e2b59._0x5ebef6)][_0x581eb2(0xb7)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe',process[_0x581eb2(0x96)]['ProgramFiles(x86)']+_0x581eb2(_0x2e2b59._0x206cf2),process[_0x581eb2(_0x2e2b59._0x5ebef6)]['LOCALAPPDATA']+_0x581eb2(_0x2e2b59._0x19aa0e)];default:return['/usr/bin/google-chrome',_0x581eb2(_0x2e2b59._0x1a02a8),_0x581eb2(_0x2e2b59._0x17511d),_0x581eb2(_0x2e2b59._0x328495),_0x581eb2(_0x2e2b59._0x16f413)];}})()),CHROME_BIN_NAMES=[_0x5d37d0(0xa9),_0x5d37d0(0x7d),_0x5d37d0(0xbb),_0x5d37d0(0x9b)],EDGE_PATHS=((()=>{const _0x11674e={_0x11acac:0x95,_0x5c0db3:0x85},_0x3bd723=_0x5d37d0;switch(process['platform']){case'darwin':return[_0x3bd723(0x88)];case _0x3bd723(0x89):return[process[_0x3bd723(0x96)]['ProgramFiles']+'\x5cMicrosoft\x5cEdge\x5cApplication\x5cmsedge.exe',process[_0x3bd723(0x96)][_0x3bd723(_0x11674e._0x11acac)]+_0x3bd723(0xd0)];default:return[_0x3bd723(_0x11674e._0x5c0db3),_0x3bd723(0x7e)];}})()),EDGE_BIN_NAMES=[_0x5d37d0(0xcf),_0x5d37d0(0xb2)],CHROME_BETA_PATHS=((()=>{const _0x5efa64={_0x4be589:0xc9,_0x49a4d0:0xa6},_0x193946=_0x5d37d0;switch(process[_0x193946(_0x5efa64._0x4be589)]){case'darwin':return[_0x193946(_0x5efa64._0x49a4d0)];case _0x193946(0x89):return[process['env']['ProgramFiles']+'\x5cGoogle\x5cChrome\x20Beta\x5cApplication\x5cchrome.exe'];default:return[_0x193946(0xc1)];}})());function firstExistingPath(_0x2b761e){const _0x3703f3={_0x27f580:0xd8},_0x24007c=_0x5d37d0;for(const _0x16c2a of _0x2b761e){if(!_0x16c2a||_0x16c2a[_0x24007c(0x93)](_0x24007c(_0x3703f3._0x27f580)))continue;if(existsSync(_0x16c2a))return _0x16c2a;}return null;}__name(firstExistingPath,'firstExistingPath');function whichOf(_0x534a75){const _0x1942b4={_0x3056ac:0x78,_0xf923c7:0x9f},_0x11bc2f=_0x5d37d0;if(process[_0x11bc2f(0xc9)]===_0x11bc2f(0x89))return void 0x0;for(const _0x4dd291 of _0x534a75){try{const _0x234c0b=execFileSync(_0x11bc2f(0xa3),[_0x4dd291],{'encoding':_0x11bc2f(_0x1942b4._0x3056ac)})[_0x11bc2f(_0x1942b4._0xf923c7)]();if(_0x234c0b['length']>0x0&&existsSync(_0x234c0b))return _0x234c0b;}catch{}}return void 0x0;}__name(whichOf,_0x5d37d0(0x98));function runEnvironmentChecks(_0x4e4007={}){const _0x25b1cb={_0x3dfefb:0xd1},_0x4aa29f=_0x5d37d0,_0x5d4030=_0x4e4007[_0x4aa29f(0xd1)]??process[_0x4aa29f(_0x25b1cb._0x3dfefb)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x5d4030)];}__name(runEnvironmentChecks,_0x5d37d0(0xb0));function checkNodeVersion(){const _0x56ff6d={_0x59191b:0xa4,_0x104560:0x75,_0x219cf2:0xce,_0x942408:0xc4},_0x20f1c8=_0x5d37d0,_0x4c9cad=process[_0x20f1c8(0x9d)][_0x20f1c8(_0x56ff6d._0x59191b)],_0x263224=Number(_0x4c9cad[_0x20f1c8(_0x56ff6d._0x104560)]('.')[0x0]);if(!Number[_0x20f1c8(0x99)](_0x263224)||_0x263224<0x14)return{'name':_0x20f1c8(0x8c),'severity':_0x20f1c8(0xb4),'message':_0x20f1c8(_0x56ff6d._0x219cf2)+_0x4c9cad+')','detail':_0x20f1c8(_0x56ff6d._0x942408)};return{'name':'Node.js\x20version','severity':'ok','message':_0x4c9cad};}__name(checkNodeVersion,_0x5d37d0(0x81));function checkSystemBrowser(){const _0x3e41d8={_0x17d682:0xd4,_0x4cdebe:0xa0},_0xd4a3ce=_0x5d37d0,_0x5767a8=probeSystemBrowser();if(_0x5767a8[_0xd4a3ce(0xc0)]!==null)return{'name':_0xd4a3ce(_0x3e41d8._0x17d682),'severity':'ok','message':_0x5767a8[_0xd4a3ce(0xa5)]+_0xd4a3ce(0xab),'detail':_0x5767a8['path']};return{'name':_0xd4a3ce(_0x3e41d8._0x17d682),'severity':_0xd4a3ce(_0x3e41d8._0x4cdebe),'message':_0xd4a3ce(0xcb),'detail':_0xd4a3ce(0xbd)};}__name(checkSystemBrowser,'checkSystemBrowser');function checkWritableCwd(_0x70dcbe){const _0x1e31f4={_0x3b4da0:0xd2},_0x1f9fa8=_0x5d37d0;if(!_0x1d4d27(_0x70dcbe))return{'name':_0x1f9fa8(_0x1e31f4._0x3b4da0),'severity':_0x1f9fa8(0xb4),'message':'target\x20'+_0x70dcbe+'\x20does\x20not\x20exist','detail':_0x1f9fa8(0x94)};return{'name':_0x1f9fa8(0xd2),'severity':'ok','message':_0x70dcbe};}__name(checkWritableCwd,_0x5d37d0(0xb9));function _0x3ae6(_0x36813b,_0x3bcc6e){_0x36813b=_0x36813b-0x75;const _0x16f68a=_0x16f6();let _0x3ae665=_0x16f68a[_0x36813b];if(_0x3ae6['SLXiAU']===undefined){var _0x3014be=function(_0x4a32ff){const _0x4bd5c8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1d4d27='',_0x2db266='';for(let _0xd19d42=0x0,_0x5e08af,_0x794e07,_0xb4f581=0x0;_0x794e07=_0x4a32ff['charAt'](_0xb4f581++);~_0x794e07&&(_0x5e08af=_0xd19d42%0x4?_0x5e08af*0x40+_0x794e07:_0x794e07,_0xd19d42++%0x4)?_0x1d4d27+=String['fromCharCode'](0xff&_0x5e08af>>(-0x2*_0xd19d42&0x6)):0x0){_0x794e07=_0x4bd5c8['indexOf'](_0x794e07);}for(let _0x251c56=0x0,_0x4090bd=_0x1d4d27['length'];_0x251c56<_0x4090bd;_0x251c56++){_0x2db266+='%'+('00'+_0x1d4d27['charCodeAt'](_0x251c56)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2db266);};_0x3ae6['baPzAQ']=_0x3014be,_0x3ae6['uvdcLk']={},_0x3ae6['SLXiAU']=!![];}const _0x26267e=_0x16f68a[0x0],_0x565d37=_0x36813b+_0x26267e,_0x1723c4=_0x3ae6['uvdcLk'][_0x565d37];return!_0x1723c4?(_0x3ae665=_0x3ae6['baPzAQ'](_0x3ae665),_0x3ae6['uvdcLk'][_0x565d37]=_0x3ae665):_0x3ae665=_0x1723c4,_0x3ae665;}var PACKAGE_NAME=_0x5d37d0(0xca),WebRunnerAdapter=class{static{__name(this,'WebRunnerAdapter');}[_0x5d37d0(0xd3)]=PACKAGE_NAME;['suffix']='';[_0x5d37d0(0xac)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x5d37d0(0xc3)]=[_0x5d37d0(0x86),_0x5d37d0(0xd5),_0x5d37d0(0x8a)];[_0x5d37d0(0x8e)](){const _0x387018={_0x3c270b:0x78,_0x102f92:0xb1},_0x3bf65c=_0x5d37d0,_0x22d645=createRequire(import.meta.url),_0x20a321=_0x22d645['resolve'](PACKAGE_NAME+_0x3bf65c(0xad)),_0x1d2232=JSON['parse'](readFileSync(_0x20a321,_0x3bf65c(_0x387018._0x3c270b))),_0x879e55=pickBin(_0x1d2232);if(!_0x879e55)throw new Error(PACKAGE_NAME+_0x3bf65c(_0x387018._0x102f92));return join(dirname(_0x20a321),_0x879e55);}[_0x5d37d0(0xbf)](_0x184c76){const _0x31944a={_0x34d429:0x97,_0x5df7c8:0xac,_0x1e5235:0xb3,_0x584b01:0x79,_0x5de2f1:0xbe,_0x372d78:0xda,_0x4f0390:0xda,_0x46acd0:0x90,_0x10d37b:0xda,_0x473643:0x7f,_0x207f6b:0xdb,_0xd77a63:0xbc,_0x3ca394:0x86},_0x3035aa=_0x5d37d0;if(_0x184c76[_0x3035aa(_0x31944a._0x34d429)]==='scenario'){const _0x52a282=[_0x3035aa(0x83),_0x184c76[_0x3035aa(0x86)]];if(_0x184c76[_0x3035aa(_0x31944a._0x5df7c8)])_0x52a282[_0x3035aa(_0x31944a._0x1e5235)](_0x3035aa(0xaf));return _0x184c76['breakpoints']&&_0x184c76[_0x3035aa(_0x31944a._0x584b01)][_0x3035aa(_0x31944a._0x5de2f1)]>0x0&&_0x52a282[_0x3035aa(_0x31944a._0x1e5235)]('--break',_0x184c76[_0x3035aa(0x79)][_0x3035aa(0x8b)](',')),_0x52a282;}if(_0x184c76[_0x3035aa(0x97)]==='collection'){const _0x3156e4=['collection',_0x184c76[_0x3035aa(0xd5)]];_0x184c76[_0x3035aa(_0x31944a._0x372d78)]!==void 0x0&&_0x184c76[_0x3035aa(_0x31944a._0x4f0390)]>0x1&&_0x3156e4[_0x3035aa(0xb3)](_0x3035aa(_0x31944a._0x46acd0)+_0x184c76[_0x3035aa(_0x31944a._0x10d37b)]);if(_0x184c76[_0x3035aa(_0x31944a._0x473643)])_0x3156e4['push'](_0x3035aa(_0x31944a._0x207f6b));return _0x3156e4;}if(_0x184c76[_0x3035aa(0x97)]==='authoring')return[_0x3035aa(_0x31944a._0xd77a63),_0x184c76[_0x3035aa(_0x31944a._0x3ca394)]];const _0x56672a=_0x184c76;throw new UnsupportedRunKindError(_0x56672a[_0x3035aa(_0x31944a._0x34d429)],this['name']);}[_0x5d37d0(0xd7)](_0x11e8d5){const _0x367eca={};if(_0x11e8d5['headed'])_0x367eca['UNOTEST_HEADED']='1';return _0x367eca;}[_0x5d37d0(0xba)](){return['app-server'];}[_0x5d37d0(0xc6)](){const _0x55f91d={_0x583614:0x92},_0x172755=_0x5d37d0;return[_0x172755(_0x55f91d._0x583614),'--json'];}async[_0x5d37d0(0x7a)](_0xb97c2e){const _0x292cd2={_0x1c5fba:0x77},_0x127582=_0x5d37d0;return runEnvironmentChecks({'cwd':_0xb97c2e[_0x127582(_0x292cd2._0x1c5fba)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x3ccbe0){const _0x38d6eb={_0x469b11:0xa8,_0x25fc0c:0xc7,_0x20d2f8:0xc7},_0x514e52=_0x5d37d0;if(typeof _0x3ccbe0['bin']===_0x514e52(_0x38d6eb._0x469b11))return _0x3ccbe0['bin'];if(_0x3ccbe0[_0x514e52(_0x38d6eb._0x25fc0c)]&&typeof _0x3ccbe0[_0x514e52(0xc7)]==='object')return _0x3ccbe0[_0x514e52(_0x38d6eb._0x25fc0c)][_0x514e52(0xae)]??Object[_0x514e52(0xc5)](_0x3ccbe0[_0x514e52(_0x38d6eb._0x20d2f8)])[0x0]??null;return null;}__name(pickBin,_0x5d37d0(0x87));export{web_runner_adapter_default as default,webRunnerAdapter};
|
|
1
|
+
const _0x1ba734=_0x5e55;(function(_0x5273e9,_0xf4147c){const _0x1a5cdd={_0xfe777:0x156,_0x334b24:0x11b,_0x566bb5:0x163,_0x1d94d4:0x117},_0x5430f0=_0x5e55,_0x3a71a4=_0x5273e9();while(!![]){try{const _0x16bb22=parseInt(_0x5430f0(_0x1a5cdd._0xfe777))/0x1+parseInt(_0x5430f0(_0x1a5cdd._0x334b24))/0x2*(parseInt(_0x5430f0(0x11d))/0x3)+-parseInt(_0x5430f0(_0x1a5cdd._0x566bb5))/0x4+parseInt(_0x5430f0(_0x1a5cdd._0x1d94d4))/0x5+parseInt(_0x5430f0(0x154))/0x6+parseInt(_0x5430f0(0x161))/0x7*(-parseInt(_0x5430f0(0x130))/0x8)+-parseInt(_0x5430f0(0x142))/0x9;if(_0x16bb22===_0xf4147c)break;else _0x3a71a4['push'](_0x3a71a4['shift']());}catch(_0xd4f50e){_0x3a71a4['push'](_0x3a71a4['shift']());}}}(_0x29f2,0x6a5b4));var __defProp=Object[_0x1ba734(0x119)],__name=(_0x3ae182,_0x2d7e96)=>__defProp(_0x3ae182,_0x1ba734(0x137),{'value':_0x2d7e96,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';function _0x29f2(){const _0x59084c=['uhjVz3jHBuzPBgvZkhG4nIK','DxrMoa','yxv0Ag9YAw5N','CNvUrw52AxjVBM1LBNrdAgvJA3m','ChjVyMvdAhjVBwvczxrH','v2vIuNvUBMvYqwrHChrLCG','BxnLzgDL','zgfYD2LU','AgvHzgvK','AxngAw5PDgu','D2fYBMLUzW','zMLYC3rfEgLZDgLUz1bHDgG','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1ZDgfIBgu','ls1IywLS','DMvYC2LVBNm','mtmYnZGZme1ztvjMwa','te9dquXbufbeqvrb','nZGZmZC1y3f4vfzy','uhjVz3jHBuzPBgvZ','B2jQzwn0','ChjVAMvJDfjVB3q','BM8Gq2HYB21Lic8GrwrNzsaVienOCM9TAxvTigrLDgvJDgvK','C3vMzML4','vgfYz2v0igrPCMvJDg9YEq','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','ChjVyMvtExn0zw1cCM93C2vY','yNvPBgrbCMDZ','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','mti5nZa1mwnLrKD6qq','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','mtCWotCXnKTXtMLPAa','C3rHCNrZv2L0Aa','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','twLJCM9ZB2z0ievKz2u','D29YA2vYCW','Dw5VDgvZDc13zwi','u3LZDgvTigjYB3DZzxi','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','C2nOzwr1BgvZqxjNCW','D2LUmZi','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','igrVzxmGBM90igv4Axn0','DMfSDwvZ','BwLJCM9ZB2z0lwvKz2u','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','ztjL','y2HLy2TxCML0ywjSzun3za','ChvZAa','y2HYB21LlwjLDge','yxbWu2vYDMvYqxjNCW','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','D2HPy2G','y2HYB21PDw0TyNjVD3nLCG','AM9PBG','D2HPy2HpzG','BM9Kzq','y2HLy2ToB2rLvMvYC2LVBG','A2LUza','mZuZntqYmhDmsKzguG','CgfYC2u','zgvMAw5LuhjVCgvYDhK','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','ody3ohLxq0X0yW','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','mty1A3HpD2XZ','Dw5KzwzPBMvK','ls13B3jRzxjZpq','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','CMvZB2X2zujPBG','CgXHDgzVCM0','DgfYz2v0ia','y29SBgvJDgLVBG','ChjVyMvdAhjVBwu','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','C2nLBMfYAw8','BgvUz3rO','vu5pvevtvf9iruferuq','ls1QC29U','yMfPBa','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2uTC3rHyMXL','y2HHBM5LBa','CgLJA0jPBG','y2HYB21L','oenqruDnzG','tM9Kzs5QCYb2zxjZAw9U','xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','CMvXDwLYzxmGtM9KzsdIIAuYmcaOCNvUBMLUzYa','zg9JDg9Y','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','yNjLywTWB2LUDhm','BMfTzq','zgvIDwC','r29Vz2XLienOCM9Tzq','l3vZCI9IAw4Vy2HYB21PDw0','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','zw52','y2HLy2TtExn0zw1cCM93C2vY','C3vWCg9YDgvKs2LUzhm','Cgf0Aa','C3rYAw5N','yMLU','odeXodq1owHmAef1Eq','yxbWlxnLCNzLCG','zxjYB3i'];_0x29f2=function(){return _0x59084c;};return _0x29f2();}import{dirname,join}from'path';import{existsSync as _0x1feb76}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){for(const _0x4aac65 of[probeChrome,probeEdge,probeChromeBeta]){const _0x1ccf97=_0x4aac65();if(_0x1ccf97['channel']!==null)return _0x1ccf97;}return{'channel':null};}__name(probeSystemBrowser,_0x1ba734(0x15e));function probeChrome(){const _0x9215f3=_0x1ba734,_0x307953=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x307953)return{'channel':_0x9215f3(0x12f),'path':_0x307953,'label':_0x9215f3(0x139)};return{'channel':null};}__name(probeChrome,_0x1ba734(0x125));function probeEdge(){const _0x4638bf={_0x4e1df1:0x166},_0x3fc900=_0x1ba734,_0x121d62=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x121d62)return{'channel':_0x3fc900(0x14b),'path':_0x121d62,'label':_0x3fc900(_0x4638bf._0x4e1df1)};return{'channel':null};}__name(probeEdge,'probeEdge');function probeChromeBeta(){const _0x28d6f1={_0x5b3336:0x175},_0x5143ce=_0x1ba734,_0x190113=firstExistingPath(CHROME_BETA_PATHS);if(_0x190113)return{'channel':_0x5143ce(_0x28d6f1._0x5b3336),'path':_0x190113,'label':'Google\x20Chrome\x20Beta'};return{'channel':null};}__name(probeChromeBeta,_0x1ba734(0x149));var CHROME_PATHS=((()=>{const _0x47618f={_0x5e2c8b:0x14c,_0x4d1b5d:0x11c,_0x561a60:0x13c,_0x1d4e22:0x16a,_0x50087b:0x162},_0x3fab31=_0x1ba734;switch(process[_0x3fab31(0x122)]){case _0x3fab31(_0x47618f._0x5e2c8b):return[_0x3fab31(_0x47618f._0x4d1b5d)];case'win32':return[process['env'][_0x3fab31(0x157)]+_0x3fab31(0x120),process[_0x3fab31(_0x47618f._0x561a60)]['ProgramFiles(x86)']+_0x3fab31(0x120),process[_0x3fab31(_0x47618f._0x561a60)][_0x3fab31(0x155)]+_0x3fab31(0x120)];default:return[_0x3fab31(0x165),_0x3fab31(0x151),_0x3fab31(_0x47618f._0x1d4e22),_0x3fab31(0x13a),_0x3fab31(_0x47618f._0x50087b)];}})()),CHROME_BIN_NAMES=['google-chrome',_0x1ba734(0x160),'chromium',_0x1ba734(0x179)],EDGE_PATHS=((()=>{const _0xbe0316={_0xaf35f4:0x14c,_0x23c288:0x11a,_0x8d7a2b:0x135},_0x2e06cb=_0x1ba734;switch(process[_0x2e06cb(0x122)]){case _0x2e06cb(_0xbe0316._0xaf35f4):return[_0x2e06cb(_0xbe0316._0x23c288)];case _0x2e06cb(0x16c):return[process[_0x2e06cb(0x13c)][_0x2e06cb(0x157)]+'\x5cMicrosoft\x5cEdge\x5cApplication\x5cmsedge.exe',process[_0x2e06cb(0x13c)][_0x2e06cb(0x145)]+_0x2e06cb(0x15d)];default:return[_0x2e06cb(_0xbe0316._0x8d7a2b),_0x2e06cb(0x12c)];}})()),EDGE_BIN_NAMES=[_0x1ba734(0x170),'microsoft-edge-stable'],CHROME_BETA_PATHS=((()=>{const _0x3e5e1a={_0x2208f7:0x122,_0x23ddcd:0x14c,_0x27b2f5:0x16d,_0x257b1e:0x16c,_0x4f6ce7:0x132,_0x9b859:0x177},_0x154ce5=_0x1ba734;switch(process[_0x154ce5(_0x3e5e1a._0x2208f7)]){case _0x154ce5(_0x3e5e1a._0x23ddcd):return[_0x154ce5(_0x3e5e1a._0x27b2f5)];case _0x154ce5(_0x3e5e1a._0x257b1e):return[process['env'][_0x154ce5(0x157)]+_0x154ce5(_0x3e5e1a._0x4f6ce7)];default:return[_0x154ce5(_0x3e5e1a._0x9b859)];}})());function firstExistingPath(_0x4d3bf5){const _0x219b38={_0x4eacf5:0x11e},_0x35349a=_0x1ba734;for(const _0x24e7ac of _0x4d3bf5){if(!_0x24e7ac||_0x24e7ac[_0x35349a(0x164)](_0x35349a(_0x219b38._0x4eacf5)))continue;if(existsSync(_0x24e7ac))return _0x24e7ac;}return null;}__name(firstExistingPath,_0x1ba734(0x150));function whichOf(_0x22b1bc){const _0x2e18cd={_0x590b1b:0x146},_0x4c38a6=_0x1ba734;if(process[_0x4c38a6(0x122)]===_0x4c38a6(0x16c))return void 0x0;for(const _0x4d08d1 of _0x22b1bc){try{const _0x6c41c3=execFileSync(_0x4c38a6(0x178),[_0x4d08d1],{'encoding':_0x4c38a6(_0x2e18cd._0x590b1b)})['trim']();if(_0x6c41c3[_0x4c38a6(0x128)]>0x0&&existsSync(_0x6c41c3))return _0x6c41c3;}catch{}}return void 0x0;}__name(whichOf,_0x1ba734(0x113));function runEnvironmentChecks(_0x1e5779={}){const _0x3d0dec=_0x1e5779['cwd']??process['cwd']();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x3d0dec)];}__name(runEnvironmentChecks,_0x1ba734(0x148));function checkNodeVersion(){const _0x506738={_0x25579c:0x114,_0x13bcc6:0x14e,_0x530fdc:0x131,_0x54a6ac:0x133},_0x447831=_0x1ba734,_0x22261e=process[_0x447831(0x153)][_0x447831(_0x506738._0x25579c)],_0x1e6f20=Number(_0x22261e['split']('.')[0x0]);if(!Number[_0x447831(_0x506738._0x13bcc6)](_0x1e6f20)||_0x1e6f20<0x14)return{'name':_0x447831(_0x506738._0x530fdc),'severity':_0x447831(0x144),'message':_0x447831(_0x506738._0x54a6ac)+_0x22261e+')','detail':_0x447831(0x171)};return{'name':_0x447831(0x131),'severity':'ok','message':_0x22261e};}__name(checkNodeVersion,_0x1ba734(0x115));function checkSystemBrowser(){const _0x1d101c={_0xc9ad52:0x13f,_0x3ee226:0x169,_0x2af381:0x14f,_0x363222:0x15a},_0x1ecfcd=_0x1ba734,_0x83286=probeSystemBrowser();if(_0x83286[_0x1ecfcd(0x12d)]!==null)return{'name':_0x1ecfcd(0x169),'severity':'ok','message':_0x83286['label']+'\x20found','detail':_0x83286[_0x1ecfcd(_0x1d101c._0xc9ad52)]};return{'name':_0x1ecfcd(_0x1d101c._0x3ee226),'severity':_0x1ecfcd(_0x1d101c._0x2af381),'message':_0x1ecfcd(_0x1d101c._0x363222),'detail':'init\x20will\x20offer\x20to\x20download\x20bundled\x20Chromium\x20(~150\x20MB).\x20Alternatively,\x20install\x20Chrome\x20from\x20https://www.google.com/chrome\x20and\x20re-run.'};}__name(checkSystemBrowser,_0x1ba734(0x13d));function checkWritableCwd(_0x4a62ed){const _0x2b9997={_0x49eb1a:0x144,_0x105033:0x123},_0x18a2e7=_0x1ba734;if(!_0x1feb76(_0x4a62ed))return{'name':'Target\x20directory','severity':_0x18a2e7(_0x2b9997._0x49eb1a),'message':_0x18a2e7(_0x2b9997._0x105033)+_0x4a62ed+_0x18a2e7(0x16e),'detail':_0x18a2e7(0x13b)};return{'name':_0x18a2e7(0x15c),'severity':'ok','message':_0x4a62ed};}__name(checkWritableCwd,_0x1ba734(0x173));var PACKAGE_NAME='@unotest/web',WebRunnerAdapter=class{static{__name(this,_0x1ba734(0x14a));}[_0x1ba734(0x137)]=PACKAGE_NAME;[_0x1ba734(0x15b)]='';['debug']={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x1ba734(0x13e)]=['scenario','collection',_0x1ba734(0x147)];[_0x1ba734(0x121)](){const _0x9536e6={_0xe0e614:0x118,_0xff7fa7:0x126},_0x186056=_0x1ba734,_0x16fdfa=createRequire(import.meta.url),_0x50c1f5=_0x16fdfa['resolve'](PACKAGE_NAME+'/package.json'),_0x207eea=JSON[_0x186056(_0x9536e6._0xe0e614)](readFileSync(_0x50c1f5,'utf8')),_0x385da6=pickBin(_0x207eea);if(!_0x385da6)throw new Error(PACKAGE_NAME+_0x186056(_0x9536e6._0xff7fa7));return join(dirname(_0x50c1f5),_0x385da6);}[_0x1ba734(0x15f)](_0xb06ab8){const _0x35a3f3={_0x672590:0x172,_0x56c38c:0x136,_0x33fe7c:0x128,_0x49a218:0x174,_0x2e0148:0x17a,_0x390bf8:0x116,_0x55bfce:0x124,_0xd19659:0x167,_0xda5fc2:0x11f,_0x2706fd:0x12b,_0x9a83df:0x116,_0x256fb5:0x147,_0x1b4dd3:0x127},_0x942b63=_0x1ba734;if(_0xb06ab8[_0x942b63(0x116)]==='scenario'){const _0x5c5502=[_0x942b63(_0x35a3f3._0x672590),_0xb06ab8[_0x942b63(0x127)]];if(_0xb06ab8[_0x942b63(0x138)])_0x5c5502[_0x942b63(0x174)]('--debug');return _0xb06ab8[_0x942b63(0x136)]&&_0xb06ab8[_0x942b63(_0x35a3f3._0x56c38c)][_0x942b63(_0x35a3f3._0x33fe7c)]>0x0&&_0x5c5502[_0x942b63(_0x35a3f3._0x49a218)]('--break',_0xb06ab8[_0x942b63(0x136)][_0x942b63(_0x35a3f3._0x2e0148)](',')),_0x5c5502;}if(_0xb06ab8[_0x942b63(_0x35a3f3._0x390bf8)]===_0x942b63(_0x35a3f3._0x55bfce)){const _0x55e9fd=[_0x942b63(_0x35a3f3._0x55bfce),_0xb06ab8['collection']];_0xb06ab8[_0x942b63(0x167)]!==void 0x0&&_0xb06ab8[_0x942b63(_0x35a3f3._0xd19659)]>0x1&&_0x55e9fd[_0x942b63(0x174)](_0x942b63(_0x35a3f3._0xda5fc2)+_0xb06ab8['workers']);if(_0xb06ab8[_0x942b63(_0x35a3f3._0x2706fd)])_0x55e9fd[_0x942b63(0x174)](_0x942b63(0x152));return _0x55e9fd;}if(_0xb06ab8[_0x942b63(_0x35a3f3._0x9a83df)]===_0x942b63(_0x35a3f3._0x256fb5))return['author',_0xb06ab8[_0x942b63(_0x35a3f3._0x1b4dd3)]];const _0x2ec887=_0xb06ab8;throw new UnsupportedRunKindError(_0x2ec887[_0x942b63(_0x35a3f3._0x9a83df)],this[_0x942b63(0x137)]);}['buildEnv'](_0x4002f5){const _0x44b202={_0xcfe62e:0x129},_0x31bd0f=_0x1ba734,_0x277729={};if(_0x4002f5[_0x31bd0f(0x14d)])_0x277729[_0x31bd0f(_0x44b202._0xcfe62e)]='1';return _0x277729;}[_0x1ba734(0x176)](){const _0x5bb106=_0x1ba734;return[_0x5bb106(0x143)];}[_0x1ba734(0x16b)](){const _0x20d3f5={_0x32437b:0x12a},_0x8dd770=_0x1ba734;return['schedules',_0x8dd770(_0x20d3f5._0x32437b)];}async[_0x1ba734(0x134)](_0x19ea8f){const _0xff3b70=_0x1ba734;return runEnvironmentChecks({'cwd':_0x19ea8f[_0xff3b70(0x159)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x2b938b){const _0x28c178={_0x31ee14:0x141,_0x3de4d8:0x141,_0x4279d9:0x158},_0x458cc3=_0x1ba734;if(typeof _0x2b938b['bin']===_0x458cc3(0x140))return _0x2b938b[_0x458cc3(_0x28c178._0x31ee14)];if(_0x2b938b[_0x458cc3(_0x28c178._0x3de4d8)]&&typeof _0x2b938b[_0x458cc3(0x141)]===_0x458cc3(_0x28c178._0x4279d9))return _0x2b938b[_0x458cc3(0x141)][_0x458cc3(0x168)]??Object[_0x458cc3(0x16f)](_0x2b938b[_0x458cc3(_0x28c178._0x3de4d8)])[0x0]??null;return null;}__name(pickBin,_0x1ba734(0x12e));function _0x5e55(_0x40083f,_0x4eeb33){_0x40083f=_0x40083f-0x113;const _0x29f2f=_0x29f2();let _0x5e5592=_0x29f2f[_0x40083f];if(_0x5e55['wTUTkQ']===undefined){var _0xabfad9=function(_0x4b159b){const _0x1af718='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1feb76='',_0x3ae182='';for(let _0x2d7e96=0x0,_0x4aac65,_0x1ccf97,_0x307953=0x0;_0x1ccf97=_0x4b159b['charAt'](_0x307953++);~_0x1ccf97&&(_0x4aac65=_0x2d7e96%0x4?_0x4aac65*0x40+_0x1ccf97:_0x1ccf97,_0x2d7e96++%0x4)?_0x1feb76+=String['fromCharCode'](0xff&_0x4aac65>>(-0x2*_0x2d7e96&0x6)):0x0){_0x1ccf97=_0x1af718['indexOf'](_0x1ccf97);}for(let _0x121d62=0x0,_0x190113=_0x1feb76['length'];_0x121d62<_0x190113;_0x121d62++){_0x3ae182+='%'+('00'+_0x1feb76['charCodeAt'](_0x121d62)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ae182);};_0x5e55['WhCUQI']=_0xabfad9,_0x5e55['uWUyYN']={},_0x5e55['wTUTkQ']=!![];}const _0xc3211a=_0x29f2f[0x0],_0x552cce=_0x40083f+_0xc3211a,_0x448295=_0x5e55['uWUyYN'][_0x552cce];return!_0x448295?(_0x5e5592=_0x5e55['WhCUQI'](_0x5e5592),_0x5e55['uWUyYN'][_0x552cce]=_0x5e5592):_0x5e5592=_0x448295,_0x5e5592;}export{web_runner_adapter_default as default,webRunnerAdapter};
|
|
@@ -414,7 +414,7 @@ without copy-paste:
|
|
|
414
414
|
## Capability model
|
|
415
415
|
|
|
416
416
|
The MCP server only acts on the consumer project it was launched from:
|
|
417
|
-
its cwd anchors `unotest/`, `unotest.config.*`, `.unotest/failures/`,
|
|
417
|
+
its cwd anchors `unotest/`, `unotest/unotest.config.*`, `.unotest/failures/`,
|
|
418
418
|
and the sandbox primitives.
|
|
419
419
|
|
|
420
420
|
What the server **cannot** do (by design — D-25):
|
package/guides/dsl-reference.md
CHANGED
|
@@ -736,11 +736,11 @@ clipboardPaste(getByLabel('Notes'), 'pasted text');
|
|
|
736
736
|
## Sandbox primitives
|
|
737
737
|
|
|
738
738
|
Project-agnostic core (D-13, D-27). Consumers wire connection / base-URL
|
|
739
|
-
config in `unotest.config.{js,mjs,ts}` under `sandbox.{shellCwd, database,
|
|
739
|
+
config in `unotest/unotest.config.{js,mjs,ts}` under `sandbox.{shellCwd, database,
|
|
740
740
|
apiBaseUrl}` — the scenario **cannot** override.
|
|
741
741
|
|
|
742
742
|
```js
|
|
743
|
-
// unotest.config.mjs
|
|
743
|
+
// unotest/unotest.config.mjs
|
|
744
744
|
export default {
|
|
745
745
|
sandbox: {
|
|
746
746
|
shellCwd: process.cwd(),
|
|
@@ -768,6 +768,11 @@ Semantics:
|
|
|
768
768
|
argument; the call then resolves with `{stdout, stderr, code}`.
|
|
769
769
|
- A missing binary / permission fault is a distinct "failed to start"
|
|
770
770
|
error, never a fake `code: 1`.
|
|
771
|
+
- A `sandbox.shellCwd` that does not exist on the machine running the
|
|
772
|
+
suite is its own error, named before the spawn — Node would otherwise
|
|
773
|
+
report it as the same `ENOENT` a missing binary gives. The config
|
|
774
|
+
travels with the suite; a path from your laptop may not exist in CI or
|
|
775
|
+
on a box.
|
|
771
776
|
- **Timeout**: each call has a wall-clock budget —
|
|
772
777
|
`sandbox.shellTimeoutMs` (default 120 000 ms) or per-call
|
|
773
778
|
`{timeoutMs}`. On expiry the child is killed and the step fails.
|
|
@@ -1159,6 +1164,13 @@ screenshot('landing', {fullPage: true}); // full scroll height
|
|
|
1159
1164
|
- Not a visual assertion: the test does not compare images. In runtimes
|
|
1160
1165
|
with no artifact dir (exploration) the call logs a warning, returns
|
|
1161
1166
|
`null` and does NOT fail the run.
|
|
1167
|
+
- **Every step, without calling it:** `UNOTEST_STEP_SCREENSHOTS=1` makes
|
|
1168
|
+
the runner capture a PNG after each executed step into the same
|
|
1169
|
+
`screenshot/` directory (the viewer shows it when you click the step
|
|
1170
|
+
row). It is a runner switch, not a config field — set it in
|
|
1171
|
+
`unotest/.env`, in the CI job, or in the box environment's variables.
|
|
1172
|
+
Keep explicit `screenshot()` calls for the moments a green run has to
|
|
1173
|
+
prove; the flag is for seeing the whole run afterwards.
|
|
1162
1174
|
|
|
1163
1175
|
---
|
|
1164
1176
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unotest/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.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": {
|
|
@@ -83,18 +83,18 @@
|
|
|
83
83
|
"tsx": "^4.19.2",
|
|
84
84
|
"yaml": "^2.6.0",
|
|
85
85
|
"zod": "^3.23.8",
|
|
86
|
-
"@unotest/core": "^0.
|
|
87
|
-
"@unotest/grounder-client": "^0.
|
|
88
|
-
"@unotest/
|
|
89
|
-
"@unotest/protocol": "^0.
|
|
90
|
-
"@unotest/
|
|
86
|
+
"@unotest/core": "^0.29.0",
|
|
87
|
+
"@unotest/grounder-client": "^0.29.0",
|
|
88
|
+
"@unotest/dsl": "^0.29.0",
|
|
89
|
+
"@unotest/protocol": "^0.29.0",
|
|
90
|
+
"@unotest/viewer": "^0.29.0"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"@types/node": "^22.10.0",
|
|
94
94
|
"javascript-obfuscator": "^4.1.1",
|
|
95
95
|
"tsup": "^8.5.1",
|
|
96
96
|
"typescript": "^5.7.2",
|
|
97
|
-
"@unotest/judge": "^0.
|
|
98
|
-
"@unotest/grounder": "^0.
|
|
97
|
+
"@unotest/judge": "^0.29.0",
|
|
98
|
+
"@unotest/grounder": "^0.29.0"
|
|
99
99
|
}
|
|
100
100
|
}
|
package/types/unotest-dsl.d.ts
CHANGED
|
@@ -276,7 +276,7 @@ declare function randomNth(receiver: Locator): Locator;
|
|
|
276
276
|
/**
|
|
277
277
|
* screenshot(name?, { fullPage? }) → string
|
|
278
278
|
*
|
|
279
|
-
* Capture the active page into the run's artifact dir; returns the project-relative path.
|
|
279
|
+
* Capture the active page into the run's artifact dir; returns the project-relative path. For a PNG after EVERY step without calling it, set UNOTEST_STEP_SCREENSHOTS=1 in the run's environment.
|
|
280
280
|
*/
|
|
281
281
|
declare function screenshot(name?: string, options?: any): string;
|
|
282
282
|
|