@xmachines/play-xstate 1.0.0 → 1.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/README.md +32 -14
- package/dist/errors.d.ts +46 -32
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +69 -32
- package/dist/errors.js.map +1 -1
- package/dist/guards/compose.d.ts +8 -0
- package/dist/guards/compose.d.ts.map +1 -1
- package/dist/guards/compose.js +7 -2
- package/dist/guards/compose.js.map +1 -1
- package/dist/guards/helpers.d.ts +6 -2
- package/dist/guards/helpers.d.ts.map +1 -1
- package/dist/guards/helpers.js +6 -2
- package/dist/guards/helpers.js.map +1 -1
- package/dist/guards/index.d.ts +7 -0
- package/dist/guards/index.d.ts.map +1 -1
- package/dist/guards/index.js +7 -0
- package/dist/guards/index.js.map +1 -1
- package/dist/guards/types.d.ts +4 -5
- package/dist/guards/types.d.ts.map +1 -1
- package/dist/player-actor.d.ts +105 -39
- package/dist/player-actor.d.ts.map +1 -1
- package/dist/player-actor.js +312 -318
- package/dist/player-actor.js.map +1 -1
- package/dist/routing/build-url.d.ts +2 -7
- package/dist/routing/build-url.d.ts.map +1 -1
- package/dist/routing/build-url.js +21 -25
- package/dist/routing/build-url.js.map +1 -1
- package/dist/routing/derive-current-route.d.ts +32 -0
- package/dist/routing/derive-current-route.d.ts.map +1 -1
- package/dist/routing/derive-current-route.js +20 -19
- package/dist/routing/derive-current-route.js.map +1 -1
- package/dist/routing/derive-initial-route.d.ts +0 -3
- package/dist/routing/derive-initial-route.d.ts.map +1 -1
- package/dist/routing/derive-initial-route.js +0 -3
- package/dist/routing/derive-initial-route.js.map +1 -1
- package/dist/routing/index.d.ts +1 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +1 -1
- package/dist/routing/index.js.map +1 -1
- package/dist/types.d.ts +86 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/view/derive-current-view.d.ts +54 -0
- package/dist/view/derive-current-view.d.ts.map +1 -0
- package/dist/view/derive-current-view.js +167 -0
- package/dist/view/derive-current-view.js.map +1 -0
- package/package.json +11 -14
- package/dist/define-player.typecheck.d.ts +0 -2
- package/dist/define-player.typecheck.d.ts.map +0 -1
- package/dist/define-player.typecheck.js +0 -48
- package/dist/define-player.typecheck.js.map +0 -1
- package/dist/player-actor.typecheck.d.ts +0 -2
- package/dist/player-actor.typecheck.d.ts.map +0 -1
- package/dist/player-actor.typecheck.js +0 -27
- package/dist/player-actor.typecheck.js.map +0 -1
package/dist/player-actor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player-actor.js","sourceRoot":"","sources":["../src/player-actor.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,
|
|
1
|
+
{"version":3,"file":"player-actor.js","sourceRoot":"","sources":["../src/player-actor.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,GAYL,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,aAAa,EAA+C,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,CAAC,KAAc,EAAkB,EAAE;IACtD,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,OAAO,GAAI,KAA0D,CAAC,OAAO,CAAC;IACpF,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAC;AACnE,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,GAAG,CAAC,KAAc,EAAS,EAAE;IACzC,IAAI,CAAC;QACJ,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,sEAAsE;QACtE,uEAAuE;IACxE,CAAC;IACD,OAAO,IAAI,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,kFAAkF;AAClF,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,MAAe,EAAW,EAAE;IAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,OAAO,GAAG,CAA4B,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QACrC,mDAAmD;QACnD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,mBAAmB,GAAG,CAAC,CAAkB,EAAE,CAAkB,EAAW,EAAE;IAC/E,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,WAAW,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACvE,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,mDAAmD;QACpF,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,mDAAmD;QACpF,IAAI,QAAQ,KAAK,QAAQ;YAAE,SAAS;QACpC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACnE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;IACnF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,CAAC,QAA4B,EAAW,EAAE,CACtE,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AACH,MAAM,OAAO,WACZ,SAAQ,aAAsD;IAGtD,aAAa,CAA2B;IAWhD;;;;;;;;;;;;;;;OAeG;IACH,IAAY,KAAK;QAChB,OAAO,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;IACjC,CAAC;IAeD;;;;;;;OAOG;IACK,gBAAgB,GAAmC,SAAS,CAAC;IAErE,sCAAsC;IAC/B,KAAK,CAAmD;IAE/D;;;;;;;;;;OAUG;IACI,GAAG,CAAC,KAA+B;QACzC,qEAAqE;QACrE,oEAAoE;QACpE,uEAAuE;QACvE,sEAAsE;QACtE,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QACnC,OAAO,OAAO,QAAQ,EAAE,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1E,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,YAAY,CAAiC;IAEpD;;;;;;;;;;;;;;OAcG;IACa,YAAY,CAAgB;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACa,WAAW,GAAG,IAAI,MAAM,CAAC,KAAK,CAAkB,IAAI,CAAC,CAAC;IAEtE,YACC,OAAiB,EACjB,OAAgC,EAChC,KAA2B,EAC3B,gBAAqD;QAErD,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACjC,CAAC;QAED,wEAAwE;QACxE,yEAAyE;QACzE,yEAAyE;QACzE,0DAA0D;QAC1D,EAAE;QACF,sEAAsE;QACtE,oEAAoE;QACpE,yEAAyE;QACzE,mEAAmE;QACnE,2BAA2B;QAC3B,+EAA+E;QAC/E,KAAK,CAAC,OAAO,EAAE;YACd,KAAK;YACL,QAAQ,EAAE,gBAAgB;YAC1B,OAAO,EAAE,OAAO,EAAE,OAAO;SACM,CAAC,CAAC;QAElC,yEAAyE;QACzE,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,yEAAyE;QACzE,iEAAiE;QACjE,gEAAgE;QAChE,IAAI,CAAC,YAAY;YAChB,gBAAgB,KAAK,SAAS;gBAC7B,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvC,IAAI,CAAC,aAAa,GAAG,OAAO,IAAI,EAAE,CAAC;QAEnC,4EAA4E;QAC5E,4EAA4E;QAC5E,4EAA4E;QAC5E,uDAAuD;QACvD,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAwC,CAAC,CAAC;QAExF,0CAA0C;QAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,iEAAiE;QACjE,uEAAuE;QACvE,sBAAsB;QACtB,KAAK,CAAC,SAAS,CAAC;YACf,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAClB,yDAAyD;gBACzD,wEAAwE;gBACxE,6DAA6D;gBAC7D,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpC,mFAAmF;oBACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAA8C,CAAC,CAAC;oBAE/D,kFAAkF;oBAClF,gCAAgC;oBAChC,gCAAgC;oBAChC,wBAAwB;oBACxB,wBAAwB;oBACxB,sCAAsC;oBACtC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;oBAEpC,0BAA0B;oBAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;oBAC/C,IAAI,aAAa,EAAE,CAAC;wBACnB,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC/B,CAAC;gBACF,CAAC;YACF,CAAC;YACD,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,mEAAmE;YACnE,kEAAkE;YAClE,uDAAuD;YACvD,KAAK,EAAE,CAAC,KAAc,EAAE,EAAE;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACnC,IAAI,OAAO,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9B,OAAO;gBACR,CAAC;gBACD,gEAAgE;gBAChE,+DAA+D;gBAC/D,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3C,OAAO;gBACR,CAAC;gBACD,MAAM,KAAK,CAAC;YACb,CAAC;SACD,CAAC,CAAC;QAEH,yEAAyE;QACzE,yCAAyC;QACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACM,KAAK;QACb,uEAAuE;QACvE,0BAA0B;QAC1B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACnC,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;;;;;OASG;IACM,IAAI;QACZ,wEAAwE;QACxE,mEAAmE;QACnE,wEAAwE;QACxE,mEAAmE;QACnE,uDAAuD;QACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,KAAK,CAAC,IAAI,EAAE,CAAC;QAEb,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACjC,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACM,IAAI,CAAC,KAA+B;QAC5C,wDAAwD;QACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,uEAAuE;QACvE,yDAAyD;QACzD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvC,OAAO;QACR,CAAC;QAED,0EAA0E;QAC1E,yEAAyE;QACzE,wEAAwE;QACxE,iCAAiC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,uBAAuB;QACvB,sEAAsE;QACtE,wEAAwE;QACxE,0EAA0E;QAC1E,qEAAqE;QACrE,wEAAwE;QACxE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEvC,yBAAyB;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7C,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IAED;;OAEG;IACM,WAAW;QACnB,OAAO,KAAK,CAAC,WAAW,EAAgD,CAAC;IAC1E,CAAC;IAsCQ,SAAS,CACjB,sBAEmC,EACnC,aAAwC,EACxC,gBAA6B;QAE7B,4EAA4E;QAC5E,2CAA2C;QAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CACnC,sBAAoE,EACpE,aAAa,EACb,gBAAgB,CAChB,CAAC;QAEF,uEAAuE;QACvE,sEAAsE;QACtE,gEAAgE;QAChE,iCAAiC;QACjC,MAAM,gBAAgB,GACrB,OAAO,sBAAsB,KAAK,QAAQ,IAAI,sBAAsB,KAAK,IAAI;YAC5E,CAAC,CAAC,OAAO,sBAAsB,CAAC,KAAK,KAAK,UAAU;YACpD,CAAC,CAAC,OAAO,aAAa,KAAK,UAAU,CAAC;QACxC,IAAI,gBAAgB,EAAE,CAAC;YACtB,OAAO,YAAY,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,OAAO;YACN,WAAW,EAAE,GAAG,EAAE;gBACjB,IAAI,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpE,CAAC;gBACD,YAAY,CAAC,WAAW,EAAE,CAAC;YAC5B,CAAC;SACD,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACM,EAAE,CACV,IAAW,EACX,OAES;QAET,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACM,oBAAoB,CAAC,OAAiB;QAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAgE,CAAC;QACvF,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACK,oBAAoB,CAAC,QAA4B;QACxD,IAAI,QAAQ,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxC,OAAO;QACR,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QAEjC,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAEzC,uEAAuE;YACvE,sEAAsE;YACtE,uEAAuE;YACvE,wEAAwE;YACxE,sEAAsE;YACtE,sEAAsE;YACtE,uEAAuE;YACvE,qEAAqE;YACrE,sEAAsE;YACtE,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5E,IAAI,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC;gBAChD,OAAO;YACR,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACnC,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,CAAC;YACD,mDAAmD;QACpD,CAAC;IACF,CAAC;IAED;;OAEG;IACH,OAAO;QACN,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;CACD"}
|
|
@@ -12,18 +12,13 @@ import type { RouteContext } from "./types.js";
|
|
|
12
12
|
* @param routeTemplate - Route path template, e.g. `"/profile/:userId"` or
|
|
13
13
|
* `"/settings/:section?"`.
|
|
14
14
|
* @param context - Actor context object. Route parameters must be in `context.params`;
|
|
15
|
-
* flat context fields are not inspected.
|
|
16
|
-
*
|
|
17
|
-
* `MissingQueryContextError` to prevent silent query-string loss.
|
|
15
|
+
* flat context fields are not inspected. A missing `query` field builds a
|
|
16
|
+
* query-less URL, exactly like `query: {}`.
|
|
18
17
|
* @returns The fully resolved URL string.
|
|
19
18
|
*
|
|
20
19
|
* @throws {MissingRouteParamError} When a **required** `:param` placeholder has no
|
|
21
20
|
* matching value in context. Optional parameters (`:param?`) are silently omitted
|
|
22
21
|
* when missing. Import the class from `@xmachines/play-xstate/errors`.
|
|
23
|
-
* @throws {MissingQueryContextError} When the context has a `params` field but no
|
|
24
|
-
* `query` field. This indicates a routing-aware machine context that was not set up
|
|
25
|
-
* to receive query parameters, which would silently drop query params from
|
|
26
|
-
* `play.route` events. Import the class from `@xmachines/play-xstate/errors`.
|
|
27
22
|
*
|
|
28
23
|
* @example
|
|
29
24
|
* ```typescript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-url.d.ts","sourceRoot":"","sources":["../../src/routing/build-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C
|
|
1
|
+
{"version":3,"file":"build-url.d.ts","sourceRoot":"","sources":["../../src/routing/build-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,aAAa,GACzB,eAAe,MAAM,EACrB,UAAS,YAA4B,KACnC,MAwCF,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isAbsoluteRoute } from "./derive-route.js";
|
|
2
|
-
import { MissingRouteParamError
|
|
2
|
+
import { MissingRouteParamError } from "../errors.js";
|
|
3
3
|
/**
|
|
4
4
|
* Build a full URL from a route template and the actor's context.
|
|
5
5
|
*
|
|
@@ -13,18 +13,13 @@ import { MissingRouteParamError, MissingQueryContextError } from "../errors.js";
|
|
|
13
13
|
* @param routeTemplate - Route path template, e.g. `"/profile/:userId"` or
|
|
14
14
|
* `"/settings/:section?"`.
|
|
15
15
|
* @param context - Actor context object. Route parameters must be in `context.params`;
|
|
16
|
-
* flat context fields are not inspected.
|
|
17
|
-
*
|
|
18
|
-
* `MissingQueryContextError` to prevent silent query-string loss.
|
|
16
|
+
* flat context fields are not inspected. A missing `query` field builds a
|
|
17
|
+
* query-less URL, exactly like `query: {}`.
|
|
19
18
|
* @returns The fully resolved URL string.
|
|
20
19
|
*
|
|
21
20
|
* @throws {MissingRouteParamError} When a **required** `:param` placeholder has no
|
|
22
21
|
* matching value in context. Optional parameters (`:param?`) are silently omitted
|
|
23
22
|
* when missing. Import the class from `@xmachines/play-xstate/errors`.
|
|
24
|
-
* @throws {MissingQueryContextError} When the context has a `params` field but no
|
|
25
|
-
* `query` field. This indicates a routing-aware machine context that was not set up
|
|
26
|
-
* to receive query parameters, which would silently drop query params from
|
|
27
|
-
* `play.route` events. Import the class from `@xmachines/play-xstate/errors`.
|
|
28
23
|
*
|
|
29
24
|
* @example
|
|
30
25
|
* ```typescript
|
|
@@ -36,14 +31,12 @@ import { MissingRouteParamError, MissingQueryContextError } from "../errors.js";
|
|
|
36
31
|
* ```
|
|
37
32
|
*/
|
|
38
33
|
export const buildRouteUrl = (routeTemplate, context = { query: {} }) => {
|
|
39
|
-
//
|
|
40
|
-
// context
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
// query
|
|
44
|
-
|
|
45
|
-
throw new MissingQueryContextError();
|
|
46
|
-
}
|
|
34
|
+
// A context without a `query` field builds a query-less URL, the same way a
|
|
35
|
+
// missing context does. The generated play.route transitions assign `query`
|
|
36
|
+
// on every navigation regardless of the initial context shape, so there is
|
|
37
|
+
// no query-loss here for a throw to prevent — machines that handle
|
|
38
|
+
// play.route by hand and want query forwarding must assign event.query to
|
|
39
|
+
// context themselves.
|
|
47
40
|
// Handle relative vs absolute paths
|
|
48
41
|
const basePath = context.basePath || "";
|
|
49
42
|
const isAbsolute = isAbsoluteRoute(routeTemplate);
|
|
@@ -51,13 +44,17 @@ export const buildRouteUrl = (routeTemplate, context = { query: {} }) => {
|
|
|
51
44
|
let url = isAbsolute ? routeTemplate : joinPaths(basePath, routeTemplate);
|
|
52
45
|
// Replace :param with context values
|
|
53
46
|
url = substituteParams(url, context);
|
|
54
|
-
// Append query params from context
|
|
47
|
+
// Append query params from context. The ubiquitous empty `query: {}` gets
|
|
48
|
+
// the key check so the per-recompute URLSearchParams allocation is only
|
|
49
|
+
// paid when there is something to serialize.
|
|
55
50
|
if (context.query && typeof context.query === "object") {
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
51
|
+
const queryEntries = Object.entries(context.query);
|
|
52
|
+
if (queryEntries.length > 0) {
|
|
53
|
+
const params = new URLSearchParams(queryEntries.map(([k, v]) => [k, String(v)]));
|
|
54
|
+
const queryString = params.toString();
|
|
55
|
+
if (queryString) {
|
|
56
|
+
url += `?${queryString}`;
|
|
57
|
+
}
|
|
61
58
|
}
|
|
62
59
|
}
|
|
63
60
|
// Append hash from context
|
|
@@ -67,9 +64,8 @@ export const buildRouteUrl = (routeTemplate, context = { query: {} }) => {
|
|
|
67
64
|
return url;
|
|
68
65
|
};
|
|
69
66
|
/**
|
|
70
|
-
* Substitute
|
|
71
|
-
*
|
|
72
|
-
* Per RESEARCH.md: Replace :param with encodeURIComponent(context[param])
|
|
67
|
+
* Substitute `:param` placeholders with `encodeURIComponent`-escaped context
|
|
68
|
+
* values.
|
|
73
69
|
*
|
|
74
70
|
* Supports optional parameters with :param? syntax.
|
|
75
71
|
* - Optional parameters without values are removed entirely (including the /)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-url.js","sourceRoot":"","sources":["../../src/routing/build-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"build-url.js","sourceRoot":"","sources":["../../src/routing/build-url.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,36 @@
|
|
|
1
1
|
import type { AnyMachineSnapshot } from "xstate";
|
|
2
|
+
/**
|
|
3
|
+
* Collect the `meta` of the active state nodes along a SINGLE root-to-leaf branch,
|
|
4
|
+
* keyed by state id and ordered ancestors-first — the shape {@link deriveRoute} folds.
|
|
5
|
+
*
|
|
6
|
+
* `snapshot.getMeta()` returns a FLAT record of every active state's meta. For a
|
|
7
|
+
* non-parallel machine that record is already a single ancestor chain, but for a
|
|
8
|
+
* PARALLEL machine it interleaves entries from every active region, so folding it
|
|
9
|
+
* blindly would concatenate a relative route from one region onto an absolute route
|
|
10
|
+
* from a sibling region (a URL belonging to neither region's tree). The flat record
|
|
11
|
+
* also cannot be re-ordered back into a hierarchy: when states declare an explicit
|
|
12
|
+
* `id` (e.g. a child `id: "dashboard-overview"` under `id: "dashboard"`), the meta
|
|
13
|
+
* keys are those ids and carry no ancestry information.
|
|
14
|
+
*
|
|
15
|
+
* We therefore walk `snapshot.value` (which encodes the true active-state hierarchy
|
|
16
|
+
* by state key) against the machine's node tree, following the FIRST active child at
|
|
17
|
+
* each level. This yields one deterministic branch — matching the historical
|
|
18
|
+
* first-found behaviour for parallel machines — and works regardless of explicit ids
|
|
19
|
+
* because each node carries its own `id` and `meta`.
|
|
20
|
+
*
|
|
21
|
+
* Falls back to `null` when the snapshot does not expose a navigable machine/value
|
|
22
|
+
* (defensive — real XState snapshots always do); callers then use `getMeta()` as before.
|
|
23
|
+
*/
|
|
24
|
+
export declare const firstActiveBranchMeta: (snapshot: AnyMachineSnapshot) => Record<string, unknown> | null;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the meta record route and view derivation fold: the single active
|
|
27
|
+
* branch {@link firstActiveBranchMeta} walks (correct for parallel machines
|
|
28
|
+
* and explicit ids), or the flat `getMeta()` record when the snapshot lacks a
|
|
29
|
+
* navigable machine tree. Shared by `deriveCurrentRoute` and
|
|
30
|
+
* `deriveCurrentView` so the two sides cannot drift apart on branch selection
|
|
31
|
+
* or on tolerating degenerate snapshots.
|
|
32
|
+
*/
|
|
33
|
+
export declare const activeStateMeta: (snapshot: AnyMachineSnapshot) => Record<string, unknown> | null;
|
|
2
34
|
/**
|
|
3
35
|
* Derive the actor's current URL from state metadata and context.
|
|
4
36
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-current-route.d.ts","sourceRoot":"","sources":["../../src/routing/derive-current-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"derive-current-route.d.ts","sourceRoot":"","sources":["../../src/routing/derive-current-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAOjD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,qBAAqB,GACjC,UAAU,kBAAkB,KAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAoC5B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,UAAU,kBAAkB,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAMxF,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,kBAAkB,KAAG,MAAM,GAAG,IA6B1E,CAAC"}
|
|
@@ -23,7 +23,7 @@ import { buildRouteUrl } from "./build-url.js";
|
|
|
23
23
|
* Falls back to `null` when the snapshot does not expose a navigable machine/value
|
|
24
24
|
* (defensive — real XState snapshots always do); callers then use `getMeta()` as before.
|
|
25
25
|
*/
|
|
26
|
-
const firstActiveBranchMeta = (snapshot) => {
|
|
26
|
+
export const firstActiveBranchMeta = (snapshot) => {
|
|
27
27
|
const root = snapshot.machine?.root;
|
|
28
28
|
if (!root)
|
|
29
29
|
return null;
|
|
@@ -57,6 +57,21 @@ const firstActiveBranchMeta = (snapshot) => {
|
|
|
57
57
|
}
|
|
58
58
|
return ordered;
|
|
59
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Resolve the meta record route and view derivation fold: the single active
|
|
62
|
+
* branch {@link firstActiveBranchMeta} walks (correct for parallel machines
|
|
63
|
+
* and explicit ids), or the flat `getMeta()` record when the snapshot lacks a
|
|
64
|
+
* navigable machine tree. Shared by `deriveCurrentRoute` and
|
|
65
|
+
* `deriveCurrentView` so the two sides cannot drift apart on branch selection
|
|
66
|
+
* or on tolerating degenerate snapshots.
|
|
67
|
+
*/
|
|
68
|
+
export const activeStateMeta = (snapshot) => {
|
|
69
|
+
if (!snapshot || typeof snapshot.getMeta !== "function") {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const meta = firstActiveBranchMeta(snapshot) ?? snapshot.getMeta();
|
|
73
|
+
return meta && typeof meta === "object" ? meta : null;
|
|
74
|
+
};
|
|
60
75
|
/**
|
|
61
76
|
* Derive the actor's current URL from state metadata and context.
|
|
62
77
|
*
|
|
@@ -77,14 +92,8 @@ const firstActiveBranchMeta = (snapshot) => {
|
|
|
77
92
|
* @returns Resolved URL string, or `null` if the route cannot be resolved.
|
|
78
93
|
*/
|
|
79
94
|
export const deriveCurrentRoute = (snapshot) => {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
// Prefer the single active branch (correct for parallel machines and explicit
|
|
84
|
-
// ids); fall back to the flat getMeta() record if the snapshot lacks a navigable
|
|
85
|
-
// machine tree.
|
|
86
|
-
const meta = firstActiveBranchMeta(snapshot) ?? snapshot.getMeta();
|
|
87
|
-
if (!meta || typeof meta !== "object") {
|
|
95
|
+
const meta = activeStateMeta(snapshot);
|
|
96
|
+
if (!meta) {
|
|
88
97
|
return null;
|
|
89
98
|
}
|
|
90
99
|
const routeTemplate = deriveRoute(meta);
|
|
@@ -103,19 +112,11 @@ export const deriveCurrentRoute = (snapshot) => {
|
|
|
103
112
|
// - The signal recomputes automatically on the next snapshot when params are populated
|
|
104
113
|
// - Throwing would propagate into signal watchers as an unhandled exception for a
|
|
105
114
|
// state that resolves itself — worse than a one-tick null.
|
|
106
|
-
// Do NOT convert this to a throw.
|
|
107
|
-
// case where throwing is appropriate (non-self-resolving programmer error).
|
|
115
|
+
// Do NOT convert this to a throw.
|
|
108
116
|
if (error instanceof MissingRouteParamError) {
|
|
109
117
|
return null;
|
|
110
118
|
}
|
|
111
|
-
//
|
|
112
|
-
// declares `params` but no `query` field. This cannot self-resolve on the next
|
|
113
|
-
// snapshot; re-throw so it surfaces immediately. Frameworks with error boundaries
|
|
114
|
-
// (React, Svelte, SvelteKit) will catch it; signal watchers will see it as an
|
|
115
|
-
// unhandled exception. Fix: add `query: Record<string, string>` to the machine's
|
|
116
|
-
// context type and initializer.
|
|
117
|
-
//
|
|
118
|
-
// All other unexpected errors also re-throw unchanged.
|
|
119
|
+
// Unexpected errors re-throw unchanged.
|
|
119
120
|
throw error;
|
|
120
121
|
}
|
|
121
122
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-current-route.js","sourceRoot":"","sources":["../../src/routing/derive-current-route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,qBAAqB,GAAG,
|
|
1
|
+
{"version":3,"file":"derive-current-route.js","sourceRoot":"","sources":["../../src/routing/derive-current-route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACpC,QAA4B,EACK,EAAE;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,IAEnB,CAAC;IACb,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,IAAI,IAAI,GAA4B,IAAI,CAAC;IACzC,IAAI,KAAK,GAAY,QAAQ,CAAC,KAAK,CAAC;IAEpC,OAAO,IAAI,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,mDAAmD;QAClF,CAAC;QAED,4EAA4E;QAC5E,8EAA8E;QAC9E,qEAAqE;QACrE,IAAI,GAAuB,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,GAAG,GAAG,KAAK,CAAC;QACb,CAAC;aAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/C,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAA4B,CAAC,CAAC,mDAAmD;QAChH,IAAI,CAAC,KAAK;YAAE,MAAM;QAClB,KAAK;YACJ,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;gBAC1C,CAAC,CAAE,KAAiC,CAAC,GAAG,CAAC,CAAC,mDAAmD;gBAC7F,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,GAAG,KAAK,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAA4B,EAAkC,EAAE;IAC/F,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnE,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAA4B,EAAiB,EAAE;IACjF,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,OAAO,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAiB,CAAC,CAAC;IAC/E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,uFAAuF;QACvF,qFAAqF;QACrF,qFAAqF;QACrF,yCAAyC;QACzC,uFAAuF;QACvF,yFAAyF;QACzF,oFAAoF;QACpF,+DAA+D;QAC/D,kCAAkC;QAClC,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACb,CAAC;QACD,wCAAwC;QACxC,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC,CAAC"}
|
|
@@ -25,9 +25,6 @@ import { type AnyStateMachine } from "xstate";
|
|
|
25
25
|
* machine's context/initial-transition logic throws for the given input (mirroring
|
|
26
26
|
* `createActor`'s error-status snapshot, which has no derivable route either).
|
|
27
27
|
*
|
|
28
|
-
* @throws {MissingQueryContextError} When the initial context declares `params` but
|
|
29
|
-
* no `query` field — a structural programmer error that must surface immediately.
|
|
30
|
-
*
|
|
31
28
|
* @example
|
|
32
29
|
* ```typescript
|
|
33
30
|
* const machine = setup({}).createMachine({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-initial-route.d.ts","sourceRoot":"","sources":["../../src/routing/derive-initial-route.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AAI1F
|
|
1
|
+
{"version":3,"file":"derive-initial-route.d.ts","sourceRoot":"","sources":["../../src/routing/derive-initial-route.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AAI1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,eAAe,EAAE,QAAQ,OAAO,KAAG,MAAM,GAAG,IAavF,CAAC"}
|
|
@@ -26,9 +26,6 @@ import { deriveCurrentRoute } from "./derive-current-route.js";
|
|
|
26
26
|
* machine's context/initial-transition logic throws for the given input (mirroring
|
|
27
27
|
* `createActor`'s error-status snapshot, which has no derivable route either).
|
|
28
28
|
*
|
|
29
|
-
* @throws {MissingQueryContextError} When the initial context declares `params` but
|
|
30
|
-
* no `query` field — a structural programmer error that must surface immediately.
|
|
31
|
-
*
|
|
32
29
|
* @example
|
|
33
30
|
* ```typescript
|
|
34
31
|
* const machine = setup({}).createMachine({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-initial-route.js","sourceRoot":"","sources":["../../src/routing/derive-initial-route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiD,MAAM,QAAQ,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D
|
|
1
|
+
{"version":3,"file":"derive-initial-route.js","sourceRoot":"","sources":["../../src/routing/derive-initial-route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiD,MAAM,QAAQ,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAwB,EAAE,KAAe,EAAiB,EAAE;IAC9F,IAAI,eAAmC,CAAC;IACxC,IAAI,CAAC;QACJ,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACR,2EAA2E;QAC3E,4EAA4E;QAC5E,2EAA2E;QAC3E,sEAAsE;QACtE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAC5C,CAAC,CAAC"}
|
package/dist/routing/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
export { deriveRoute, isAbsoluteRoute } from "./derive-route.js";
|
|
10
|
-
export { deriveCurrentRoute } from "./derive-current-route.js";
|
|
10
|
+
export { activeStateMeta, deriveCurrentRoute, firstActiveBranchMeta, } from "./derive-current-route.js";
|
|
11
11
|
export { deriveInitialRoute } from "./derive-initial-route.js";
|
|
12
12
|
export { buildRouteUrl } from "./build-url.js";
|
|
13
13
|
export { formatPlayRouteTransitions } from "./format-play-route-transitions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC7F,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/routing/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
export { deriveRoute, isAbsoluteRoute } from "./derive-route.js";
|
|
10
|
-
export { deriveCurrentRoute } from "./derive-current-route.js";
|
|
10
|
+
export { activeStateMeta, deriveCurrentRoute, firstActiveBranchMeta, } from "./derive-current-route.js";
|
|
11
11
|
export { deriveInitialRoute } from "./derive-initial-route.js";
|
|
12
12
|
export { buildRouteUrl } from "./build-url.js";
|
|
13
13
|
export { formatPlayRouteTransitions } from "./format-play-route-transitions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AnyStateMachine, InputFrom, SnapshotFrom } from "xstate";
|
|
1
|
+
import type { ActorOptions, AnyStateMachine, InputFrom, SnapshotFrom } from "xstate";
|
|
2
2
|
import type { PlayerActor as PlayerActorClass } from "./player-actor.js";
|
|
3
3
|
/**
|
|
4
4
|
* Configuration for definePlayer()
|
|
@@ -10,21 +10,84 @@ export interface PlayerConfig<TMachine extends AnyStateMachine> {
|
|
|
10
10
|
options?: PlayerOptions<TMachine>;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Player lifecycle hooks
|
|
14
|
-
*
|
|
15
|
-
* Per CONTEXT.md: Rich set of hooks for observability
|
|
13
|
+
* Player lifecycle hooks — the observability surface around the actor.
|
|
16
14
|
*/
|
|
17
15
|
export interface PlayerOptions<TMachine extends AnyStateMachine> {
|
|
18
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Called on each real start: every transition from not-running to running,
|
|
18
|
+
* including a start after a stop. A repeated `start()` while the actor is
|
|
19
|
+
* already running does not re-fire it.
|
|
20
|
+
*/
|
|
19
21
|
onStart?: (actor: PlayerActorClass<TMachine>) => void;
|
|
20
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Called on each real stop: only when a running actor was actually torn
|
|
24
|
+
* down. Repeated `stop()`/`dispose()` calls, and stopping an actor that
|
|
25
|
+
* never started, do not fire it.
|
|
26
|
+
*/
|
|
21
27
|
onStop?: (actor: PlayerActorClass<TMachine>) => void;
|
|
22
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Called after every event `send()` processes — including events the
|
|
30
|
+
* machine ignores, where `prevState` and `nextState` are the same
|
|
31
|
+
* snapshot. Compare the two when only real transitions matter.
|
|
32
|
+
*/
|
|
23
33
|
onTransition?: (actor: PlayerActorClass<TMachine>, prevState: SnapshotFrom<TMachine>, nextState: SnapshotFrom<TMachine>) => void;
|
|
24
34
|
/** Called when state signal changes */
|
|
25
35
|
onStateChange?: (actor: PlayerActorClass<TMachine>, state: SnapshotFrom<TMachine>) => void;
|
|
26
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Called on actor errors: a snapshot restore that fails at `start()`, a
|
|
38
|
+
* throwing action or guard, and view-derivation failures.
|
|
39
|
+
*
|
|
40
|
+
* Read when an error is delivered, not at construction: the options bag is
|
|
41
|
+
* shared by reference, so a handler attached to it later still receives
|
|
42
|
+
* actor errors, and removing the handler restores the loud default below.
|
|
43
|
+
*
|
|
44
|
+
* With a handler in place, the error is routed there and counts as
|
|
45
|
+
* handled. XState decides its global rethrow per observer, beyond this
|
|
46
|
+
* option's reach: a subscription of your own without an `error` listener
|
|
47
|
+
* still forces it, `onError` or not.
|
|
48
|
+
*
|
|
49
|
+
* Without `onError`, actor errors stay loud (an unhandled rethrow via
|
|
50
|
+
* `setTimeout`) so they are never silently swallowed — and your own
|
|
51
|
+
* `error` subscribers do not suppress that default; only `onError` does.
|
|
52
|
+
*
|
|
53
|
+
* An actor failure that is already an `Error` arrives unchanged, keeping the
|
|
54
|
+
* identity the machine gave it. A machine that throws a non-`Error` value
|
|
55
|
+
* arrives as `ActorThrewNonErrorError` with the thrown value on `cause`.
|
|
56
|
+
*/
|
|
27
57
|
onError?: (actor: PlayerActorClass<TMachine>, error: Error) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Inspection observer forwarded verbatim to XState's `createActor`.
|
|
60
|
+
*
|
|
61
|
+
* This is the creation-time attachment route, and the only one that observes
|
|
62
|
+
* the actor's construction events. Attaching later via
|
|
63
|
+
* `actor.system.inspect(fn)` also works, but only sees events from that
|
|
64
|
+
* point on.
|
|
65
|
+
*
|
|
66
|
+
* A `PlayerActor` is itself the XState actor, so its own events carry
|
|
67
|
+
* `actorRef === playerActor` and can be recognised by identity. Each
|
|
68
|
+
* `PlayerActor` is also its own root system, so `event.rootId ===
|
|
69
|
+
* actor.sessionId` demultiplexes the whole tree — including events from
|
|
70
|
+
* invoked and spawned children, whose `actorRef` is the child.
|
|
71
|
+
*
|
|
72
|
+
* One caveat comes with that identity: the `@xstate.actor` event fires from
|
|
73
|
+
* inside the actor's constructor, so its `actorRef` is the instance
|
|
74
|
+
* mid-construction. `state`, `currentRoute`, `currentView` and
|
|
75
|
+
* `initialRoute` do not exist yet — reading them there throws. Capture the
|
|
76
|
+
* reference and read the signals from a later event, or from outside the
|
|
77
|
+
* observer.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* import { createBrowserInspector } from "@statelyai/inspect";
|
|
82
|
+
*
|
|
83
|
+
* const { inspect } = createBrowserInspector();
|
|
84
|
+
* const createPlayer = definePlayer({ machine, options: { inspect } });
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* For an inspector created after the factory (e.g. behind a dev-tools toggle),
|
|
88
|
+
* pass a forwarding function: `inspect: (event) => currentInspector?.(event)`.
|
|
89
|
+
*/
|
|
90
|
+
inspect?: ActorOptions<TMachine>["inspect"];
|
|
28
91
|
}
|
|
29
92
|
/**
|
|
30
93
|
* Optional restore arguments for the player factory.
|
|
@@ -33,13 +96,23 @@ export interface PlayerOptions<TMachine extends AnyStateMachine> {
|
|
|
33
96
|
* `createPlayer(input?)` calling convention for fresh actors.
|
|
34
97
|
*/
|
|
35
98
|
export interface PlayerFactoryResumeOptions<TMachine extends AnyStateMachine> {
|
|
36
|
-
/**
|
|
37
|
-
|
|
99
|
+
/**
|
|
100
|
+
* Persisted XState snapshot used to restore actor state.
|
|
101
|
+
*
|
|
102
|
+
* Typed as XState's own `ActorOptions["snapshot"]` — the exact type
|
|
103
|
+
* `createActor` accepts and `getPersistedSnapshot()` returns — so restoring
|
|
104
|
+
* a stored snapshot never needs a cast.
|
|
105
|
+
*/
|
|
106
|
+
snapshot?: ActorOptions<TMachine>["snapshot"];
|
|
38
107
|
}
|
|
39
108
|
/**
|
|
40
|
-
* Factory function returned by definePlayer()
|
|
109
|
+
* Factory function returned by definePlayer() — each call creates an
|
|
110
|
+
* independent actor instance from the same configuration.
|
|
41
111
|
*
|
|
42
|
-
*
|
|
112
|
+
* Input requiredness mirrors XState's `createActor`: a machine whose input
|
|
113
|
+
* cannot be `undefined` makes the factory's first argument required, so
|
|
114
|
+
* forgetting it is a compile error instead of an actor that starts in an
|
|
115
|
+
* error status with a `null` initial route.
|
|
43
116
|
*/
|
|
44
|
-
export type PlayerFactory<TMachine extends AnyStateMachine> = (input?: InputFrom<TMachine>, options?: PlayerFactoryResumeOptions<TMachine>) => PlayerActorClass<TMachine>;
|
|
117
|
+
export type PlayerFactory<TMachine extends AnyStateMachine> = undefined extends InputFrom<TMachine> ? (input?: InputFrom<TMachine>, options?: PlayerFactoryResumeOptions<TMachine>) => PlayerActorClass<TMachine> : (input: InputFrom<TMachine>, options?: PlayerFactoryResumeOptions<TMachine>) => PlayerActorClass<TMachine>;
|
|
45
118
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACrF,OAAO,KAAK,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,SAAS,eAAe;IAC7D,8BAA8B;IAC9B,OAAO,EAAE,QAAQ,CAAC;IAElB,wCAAwC;IACxC,OAAO,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,QAAQ,SAAS,eAAe;IAC9D;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAEtD;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAErD;;;;OAIG;IACH,YAAY,CAAC,EAAE,CACd,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EACjC,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,EACjC,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,KAC7B,IAAI,CAAC;IAEV,uCAAuC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAE3F;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B,CAAC,QAAQ,SAAS,eAAe;IAC3E;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,eAAe,IACzD,SAAS,SAAS,SAAS,CAAC,QAAQ,CAAC,GAClC,CACA,KAAK,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC3B,OAAO,CAAC,EAAE,0BAA0B,CAAC,QAAQ,CAAC,KAC1C,gBAAgB,CAAC,QAAQ,CAAC,GAC9B,CACA,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC1B,OAAO,CAAC,EAAE,0BAA0B,CAAC,QAAQ,CAAC,KAC1C,gBAAgB,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View derivation — the meta.view half of the player pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Kept beside src/routing/ so player-actor.ts holds only the actor itself:
|
|
5
|
+
* signals, hooks, and lifecycle. The active-branch walk is shared with route
|
|
6
|
+
* derivation so a parallel machine's view always belongs to the region its
|
|
7
|
+
* URL points at.
|
|
8
|
+
*/
|
|
9
|
+
import type { AnyMachineSnapshot } from "xstate";
|
|
10
|
+
import type { PlaySpec } from "@xmachines/play-actor";
|
|
11
|
+
/**
|
|
12
|
+
* Derive the actor's current view from state metadata.
|
|
13
|
+
*
|
|
14
|
+
* Always returns a **fresh** `PlaySpec` object so a genuine view change is never
|
|
15
|
+
* suppressed by `Signal.State`'s `Object.is` equality check. Whether that fresh
|
|
16
|
+
* object is actually emitted is decided by `PlayerActor.validateAndCacheView`,
|
|
17
|
+
* which compares against the last emitted spec and skips emission when the
|
|
18
|
+
* rendered view is unchanged — preventing downstream providers from remounting
|
|
19
|
+
* the UI on every event.
|
|
20
|
+
*
|
|
21
|
+
* ### Prop enrichment
|
|
22
|
+
*
|
|
23
|
+
* Each spec element's `props` are enriched before the view is emitted using two sources:
|
|
24
|
+
*
|
|
25
|
+
* **1. URL route params** (`context.params`, populated by `formatPlayRouteTransitions`):
|
|
26
|
+
* Makes `:section?` / `:username` URL path parameters automatically available as component
|
|
27
|
+
* props without manual wiring.
|
|
28
|
+
*
|
|
29
|
+
* **2. Context fields** (`spec.contextProps` allowlist):
|
|
30
|
+
* Exposes selected context fields as component props for states where no URL param covers
|
|
31
|
+
* the data (e.g. `context.username` on a `/dashboard` route). Only fields explicitly named
|
|
32
|
+
* in `spec.contextProps: string[]` are ever exposed — nothing leaks from context implicitly.
|
|
33
|
+
*
|
|
34
|
+
* Merge priority (see `mergeRouteParamsIntoProps`):
|
|
35
|
+
* 1. Explicit non-`undefined` spec prop — always wins (authoritative static value).
|
|
36
|
+
* 2. URL route param (`context.params`) — fills `undefined` slots from the URL path.
|
|
37
|
+
* 3. Allowlisted context field (`contextProps`) — fills remaining `undefined` slots.
|
|
38
|
+
*
|
|
39
|
+
* @param snapshot - Current XState machine snapshot.
|
|
40
|
+
* @returns Enriched `PlaySpec`, or `null` if the current state has no view metadata.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* // spec: { contextProps: ["username"], elements: { root: { props: { username: undefined } } } }
|
|
45
|
+
* // context.username = "alice", context.params = {}
|
|
46
|
+
* // Derived props: { username: "alice" }
|
|
47
|
+
*
|
|
48
|
+
* // spec: { contextProps: ["username"], elements: { root: { props: { username: undefined } } } }
|
|
49
|
+
* // context.username = "alice", context.params = { username: "demo" }
|
|
50
|
+
* // Derived props: { username: "demo" } ← URL param wins
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare const deriveCurrentView: (snapshot: AnyMachineSnapshot) => PlaySpec | null;
|
|
54
|
+
//# sourceMappingURL=derive-current-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-current-view.d.ts","sourceRoot":"","sources":["../../src/view/derive-current-view.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA0EtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,kBAAkB,KAAG,QAAQ,GAAG,IAyE3E,CAAC"}
|