@scenetest/scenes 0.1.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/LICENSE +21 -0
- package/dist/__tests__/devices.test.d.ts +2 -0
- package/dist/__tests__/devices.test.d.ts.map +1 -0
- package/dist/__tests__/devices.test.js +117 -0
- package/dist/__tests__/devices.test.js.map +1 -0
- package/dist/__tests__/dsl.test.d.ts +2 -0
- package/dist/__tests__/dsl.test.d.ts.map +1 -0
- package/dist/__tests__/dsl.test.js +385 -0
- package/dist/__tests__/dsl.test.js.map +1 -0
- package/dist/__tests__/markdown-scene.test.d.ts +2 -0
- package/dist/__tests__/markdown-scene.test.d.ts.map +1 -0
- package/dist/__tests__/markdown-scene.test.js +508 -0
- package/dist/__tests__/markdown-scene.test.js.map +1 -0
- package/dist/__tests__/reactive.test.d.ts +2 -0
- package/dist/__tests__/reactive.test.d.ts.map +1 -0
- package/dist/__tests__/reactive.test.js +383 -0
- package/dist/__tests__/reactive.test.js.map +1 -0
- package/dist/__tests__/swarm.test.d.ts +2 -0
- package/dist/__tests__/swarm.test.d.ts.map +1 -0
- package/dist/__tests__/swarm.test.js +214 -0
- package/dist/__tests__/swarm.test.js.map +1 -0
- package/dist/actor.d.ts +104 -0
- package/dist/actor.d.ts.map +1 -0
- package/dist/actor.js +527 -0
- package/dist/actor.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +273 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +120 -0
- package/dist/config.js.map +1 -0
- package/dist/devices.d.ts +55 -0
- package/dist/devices.d.ts.map +1 -0
- package/dist/devices.js +167 -0
- package/dist/devices.js.map +1 -0
- package/dist/dsl.d.ts +99 -0
- package/dist/dsl.d.ts.map +1 -0
- package/dist/dsl.js +247 -0
- package/dist/dsl.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +9 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +27 -0
- package/dist/init.js.map +1 -0
- package/dist/loader.d.ts +2 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +10 -0
- package/dist/loader.js.map +1 -0
- package/dist/markdown-scene.d.ts +120 -0
- package/dist/markdown-scene.d.ts.map +1 -0
- package/dist/markdown-scene.js +452 -0
- package/dist/markdown-scene.js.map +1 -0
- package/dist/message-bus.d.ts +31 -0
- package/dist/message-bus.d.ts.map +1 -0
- package/dist/message-bus.js +74 -0
- package/dist/message-bus.js.map +1 -0
- package/dist/reactive.d.ts +267 -0
- package/dist/reactive.d.ts.map +1 -0
- package/dist/reactive.js +779 -0
- package/dist/reactive.js.map +1 -0
- package/dist/runner.d.ts +51 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +306 -0
- package/dist/runner.js.map +1 -0
- package/dist/scene.d.ts +40 -0
- package/dist/scene.d.ts.map +1 -0
- package/dist/scene.js +110 -0
- package/dist/scene.js.map +1 -0
- package/dist/selectors.d.ts +57 -0
- package/dist/selectors.d.ts.map +1 -0
- package/dist/selectors.js +193 -0
- package/dist/selectors.js.map +1 -0
- package/dist/swarm.d.ts +64 -0
- package/dist/swarm.d.ts.map +1 -0
- package/dist/swarm.js +306 -0
- package/dist/swarm.js.map +1 -0
- package/dist/team-manager.d.ts +120 -0
- package/dist/team-manager.d.ts.map +1 -0
- package/dist/team-manager.js +267 -0
- package/dist/team-manager.js.map +1 -0
- package/dist/types.d.ts +653 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor.js","sourceRoot":"","sources":["../src/actor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AA6BrE;;GAEG;AACH,SAAS,cAAc,CAAC,QAAkB;IACxC,OAAO,QAAQ,CAAA;AACjB,CAAC;AAGD;;;;GAIG;AACH,MAAM,eAAe;IAST;IACA;IACA;IACA;IACA;IACA;IACA;IAdF,OAAO,GAAmB,EAAE,CAAA;IAEpC,qDAAqD;IAC7C,YAAY,CAAgB;IACpC,kCAAkC;IAC1B,UAAU,GAA0B,EAAE,CAAA;IAE9C,YACU,KAAgC,EAChC,IAAU,EACV,GAAe,EACf,QAAyB,EACzB,QAAyB,EACzB,aAAqB,EACrB,SAAiB;QANjB,UAAK,GAAL,KAAK,CAA2B;QAChC,SAAI,GAAJ,IAAI,CAAM;QACV,QAAG,GAAH,GAAG,CAAY;QACf,aAAQ,GAAR,QAAQ,CAAiB;QACzB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,kBAAa,GAAb,aAAa,CAAQ;QACrB,cAAS,GAAT,SAAS,CAAQ;QAEzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,MAA0B,EAAE,OAA4B;QACtF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,QAAwB;QACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACvC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAA;IAC9B,CAAC;IAED;;OAEG;IACK,QAAQ;QACd,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YAC1D,uCAAuC;YACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAA;YAC7B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACtB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,GAAG,CAAC,QAAkB;QACpB,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAA;YAC1D,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YACxE,oCAAoC;YACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAC,QAAkB;QAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAA;YAC1D,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YACxE,0DAA0D;YAC1D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAA;gBACvC,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAA;gBACtE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAA;gBACpE,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;YACjF,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,YAAY,QAAQ,2DAA2D,CAChF,CAAA;YACH,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QAC5G,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAA;YACjD,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YACxE,oCAAoC;YACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,QAAQ,CAAC,QAAkB;QACzB,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAA;YAC1D,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YACxE,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YACvE,qDAAqD;QACvD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,QAAmB;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;gBACnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;gBAC7B,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;gBAC9E,CAAC;gBACD,MAAO,KAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YACjE,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QACzF,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,QAAQ,CAAC,QAAkB,EAAE,KAAa;QACxC,MAAM,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAA;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YAC7F,kCAAkC;QACpC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,QAAkB;QACtB,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QACzF,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,QAAkB,EAAE,KAAa;QACtC,MAAM,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAA;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QACvG,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,EAAU;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;YAChD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,EAAE,CAAC,EAAiC;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC7B,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;oBAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBAChD,CAAC,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAO,KAAiB,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE;oBACvC,IAAI,OAAO,GAAmB,EAAE,CAAA;oBAChC,OAAO,OAAO,EAAE,CAAC;wBACf,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;wBAC9C,IACE,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC;4BAC5D,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,EAC3C,CAAC;4BACD,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,YAAY,CAAA;4BACxC,OAAM;wBACR,CAAC;wBACD,OAAO,GAAG,OAAO,CAAC,aAAa,CAAA;oBACjC,CAAC;oBACD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBAChD,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,EAAE,CAAC,QAAmB;QACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;gBAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAA;gBAC7B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;YACtB,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YAC5D,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YAChF,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAClD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,mCAAmC;gBACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAG,CAAA;YAC5C,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAChC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAkB,EAAE,OAAe;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACtC,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,mBAAmB,CAAC,MAAoB;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QACzC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAA;QAEvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;YACtB,OAAM;QACR,CAAC;QAED,IAAI,cAAc,GAAG,KAAK,CAAA;QAC1B,IAAI,WAAW,GAAY,IAAI,CAAA;QAE/B,aAAa;QACb,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE;aACnC,IAAI,CAAC,GAAG,EAAE;YACT,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,WAAW,GAAG,GAAG,CAAA;YACjB,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC,CAAC,CAAA;QAEJ,8CAA8C;QAC9C,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;YAC9B,MAAM,YAAY,GAAG,EAAE,CAAA;YACvB,OAAO,CAAC,cAAc,EAAE,CAAC;gBACvB,iBAAiB;gBACjB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,OAAO,CAAC,SAAS;wBAAE,SAAQ;oBAC/B,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;wBAC5D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAA;wBAC3C,IAAI,SAAS,EAAE,CAAC;4BACd,OAAO,CAAC,SAAS,GAAG,IAAI,CAAA;4BACxB,2DAA2D;4BAC3D,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAA;wBAC1B,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,qCAAqC;oBACvC,CAAC;gBACH,CAAC;gBAED,yBAAyB;gBACzB,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;oBACtC,IAAI,OAAO,CAAC,SAAS;wBAAE,SAAQ;oBAC/B,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;wBAC5D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAA;wBAC3C,IAAI,SAAS,EAAE,CAAC;4BACd,OAAO,CAAC,SAAS,GAAG,IAAI,CAAA;4BACxB,qBAAqB;4BACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gCACjB,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;gCAC1C,OAAO,EAAE,OAAO,CAAC,OAAO;gCACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gCACrB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gCACtB,YAAY,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG;6BACvD,CAAC,CAAA;wBACJ,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,qCAAqC;oBACvC,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAA;gBACvD,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,wBAAwB;QACxB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;QAElD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,WAAW,CAAA;QACnB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,OAAO;QACnB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACxB,MAAM,KAAK,GAAkB;gBAC3B,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACtB,SAAS,EAAE,KAAK;aACjB,CAAA;YAED,uBAAuB;YACvB,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;gBAClC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,IAAI,CAAA;oBACb,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,QAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,sBAAsB,CAAC,CAAA;gBAC5F,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,QAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,sBAAsB,CAAC,CAAA;gBAC5F,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YAElB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;gBACtC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;gBAEnC,8BAA8B;gBAC9B,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,QAAQ,QAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,eAAe,CAAC,CAAA;gBAC5F,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;gBACnC,KAAK,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC9D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACzB,MAAM,GAAG,CAAA;YACX,CAAC;oBAAS,CAAC;gBACT,aAAa,CAAC,SAAS,CAAC,CAAA;YAC1B,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QAEjB,uCAAuC;QACvC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,CACF,WAAwE,EACxE,UAA2E;QAE3E,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACrD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAqBlB;IAGR;IACA;IACA;IACA;IACA;IA3BD,IAAI,CAAQ;IACZ,IAAI,CAAM;IACV,OAAO,CAAgB;IACvB,UAAU,GAAsB,EAAE,CAAA;IAE3C,+CAA+C;IACvC,QAAQ,GAAc,EAAE,CAAA;IAEhC,8BAA8B;IACtB,eAAe,GAAqB,EAAE,CAAA;IAE9C,4BAA4B;IACnB,EAAE,CAAQ;IACV,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,QAAQ,CAAS;IAG1B,YACE,IAAY,EACI,MAAmB,EACnC,IAAU,EACV,OAAuB,EACf,GAAe,EACf,QAAyB,EACzB,QAAyB,EACzB,aAAqB,EACrB,SAAiB;QAPT,WAAM,GAAN,MAAM,CAAa;QAG3B,QAAG,GAAH,GAAG,CAAY;QACf,aAAQ,GAAR,QAAQ,CAAiB;QACzB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,kBAAa,GAAb,aAAa,CAAQ;QACrB,cAAS,GAAT,SAAS,CAAQ;QAEzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;QAEnB,8CAA8C;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;gBAClB,IAAgC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAChD,CAAC;iBAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACvB,IAAgC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;IACpB,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACzH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACvC,CAAC;IAED,GAAG,CAAC,QAAkB;QACpB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACzC,CAAC;IAED,SAAS,CAAC,QAAkB;QAC1B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ,CAAC,QAAkB;QACzB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,QAAmB;QACvB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC3C,CAAC;IAED,QAAQ,CAAC,QAAkB,EAAE,KAAa;QACxC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,QAAkB;QACtB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,QAAkB,EAAE,KAAa;QACtC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,CAAC,EAAU;QACb,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,EAAE,CAAC,EAAiC;QAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,CAAA;IAC5C,CAAC;IAED,EAAE,CAAC,QAAmB;QACpB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IACxC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAClC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,EAAE,CAAC,QAAkB,EAAE,QAA6B;QAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,QAAQ;YACR,QAAQ;YACR,SAAS,EAAE,KAAK;SACjB,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAkB,EAAE,OAAe;QACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxB,QAAQ;YACR,OAAO;YACP,SAAS,EAAE,KAAK;SACjB,CAAC,CAAA;IACJ,CAAC;CACF"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { loadConfig } from './config.js';
|
|
6
|
+
import { SceneRunner, printSummary } from './runner.js';
|
|
7
|
+
import { init } from './init.js';
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('scenetest')
|
|
11
|
+
.description('Run scenetest scene specs')
|
|
12
|
+
.version('0.0.1')
|
|
13
|
+
.argument('[scenes...]', 'Scene files or directories to run')
|
|
14
|
+
.option('--ui', 'Run in interactive UI mode')
|
|
15
|
+
.option('--headed', 'Run with visible browser')
|
|
16
|
+
.option('--report <dir>', 'Report output directory')
|
|
17
|
+
.option('--format <format>', 'Report format (html, json, both)')
|
|
18
|
+
.option('--config <path>', 'Path to config file')
|
|
19
|
+
.option('--devices', 'Enable device rotation (assign each actor a rotating mobile/tablet/desktop device)')
|
|
20
|
+
.option('--swarm', 'Force swarm mode: run all teams against all scenes to classify failures')
|
|
21
|
+
.action(async (scenes, options) => {
|
|
22
|
+
try {
|
|
23
|
+
// Load config and discover actor teams
|
|
24
|
+
const { config, teams } = await loadConfig(options.config);
|
|
25
|
+
// Override config with CLI options
|
|
26
|
+
if (options.headed) {
|
|
27
|
+
config.headed = true;
|
|
28
|
+
}
|
|
29
|
+
if (options.report) {
|
|
30
|
+
config.reportDir = options.report;
|
|
31
|
+
}
|
|
32
|
+
if (options.format) {
|
|
33
|
+
config.reportFormat = options.format;
|
|
34
|
+
}
|
|
35
|
+
if (options.devices) {
|
|
36
|
+
config.devices = true;
|
|
37
|
+
}
|
|
38
|
+
// Interactive UI mode
|
|
39
|
+
if (options.ui) {
|
|
40
|
+
config.headed = true;
|
|
41
|
+
console.log('\n🎬 Scenetest UI Mode\n');
|
|
42
|
+
console.log('Press Ctrl+C to exit\n');
|
|
43
|
+
}
|
|
44
|
+
// Create runner
|
|
45
|
+
const runner = new SceneRunner(config, teams);
|
|
46
|
+
// Initialize browser
|
|
47
|
+
await runner.init();
|
|
48
|
+
try {
|
|
49
|
+
// Resolve scene file paths
|
|
50
|
+
let sceneFiles;
|
|
51
|
+
if (scenes.length > 0) {
|
|
52
|
+
sceneFiles = scenes.map((s) => path.resolve(s));
|
|
53
|
+
}
|
|
54
|
+
if (options.swarm) {
|
|
55
|
+
// ── Manual swarm mode ──
|
|
56
|
+
// Load scenes first, then swarm them all
|
|
57
|
+
const discovered = sceneFiles || (await runner.discoverScenes());
|
|
58
|
+
if (discovered.length === 0) {
|
|
59
|
+
console.log('No scene files found.');
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
await runner.loadScenes(discovered);
|
|
63
|
+
const report = await runner.runSwarmMode('manual');
|
|
64
|
+
printSummary(report);
|
|
65
|
+
await writeReport(report, config.reportDir, config.reportFormat);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// ── Normal run ──
|
|
70
|
+
const report = await runner.run(sceneFiles);
|
|
71
|
+
printSummary(report);
|
|
72
|
+
await writeReport(report, config.reportDir, config.reportFormat);
|
|
73
|
+
// Check if swarm should auto-trigger
|
|
74
|
+
const triggeringScenes = runner.checkSwarmTrigger();
|
|
75
|
+
if (triggeringScenes.length > 0) {
|
|
76
|
+
console.log(`\n⚡ Swarm mode auto-triggered for ${triggeringScenes.length} scene(s):`);
|
|
77
|
+
for (const name of triggeringScenes) {
|
|
78
|
+
console.log(` - ${name}`);
|
|
79
|
+
}
|
|
80
|
+
const swarmReport = await runner.runSwarmMode('auto', triggeringScenes);
|
|
81
|
+
await writeReport(swarmReport, config.reportDir, config.reportFormat);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// In UI mode, keep browser open
|
|
85
|
+
if (options.ui) {
|
|
86
|
+
console.log('Browser will remain open. Press Ctrl+C to exit.\n');
|
|
87
|
+
await new Promise(() => { }); // Wait forever
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
if (!options.ui) {
|
|
92
|
+
await runner.close();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
console.error('Error:', err instanceof Error ? err.message : err);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
/**
|
|
102
|
+
* Write report to files
|
|
103
|
+
*/
|
|
104
|
+
async function writeReport(report, dir, format) {
|
|
105
|
+
// Create report directory
|
|
106
|
+
if (!fs.existsSync(dir)) {
|
|
107
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
108
|
+
}
|
|
109
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
110
|
+
// Write JSON report
|
|
111
|
+
if (format === 'json' || format === 'both') {
|
|
112
|
+
const jsonPath = path.join(dir, `report-${timestamp}.json`);
|
|
113
|
+
fs.writeFileSync(jsonPath, JSON.stringify(report, null, 2));
|
|
114
|
+
console.log(`Report written to: ${jsonPath}`);
|
|
115
|
+
}
|
|
116
|
+
// Write HTML report
|
|
117
|
+
if (format === 'html' || format === 'both') {
|
|
118
|
+
const htmlPath = path.join(dir, `report-${timestamp}.html`);
|
|
119
|
+
fs.writeFileSync(htmlPath, generateHtmlReport(report));
|
|
120
|
+
console.log(`Report written to: ${htmlPath}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Generate an HTML report
|
|
125
|
+
*/
|
|
126
|
+
function generateHtmlReport(report) {
|
|
127
|
+
const passedColor = '#22c55e';
|
|
128
|
+
const failedColor = '#ef4444';
|
|
129
|
+
const warnColor = '#f59e0b';
|
|
130
|
+
const sceneRows = report.scenes
|
|
131
|
+
.map((scene) => {
|
|
132
|
+
const statusIcon = scene.status === 'completed' ? '✓' : scene.status === 'timeout' ? '⏱' : '✗';
|
|
133
|
+
const statusColor = scene.status === 'completed' ? passedColor : failedColor;
|
|
134
|
+
const assertionList = scene.assertions
|
|
135
|
+
.map((a) => {
|
|
136
|
+
const icon = a.result ? '✓' : '✗';
|
|
137
|
+
const color = a.result ? passedColor : failedColor;
|
|
138
|
+
const deviceTag = a.device ? ` <span class="device-tag">[${escapeHtml(a.device)}]</span>` : '';
|
|
139
|
+
return `<li style="color: ${color}">${icon} ${escapeHtml(a.description)}${deviceTag}</li>`;
|
|
140
|
+
})
|
|
141
|
+
.join('');
|
|
142
|
+
// Device info for actors
|
|
143
|
+
const actorDevices = Object.entries(scene.actors)
|
|
144
|
+
.filter(([, a]) => a.device)
|
|
145
|
+
.map(([role, a]) => `<span class="device-badge">${escapeHtml(role)}: ${escapeHtml(a.device)}</span>`)
|
|
146
|
+
.join(' ');
|
|
147
|
+
return `
|
|
148
|
+
<div class="scene">
|
|
149
|
+
<h3 style="color: ${statusColor}">${statusIcon} ${escapeHtml(scene.name)}</h3>
|
|
150
|
+
<p class="meta">File: ${escapeHtml(scene.file)} | Duration: ${scene.duration}ms | Team: ${scene.teamIndex}</p>
|
|
151
|
+
${actorDevices ? `<p class="devices">${actorDevices}</p>` : ''}
|
|
152
|
+
${scene.error ? `<p class="error">Error: ${escapeHtml(scene.error)}</p>` : ''}
|
|
153
|
+
<h4>Assertions (${scene.assertions.length})</h4>
|
|
154
|
+
<ul>${assertionList || '<li>No assertions</li>'}</ul>
|
|
155
|
+
</div>
|
|
156
|
+
`;
|
|
157
|
+
})
|
|
158
|
+
.join('');
|
|
159
|
+
// Swarm section
|
|
160
|
+
let swarmSection = '';
|
|
161
|
+
if (report.swarm) {
|
|
162
|
+
const swarm = report.swarm;
|
|
163
|
+
const swarmRows = swarm.results
|
|
164
|
+
.map((r) => {
|
|
165
|
+
const color = r.classification === 'healthy' ? passedColor
|
|
166
|
+
: r.classification === 'broken' ? failedColor
|
|
167
|
+
: r.classification === 'flaky' ? warnColor
|
|
168
|
+
: '#8b5cf6';
|
|
169
|
+
return `
|
|
170
|
+
<div class="scene" style="border-left: 4px solid ${color}">
|
|
171
|
+
<h3>${escapeHtml(r.name)}</h3>
|
|
172
|
+
<p class="meta">
|
|
173
|
+
Classification: <strong style="color: ${color}">${escapeHtml(r.classification.toUpperCase())}</strong> |
|
|
174
|
+
Passed: ${r.passed}/${r.runs} |
|
|
175
|
+
Failing teams: ${r.failingTeams.length > 0 ? r.failingTeams.join(', ') : 'none'}
|
|
176
|
+
</p>
|
|
177
|
+
</div>
|
|
178
|
+
`;
|
|
179
|
+
})
|
|
180
|
+
.join('');
|
|
181
|
+
swarmSection = `
|
|
182
|
+
<h2>Swarm Results (${swarm.trigger})</h2>
|
|
183
|
+
<div class="summary">
|
|
184
|
+
<div class="summary-card" style="border-top: 3px solid ${failedColor}">
|
|
185
|
+
<h2>${swarm.summary.broken}</h2><p>Broken</p>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="summary-card" style="border-top: 3px solid ${warnColor}">
|
|
188
|
+
<h2>${swarm.summary.flaky}</h2><p>Flaky</p>
|
|
189
|
+
</div>
|
|
190
|
+
<div class="summary-card" style="border-top: 3px solid #8b5cf6">
|
|
191
|
+
<h2>${swarm.summary.seedDataEdgeCase}</h2><p>Seed Data Edge</p>
|
|
192
|
+
</div>
|
|
193
|
+
<div class="summary-card" style="border-top: 3px solid ${passedColor}">
|
|
194
|
+
<h2>${swarm.summary.healthy}</h2><p>Healthy</p>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
${swarmRows}
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
return `
|
|
201
|
+
<!DOCTYPE html>
|
|
202
|
+
<html>
|
|
203
|
+
<head>
|
|
204
|
+
<meta charset="UTF-8">
|
|
205
|
+
<title>Scenetest Report</title>
|
|
206
|
+
<style>
|
|
207
|
+
body { font-family: system-ui, sans-serif; max-width: 900px; margin: 0 auto; padding: 2rem; }
|
|
208
|
+
h1 { border-bottom: 2px solid #333; padding-bottom: 0.5rem; display: flex; align-items: center; gap: 0.5rem; }
|
|
209
|
+
.logo { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 10px; background: rgba(80, 70, 229, 0.12); box-shadow: inset 0 2px 6px rgba(80, 70, 229, 0.25), inset 0 -1px 2px rgba(255, 255, 255, 0.5); font-size: 1.5rem; }
|
|
210
|
+
.summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; margin: 1rem 0; }
|
|
211
|
+
.summary-card { background: #f5f5f5; padding: 1rem; border-radius: 8px; text-align: center; }
|
|
212
|
+
.summary-card h2 { margin: 0; font-size: 2rem; }
|
|
213
|
+
.summary-card p { margin: 0.5rem 0 0; color: #666; }
|
|
214
|
+
.scene { border: 1px solid #ddd; padding: 1rem; margin: 1rem 0; border-radius: 8px; }
|
|
215
|
+
.scene h3 { margin-top: 0; }
|
|
216
|
+
.meta { color: #666; font-size: 0.9rem; }
|
|
217
|
+
.error { color: ${failedColor}; background: #fef2f2; padding: 0.5rem; border-radius: 4px; }
|
|
218
|
+
.devices { margin: 0.5rem 0; }
|
|
219
|
+
.device-badge { display: inline-block; background: #e0e7ff; color: #3730a3; padding: 2px 8px; border-radius: 12px; font-size: 0.8rem; margin-right: 4px; }
|
|
220
|
+
.device-tag { color: #6366f1; font-size: 0.85em; }
|
|
221
|
+
ul { list-style: none; padding-left: 0; }
|
|
222
|
+
li { padding: 0.25rem 0; }
|
|
223
|
+
</style>
|
|
224
|
+
</head>
|
|
225
|
+
<body>
|
|
226
|
+
<h1><span class="logo">🎬</span> Scenetest Report</h1>
|
|
227
|
+
<p>Generated: ${report.timestamp}</p>
|
|
228
|
+
|
|
229
|
+
<div class="summary">
|
|
230
|
+
<div class="summary-card">
|
|
231
|
+
<h2>${report.summary.completed}/${report.summary.scenes}</h2>
|
|
232
|
+
<p>Scenes Completed</p>
|
|
233
|
+
</div>
|
|
234
|
+
<div class="summary-card">
|
|
235
|
+
<h2 style="color: ${report.summary.assertions.failed > 0 ? failedColor : passedColor}">
|
|
236
|
+
${report.summary.assertions.passed}/${report.summary.assertions.total}
|
|
237
|
+
</h2>
|
|
238
|
+
<p>Assertions Passed</p>
|
|
239
|
+
</div>
|
|
240
|
+
<div class="summary-card">
|
|
241
|
+
<h2>${report.duration}ms</h2>
|
|
242
|
+
<p>Total Duration</p>
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
${sceneRows ? `<h2>Scenes</h2>${sceneRows}` : ''}
|
|
247
|
+
${swarmSection}
|
|
248
|
+
</body>
|
|
249
|
+
</html>
|
|
250
|
+
`;
|
|
251
|
+
}
|
|
252
|
+
function escapeHtml(str) {
|
|
253
|
+
return str
|
|
254
|
+
.replace(/&/g, '&')
|
|
255
|
+
.replace(/</g, '<')
|
|
256
|
+
.replace(/>/g, '>')
|
|
257
|
+
.replace(/"/g, '"');
|
|
258
|
+
}
|
|
259
|
+
program
|
|
260
|
+
.command('init')
|
|
261
|
+
.description('Initialize scenetest folder structure')
|
|
262
|
+
.option('--force', 'Overwrite existing files')
|
|
263
|
+
.action(async (options) => {
|
|
264
|
+
try {
|
|
265
|
+
await init(process.cwd(), { force: options.force });
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
console.error('Error:', err instanceof Error ? err.message : err);
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
program.parse();
|
|
273
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ScenetestConfig, TeamConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Find the config file in the current directory
|
|
4
|
+
*/
|
|
5
|
+
export declare function findConfigFile(cwd?: string): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Loaded config with resolved teams
|
|
8
|
+
*/
|
|
9
|
+
export interface LoadedConfig {
|
|
10
|
+
config: ScenetestConfig;
|
|
11
|
+
teams: TeamConfig[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Load and validate the config file, and discover actor teams
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadConfig(configPath?: string): Promise<LoadedConfig>;
|
|
17
|
+
/**
|
|
18
|
+
* Helper to define config with type checking
|
|
19
|
+
*/
|
|
20
|
+
export declare function defineConfig(config: ScenetestConfig): ScenetestConfig;
|
|
21
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA8B7D;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAgB,GAAG,MAAM,GAAG,IAAI,CAQjE;AAkDD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqC3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAErE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
import { importFile } from './loader.js';
|
|
5
|
+
/**
|
|
6
|
+
* Default config values
|
|
7
|
+
*/
|
|
8
|
+
const defaults = {
|
|
9
|
+
scenes: './scenes',
|
|
10
|
+
browser: 'chromium',
|
|
11
|
+
headed: false,
|
|
12
|
+
slowMo: 0,
|
|
13
|
+
timeout: 30000,
|
|
14
|
+
actionTimeout: 5000,
|
|
15
|
+
warnAfter: 500,
|
|
16
|
+
reportDir: './scenetest-reports',
|
|
17
|
+
reportFormat: 'html',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Config file names to search for (in order of preference)
|
|
21
|
+
*/
|
|
22
|
+
const CONFIG_FILES = [
|
|
23
|
+
'scenetest.config.ts',
|
|
24
|
+
'scenetest.config.js',
|
|
25
|
+
'scenetest.config.mjs',
|
|
26
|
+
'scenetest/config.ts',
|
|
27
|
+
'scenetest/config.js',
|
|
28
|
+
'scenetest/config.mjs',
|
|
29
|
+
];
|
|
30
|
+
/**
|
|
31
|
+
* Find the config file in the current directory
|
|
32
|
+
*/
|
|
33
|
+
export function findConfigFile(cwd = process.cwd()) {
|
|
34
|
+
for (const name of CONFIG_FILES) {
|
|
35
|
+
const filepath = path.join(cwd, name);
|
|
36
|
+
if (fs.existsSync(filepath)) {
|
|
37
|
+
return filepath;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Discover actor team files relative to the config file directory.
|
|
44
|
+
*
|
|
45
|
+
* Looks for:
|
|
46
|
+
* 1. `actors.ts` (single file exporting an array of teams)
|
|
47
|
+
* 2. `actors/*.ts` (directory with one file per team)
|
|
48
|
+
*/
|
|
49
|
+
async function discoverTeams(configDir) {
|
|
50
|
+
// Check for single actors file first
|
|
51
|
+
const singleFiles = ['actors.ts', 'actors.js', 'actors.mjs'];
|
|
52
|
+
for (const name of singleFiles) {
|
|
53
|
+
const filepath = path.join(configDir, name);
|
|
54
|
+
if (fs.existsSync(filepath)) {
|
|
55
|
+
const module = await importFile(filepath);
|
|
56
|
+
const exported = module.default;
|
|
57
|
+
if (Array.isArray(exported)) {
|
|
58
|
+
return exported;
|
|
59
|
+
}
|
|
60
|
+
// Single team exported as object
|
|
61
|
+
return [exported];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Check for actors directory
|
|
65
|
+
const actorsDir = path.join(configDir, 'actors');
|
|
66
|
+
if (fs.existsSync(actorsDir) && fs.statSync(actorsDir).isDirectory()) {
|
|
67
|
+
const files = await glob('*.{ts,js,mjs}', {
|
|
68
|
+
cwd: actorsDir,
|
|
69
|
+
absolute: true,
|
|
70
|
+
});
|
|
71
|
+
if (files.length === 0) {
|
|
72
|
+
throw new Error(`actors/ directory found at ${actorsDir} but contains no .ts/.js files`);
|
|
73
|
+
}
|
|
74
|
+
const teams = [];
|
|
75
|
+
for (const file of files.sort()) {
|
|
76
|
+
const module = await importFile(file);
|
|
77
|
+
teams.push(module.default);
|
|
78
|
+
}
|
|
79
|
+
return teams;
|
|
80
|
+
}
|
|
81
|
+
throw new Error(`No actor files found. Create actors.ts (exporting an array of teams) or actors/*.ts (one file per team) next to your config file at ${configDir}`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Load and validate the config file, and discover actor teams
|
|
85
|
+
*/
|
|
86
|
+
export async function loadConfig(configPath) {
|
|
87
|
+
const filepath = configPath || findConfigFile();
|
|
88
|
+
if (!filepath) {
|
|
89
|
+
throw new Error(`No config file found. Create one of: ${CONFIG_FILES.join(', ')}`);
|
|
90
|
+
}
|
|
91
|
+
if (!fs.existsSync(filepath)) {
|
|
92
|
+
throw new Error(`Config file not found: ${filepath}`);
|
|
93
|
+
}
|
|
94
|
+
// Dynamic import
|
|
95
|
+
const module = await importFile(filepath);
|
|
96
|
+
const config = module.default;
|
|
97
|
+
// Validate required fields
|
|
98
|
+
if (!config.baseUrl) {
|
|
99
|
+
throw new Error('Config missing required field: baseUrl');
|
|
100
|
+
}
|
|
101
|
+
// Merge with defaults
|
|
102
|
+
const resolved = {
|
|
103
|
+
...defaults,
|
|
104
|
+
...config,
|
|
105
|
+
};
|
|
106
|
+
// Discover actor teams relative to config file
|
|
107
|
+
const configDir = path.dirname(path.resolve(filepath));
|
|
108
|
+
const teams = await discoverTeams(configDir);
|
|
109
|
+
if (teams.length === 0) {
|
|
110
|
+
throw new Error('No actor teams found. Each actor file must export a team (Record<string, ActorConfig>).');
|
|
111
|
+
}
|
|
112
|
+
return { config: resolved, teams };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Helper to define config with type checking
|
|
116
|
+
*/
|
|
117
|
+
export function defineConfig(config) {
|
|
118
|
+
return config;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { BrowserContextOptions } from 'playwright';
|
|
2
|
+
/**
|
|
3
|
+
* A device profile used for actor browser context emulation.
|
|
4
|
+
* Wraps Playwright's device descriptors with metadata.
|
|
5
|
+
*/
|
|
6
|
+
export interface DeviceProfile {
|
|
7
|
+
/** Human-readable name */
|
|
8
|
+
name: string;
|
|
9
|
+
/** Category for reporting */
|
|
10
|
+
category: 'mobile' | 'tablet' | 'desktop';
|
|
11
|
+
/** Playwright context options (viewport, userAgent, deviceScaleFactor, isMobile, hasTouch) */
|
|
12
|
+
contextOptions: BrowserContextOptions;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Built-in device profiles covering a range of form factors.
|
|
16
|
+
* Uses Playwright's device descriptors where available,
|
|
17
|
+
* with custom desktop profiles added.
|
|
18
|
+
*/
|
|
19
|
+
export declare const builtinDevices: DeviceProfile[];
|
|
20
|
+
/**
|
|
21
|
+
* Manages device assignment via round-robin rotation.
|
|
22
|
+
*
|
|
23
|
+
* Each actor gets the next device in the pool. The rotation advances
|
|
24
|
+
* globally across all actors and scenes within a run, so no one "picks"
|
|
25
|
+
* their device — it just rotates around.
|
|
26
|
+
*
|
|
27
|
+
* The pool can be the built-in set or a custom set from config.
|
|
28
|
+
*/
|
|
29
|
+
export declare class DeviceRotation {
|
|
30
|
+
private pool;
|
|
31
|
+
private index;
|
|
32
|
+
constructor(devices?: DeviceProfile[]);
|
|
33
|
+
/**
|
|
34
|
+
* Get the next device in rotation.
|
|
35
|
+
* Advances the internal counter so successive calls yield different devices.
|
|
36
|
+
*/
|
|
37
|
+
next(): DeviceProfile;
|
|
38
|
+
/**
|
|
39
|
+
* Peek at the next device without advancing the counter.
|
|
40
|
+
*/
|
|
41
|
+
peek(): DeviceProfile;
|
|
42
|
+
/**
|
|
43
|
+
* Reset rotation to the beginning.
|
|
44
|
+
*/
|
|
45
|
+
reset(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Get the current rotation index (for reporting).
|
|
48
|
+
*/
|
|
49
|
+
get currentIndex(): number;
|
|
50
|
+
/**
|
|
51
|
+
* Get the full device pool.
|
|
52
|
+
*/
|
|
53
|
+
get devices(): readonly DeviceProfile[];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=devices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../src/devices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;IACzC,8FAA8F;IAC9F,cAAc,EAAE,qBAAqB,CAAA;CACtC;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,EA8GzC,CAAA;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,KAAK,CAAI;gBAEL,OAAO,CAAC,EAAE,aAAa,EAAE;IAIrC;;;OAGG;IACH,IAAI,IAAI,aAAa;IAMrB;;OAEG;IACH,IAAI,IAAI,aAAa;IAIrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,SAAS,aAAa,EAAE,CAEtC;CACF"}
|