board-game-engine-react 0.0.14 → 0.0.16

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.
@@ -36,8 +36,7 @@ html, body, #storybook-root, .story {
36
36
  color: black; }
37
37
 
38
38
  .shared-board, .personal-board {
39
- padding: 1em 0;
40
- border-bottom: 1px solid white; }
39
+ padding: 1em 0; }
41
40
 
42
41
  .grid {
43
42
  border: 1px solid black;
@@ -1,24 +1,5 @@
1
1
  import React, { useEffect, useContext, createContext, useReducer, useState } from 'react';
2
2
 
3
- function _mergeNamespaces(n, m) {
4
- m.forEach(function (e) {
5
- e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {
6
- if (k !== 'default' && !(k in n)) {
7
- var d = Object.getOwnPropertyDescriptor(e, k);
8
- Object.defineProperty(n, k, d.get ? d : {
9
- enumerable: true,
10
- get: function () { return e[k]; }
11
- });
12
- }
13
- });
14
- });
15
- return Object.freeze(n);
16
- }
17
-
18
- function getDefaultExportFromCjs (x) {
19
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
20
- }
21
-
22
3
  function _defineProperty(e, r, t) {
23
4
  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
24
5
  value: t,
@@ -83,9 +64,9 @@ function _toPropertyKey(t) {
83
64
  return "symbol" == typeof i ? i : i + "";
84
65
  }
85
66
 
86
- var boardGameEngine$2 = {exports: {}};
67
+ var boardGameEngine$1 = {exports: {}};
87
68
 
88
- const _excluded=["redact"],_excluded2=["credentials"],_excluded3=["credentials"],_excluded4=["deltalog"],_excluded5=["fn","arg"],_excluded6=["transients"],_excluded7=["playerID"],_excluded8=["master"],_excluded9=["socket","socketOpts","server"],_excluded0=["state"];var boardGameEngine$1=boardGameEngine$2.exports;var hasRequiredBoardGameEngine;function requireBoardGameEngine(){if(hasRequiredBoardGameEngine)return boardGameEngine$2.exports;hasRequiredBoardGameEngine=1;(function(module,exports){(function webpackUniversalModuleDefinition(root,factory){module.exports=factory();})(boardGameEngine$1,()=>{return/******/(()=>{// webpackBootstrap
69
+ const _excluded=["redact"],_excluded2=["credentials"],_excluded3=["credentials"],_excluded4=["deltalog"],_excluded5=["fn","arg"],_excluded6=["transients"],_excluded7=["playerID"],_excluded8=["master"],_excluded9=["socket","socketOpts","server"],_excluded0=["state"];var boardGameEngine=boardGameEngine$1.exports;var hasRequiredBoardGameEngine;function requireBoardGameEngine(){if(hasRequiredBoardGameEngine)return boardGameEngine$1.exports;hasRequiredBoardGameEngine=1;(function(module,exports){(function webpackUniversalModuleDefinition(root,factory){module.exports=factory();})(boardGameEngine,()=>{return/******/(()=>{// webpackBootstrap
89
70
  /******/var __webpack_modules__={/***/4039(__unused_webpack_module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});var turnOrder=__webpack_require__(9014);__webpack_require__(5878);__webpack_require__(1946);__webpack_require__(9001);/*
90
71
  * Copyright 2018 The boardgame.io Authors
91
72
  *
@@ -1614,9 +1595,9 @@ return playOrder[playOrderPos]+'';}/**
1614
1595
  * Creates initial state and metadata for a new match.
1615
1596
  * If the provided `setupData` doesn’t pass the game’s validation,
1616
1597
  * an error object is returned instead.
1617
- */const createMatch=_ref2=>{let{game,numPlayers,setupData,unlisted}=_ref2;if(!numPlayers||typeof numPlayers!=='number')numPlayers=2;const setupDataError=game.validateSetupData&&game.validateSetupData(setupData,numPlayers);if(setupDataError!==undefined)return {setupDataError};const metadata=createMetadata({game,numPlayers,setupData,unlisted});const initialState=(0, _initialize11d626ca.I)({game,numPlayers,setupData});return {metadata,initialState};};exports.c=createMatch;/***/},/***/4245(__unused_webpack_module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports.Client=void 0;var _client=__webpack_require__(4688);var _debug=__webpack_require__(504);var _multiplayer=__webpack_require__(9843);var _wackson=__webpack_require__(7627);var _gameFactory=_interopRequireDefault(__webpack_require__(4913));var _registry=__webpack_require__(3883);var _simulateMove=_interopRequireDefault(__webpack_require__(3276));var _getCurrentMoves=_interopRequireDefault(__webpack_require__(4171));var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _preparePayload=_interopRequireDefault(__webpack_require__(380));var _getSteps=_interopRequireDefault(__webpack_require__(2146));var _createPayload=_interopRequireDefault(__webpack_require__(9965));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Client{constructor(options){this.options=options;this.game=options.boardgameIOGame||(0, _gameFactory.default)(JSON.parse(options.gameRules),options.gameName);if(!options.boardgameIOGame){this.moveBuilder={targets:[],stepIndex:0,eliminatedMoves:[]};this.optimisticWinner=null;}}connect(){const{server,numPlayers,debug={collapseOnLoad:true,impl:_debug.Debug},gameId,boardgamePlayerID,clientToken,singlePlayer=!clientToken}=this.options;try{const clientOptions=singlePlayer?{game:this.game,numPlayers,debug}:{game:this.game,multiplayer:(0,_multiplayer.SocketIO)({server,socketOpts:{transports:['websocket','polling']}}),matchID:gameId,playerID:boardgamePlayerID,credentials:clientToken,debug};this.client=(0,_client.Client)(clientOptions);this.client.subscribe(()=>this.update());this.client.start();return this;}catch(error){console.error('Failed to join game:',error);}}update(){this.options.onClientUpdate?.();}getState(){const clientState=this.client?.getState();if(!clientState)return {};if(this.options.boardgameIOGame){return {state:clientState,gameover:clientState?.ctx?.gameover,moves:this.client.moves};}const state=_objectSpread2(_objectSpread2({},clientState),{},{G:(0, _wackson.deserialize)(JSON.stringify(clientState.G),_registry.registry),originalG:clientState.G});const gameover=state?.ctx?.gameover;const moves=!gameover?Object.entries((0, _getCurrentMoves.default)(state,this.client)).reduce((acc,_ref)=>{let[moveName,rawMove]=_ref;const move=payload=>{this.client.moves[moveName]((0, _preparePayload.default)(payload));};move.moveInstance=rawMove.moveInstance;return _objectSpread2(_objectSpread2({},acc),{},{[moveName]:move});},{}):[];const possibleMoves=getPossibleMoves(state,moves,this.moveBuilder);const allClickable=possibleMoves.allClickable;const possibleMoveMeta=possibleMoves.possibleMoveMeta;return {state,gameover,moves,allClickable,possibleMoveMeta};}doStep(_target){if(this.options.boardgameIOGame)return;const{state,moves,possibleMoveMeta}=this.getState();const target=_target.abstract?_target:state.G.bank.locate(_target.entityId);const newEliminated=Object.entries(possibleMoveMeta).filter(_ref2=>{let[_,meta]=_ref2;return !hasTarget(meta.clickableForMove,target);}).map(_ref3=>{let[name]=_ref3;return name;}).concat(this.moveBuilder.eliminatedMoves);if(newEliminated.length===Object.keys(moves).length){console.error('invalid move with target:',target?.rule);return;}const remainingMoveEntries=Object.entries(possibleMoveMeta).filter(_ref4=>{let[name]=_ref4;return !newEliminated.includes(name);});if(isMoveCompleted(state,moves,remainingMoveEntries,this.moveBuilder.stepIndex)){const[moveName]=remainingMoveEntries[0];const move=moves[moveName];const payload=(0, _createPayload.default)(state,move.moveInstance.rule,[...this.moveBuilder.targets,target],{moveInstance:move.moveInstance});this.optimisticWinner=getWinnerAfterMove(state,this.game,move.moveInstance,payload);move(payload);this.moveBuilder={targets:[],stepIndex:0,eliminatedMoves:[]};}else {this.moveBuilder={eliminatedMoves:newEliminated,stepIndex:this.moveBuilder.stepIndex+1,targets:[...this.moveBuilder.targets,target]};}this.update();}reset(){if(this.options.boardgameIOGame)return;this.moveBuilder={targets:[],stepIndex:0,eliminatedMoves:[]};this.optimisticWinner=null;this.update();}undoStep(){if(this.options.boardgameIOGame)return;if(this.moveBuilder.targets.length){this.moveBuilder={targets:this.moveBuilder.targets.slice(0,-1),stepIndex:Math.max(0,this.moveBuilder.stepIndex-1),eliminatedMoves:[]};}this.update();}}exports.Client=Client;function hasTarget(clickableSet,target){if(!target.abstract)return clickableSet.has(target);return [...clickableSet].some(item=>item.abstract&&item.value===target.value);}function getPossibleMoves(bgioState,moves,moveBuilder){const{eliminatedMoves,stepIndex}=moveBuilder;const possibleMoveMeta={};const allClickable=new Set();Object.entries(moves).filter(_ref5=>{let[moveName]=_ref5;return !eliminatedMoves.includes(moveName);}).forEach(_ref6=>{let[moveName,move]=_ref6;const moveRule=(0, _resolveProperties.default)(bgioState,_objectSpread2(_objectSpread2({},move.moveInstance.rule),{},{moveName}));const context={moveInstance:move.moveInstance,moveArguments:moveRule.arguments};const targets=moveBuilder.targets.map(t=>t.abstract?t:bgioState.G.bank.locate(t.entityId));const payload=(0, _createPayload.default)(bgioState,moveRule,targets,context);context.moveArguments=_objectSpread2(_objectSpread2({},context.moveArguments),payload.arguments);const moveIsAllowed=(0, _checkConditions.default)(bgioState,moveRule,{},context).conditionsAreMet;const moveSteps=(0, _getSteps.default)(bgioState,moveRule);const clickableForMove=new Set(moveIsAllowed&&moveSteps?.[stepIndex]?.getClickable(context)||[]);possibleMoveMeta[moveName]={clickableForMove};clickableForMove.forEach(entity=>allClickable.add(entity));});return {possibleMoveMeta,allClickable};}function isMoveCompleted(state,moves,remainingMoveEntries,stepIndex){return remainingMoveEntries.length===1&&(0, _getSteps.default)(state,moves[remainingMoveEntries[0][0]].moveInstance.rule).length===stepIndex+1;}function getWinnerAfterMove(state,game,moveInstance,movePayload){const simulatedG=(0, _simulateMove.default)(state,(0, _preparePayload.default)(movePayload),{moveInstance});return game.endIf?.(_objectSpread2(_objectSpread2({},state),{},{G:JSON.parse((0, _wackson.serialize)(simulatedG))}));}/***/},/***/784(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// lazily create entities as needed, and also function as an index of entities created
1598
+ */const createMatch=_ref2=>{let{game,numPlayers,setupData,unlisted}=_ref2;if(!numPlayers||typeof numPlayers!=='number')numPlayers=2;const setupDataError=game.validateSetupData&&game.validateSetupData(setupData,numPlayers);if(setupDataError!==undefined)return {setupDataError};const metadata=createMetadata({game,numPlayers,setupData,unlisted});const initialState=(0, _initialize11d626ca.I)({game,numPlayers,setupData});return {metadata,initialState};};exports.c=createMatch;/***/},/***/4245(__unused_webpack_module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports.Client=void 0;var _client=__webpack_require__(4688);var _debug=__webpack_require__(504);var _multiplayer=__webpack_require__(9843);var _wackson=__webpack_require__(7627);var _gameFactory=_interopRequireDefault(__webpack_require__(4913));var _registry=__webpack_require__(3883);var _simulateMove=_interopRequireDefault(__webpack_require__(3276));var _getCurrentMoves=_interopRequireDefault(__webpack_require__(4171));var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _preparePayload=_interopRequireDefault(__webpack_require__(380));var _getSteps=_interopRequireDefault(__webpack_require__(2146));var _createPayload=_interopRequireDefault(__webpack_require__(9965));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Client{constructor(options){this.options=options;this.game=options.boardgameIOGame||(0, _gameFactory.default)(JSON.parse(options.gameRules),options.gameName);if(!options.boardgameIOGame){this.moveBuilder={targets:[],stepIndex:0,eliminatedMoves:[]};this.optimisticWinner=null;}}connect(){const{server,numPlayers,debug={collapseOnLoad:true,impl:_debug.Debug},gameId,boardgamePlayerID,clientToken,singlePlayer=!clientToken}=this.options;try{const clientOptions=singlePlayer?{game:this.game,numPlayers,debug}:{game:this.game,multiplayer:(0,_multiplayer.SocketIO)({server,socketOpts:{transports:['websocket','polling']}}),matchID:gameId,playerID:boardgamePlayerID,credentials:clientToken,debug};this.client=(0,_client.Client)(clientOptions);this.client.subscribe(()=>this.update());this.client.start();return this;}catch(error){console.error('Failed to join game:',error?.message??error);if(error?.stack)console.error(error.stack);}}update(){this.options.onClientUpdate?.();}getState(){const clientState=this.client?.getState();if(!clientState)return {};if(this.options.boardgameIOGame){return {state:clientState,gameover:clientState?.ctx?.gameover,moves:this.client.moves};}const state=_objectSpread2(_objectSpread2({},clientState),{},{G:(0, _wackson.deserialize)(JSON.stringify(clientState.G),_registry.registry),originalG:clientState.G});const gameover=state?.ctx?.gameover;const moves=!gameover?Object.entries((0, _getCurrentMoves.default)(state,this.client)).reduce((acc,_ref)=>{let[moveName,rawMove]=_ref;const move=payload=>{this.client.moves[moveName]((0, _preparePayload.default)(payload));};move.moveInstance=rawMove.moveInstance;return _objectSpread2(_objectSpread2({},acc),{},{[moveName]:move});},{}):[];const possibleMoves=getPossibleMoves(state,moves,this.moveBuilder);const allClickable=possibleMoves.allClickable;const possibleMoveMeta=possibleMoves.possibleMoveMeta;return {state,gameover,moves,allClickable,possibleMoveMeta};}doStep(_target){if(this.options.boardgameIOGame)return;const{state,moves,possibleMoveMeta}=this.getState();const target=_target.abstract?_target:state.G.bank.locate(_target.entityId);const newEliminated=Object.entries(possibleMoveMeta).filter(_ref2=>{let[_,meta]=_ref2;return !hasTarget(meta.clickableForMove,target);}).map(_ref3=>{let[name]=_ref3;return name;}).concat(this.moveBuilder.eliminatedMoves);if(newEliminated.length===Object.keys(moves).length){console.error('invalid move with target:',target?.rule);return;}const remainingMoveEntries=Object.entries(possibleMoveMeta).filter(_ref4=>{let[name]=_ref4;return !newEliminated.includes(name);});if(isMoveCompleted(state,moves,remainingMoveEntries,this.moveBuilder.stepIndex)){const[moveName]=remainingMoveEntries[0];const move=moves[moveName];const payload=(0, _createPayload.default)(state,move.moveInstance.rule,[...this.moveBuilder.targets,target],{moveInstance:move.moveInstance});this.optimisticWinner=getWinnerAfterMove(state,this.game,move.moveInstance,payload);move(payload);this.moveBuilder={targets:[],stepIndex:0,eliminatedMoves:[]};}else {this.moveBuilder={eliminatedMoves:newEliminated,stepIndex:this.moveBuilder.stepIndex+1,targets:[...this.moveBuilder.targets,target]};}this.update();}reset(){if(this.options.boardgameIOGame)return;this.moveBuilder={targets:[],stepIndex:0,eliminatedMoves:[]};this.optimisticWinner=null;this.update();}undoStep(){if(this.options.boardgameIOGame)return;if(this.moveBuilder.targets.length){this.moveBuilder={targets:this.moveBuilder.targets.slice(0,-1),stepIndex:Math.max(0,this.moveBuilder.stepIndex-1),eliminatedMoves:[]};}this.update();}}exports.Client=Client;function hasTarget(clickableSet,target){if(!target.abstract)return clickableSet.has(target);return [...clickableSet].some(item=>item.abstract&&item.value===target.value);}function getPossibleMoves(bgioState,moves,moveBuilder){const{eliminatedMoves,stepIndex}=moveBuilder;const possibleMoveMeta={};const allClickable=new Set();Object.entries(moves).filter(_ref5=>{let[moveName]=_ref5;return !eliminatedMoves.includes(moveName);}).forEach(_ref6=>{let[moveName,move]=_ref6;const moveRule=(0, _resolveProperties.default)(bgioState,_objectSpread2(_objectSpread2({},move.moveInstance.rule),{},{moveName}));const context={moveInstance:move.moveInstance,moveArguments:moveRule.arguments};const targets=moveBuilder.targets.map(t=>t.abstract?t:bgioState.G.bank.locate(t.entityId));const payload=(0, _createPayload.default)(bgioState,moveRule,targets,context);context.moveArguments=_objectSpread2(_objectSpread2({},context.moveArguments),payload.arguments);const moveIsAllowed=(0, _checkConditions.default)(bgioState,moveRule,{},context).conditionsAreMet;const moveSteps=(0, _getSteps.default)(bgioState,moveRule);const clickableForMove=new Set(moveIsAllowed&&moveSteps?.[stepIndex]?.getClickable(context)||[]);possibleMoveMeta[moveName]={clickableForMove};clickableForMove.forEach(entity=>allClickable.add(entity));});return {possibleMoveMeta,allClickable};}function isMoveCompleted(state,moves,remainingMoveEntries,stepIndex){return remainingMoveEntries.length===1&&(0, _getSteps.default)(state,moves[remainingMoveEntries[0][0]].moveInstance.rule).length===stepIndex+1;}function getWinnerAfterMove(state,game,moveInstance,movePayload){const simulatedG=(0, _simulateMove.default)(state,(0, _preparePayload.default)(movePayload),{moveInstance});return game.endIf?.(_objectSpread2(_objectSpread2({},state),{},{G:JSON.parse((0, _wackson.serialize)(simulatedG))}));}/***/},/***/784(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// lazily create entities as needed, and also function as an index of entities created
1618
1599
  class BankSlot{constructor(rule,bank){this.bank=bank;this.rule=rule;this.pool=[];this.remaining=+rule.count||1;}getOne(bgioArguments,options,context){return this.getMultiple(bgioArguments,1,options,context)[0];}getMultiple(bgioArguments){let count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:Infinity;let options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};let context=arguments.length>3?arguments[3]:undefined;const toReturn=[];if(this.remaining===Infinity&&count===Infinity){throw new Error(`Cannot get infinite pieces from slot with infinite remaining: ${this.rule.name}`);}if(count!==Infinity&&count>this.remaining){throw new Error(`Requested ${count} pieces but only ${this.remaining} available in slot: ${this.rule.name}`);}// Determine actual count to fetch
1619
- const actualCount=count===Infinity?this.remaining:count;if(this.remaining!==Infinity){this.remaining-=actualCount;}const fromPool=Math.min(actualCount,this.pool.length);toReturn.push(...this.pool.splice(0,fromPool));const remainder=actualCount-fromPool;if(remainder>0){toReturn.push(...Array.from(new Array(remainder)).map(()=>this.bank.createEntity(this.rule)));}if(options.state){const newState=(0, _resolveProperties.default)(bgioArguments,options.state,context);toReturn.forEach(entity=>{entity.state=_objectSpread2(_objectSpread2({},entity.state),newState);});}return toReturn;}returnToBank(entity){if(entity.rule.state){entity.state=entity.rule.state;}else {delete entity.state;}if(this.remaining!==undefined){this.remaining+=1;}this.pool.push(entity);}}exports["default"]=BankSlot;module.exports=exports.default;/***/},/***/6103(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _find=_interopRequireDefault(__webpack_require__(7309));var _filter=_interopRequireDefault(__webpack_require__(7612));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _registry=__webpack_require__(3883);var _bankSlot=_interopRequireDefault(__webpack_require__(784));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Bank{constructor(entityRules){this.currentEntityId=0;this.tracker={};this.slots=entityRules.map(rule=>new _bankSlot.default(rule,this));}createEntity(){let definition=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};let options=arguments.length>1?arguments[1]:undefined;const entity=new _registry.registry[definition.type||'Entity'](_objectSpread2({bank:this,fromBank:true},options),definition,this.currentEntityId++);this.track(entity);return entity;}track(entity){this.tracker[entity.entityId]=entity;}locate(entityId){return this.tracker[entityId];}findAll(bgioArguments,rule,context){if(!rule.conditions){throw new Error(`Cannot find entity with no conditions. Rule: ${JSON.stringify(rule)}`);}return (0, _filter.default)(Object.values(this.tracker),entity=>(0, _checkConditions.default)(bgioArguments,rule,{target:entity},context).conditionsAreMet);}findOne(bgioArguments,rule,context){return this.findAll(bgioArguments,rule,context)[0];}find(bgioArguments,rule,context){return rule.matchMultiple?this.findAll(bgioArguments,rule,context):this.findOne(bgioArguments,rule,context);}findParent(entity){return (0, _find.default)(this.tracker,ent=>ent.entities?.includes(entity)||ent.spaces?.includes(entity));}getOne(bgioArguments,rule,context){const slot=this.getSlot(bgioArguments,rule,context);if(!slot){console.error(`No matching slot for ${JSON.stringify(rule)}`);}return slot.getOne(bgioArguments,{state:rule.state},context);}getMultiple(bgioArguments,rule,count,context){const slots=this.getSlots(bgioArguments,rule,context);if(!slots.length){console.error(`No matching slots for ${JSON.stringify(rule)}`);}return slots.reduce((acc,slot)=>[...acc,...slot.getMultiple(bgioArguments,count,{state:rule.state})],[]);}getSlot(bgioArguments,rule,context){return this.slots.find(slot=>(0, _checkConditions.default)(bgioArguments,rule,{target:slot},context).conditionsAreMet);}getSlots(bgioArguments,rule,context){return this.slots.filter(slot=>(0, _checkConditions.default)(bgioArguments,rule,{target:slot},context).conditionsAreMet);}returnToBank(bgioArguments,entity){this.findParent(entity).remove(entity);this.getSlot(bgioArguments,entity.rule).returnToBank(entity);delete this.tracker[entity.entityId];}}exports["default"]=Bank;module.exports=exports.default;/***/},/***/2606(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _space=_interopRequireDefault(__webpack_require__(1325));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Board extends _space.default{}exports["default"]=Board;module.exports=exports.default;/***/},/***/2130(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=conditionFactory;var _isCondition=_interopRequireDefault(__webpack_require__(7350));var _notCondition=_interopRequireDefault(__webpack_require__(8801));var _orCondition=_interopRequireDefault(__webpack_require__(9299));var _someCondition=_interopRequireDefault(__webpack_require__(218));var _everyCondition=_interopRequireDefault(__webpack_require__(5163));var _containsCondition=_interopRequireDefault(__webpack_require__(7823));var _containsSameCondition=_interopRequireDefault(__webpack_require__(3546));var _inLineCondition=_interopRequireDefault(__webpack_require__(4372));var _hasLineCondition=_interopRequireDefault(__webpack_require__(1839));var _isFullCondition=_interopRequireDefault(__webpack_require__(7278));var _wouldCondition=_interopRequireDefault(__webpack_require__(441));var _noPossibleMovesCondition=_interopRequireDefault(__webpack_require__(2726));var _evaluateCondition=_interopRequireDefault(__webpack_require__(8401));var _positionCondition=_interopRequireDefault(__webpack_require__(6017));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// import BingoCondition from "./bingo-condition.js";
1600
+ const actualCount=count===Infinity?this.remaining:count;if(this.remaining!==Infinity){this.remaining-=actualCount;}const fromPool=Math.min(actualCount,this.pool.length);toReturn.push(...this.pool.splice(0,fromPool));const remainder=actualCount-fromPool;if(remainder>0){toReturn.push(...Array.from(new Array(remainder)).map(()=>this.bank.createEntity(this.rule)));}if(options.state){const newState=(0, _resolveProperties.default)(bgioArguments,options.state,context);toReturn.forEach(entity=>{entity.state=_objectSpread2(_objectSpread2({},entity.state),newState);});}return toReturn;}returnToBank(entity){if(entity.rule.state){entity.state=entity.rule.state;}else {delete entity.state;}if(this.remaining!==undefined){this.remaining+=1;}this.pool.push(entity);}}exports["default"]=BankSlot;module.exports=exports.default;/***/},/***/6103(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _find=_interopRequireDefault(__webpack_require__(7309));var _filter=_interopRequireDefault(__webpack_require__(7612));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _registry=__webpack_require__(3883);var _bankSlot=_interopRequireDefault(__webpack_require__(784));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Bank{constructor(entityRules){this.currentEntityId=0;this.tracker={};this.slots=entityRules.map(rule=>new _bankSlot.default(rule,this));}createEntity(){let definition=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};let options=arguments.length>1?arguments[1]:undefined;const entity=new _registry.registry[definition.entityType||'Entity'](_objectSpread2({bank:this,fromBank:true},options),definition,this.currentEntityId++);this.track(entity);return entity;}track(entity){this.tracker[entity.entityId]=entity;}locate(entityId){return this.tracker[entityId];}findAll(bgioArguments,rule,context){if(!rule.conditions){throw new Error(`Cannot find entity with no conditions. Rule: ${JSON.stringify(rule)}`);}return (0, _filter.default)(Object.values(this.tracker),entity=>(0, _checkConditions.default)(bgioArguments,rule,{target:entity},context).conditionsAreMet);}findOne(bgioArguments,rule,context){return this.findAll(bgioArguments,rule,context)[0];}find(bgioArguments,rule,context){return rule.matchMultiple?this.findAll(bgioArguments,rule,context):this.findOne(bgioArguments,rule,context);}findParent(entity){return (0, _find.default)(this.tracker,ent=>ent.entities?.includes(entity)||ent.spaces?.includes(entity));}getOne(bgioArguments,rule,context){const slot=this.getSlot(bgioArguments,rule,context);if(!slot){console.error(`No matching slot for ${JSON.stringify(rule)}`);}return slot.getOne(bgioArguments,{state:rule.state},context);}getMultiple(bgioArguments,rule,count,context){const slots=this.getSlots(bgioArguments,rule,context);if(!slots.length){console.error(`No matching slots for ${JSON.stringify(rule)}`);}return slots.reduce((acc,slot)=>[...acc,...slot.getMultiple(bgioArguments,count,{state:rule.state})],[]);}getSlot(bgioArguments,rule,context){return this.slots.find(slot=>(0, _checkConditions.default)(bgioArguments,rule,{target:slot},context).conditionsAreMet);}getSlots(bgioArguments,rule,context){return this.slots.filter(slot=>(0, _checkConditions.default)(bgioArguments,rule,{target:slot},context).conditionsAreMet);}returnToBank(bgioArguments,entity){this.findParent(entity).remove(entity);this.getSlot(bgioArguments,entity.rule).returnToBank(entity);delete this.tracker[entity.entityId];}}exports["default"]=Bank;module.exports=exports.default;/***/},/***/2606(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _space=_interopRequireDefault(__webpack_require__(1325));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Board extends _space.default{}exports["default"]=Board;module.exports=exports.default;/***/},/***/2130(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=conditionFactory;var _isCondition=_interopRequireDefault(__webpack_require__(7350));var _notCondition=_interopRequireDefault(__webpack_require__(8801));var _orCondition=_interopRequireDefault(__webpack_require__(9299));var _someCondition=_interopRequireDefault(__webpack_require__(218));var _everyCondition=_interopRequireDefault(__webpack_require__(5163));var _containsCondition=_interopRequireDefault(__webpack_require__(7823));var _containsSameCondition=_interopRequireDefault(__webpack_require__(3546));var _inLineCondition=_interopRequireDefault(__webpack_require__(4372));var _hasLineCondition=_interopRequireDefault(__webpack_require__(1839));var _isFullCondition=_interopRequireDefault(__webpack_require__(7278));var _wouldCondition=_interopRequireDefault(__webpack_require__(441));var _noPossibleMovesCondition=_interopRequireDefault(__webpack_require__(2726));var _evaluateCondition=_interopRequireDefault(__webpack_require__(8401));var _positionCondition=_interopRequireDefault(__webpack_require__(6017));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// import BingoCondition from "./bingo-condition.js";
1620
1601
  // import RelativeMoveCondition from "./relative-move-condition.js";
1621
1602
  function conditionFactory(rule){if(rule.conditionType==="Is"){return new _isCondition.default(rule);}else if(rule.conditionType==="Not"){return new _notCondition.default(rule);}else if(rule.conditionType==="Or"){return new _orCondition.default(rule);}else if(rule.conditionType==="Some"){return new _someCondition.default(rule);}else if(rule.conditionType==="Contains"){return new _containsCondition.default(rule);}else if(rule.conditionType==="ContainsSame"){return new _containsSameCondition.default(rule);}else if(rule.conditionType==="Every"){return new _everyCondition.default(rule);}else if(rule.conditionType==="InLine"){return new _inLineCondition.default(rule);}else if(rule.conditionType==="HasLine"){return new _hasLineCondition.default(rule);}else if(rule.conditionType==="IsFull"){return new _isFullCondition.default(rule);}else if(rule.conditionType==="Would"){return new _wouldCondition.default(rule);}else if(rule.conditionType==="NoPossibleMoves"){return new _noPossibleMovesCondition.default(rule);}else if(rule.conditionType==="Evaluate"){return new _evaluateCondition.default(rule);}else if(rule.conditionType==="Position"){return new _positionCondition.default(rule);// } else if (rule.conditionType === "bingo") {
1622
1603
  // return new BingoCondition(rule);
@@ -1625,9 +1606,9 @@ function conditionFactory(rule){if(rule.conditionType==="Is"){return new _isCond
1625
1606
  }}module.exports=exports.default;/***/},/***/4881(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Condition{constructor(rule){this.rule=rule;}check(bgioArguments,payload,context){const conditionPayload=_objectSpread2({},payload);const newContext=_objectSpread2({},context);if(conditionPayload.target){newContext.originalTarget=conditionPayload.target;}const rule=(0, _resolveProperties.default)(bgioArguments,this.rule,newContext);// We don't simply defer to payload target because of Parent and RelativePath
1626
1607
  // target types, for instance, which retarget to another entity
1627
1608
  if(rule.target!==undefined){conditionPayload.target=rule.target;}// Nonexistent entities never fulfill conditions (including "Not" conditions!)
1628
- if(this.rule.target!==undefined&&!conditionPayload.target){return {conditionIsMet:false};}return this.checkCondition(bgioArguments,rule,conditionPayload,newContext);}isMet(){return this.check(...arguments).conditionIsMet;}}exports["default"]=Condition;module.exports=exports.default;/***/},/***/7823(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;_interopRequireDefault(__webpack_require__(1505));var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class ContainsCondition extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const{target}=payload;if(!target){return {matches:[],conditionIsMet:false};}else {const candidates=target.entities??target.spaces;const matches=candidates?.filter(entity=>(0, _checkConditions.default)(bgioArguments,rule,{target:entity},context).conditionsAreMet)??[];return {matches,conditionIsMet:!!matches.length};}}}exports["default"]=ContainsCondition;module.exports=exports.default;/***/},/***/3546(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _pick=_interopRequireDefault(__webpack_require__(4383));var _conditionFactory=_interopRequireDefault(__webpack_require__(2130));var _condition=_interopRequireDefault(__webpack_require__(4881));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class ContainsSame extends _condition.default{checkCondition(bgioArguments,rule,_ref){let{targets}=_ref;if(targets.length===1&&targets[0].entities?.length){return {conditionIsMet:true};}const[first,...restEntities]=targets;const conditionIsMet=first.entities.some(entity=>{const condition=(0, _conditionFactory.default)({conditionType:"Contains",conditions:[{conditionType:'Is',matcher:(0, _pick.default)(entity.rule,rule.properties)}]});return restEntities.every(ent=>{return condition.isMet(bgioArguments,{target:ent});});});return {conditionIsMet};}}exports["default"]=ContainsSame;module.exports=exports.default;/***/},/***/8401(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;_interopRequireDefault(__webpack_require__(1505));var _condition=_interopRequireDefault(__webpack_require__(4881));var _resolveExpression=_interopRequireDefault(__webpack_require__(8123));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Evaluate extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const newContext=_objectSpread2({},context);if(payload?.target){newContext.target=payload.target;}const result=(0, _resolveExpression.default)(bgioArguments,rule,newContext);return {result,conditionIsMet:!!result};}}exports["default"]=Evaluate;module.exports=exports.default;/***/},/***/5163(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class EveryCondition extends _condition.default{checkCondition(bgioArguments,rule,_ref,context){let{target:targets}=_ref;const results=targets.map(target=>{const loopContext=_objectSpread2(_objectSpread2({},context),{},{loopTarget:target});return (0, _checkConditions.default)(bgioArguments,rule,undefined,loopContext);});return {conditionIsMet:results.every(r=>r.conditionsAreMet),results};}}exports["default"]=EveryCondition;module.exports=exports.default;/***/},/***/1839(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _gridContainsSequence=_interopRequireDefault(__webpack_require__(1138));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class HasLineCondition extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const{matches}=(0, _gridContainsSequence.default)(bgioArguments,payload.target,rule.sequence,context);return {matches,conditionIsMet:!!matches.length};}}exports["default"]=HasLineCondition;module.exports=exports.default;/***/},/***/4372(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _gridContainsSequence=_interopRequireDefault(__webpack_require__(1138));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class InLineCondition extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const{G}=bgioArguments;const{target}=payload;const parent=G.bank.findParent(payload.target);const{matches:allMatches}=(0, _gridContainsSequence.default)(bgioArguments,parent,rule.sequence,context);const matches=allMatches.filter(sequence=>sequence.some(space=>space===target));return {matches,conditionIsMet:!!matches.length};}}exports["default"]=InLineCondition;module.exports=exports.default;/***/},/***/7350(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _entityMatches=_interopRequireDefault(__webpack_require__(6413));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Is extends _condition.default{checkCondition(bgioArguments,rule,_ref,context){let{target}=_ref;if(this.rule.entity&&target!==rule.entity){return {target,conditionIsMet:false};}return {target,conditionIsMet:(0, _entityMatches.default)(bgioArguments,rule.matcher,target,context)};}}exports["default"]=Is;module.exports=exports.default;/***/},/***/7278(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class IsFull extends _condition.default{checkCondition(bgioArguments,rule,payload,context){return {conditionIsMet:payload.target.spaces.every(space=>space.entities.length)};}}exports["default"]=IsFull;module.exports=exports.default;/***/},/***/2726(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _anyValidMoves=_interopRequireDefault(__webpack_require__(3538));var _getCurrentMoves=_interopRequireDefault(__webpack_require__(4171));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class NoPossibleMoves extends _condition.default{checkCondition(bgioArguments,_,__,context){return {conditionIsMet:!(0, _anyValidMoves.default)(bgioArguments,(0, _getCurrentMoves.default)(bgioArguments,context))};}}exports["default"]=NoPossibleMoves;module.exports=exports.default;/***/},/***/8801(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class NotCondition extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const result=(0, _checkConditions.default)(bgioArguments,rule,payload,context);return {conditionIsMet:!result.conditionsAreMet};}}exports["default"]=NotCondition;module.exports=exports.default;/***/},/***/9299(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _findMetCondition=_interopRequireDefault(__webpack_require__(2742));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Or extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const result=(0, _findMetCondition.default)(bgioArguments,rule,payload,context);return {conditionIsMet:!!result};}}exports["default"]=Or;module.exports=exports.default;/***/},/***/6017(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Position extends _condition.default{checkCondition(bgioArguments,rule,_ref){let{target}=_ref;const parent=bgioArguments.G.bank.findParent(target);let conditionIsMet;if(rule.position==='First'){conditionIsMet=parent.entities.indexOf(target)===0;}return {conditionIsMet};}}exports["default"]=Position;module.exports=exports.default;/***/},/***/218(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class SomeCondition extends _condition.default{checkCondition(bgioArguments,rule,_ref,context){let{target:targets}=_ref;const result=targets.find(target=>{const loopContext=_objectSpread2(_objectSpread2({},context),{},{loopTarget:target});return (0, _checkConditions.default)(bgioArguments,rule,undefined,loopContext).conditionsAreMet;});return {conditionIsMet:!!result,result};}}exports["default"]=SomeCondition;module.exports=exports.default;/***/},/***/441(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _simulateMove=_interopRequireDefault(__webpack_require__(3276));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// relying on target order is not perfect;
1609
+ if(this.rule.target!==undefined&&!conditionPayload.target){return {conditionIsMet:false};}return this.checkCondition(bgioArguments,rule,conditionPayload,newContext);}isMet(){return this.check(...arguments).conditionIsMet;}}exports["default"]=Condition;module.exports=exports.default;/***/},/***/7823(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;_interopRequireDefault(__webpack_require__(1505));var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class ContainsCondition extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const{target}=payload;if(!target){return {matches:[],conditionIsMet:false};}else {const candidates=target.entities??target.spaces;const matches=candidates?.filter(entity=>(0, _checkConditions.default)(bgioArguments,rule,{target:entity},context).conditionsAreMet)??[];return {matches,conditionIsMet:!!matches.length};}}}exports["default"]=ContainsCondition;module.exports=exports.default;/***/},/***/3546(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _pick=_interopRequireDefault(__webpack_require__(4383));var _conditionFactory=_interopRequireDefault(__webpack_require__(2130));var _condition=_interopRequireDefault(__webpack_require__(4881));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class ContainsSame extends _condition.default{checkCondition(bgioArguments,rule,_ref){let{targets}=_ref;if(targets.length===1&&targets[0].entities?.length){return {conditionIsMet:true};}const[first,...restEntities]=targets;const conditionIsMet=first.entities.some(entity=>{const condition=(0, _conditionFactory.default)({conditionType:"Contains",conditions:[{conditionType:'Is',matcher:(0, _pick.default)(entity.rule,rule.properties)}]});return restEntities.every(ent=>{return condition.isMet(bgioArguments,{target:ent});});});return {conditionIsMet};}}exports["default"]=ContainsSame;module.exports=exports.default;/***/},/***/8401(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;_interopRequireDefault(__webpack_require__(1505));var _condition=_interopRequireDefault(__webpack_require__(4881));var _resolveExpression=_interopRequireDefault(__webpack_require__(8123));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Evaluate extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const newContext=_objectSpread2({},context);if(payload?.target){newContext.target=payload.target;}const result=(0, _resolveExpression.default)(bgioArguments,rule,newContext);return {result,conditionIsMet:!!result};}}exports["default"]=Evaluate;module.exports=exports.default;/***/},/***/5163(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class EveryCondition extends _condition.default{checkCondition(bgioArguments,rule,_ref,context){let{target:targets}=_ref;const results=targets.map(target=>{const loopContext=_objectSpread2(_objectSpread2({},context),{},{loopTarget:target});return (0, _checkConditions.default)(bgioArguments,rule,undefined,loopContext);});return {conditionIsMet:results.every(r=>r.conditionsAreMet),results};}}exports["default"]=EveryCondition;module.exports=exports.default;/***/},/***/1839(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _gridContainsSequence=_interopRequireDefault(__webpack_require__(1138));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class HasLineCondition extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const{matches}=(0, _gridContainsSequence.default)(bgioArguments,payload.target,rule.sequence,context);return {matches,conditionIsMet:!!matches.length};}}exports["default"]=HasLineCondition;module.exports=exports.default;/***/},/***/4372(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _gridContainsSequence=_interopRequireDefault(__webpack_require__(1138));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class InLineCondition extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const{G}=bgioArguments;const{target}=payload;const parent=G.bank.findParent(payload.target);const{matches:allMatches}=(0, _gridContainsSequence.default)(bgioArguments,parent,rule.sequence,context);const matches=allMatches.filter(sequence=>sequence.some(space=>space===target));return {matches,conditionIsMet:!!matches.length};}}exports["default"]=InLineCondition;module.exports=exports.default;/***/},/***/7350(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _entityMatches=_interopRequireDefault(__webpack_require__(6413));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Is extends _condition.default{checkCondition(bgioArguments,rule,_ref,context){let{target}=_ref;if(this.rule.entity&&target!==rule.entity){return {target,conditionIsMet:false};}return {target,conditionIsMet:(0, _entityMatches.default)(bgioArguments,rule.matcher,target,context)};}}exports["default"]=Is;module.exports=exports.default;/***/},/***/7278(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class IsFull extends _condition.default{checkCondition(bgioArguments,rule,payload,context){return {conditionIsMet:payload.target.spaces.every(space=>space?.entities.length)};}}exports["default"]=IsFull;module.exports=exports.default;/***/},/***/2726(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _anyValidMoves=_interopRequireDefault(__webpack_require__(3538));var _getCurrentMoves=_interopRequireDefault(__webpack_require__(4171));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class NoPossibleMoves extends _condition.default{checkCondition(bgioArguments,_,__,context){return {conditionIsMet:!(0, _anyValidMoves.default)(bgioArguments,(0, _getCurrentMoves.default)(bgioArguments,context))};}}exports["default"]=NoPossibleMoves;module.exports=exports.default;/***/},/***/8801(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class NotCondition extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const result=(0, _checkConditions.default)(bgioArguments,rule,payload,context);return {conditionIsMet:!result.conditionsAreMet};}}exports["default"]=NotCondition;module.exports=exports.default;/***/},/***/9299(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _findMetCondition=_interopRequireDefault(__webpack_require__(2742));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Or extends _condition.default{checkCondition(bgioArguments,rule,payload,context){const result=(0, _findMetCondition.default)(bgioArguments,rule,payload,context);return {conditionIsMet:!!result};}}exports["default"]=Or;module.exports=exports.default;/***/},/***/6017(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Position extends _condition.default{checkCondition(bgioArguments,rule,_ref){let{target}=_ref;const parent=bgioArguments.G.bank.findParent(target);let conditionIsMet;if(rule.position==='First'){conditionIsMet=parent.entities.indexOf(target)===0;}return {conditionIsMet};}}exports["default"]=Position;module.exports=exports.default;/***/},/***/218(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class SomeCondition extends _condition.default{checkCondition(bgioArguments,rule,_ref,context){let{target:targets}=_ref;const result=targets.find(target=>{const loopContext=_objectSpread2(_objectSpread2({},context),{},{loopTarget:target});return (0, _checkConditions.default)(bgioArguments,rule,undefined,loopContext).conditionsAreMet;});return {conditionIsMet:!!result,result};}}exports["default"]=SomeCondition;module.exports=exports.default;/***/},/***/441(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _condition=_interopRequireDefault(__webpack_require__(4881));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _simulateMove=_interopRequireDefault(__webpack_require__(3276));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// relying on target order is not perfect;
1629
1610
  // I think we'll want to switch to named arguments
1630
- const argNameMap={PlaceNew:['destination'],RemoveEntity:['entity'],MoveEntity:['entity','destination'],TakeFrom:['source','destination'],SetState:['entity','state']};class WouldCondition extends _condition.default{checkCondition(bgioArguments,rule,_ref,context){let{target,targets=[target]}=_ref;const payload={arguments:targets.reduce((acc,target,i)=>_objectSpread2(_objectSpread2({},acc),{},{[argNameMap[context.moveInstance.rule.type][i]]:target}),{})};const simulatedG=(0, _simulateMove.default)(bgioArguments,payload,context);let simulatedConditionsPayload={};if(target){simulatedConditionsPayload={target:simulatedG.bank.locate(target.entityId)};}else if(targets){simulatedConditionsPayload={targets:targets.map(t=>simulatedG.bank.locate(t.entityId))};}const conditionResults=(0, _checkConditions.default)(_objectSpread2(_objectSpread2({},bgioArguments),{},{G:simulatedG}),rule,simulatedConditionsPayload,context);const conditionIsMet=conditionResults.conditionsAreMet;// optimization: don't bother restoring on failure
1611
+ const argNameMap={PlaceNew:['destination'],RemoveEntity:['entity'],MoveEntity:['entity','destination'],TakeFrom:['source','destination'],SetState:['entity','state']};class WouldCondition extends _condition.default{checkCondition(bgioArguments,rule,_ref,context){let{target,targets=[target]}=_ref;const payload={arguments:targets.reduce((acc,target,i)=>_objectSpread2(_objectSpread2({},acc),{},{[argNameMap[context.moveInstance.rule.moveType][i]]:target}),{})};const simulatedG=(0, _simulateMove.default)(bgioArguments,payload,context);let simulatedConditionsPayload={};if(target){simulatedConditionsPayload={target:simulatedG.bank.locate(target.entityId)};}else if(targets){simulatedConditionsPayload={targets:targets.map(t=>simulatedG.bank.locate(t.entityId))};}const conditionResults=(0, _checkConditions.default)(_objectSpread2(_objectSpread2({},bgioArguments),{},{G:simulatedG}),rule,simulatedConditionsPayload,context);const conditionIsMet=conditionResults.conditionsAreMet;// optimization: don't bother restoring on failure
1631
1612
  const results=conditionIsMet?restoreReferences(conditionResults.results,entityId=>bgioArguments.G.bank.locate(entityId)):conditionResults.results;return {results,conditionIsMet};}}// references to simulated object are useless
1632
1613
  exports["default"]=WouldCondition;function restoreReferences(obj,getOriginalEntity){let seen=arguments.length>2&&arguments[2]!==undefined?arguments[2]:new WeakSet();if(typeof obj!=='object'||obj===null){return obj;}if(seen.has(obj)){return obj;}seen.add(obj);if(obj.entityId!==undefined){return getOriginalEntity(obj.entityId);}if(Array.isArray(obj)){return obj.map(item=>restoreReferences(item,getOriginalEntity,seen));}else {const restored={};for(const key in obj){if(obj.hasOwnProperty(key)){restored[key]=restoreReferences(obj[key],getOriginalEntity,seen);}}return restored;}}module.exports=exports.default;/***/},/***/4511(module,exports){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;class Entity{constructor(options,rule,id){if(!options?.fromBank){throw new Error(`Do not create entities directly. Go through the Bank. rule: ${JSON.stringify(rule)}`);}this.rule=rule;this.entityId=id;this.state={};if(this.rule.stateGroups){Object.entries(this.rule.stateGroups).forEach(_ref=>{let[stateGroupName,stateGroupValues]=_ref;const stateGroupValueName=options?.initialStateGroups?.[stateGroupName]??Object.keys(stateGroupValues)[0];Object.assign(this.state,stateGroupValues[stateGroupValueName]);});}if(this.rule.state){Object.assign(this.state,this.rule.state);}}get attributes(){return _objectSpread2(_objectSpread2(_objectSpread2({},this.rule),this),this.state);}}exports["default"]=Entity;module.exports=exports.default;/***/},/***/6677(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=expandGameRules;_interopRequireDefault(__webpack_require__(8055));var _find=_interopRequireDefault(__webpack_require__(7309));var _jsonTransformer=_interopRequireDefault(__webpack_require__(6730));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// for later when we implement deep replacement
1633
1614
  // { type: 'IsEmpty' } = { type: 'not', conditions: [{ type: 'Contains' }],
@@ -1643,9 +1624,9 @@ exports["default"]=WouldCondition;function restoreReferences(obj,getOriginalEnti
1643
1624
  // ]
1644
1625
  // Things we always want, don't need to configure, and
1645
1626
  // want to treat as first-class citizens
1646
- const invariantEntities=[{type:"Space",count:"Infinity"},{type:"Board",name:'sharedBoard'},{name:"playerMarker",perPlayer:true,count:"Infinity"}];function expandEntities(rules){rules.entities=[...invariantEntities,...(rules.entities||[])];}function expandInitialPlacements(rules,entities){if(rules.sharedBoard){const sharedBoardPlacements=rules.sharedBoard.map(matcher=>({entity:matcher,destination:{name:'sharedBoard'}}));if(!rules.initialPlacements)rules.initialPlacements=[];rules.initialPlacements.unshift(...sharedBoardPlacements);}if(rules.personalBoard){entities.push({type:"Board",name:'personalBoard',perPlayer:true});const personalBoardPlacements=rules.personalBoard.map(matcher=>({entity:matcher,destination:{name:'personalBoard'}}));if(!rules.initialPlacements)rules.initialPlacements=[];rules.initialPlacements.unshift(...personalBoardPlacements);}if(rules.initialPlacements){const initialPlacementMoves=rules.initialPlacements.map(placement=>{// probably going to need to separate this even in the shorthand. maybe
1627
+ const invariantEntities=[{entityType:"Space",count:"Infinity"},{entityType:"Board",name:'sharedBoard'},{name:"playerMarker",perPlayer:true,count:"Infinity"}];function expandEntities(rules){rules.entities=[...invariantEntities,...(rules.entities||[])];}function expandInitialPlacements(rules,entities){if(rules.sharedBoard){const sharedBoardPlacements=rules.sharedBoard.map(matcher=>({entity:matcher,destination:{name:'sharedBoard'}}));if(!rules.initialPlacements)rules.initialPlacements=[];rules.initialPlacements.unshift(...sharedBoardPlacements);}if(rules.personalBoard){entities.push({entityType:"Board",name:'personalBoard',perPlayer:true});const personalBoardPlacements=rules.personalBoard.map(matcher=>({entity:matcher,destination:{name:'personalBoard'}}));if(!rules.initialPlacements)rules.initialPlacements=[];rules.initialPlacements.unshift(...personalBoardPlacements);}if(rules.initialPlacements){const initialPlacementMoves=rules.initialPlacements.map(placement=>{// probably going to need to separate this even in the shorthand. maybe
1647
1628
  // combine, then search entity rule and extract state variables instead?
1648
- const _placement$entity=placement.entity,{state}=_placement$entity,matcher=_objectWithoutProperties(_placement$entity,_excluded0);const entityDefinition=(0, _find.default)(entities,matcher);if(placement.destination.name==='personalBoard'){return {type:'ForEach',arguments:{targets:{type:'ctxPath',path:['playOrder']}},move:{type:'PlaceNew',entity:{state,conditions:[{conditionType:'Is',matcher:_objectSpread2(_objectSpread2({},matcher),entityDefinition.perPlayer?{player:{type:'contextPath',path:['loopTarget']}}:{})}]},arguments:{destination:{conditions:[{conditionType:'Is',matcher:_objectSpread2(_objectSpread2({},placement.destination),{},{player:{type:'contextPath',path:['loopTarget']}})}]}}}};}else {return {type:'PlaceNew',entity:{state,conditions:[{conditionType:'Is',matcher}]},arguments:{destination:{conditions:[{conditionType:'Is',matcher:placement.destination}]}}};}});if(!rules.initialMoves)rules.initialMoves=[];rules.initialMoves.unshift(...initialPlacementMoves);delete rules.initialPlacements;}}const keyMappings=[['thatMatches','conditions'],['entityType','type'],['moveType','type'],['endConditions','endIf']];const simpleReplacements=[['isCurrentPlayer',{conditionType:'Is',matcher:{player:{type:'ctxPath',path:['currentPlayer']}}}],['isEmpty',{conditionType:'Not',conditions:[{conditionType:'Contains'}]}],['ownerOfFirstResultEntity',// might have to more tightly couple this to HasLine condition
1629
+ const _placement$entity=placement.entity,{state}=_placement$entity,matcher=_objectWithoutProperties(_placement$entity,_excluded0);const entityDefinition=(0, _find.default)(entities,matcher);if(placement.destination.name==='personalBoard'){return {moveType:'ForEach',arguments:{targets:{type:'ctxPath',path:['playOrder']}},move:{moveType:'PlaceNew',entity:{state,conditions:[{conditionType:'Is',matcher:_objectSpread2(_objectSpread2({},matcher),entityDefinition.perPlayer?{player:{type:'contextPath',path:['loopTarget']}}:{})}]},arguments:{destination:{conditions:[{conditionType:'Is',matcher:_objectSpread2(_objectSpread2({},placement.destination),{},{player:{type:'contextPath',path:['loopTarget']}})}]}}}};}else {return {moveType:'PlaceNew',entity:{state,conditions:[{conditionType:'Is',matcher}]},arguments:{destination:{conditions:[{conditionType:'Is',matcher:placement.destination}]}}};}});if(!rules.initialMoves)rules.initialMoves=[];rules.initialMoves.unshift(...initialPlacementMoves);delete rules.initialPlacements;}}const keyMappings=[];const simpleReplacements=[['isCurrentPlayer',{conditionType:'Is',matcher:{player:{type:'ctxPath',path:['currentPlayer']}}}],['isEmpty',{conditionType:'Not',conditions:[{conditionType:'Contains'}]}],['ownerOfFirstResultEntity',// might have to more tightly couple this to HasLine condition
1649
1630
  {"type":"contextPath","path":["results",0,"matches",0,0,"entities",0,"attributes","player"]}]];const transformationRules=[{test:val=>val&&typeof val==='object',replace:val=>{keyMappings.forEach(_ref=>{let[oldKey,newKey]=_ref;if(val.hasOwnProperty(oldKey)){val[newKey]=val[oldKey];delete val[oldKey];}});return val;}},{test:val=>typeof val==='string',replace:val=>{for(let i=0,len=simpleReplacements.length;i<len;i++){if(val===simpleReplacements[i][0]){return simpleReplacements[i][1];}}return val;}},{test:val=>val?.conditions,replace:val=>{if(!Array.isArray(val.conditions)){val.conditions=[val.conditions];}return val;}},{test:val=>val?.conditions,replace:val=>{// make "Is" the default condition
1650
1631
  for(let i=0,len=val.conditions.length;i<len;i++){if(!val.conditions[i].conditionType){val.conditions[i]={conditionType:'Is',matcher:val.conditions[i]};}}return val;}},{test:val=>typeof val?.target==='string',replace:val=>_objectSpread2(_objectSpread2({},val),{},{target:{conditions:[{conditionType:'Is',matcher:{name:val.target}}]}})}];function expandGameRules(gameRules){const rules=(0, _jsonTransformer.default)(gameRules,transformationRules);if(!rules.sharedBoard){rules.sharedBoard=rules.entities;}if(!rules.turn){rules.turn={minMoves:1,maxMoves:1};}expandEntities(rules);expandInitialPlacements(rules,rules.entities);if(rules.phases){Object.entries(rules.phases).forEach(phaseRule=>{expandInitialPlacements(phaseRule,rules.entities);});}if(gameRules.numPlayers){gameRules.minPlayers=gameRules.maxPlayers=gameRules.numPlayers;}return rules;}module.exports=exports.default;/***/},/***/4913(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=gameFactory;var _wackson=__webpack_require__(7627);var _moveFactory=_interopRequireDefault(__webpack_require__(510));var _bank=_interopRequireDefault(__webpack_require__(6103));var _expandGameRules=_interopRequireDefault(__webpack_require__(6677));var _getScenarioResults=_interopRequireDefault(__webpack_require__(236));var _doMoves=_interopRequireDefault(__webpack_require__(2796));var _deserializeBgioArguments=_interopRequireDefault(__webpack_require__(3358));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}function gameFactory(gameRules,gameName){const game={name:gameName};const rules=(0, _expandGameRules.default)(gameRules);game.setup=bgioArguments=>{const{ctx}=bgioArguments;const initialState={_meta:{passedPlayers:[],previousPayloads:{}}};const entityDefinitions=expandEntityDefinitions(rules.entities,ctx);initialState.bank=new _bank.default(entityDefinitions);initialState.sharedBoard=initialState.bank.getOne(bgioArguments,{conditions:[{conditionType:'Is',matcher:{name:"sharedBoard"}}]});if(rules.personalBoard){initialState.personalBoards=bgioArguments.ctx.playOrder.map(playerID=>initialState.bank.getOne(bgioArguments,{conditions:[{conditionType:'Is',matcher:{name:"personalBoard",player:playerID}}]}));}rules.initialMoves?.forEach(moveRule=>{(0, _moveFactory.default)(moveRule,game).moveInstance.doMove(_objectSpread2(_objectSpread2({},bgioArguments),{},{G:initialState}));});return JSON.parse((0, _wackson.serialize)(initialState));};if(rules.moves){game.moves=createMoves(rules.moves,game);}if(rules.turn){game.turn=createTurn(rules.turn,game);}if(rules.phases){game.phases=Object.entries(rules.phases).reduce((acc,_ref)=>{let[name,phaseRule]=_ref;return _objectSpread2(_objectSpread2({},acc),{},{[name]:createPhase(phaseRule,game)});},{});}if(rules.endIf){game.endIf=bgioArguments=>{const newBgioArguments=(0, _deserializeBgioArguments.default)(bgioArguments);return (0, _getScenarioResults.default)(newBgioArguments,rules.endIf);};}if(!gameRules.DEBUG_DISABLE_SECRET_STATE){game.playerView=bgioArguments=>{const{G,playerID}=(0, _deserializeBgioArguments.default)(bgioArguments);Object.values(G.bank.tracker).forEach(entity=>{if(entity.rule.contentsHiddenFrom==='All'||entity.rule.contentsHiddenFrom==='Others'&&(playerID!==entity.rule.player||playerID==undefined)){// may want to hide entities inside spaces instead?
1651
1632
  if(entity.spaces){entity.spaces=entity.rule.hideLength?[]:entity.spaces.map(()=>G.bank.createEntity());}if(entity.entities){entity.entities=entity.rule.hideLength?[]:entity.entities.map(()=>G.bank.createEntity());}}});return JSON.parse((0, _wackson.serialize)(G));};}return game;}// create a new entity for each variant
@@ -1656,13 +1637,13 @@ if(entityCopy.variants){const variants=entityCopy.variants;delete entityCopy.var
1656
1637
  newBgioArguments.G._meta.passedPlayers=newBgioArguments.G._meta.passedPlayers.filter(p=>p!==newBgioArguments.ctx.currentPlayer);(0, _doMoves.default)(newBgioArguments,turnRule.initialMoves,{game});(0, _doMoves.default)(newBgioArguments,stageRule?.initialMoves,{game});return JSON.parse((0, _wackson.serialize)(newBgioArguments.G));};if(turnRule.stages){Object.entries(turnRule.stages).forEach(_ref2=>{let[stageName,stageRule]=_ref2;if(stageRule.moves){turn.stages[stageName].moves=createMoves(stageRule.moves,game);}});}if(turnRule.order?.playOrder==='RotateFirst'){turnRule.order.first=()=>0;turnRule.order.next=_ref3=>{let{ctx}=_ref3;return (ctx.playOrderPos+1)%ctx.numPlayers;};turn.order.playOrder=_ref4=>{let{ctx,G}=_ref4;return G._meta.isAfterFirstPhase?[...ctx.playOrder.slice(1),ctx.playOrder[0]]:ctx.playOrder;};}return turn;}function createPhase(phaseRule,game){const phase=_objectSpread2({},phaseRule);if(phaseRule.turn){phase.turn=createTurn(phaseRule.turn,game);}if(phaseRule.moves){phase.moves=createMoves(phaseRule.moves,game);}phase.onBegin=bgioArguments=>{const newBgioArguments=(0, _deserializeBgioArguments.default)(bgioArguments);(0, _doMoves.default)(newBgioArguments,phaseRule.initialMoves,{game});newBgioArguments.G._meta.currentPhaseHasBeenSetUp=true;newBgioArguments.G._meta.nextPhase=phaseRule.next;return JSON.parse((0, _wackson.serialize)(newBgioArguments.G));};if(phaseRule.endIf){phase.endIf=bgioArguments=>{const newBgioArguments=(0, _deserializeBgioArguments.default)(bgioArguments);if(newBgioArguments.G._meta.currentPhaseHasBeenSetUp){const result=(0, _getScenarioResults.default)(newBgioArguments,phaseRule.endIf);if(result){return result;}}};}phase.onEnd=_ref5=>{let{G}=_ref5;G._meta.currentPhaseHasBeenSetUp=false;G._meta.isAfterFirstPhase=true;};return phase;}function createMoves(moves,game){return Object.entries(moves).reduce((acc,_ref6)=>{let[name,moveDefinition]=_ref6;return _objectSpread2(_objectSpread2({},acc),{},{[name]:(0, _moveFactory.default)(_objectSpread2(_objectSpread2({},moveDefinition),{},{name}),game)});},{});}module.exports=exports.default;/***/},/***/8243(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class EndTurn extends _move.default{do(bgioArguments){bgioArguments.events.endTurn();}}exports["default"]=EndTurn;module.exports=exports.default;/***/},/***/3459(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));var _moveFactory=__webpack_require__(510);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class ForEach extends _move.default{do(bgioArguments,rule,_ref,context){let{arguments:{targets}}=_ref;targets.forEach(target=>{const loopContext=_objectSpread2(_objectSpread2({},context),{},{loopTarget:target});(0, _moveFactory.getMoveInstance)(rule.move).doMove(bgioArguments,undefined,loopContext);});}}exports["default"]=ForEach;module.exports=exports.default;/***/},/***/5885(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class MoveEntity extends _move.default{do(bgioArguments,rule,_ref){let{arguments:{entity,destination}}=_ref;// todo: move all such things to always be multiple
1657
1638
  if(Array.isArray(entity)){entity.forEach(e=>{bgioArguments.G.bank.findParent(e)?.remove(e);destination.placeEntity(e,rule.position);});}else {bgioArguments.G.bank.findParent(entity)?.remove(entity);destination.placeEntity(entity,rule.position);}}}exports["default"]=MoveEntity;module.exports=exports.default;/***/},/***/510(__unused_webpack_module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=moveFactory;exports.getMoveInstance=getMoveInstance;var _wackson=__webpack_require__(7627);var _core=__webpack_require__(4039);var _registry=__webpack_require__(3883);var _deserializeBgioArguments=_interopRequireDefault(__webpack_require__(3358));var _moveEntity=_interopRequireDefault(__webpack_require__(5885));var _removeEntity=_interopRequireDefault(__webpack_require__(2414));var _placeNew=_interopRequireDefault(__webpack_require__(6642));var _takeFrom=_interopRequireDefault(__webpack_require__(4888));var _setState=_interopRequireDefault(__webpack_require__(9421));var _setActivePlayers=_interopRequireDefault(__webpack_require__(2790));var _endTurn=_interopRequireDefault(__webpack_require__(8243));var _passTurn=_interopRequireDefault(__webpack_require__(3409));var _forEach=_interopRequireDefault(__webpack_require__(3459));var _pass=_interopRequireDefault(__webpack_require__(5953));var _shuffle=_interopRequireDefault(__webpack_require__(2763));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}function moveFactory(moveRule,game){const moveInstance=getMoveInstance(moveRule);// accepts serialized G and payload, returns serialized
1658
1639
  const compatibleMove=function(bgioArguments,serializablePayload){const newBgioArguments=(0, _deserializeBgioArguments.default)(bgioArguments);const{G}=newBgioArguments;const payload=revivePayload(serializablePayload,G);const context={moveInstance,game};const moveConditionResults=moveInstance.doMove(newBgioArguments,payload,context);context.moveConditionResults=[moveConditionResults];if(moveConditionResults!==_core.INVALID_MOVE&&moveRule.then){for(let automaticMoveRule of moveRule.then){const result=getMoveInstance(automaticMoveRule).doMove(newBgioArguments,{},_objectSpread2({},context)// spread here so prevArguments doesn't change for sibling
1659
- );context.moveConditionResults.push(result);}}return JSON.parse((0, _wackson.serialize)(G));};compatibleMove.moveInstance=moveInstance;return compatibleMove;}function revivePayload(serializablePayload,G){if(serializablePayload){const payload=(0, _wackson.deserialize)(JSON.stringify(serializablePayload),_registry.registry);payload.arguments=Object.entries(payload.arguments).reduce((acc,_ref)=>{let[key,argOrEntityId]=_ref;return _objectSpread2(_objectSpread2({},acc),{},{[key]:typeof argOrEntityId==='number'?G.bank.locate(argOrEntityId):argOrEntityId});},{});return payload;}else {return serializablePayload;}}function getMoveInstance(moveRule){switch(moveRule.type){case'MoveEntity':return new _moveEntity.default(moveRule);case'PlaceNew':return new _placeNew.default(moveRule);case'RemoveEntity':return new _removeEntity.default(moveRule);case'TakeFrom':return new _takeFrom.default(moveRule);case'SetState':return new _setState.default(moveRule);case'ForEach':return new _forEach.default(moveRule);case'Pass':return new _pass.default(moveRule);case'Shuffle':return new _shuffle.default(moveRule);case'SetActivePlayers':return new _setActivePlayers.default(moveRule);case'EndTurn':return new _endTurn.default(moveRule);case'PassTurn':return new _passTurn.default(moveRule);}}/***/},/***/6973(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _core=__webpack_require__(4039);var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Move{constructor(rule){this.rule=this.transformRule(rule);}checkValidity(bgioArguments,payload,context){const argRuleEntries=Object.entries(this.rule.arguments??{});if(!argRuleEntries.every(_ref=>{let[argName]=_ref;const arg=payload.arguments[argName];return arg!==undefined&&(!Array.isArray(arg)||arg.length);})){// not the best return value but we don't want to do expensive checks
1640
+ );context.moveConditionResults.push(result);}}return JSON.parse((0, _wackson.serialize)(G));};compatibleMove.moveInstance=moveInstance;return compatibleMove;}function revivePayload(serializablePayload,G){if(serializablePayload){const payload=(0, _wackson.deserialize)(JSON.stringify(serializablePayload),_registry.registry);payload.arguments=Object.entries(payload.arguments).reduce((acc,_ref)=>{let[key,argOrEntityId]=_ref;return _objectSpread2(_objectSpread2({},acc),{},{[key]:typeof argOrEntityId==='number'?G.bank.locate(argOrEntityId):argOrEntityId});},{});return payload;}else {return serializablePayload;}}function getMoveInstance(moveRule){switch(moveRule.moveType){case'MoveEntity':return new _moveEntity.default(moveRule);case'PlaceNew':return new _placeNew.default(moveRule);case'RemoveEntity':return new _removeEntity.default(moveRule);case'TakeFrom':return new _takeFrom.default(moveRule);case'SetState':return new _setState.default(moveRule);case'ForEach':return new _forEach.default(moveRule);case'Pass':return new _pass.default(moveRule);case'Shuffle':return new _shuffle.default(moveRule);case'SetActivePlayers':return new _setActivePlayers.default(moveRule);case'EndTurn':return new _endTurn.default(moveRule);case'PassTurn':return new _passTurn.default(moveRule);}}/***/},/***/6973(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _core=__webpack_require__(4039);var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Move{constructor(rule){this.rule=this.transformRule(rule);}checkValidity(bgioArguments,payload,context){const argRuleEntries=Object.entries(this.rule.arguments??{});if(!argRuleEntries.every(_ref=>{let[argName]=_ref;const arg=payload.arguments[argName];return arg!==undefined&&(!Array.isArray(arg)||arg.length);})){// not the best return value but we don't want to do expensive checks
1660
1641
  // when we know the operation is doomed. At least for now.
1661
1642
  return false;}const argumentResults={};for(let i=0,len=argRuleEntries.length;i<len;i++){const[argName,argRule]=argRuleEntries[i];const payloadArg=payload.arguments[argName];const args=Array.isArray(payloadArg)?payloadArg:[payloadArg];const argResults=[];for(let j=0,len=args.length;j<len;j++){const arg=args[j];const result=(0, _checkConditions.default)(bgioArguments,argRule,{target:arg},_objectSpread2(_objectSpread2({},context),{},{moveArguments:payload.arguments}));argResults.push(result);if(!result.conditionsAreMet){break;}}const argConditionsAreMet=argResults.at(-1).conditionsAreMet;argumentResults[argName]={results:argResults,conditionsAreMet:argConditionsAreMet};if(!argConditionsAreMet){break;}}const moveResults=(0, _checkConditions.default)(bgioArguments,{conditions:this.rule.conditions},undefined,_objectSpread2(_objectSpread2({},context),{},{moveArguments:payload.arguments}));return {argumentResults,moveResults,conditionsAreMet:moveResults.conditionsAreMet&&Object.values(argumentResults).every(a=>a.conditionsAreMet)};}isValid(bgioArguments,payload,context){const conditionResults=this.checkValidity(bgioArguments,payload,context);return conditionResults.conditionsAreMet;}doMove(bgioArguments,payload,context){let{skipCheck=false}=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};const rule=(0, _resolveProperties.default)(bgioArguments,this.rule,context);const resolvedPayload=_objectSpread2(_objectSpread2({},payload),{},{arguments:Object.entries(rule.arguments??{}).reduce((acc,_ref2)=>{let[argName,arg]=_ref2;return _objectSpread2(_objectSpread2({},acc),{},{[argName]:payload?.arguments?.[argName]??arg});},{})});// does not store automatic moves, do we need that?
1662
1643
  if(rule.name){bgioArguments.G._meta.previousPayloads[rule.name]=resolvedPayload;}let conditionResults;if(!skipCheck){conditionResults=this.checkValidity(bgioArguments,resolvedPayload,context);}if(!skipCheck&&!conditionResults.conditionsAreMet){return _core.INVALID_MOVE;}else {this.do(bgioArguments,rule,resolvedPayload,context);if(context){context.previousArguments=resolvedPayload.arguments;}}return {conditionResults};}transformRule(rule){const args=rule.arguments;for(let key in args){const arg=args[key];if(!arg.playerChoice){arg.resolveAsEntity=true;}}return rule;}}exports["default"]=Move;module.exports=exports.default;/***/},/***/3409(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class PassTurn extends _move.default{do(bgioArguments){if(bgioArguments.G._meta.passedPlayers.length<bgioArguments.ctx.numPlayers){bgioArguments.G._meta.passedPlayers.push(bgioArguments.ctx.currentPlayer);bgioArguments.events.pass();}}}exports["default"]=PassTurn;module.exports=exports.default;/***/},/***/5953(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Pass extends _move.default{do(bgioArguments){bgioArguments.events.endTurn();}}exports["default"]=Pass;module.exports=exports.default;/***/},/***/6642(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class PlaceNew extends _move.default{do(bgioArguments,rule,_ref,context){let{arguments:{destination}}=_ref;const entities=rule.matchMultiple?bgioArguments.G.bank.getMultiple(bgioArguments,_objectSpread2(_objectSpread2({},rule.entity),{},{conditions:[...(rule.entity?.conditions||[]),...(rule.conditions||[])]}),rule.count,context):[bgioArguments.G.bank.getOne(bgioArguments,_objectSpread2(_objectSpread2({},rule.entity),{},{conditions:[...(rule.entity?.conditions||[]),...(rule.conditions||[])]}),context)];entities.forEach(entity=>{destination.placeEntity(entity,rule.position);});}}exports["default"]=PlaceNew;module.exports=exports.default;/***/},/***/2414(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class RemoveEntity extends _move.default{do(bgioArguments,rule,_ref){let{arguments:{entity}}=_ref;bgioArguments.G.bank.returnToBank(bgioArguments,entity);}}exports["default"]=RemoveEntity;module.exports=exports.default;/***/},/***/2790(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));var _doMoves=_interopRequireDefault(__webpack_require__(2796));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class SetActivePlayers extends _move.default{do(bgioArguments,rule,_,context){bgioArguments.events.setActivePlayers(rule.options);// this is going to need to be expanded to handle more complex things
1663
1644
  // than "move current player to new stage"
1664
1645
  const phaseName=bgioArguments.ctx.phase;const stageName=rule.options.currentPlayer?.stage;const phaseOrRoot=context.game.phases?.[phaseName]??context.game;const stage=phaseOrRoot?.turn?.stages?.[stageName];(0, _doMoves.default)(bgioArguments,stage?.initialMoves,_objectSpread2(_objectSpread2({},context),{},{stageName}));}}exports["default"]=SetActivePlayers;module.exports=exports.default;/***/},/***/9421(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// todo: invariant conditions like "is one of the allowed values"
1665
- class SetState extends _move.default{do(_,__,_ref){let{arguments:{entity,state}}=_ref;entity.state=_objectSpread2(_objectSpread2({},entity.state),{},{[state.property]:state.value});}}exports["default"]=SetState;module.exports=exports.default;/***/},/***/2763(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Shuffle extends _move.default{do(bgioArguments,_,_ref){let{arguments:{target}}=_ref;target.entities=bgioArguments.random.Shuffle(target.entities);}}exports["default"]=Shuffle;module.exports=exports.default;/***/},/***/4888(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class TakeFrom extends _move.default{do(bgioArguments,rule,_ref){let{arguments:{source,destination}}=_ref;destination.placeEntity(source.takeOne(rule.arguments.source.position));}}exports["default"]=TakeFrom;module.exports=exports.default;/***/},/***/7913(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _chunk=_interopRequireDefault(__webpack_require__(1013));var _spaceGroup=_interopRequireDefault(__webpack_require__(9209));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Grid extends _spaceGroup.default{getSpacesCount(){return this.rule.width*this.rule.height;}getRows(){return (0, _chunk.default)(this.spaces,this.rule.width);}getCoordinates(index){const{width}=this.rule;return [index%width,Math.floor(index/width)];}getIndex(_ref){let[x,y]=_ref;const{width}=this.rule;return y*width+x;}getSpace(coordinates){return this.spaces[this.getIndex(coordinates)];}getRelativeCoordinates(_ref2,_ref3){let[oldX,oldY]=_ref2;let[relativeX,relativeY]=_ref3;const newCoordinates=[oldX+relativeX,oldY+relativeY];return this.areCoordinatesValid(newCoordinates)?newCoordinates:null;}areCoordinatesValid(_ref4){let[x,y]=_ref4;return x>=0&&y>=0&&x<this.rule.width&&y<this.rule.height;}}exports["default"]=Grid;module.exports=exports.default;/***/},/***/9209(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _entity=_interopRequireDefault(__webpack_require__(4511));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class SpaceGroup extends _entity.default{constructor(options){for(var _len=arguments.length,rest=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){rest[_key-1]=arguments[_key];}super(options,...rest);this.spaces=this.makeSpaces(options.bank);}makeSpaces(bank){return Array(this.getSpacesCount()).fill().map((_,i)=>bank.createEntity({type:'Space',index:i}));}getEmptySpaces(){return this.spaces.filter(space=>space.isEmpty());}getSpace(index){return this.spaces[index];}getEntities(index){return this.getSpace(index).entities;}placeEntity(index,entity){this.getSpace(index).placeEntity(entity);}}exports["default"]=SpaceGroup;module.exports=exports.default;/***/},/***/1325(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _entity=_interopRequireDefault(__webpack_require__(4511));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Space extends _entity.default{constructor(){super(...arguments);this.entities=[];}placeEntity(entity){let position=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'Last';if(position==='Last'){this.entities.push(entity);}else if(position==='First'){this.entities.unshift(entity);}}remove(entity){this.entities.splice(this.entities.indexOf(entity),1);}takeOne(){let position=arguments.length>0&&arguments[0]!==undefined?arguments[0]:'First';if(position==='First'){return this.entities.splice(0,1)[0];}}isEmpty(){return this.entities.length===0;}}exports["default"]=Space;module.exports=exports.default;/***/},/***/3883(__unused_webpack_module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports.registry=void 0;var _board=_interopRequireDefault(__webpack_require__(2606));var _spaceGroup=_interopRequireDefault(__webpack_require__(9209));var _space=_interopRequireDefault(__webpack_require__(1325));var _grid=_interopRequireDefault(__webpack_require__(7913));var _bank=_interopRequireDefault(__webpack_require__(6103));var _bankSlot=_interopRequireDefault(__webpack_require__(784));var _entity=_interopRequireDefault(__webpack_require__(4511));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}exports.registry={Board:_board.default,SpaceGroup:_spaceGroup.default,Space:_space.default,Grid:_grid.default,Bank:_bank.default,BankSlot:_bankSlot.default,Entity:_entity.default};/***/},/***/3538(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=areThereValidMoves;var _isPlainObject=_interopRequireDefault(__webpack_require__(1331));var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));var _resolveEntity=_interopRequireDefault(__webpack_require__(4198));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// Recursively find all contextPath references to moveArguments
1646
+ class SetState extends _move.default{do(_,__,_ref){let{arguments:{entity,state}}=_ref;entity.state=_objectSpread2(_objectSpread2({},entity.state),{},{[state.property]:state.value});}}exports["default"]=SetState;module.exports=exports.default;/***/},/***/2763(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Shuffle extends _move.default{do(bgioArguments,_,_ref){let{arguments:{target}}=_ref;target.entities=bgioArguments.random.Shuffle(target.entities);}}exports["default"]=Shuffle;module.exports=exports.default;/***/},/***/4888(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _move=_interopRequireDefault(__webpack_require__(6973));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class TakeFrom extends _move.default{do(bgioArguments,rule,_ref){let{arguments:{source,destination}}=_ref;destination.placeEntity(source.takeOne(rule.arguments.source.position));}}exports["default"]=TakeFrom;module.exports=exports.default;/***/},/***/7913(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _chunk=_interopRequireDefault(__webpack_require__(1013));var _spaceGroup=_interopRequireDefault(__webpack_require__(9209));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Grid extends _spaceGroup.default{getSpacesCount(){return this.rule.width*this.rule.height;}getRows(){return (0, _chunk.default)(this.spaces,this.rule.width);}getCoordinates(index){const{width}=this.rule;return [index%width,Math.floor(index/width)];}getIndex(_ref){let[x,y]=_ref;const{width}=this.rule;return y*width+x;}getSpace(coordinates){return this.spaces[this.getIndex(coordinates)];}getRelativeCoordinates(_ref2,_ref3){let[oldX,oldY]=_ref2;let[relativeX,relativeY]=_ref3;const newCoordinates=[oldX+relativeX,oldY+relativeY];return this.areCoordinatesValid(newCoordinates)?newCoordinates:null;}areCoordinatesValid(_ref4){let[x,y]=_ref4;return x>=0&&y>=0&&x<this.rule.width&&y<this.rule.height;}}exports["default"]=Grid;module.exports=exports.default;/***/},/***/9209(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _entity=_interopRequireDefault(__webpack_require__(4511));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class SpaceGroup extends _entity.default{constructor(options){for(var _len=arguments.length,rest=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){rest[_key-1]=arguments[_key];}super(options,...rest);this.spaces=this.makeSpaces(options.bank);}makeSpaces(bank){return Array(this.getSpacesCount()).fill().map((_,i)=>bank.createEntity({entityType:'Space',index:i}));}getEmptySpaces(){return this.spaces.filter(space=>space.isEmpty());}getSpace(index){return this.spaces[index];}getEntities(index){return this.getSpace(index).entities;}placeEntity(index,entity){this.getSpace(index).placeEntity(entity);}}exports["default"]=SpaceGroup;module.exports=exports.default;/***/},/***/1325(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _entity=_interopRequireDefault(__webpack_require__(4511));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}class Space extends _entity.default{constructor(){super(...arguments);this.entities=[];}placeEntity(entity){let position=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'Last';if(position==='Last'){this.entities.push(entity);}else if(position==='First'){this.entities.unshift(entity);}}remove(entity){this.entities.splice(this.entities.indexOf(entity),1);}takeOne(){let position=arguments.length>0&&arguments[0]!==undefined?arguments[0]:'First';if(position==='First'){return this.entities.splice(0,1)[0];}}isEmpty(){return this.entities.length===0;}}exports["default"]=Space;module.exports=exports.default;/***/},/***/3883(__unused_webpack_module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports.registry=void 0;var _board=_interopRequireDefault(__webpack_require__(2606));var _spaceGroup=_interopRequireDefault(__webpack_require__(9209));var _space=_interopRequireDefault(__webpack_require__(1325));var _grid=_interopRequireDefault(__webpack_require__(7913));var _bank=_interopRequireDefault(__webpack_require__(6103));var _bankSlot=_interopRequireDefault(__webpack_require__(784));var _entity=_interopRequireDefault(__webpack_require__(4511));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}exports.registry={Board:_board.default,SpaceGroup:_spaceGroup.default,Space:_space.default,Grid:_grid.default,Bank:_bank.default,BankSlot:_bankSlot.default,Entity:_entity.default};/***/},/***/3538(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=areThereValidMoves;var _isPlainObject=_interopRequireDefault(__webpack_require__(1331));var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));var _resolveEntity=_interopRequireDefault(__webpack_require__(4198));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// Recursively find all contextPath references to moveArguments
1666
1647
  function findMoveArgumentReferences(obj){let refs=arguments.length>1&&arguments[1]!==undefined?arguments[1]:new Set();if(!obj||typeof obj!=='object'){return refs;}// Check if this is a contextPath reference to moveArguments
1667
1648
  if(obj.type==='contextPath'&&Array.isArray(obj.path)){if(obj.path[0]==='moveArguments'&&obj.path[1]){refs.add(obj.path[1]);}}// Recurse into object properties and array elements
1668
1649
  for(const value of Object.values(obj)){findMoveArgumentReferences(value,refs);}return refs;}// Build a dependency graph and return topologically sorted argument names
@@ -1685,7 +1666,7 @@ return findValidCombination(bgioArguments,moveInstance,ruleArguments,orderedArgN
1685
1666
  function getCurrentMoves(state,_ref){let{game,playerID,stageName}=_ref;const phaseName=state.ctx.phase;// currentPlayer used for single player editor mode
1686
1667
  const stageNameToUse=stageName??state.ctx.activePlayers?.[playerID??state.ctx.currentPlayer];const phaseOrRoot=game.phases?.[phaseName]??game;const stageOrPhaseOrRoot=phaseOrRoot.turn?.stages?.[stageNameToUse]??phaseOrRoot;return stageOrPhaseOrRoot.moves??{};}module.exports=exports.default;/***/},/***/236(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=getScenarioResults;var _checkConditions=_interopRequireDefault(__webpack_require__(7611));var _resolveProperties=_interopRequireDefault(__webpack_require__(7208));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}function getScenarioResults(bgioArguments,scenarios,context){let match;for(const scenario of scenarios){const conditionResults=(0, _checkConditions.default)(bgioArguments,scenario);if(conditionResults.conditionsAreMet){match={scenario,conditionResults};break;}}if(match?.scenario?.result){return (0, _resolveProperties.default)(bgioArguments,match.scenario.result,{results:match.conditionResults.results});}else {return match;}}module.exports=exports.default;/***/},/***/2146(module,exports){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=getSteps;// controls order of what players need to click first
1687
1668
  const argNamesMap={PlaceNew:['destination'],RemoveEntity:['entity'],MoveEntity:['entity','destination'],TakeFrom:['source','destination'],SetState:['entity','state']};// this might not be where special handling for setstate wants to live
1688
- function getSteps(bgioState,moveRule){return argNamesMap[moveRule.type].filter(argName=>moveRule.arguments[argName].playerChoice).map(argName=>({argName,getClickable:argName==='state'?()=>moveRule.arguments[argName].possibleValues.map(value=>_objectSpread2(_objectSpread2({abstract:true},moveRule.arguments[argName]),{},{value})):context=>bgioState.G.bank.findAll(bgioState,moveRule.arguments[argName],context)}));}module.exports=exports.default;/***/},/***/6648(module,exports){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=get;function get(obj,pathArray){let current=obj;for(const step of pathArray){if(current===undefined){return current;}if(step?.flatten){if(!Array.isArray(current)){return undefined;}current=current.flat();if(step.map){current=current.map(item=>get(item,step.map));}}else {current=current[step];}}return current;}module.exports=exports.default;/***/},/***/1138(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=gridContainsSequence;_interopRequireDefault(__webpack_require__(1505));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// claude ai did most of this
1669
+ function getSteps(bgioState,moveRule){return argNamesMap[moveRule.moveType].filter(argName=>moveRule.arguments[argName].playerChoice).map(argName=>({argName,getClickable:argName==='state'?()=>moveRule.arguments[argName].possibleValues.map(value=>_objectSpread2(_objectSpread2({abstract:true},moveRule.arguments[argName]),{},{value})):context=>bgioState.G.bank.findAll(bgioState,moveRule.arguments[argName],context)}));}module.exports=exports.default;/***/},/***/6648(module,exports){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=get;function get(obj,pathArray){let current=obj;for(const step of pathArray){if(current===undefined){return current;}if(step?.flatten){if(!Array.isArray(current)){return undefined;}current=current.flat();if(step.map){current=current.map(item=>get(item,step.map));}}else {current=current[step];}}return current;}module.exports=exports.default;/***/},/***/1138(module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=gridContainsSequence;_interopRequireDefault(__webpack_require__(1505));var _checkConditions=_interopRequireDefault(__webpack_require__(7611));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}// claude ai did most of this
1689
1670
  // We'll check reverse directions along each line
1690
1671
  const directions=[[1,0],// horizontal
1691
1672
  [0,1],// vertical
@@ -1938,7 +1919,7 @@ Hash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototyp
1938
1919
  * @constructor
1939
1920
  * @param {Array} [entries] The key-value pairs to cache.
1940
1921
  */function ListCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}// Add methods to `ListCache`.
1941
- ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;module.exports=ListCache;/***/},/***/604(module,__unused_webpack_exports,__webpack_require__){var getNative=__webpack_require__(6110),root=__webpack_require__(9325);/* Built-in method references that are verified to be native. */var Map=getNative(root,'Map');module.exports=Map;/***/},/***/3661(module,__unused_webpack_exports,__webpack_require__){var mapCacheClear=__webpack_require__(3040),mapCacheDelete=__webpack_require__(7670),mapCacheGet=__webpack_require__(289),mapCacheHas=__webpack_require__(4509),mapCacheSet=__webpack_require__(2949);/**
1922
+ ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;module.exports=ListCache;/***/},/***/8223(module,__unused_webpack_exports,__webpack_require__){var getNative=__webpack_require__(6110),root=__webpack_require__(9325);/* Built-in method references that are verified to be native. */var Map=getNative(root,'Map');module.exports=Map;/***/},/***/3661(module,__unused_webpack_exports,__webpack_require__){var mapCacheClear=__webpack_require__(3040),mapCacheDelete=__webpack_require__(7670),mapCacheGet=__webpack_require__(289),mapCacheHas=__webpack_require__(4509),mapCacheSet=__webpack_require__(2949);/**
1942
1923
  * Creates a map cache object to store key-value pairs.
1943
1924
  *
1944
1925
  * @private
@@ -2565,7 +2546,7 @@ if(objCtor!=othCtor&&'constructor'in object&&'constructor'in other&&!(typeof obj
2565
2546
  * @private
2566
2547
  * @param {Object} object The object to query.
2567
2548
  * @returns {Array} Returns the array of symbols.
2568
- */var getSymbolsIn=!nativeGetSymbols?stubArray:function(object){var result=[];while(object){arrayPush(result,getSymbols(object));object=getPrototype(object);}return result;};module.exports=getSymbolsIn;/***/},/***/5861(module,__unused_webpack_exports,__webpack_require__){var DataView=__webpack_require__(5580),Map=__webpack_require__(604),Promise=__webpack_require__(2804),Set=__webpack_require__(6545),WeakMap=__webpack_require__(8303),baseGetTag=__webpack_require__(2552),toSource=__webpack_require__(7473);/** `Object#toString` result references. */var mapTag='[object Map]',objectTag='[object Object]',promiseTag='[object Promise]',setTag='[object Set]',weakMapTag='[object WeakMap]';var dataViewTag='[object DataView]';/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/**
2549
+ */var getSymbolsIn=!nativeGetSymbols?stubArray:function(object){var result=[];while(object){arrayPush(result,getSymbols(object));object=getPrototype(object);}return result;};module.exports=getSymbolsIn;/***/},/***/5861(module,__unused_webpack_exports,__webpack_require__){var DataView=__webpack_require__(5580),Map=__webpack_require__(8223),Promise=__webpack_require__(2804),Set=__webpack_require__(6545),WeakMap=__webpack_require__(8303),baseGetTag=__webpack_require__(2552),toSource=__webpack_require__(7473);/** `Object#toString` result references. */var mapTag='[object Map]',objectTag='[object Object]',promiseTag='[object Promise]',setTag='[object Set]',weakMapTag='[object WeakMap]';var dataViewTag='[object DataView]';/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/**
2569
2550
  * Gets the `toStringTag` of `value`.
2570
2551
  *
2571
2552
  * @private
@@ -2744,7 +2725,7 @@ if(length&&typeof array[0]=='string'&&hasOwnProperty.call(array,'index')){result
2744
2725
  * @param {string} key The key of the value to set.
2745
2726
  * @param {*} value The value to set.
2746
2727
  * @returns {Object} Returns the list cache instance.
2747
- */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else {data[index][1]=value;}return this;}module.exports=listCacheSet;/***/},/***/3040(module,__unused_webpack_exports,__webpack_require__){var Hash=__webpack_require__(1549),ListCache=__webpack_require__(79),Map=__webpack_require__(604);/**
2728
+ */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else {data[index][1]=value;}return this;}module.exports=listCacheSet;/***/},/***/3040(module,__unused_webpack_exports,__webpack_require__){var Hash=__webpack_require__(1549),ListCache=__webpack_require__(79),Map=__webpack_require__(8223);/**
2748
2729
  * Removes all key-value entries from the map.
2749
2730
  *
2750
2731
  * @private
@@ -2907,7 +2888,7 @@ return freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}
2907
2888
  * @memberOf Stack
2908
2889
  * @param {string} key The key of the entry to check.
2909
2890
  * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
2910
- */function stackHas(key){return this.__data__.has(key);}module.exports=stackHas;/***/},/***/945(module,__unused_webpack_exports,__webpack_require__){var ListCache=__webpack_require__(79),Map=__webpack_require__(604),MapCache=__webpack_require__(3661);/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/**
2891
+ */function stackHas(key){return this.__data__.has(key);}module.exports=stackHas;/***/},/***/945(module,__unused_webpack_exports,__webpack_require__){var ListCache=__webpack_require__(79),Map=__webpack_require__(8223),MapCache=__webpack_require__(3661);/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/**
2911
2892
  * Sets the stack `key` to `value`.
2912
2893
  *
2913
2894
  * @private
@@ -4343,7 +4324,7 @@ let value=false;try{value=typeof XMLHttpRequest!=='undefined'&&'withCredentials'
4343
4324
  *
4344
4325
  * @author Steven Levithan <stevenlevithan.com> (MIT license)
4345
4326
  * @api private
4346
- */const re=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;const parts=['source','protocol','authority','userInfo','user','password','host','port','relative','path','directory','file','query','anchor'];function parse(str){if(str.length>8000){throw "URI too long";}const src=str,b=str.indexOf('['),e=str.indexOf(']');if(b!=-1&&e!=-1){str=str.substring(0,b)+str.substring(b,e).replace(/:/g,';')+str.substring(e,str.length);}let m=re.exec(str||''),uri={},i=14;while(i--){uri[parts[i]]=m[i]||'';}if(b!=-1&&e!=-1){uri.source=src;uri.host=uri.host.substring(1,uri.host.length-1).replace(/;/g,':');uri.authority=uri.authority.replace('[','').replace(']','').replace(/;/g,':');uri.ipv6uri=true;}uri.pathNames=pathNames(uri,uri['path']);uri.queryKey=queryKey(uri,uri['query']);return uri;}function pathNames(obj,path){const regx=/\/{2,9}/g,names=path.replace(regx,"/").split("/");if(path.slice(0,1)=='/'||path.length===0){names.splice(0,1);}if(path.slice(-1)=='/'){names.splice(names.length-1,1);}return names;}function queryKey(uri,query){const data={};query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function($0,$1,$2){if($1){data[$1]=$2;}});return data;}/***/},/***/4624(__unused_webpack_module,exports){Object.defineProperty(exports,"__esModule",{value:true});exports.defaultBinaryType=exports.globalThisShim=exports.nextTick=void 0;exports.createCookieJar=createCookieJar;exports.nextTick=(()=>{const isPromiseAvailable=typeof Promise==="function"&&typeof Promise.resolve==="function";if(isPromiseAvailable){return cb=>Promise.resolve().then(cb);}else {return (cb,setTimeoutFn)=>setTimeoutFn(cb,0);}})();exports.globalThisShim=(()=>{if(typeof self!=="undefined"){return self;}else if(typeof window!=="undefined"){return window;}else {return Function("return this")();}})();exports.defaultBinaryType="arraybuffer";function createCookieJar(){}/***/},/***/4956(__unused_webpack_module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports.WebTransport=exports.WebSocket=exports.NodeWebSocket=exports.XHR=exports.NodeXHR=exports.Fetch=exports.nextTick=exports.parse=exports.installTimerFunctions=exports.transports=exports.TransportError=exports.Transport=exports.protocol=exports.SocketWithUpgrade=exports.SocketWithoutUpgrade=exports.Socket=void 0;const socket_js_1=__webpack_require__(8223);Object.defineProperty(exports,"Socket",{enumerable:true,get:function(){return socket_js_1.Socket;}});var socket_js_2=__webpack_require__(8223);Object.defineProperty(exports,"SocketWithoutUpgrade",{enumerable:true,get:function(){return socket_js_2.SocketWithoutUpgrade;}});Object.defineProperty(exports,"SocketWithUpgrade",{enumerable:true,get:function(){return socket_js_2.SocketWithUpgrade;}});exports.protocol=socket_js_1.Socket.protocol;var transport_js_1=__webpack_require__(4689);Object.defineProperty(exports,"Transport",{enumerable:true,get:function(){return transport_js_1.Transport;}});Object.defineProperty(exports,"TransportError",{enumerable:true,get:function(){return transport_js_1.TransportError;}});var index_js_1=__webpack_require__(9419);Object.defineProperty(exports,"transports",{enumerable:true,get:function(){return index_js_1.transports;}});var util_js_1=__webpack_require__(5374);Object.defineProperty(exports,"installTimerFunctions",{enumerable:true,get:function(){return util_js_1.installTimerFunctions;}});var parseuri_js_1=__webpack_require__(1015);Object.defineProperty(exports,"parse",{enumerable:true,get:function(){return parseuri_js_1.parse;}});var globals_node_js_1=__webpack_require__(4624);Object.defineProperty(exports,"nextTick",{enumerable:true,get:function(){return globals_node_js_1.nextTick;}});var polling_fetch_js_1=__webpack_require__(8209);Object.defineProperty(exports,"Fetch",{enumerable:true,get:function(){return polling_fetch_js_1.Fetch;}});var polling_xhr_node_js_1=__webpack_require__(2071);Object.defineProperty(exports,"NodeXHR",{enumerable:true,get:function(){return polling_xhr_node_js_1.XHR;}});var polling_xhr_js_1=__webpack_require__(2071);Object.defineProperty(exports,"XHR",{enumerable:true,get:function(){return polling_xhr_js_1.XHR;}});var websocket_node_js_1=__webpack_require__(8716);Object.defineProperty(exports,"NodeWebSocket",{enumerable:true,get:function(){return websocket_node_js_1.WS;}});var websocket_js_1=__webpack_require__(8716);Object.defineProperty(exports,"WebSocket",{enumerable:true,get:function(){return websocket_js_1.WS;}});var webtransport_js_1=__webpack_require__(4480);Object.defineProperty(exports,"WebTransport",{enumerable:true,get:function(){return webtransport_js_1.WT;}});/***/},/***/8223(__unused_webpack_module,exports,__webpack_require__){var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{"default":mod};};Object.defineProperty(exports,"__esModule",{value:true});exports.Socket=exports.SocketWithUpgrade=exports.SocketWithoutUpgrade=void 0;const index_js_1=__webpack_require__(9419);const util_js_1=__webpack_require__(5374);const parseqs_js_1=__webpack_require__(8661);const parseuri_js_1=__webpack_require__(1015);const component_emitter_1=__webpack_require__(4454);const engine_io_parser_1=__webpack_require__(6376);const globals_node_js_1=__webpack_require__(4624);const debug_1=__importDefault(__webpack_require__(7833));// debug()
4327
+ */const re=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;const parts=['source','protocol','authority','userInfo','user','password','host','port','relative','path','directory','file','query','anchor'];function parse(str){if(str.length>8000){throw "URI too long";}const src=str,b=str.indexOf('['),e=str.indexOf(']');if(b!=-1&&e!=-1){str=str.substring(0,b)+str.substring(b,e).replace(/:/g,';')+str.substring(e,str.length);}let m=re.exec(str||''),uri={},i=14;while(i--){uri[parts[i]]=m[i]||'';}if(b!=-1&&e!=-1){uri.source=src;uri.host=uri.host.substring(1,uri.host.length-1).replace(/;/g,':');uri.authority=uri.authority.replace('[','').replace(']','').replace(/;/g,':');uri.ipv6uri=true;}uri.pathNames=pathNames(uri,uri['path']);uri.queryKey=queryKey(uri,uri['query']);return uri;}function pathNames(obj,path){const regx=/\/{2,9}/g,names=path.replace(regx,"/").split("/");if(path.slice(0,1)=='/'||path.length===0){names.splice(0,1);}if(path.slice(-1)=='/'){names.splice(names.length-1,1);}return names;}function queryKey(uri,query){const data={};query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function($0,$1,$2){if($1){data[$1]=$2;}});return data;}/***/},/***/4624(__unused_webpack_module,exports){Object.defineProperty(exports,"__esModule",{value:true});exports.defaultBinaryType=exports.globalThisShim=exports.nextTick=void 0;exports.createCookieJar=createCookieJar;exports.nextTick=(()=>{const isPromiseAvailable=typeof Promise==="function"&&typeof Promise.resolve==="function";if(isPromiseAvailable){return cb=>Promise.resolve().then(cb);}else {return (cb,setTimeoutFn)=>setTimeoutFn(cb,0);}})();exports.globalThisShim=(()=>{if(typeof self!=="undefined"){return self;}else if(typeof window!=="undefined"){return window;}else {return Function("return this")();}})();exports.defaultBinaryType="arraybuffer";function createCookieJar(){}/***/},/***/4956(__unused_webpack_module,exports,__webpack_require__){Object.defineProperty(exports,"__esModule",{value:true});exports.WebTransport=exports.WebSocket=exports.NodeWebSocket=exports.XHR=exports.NodeXHR=exports.Fetch=exports.nextTick=exports.parse=exports.installTimerFunctions=exports.transports=exports.TransportError=exports.Transport=exports.protocol=exports.SocketWithUpgrade=exports.SocketWithoutUpgrade=exports.Socket=void 0;const socket_js_1=__webpack_require__(604);Object.defineProperty(exports,"Socket",{enumerable:true,get:function(){return socket_js_1.Socket;}});var socket_js_2=__webpack_require__(604);Object.defineProperty(exports,"SocketWithoutUpgrade",{enumerable:true,get:function(){return socket_js_2.SocketWithoutUpgrade;}});Object.defineProperty(exports,"SocketWithUpgrade",{enumerable:true,get:function(){return socket_js_2.SocketWithUpgrade;}});exports.protocol=socket_js_1.Socket.protocol;var transport_js_1=__webpack_require__(4689);Object.defineProperty(exports,"Transport",{enumerable:true,get:function(){return transport_js_1.Transport;}});Object.defineProperty(exports,"TransportError",{enumerable:true,get:function(){return transport_js_1.TransportError;}});var index_js_1=__webpack_require__(9419);Object.defineProperty(exports,"transports",{enumerable:true,get:function(){return index_js_1.transports;}});var util_js_1=__webpack_require__(5374);Object.defineProperty(exports,"installTimerFunctions",{enumerable:true,get:function(){return util_js_1.installTimerFunctions;}});var parseuri_js_1=__webpack_require__(1015);Object.defineProperty(exports,"parse",{enumerable:true,get:function(){return parseuri_js_1.parse;}});var globals_node_js_1=__webpack_require__(4624);Object.defineProperty(exports,"nextTick",{enumerable:true,get:function(){return globals_node_js_1.nextTick;}});var polling_fetch_js_1=__webpack_require__(8209);Object.defineProperty(exports,"Fetch",{enumerable:true,get:function(){return polling_fetch_js_1.Fetch;}});var polling_xhr_node_js_1=__webpack_require__(2071);Object.defineProperty(exports,"NodeXHR",{enumerable:true,get:function(){return polling_xhr_node_js_1.XHR;}});var polling_xhr_js_1=__webpack_require__(2071);Object.defineProperty(exports,"XHR",{enumerable:true,get:function(){return polling_xhr_js_1.XHR;}});var websocket_node_js_1=__webpack_require__(8716);Object.defineProperty(exports,"NodeWebSocket",{enumerable:true,get:function(){return websocket_node_js_1.WS;}});var websocket_js_1=__webpack_require__(8716);Object.defineProperty(exports,"WebSocket",{enumerable:true,get:function(){return websocket_js_1.WS;}});var webtransport_js_1=__webpack_require__(4480);Object.defineProperty(exports,"WebTransport",{enumerable:true,get:function(){return webtransport_js_1.WT;}});/***/},/***/604(__unused_webpack_module,exports,__webpack_require__){var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{"default":mod};};Object.defineProperty(exports,"__esModule",{value:true});exports.Socket=exports.SocketWithUpgrade=exports.SocketWithoutUpgrade=void 0;const index_js_1=__webpack_require__(9419);const util_js_1=__webpack_require__(5374);const parseqs_js_1=__webpack_require__(8661);const parseuri_js_1=__webpack_require__(1015);const component_emitter_1=__webpack_require__(4454);const engine_io_parser_1=__webpack_require__(6376);const globals_node_js_1=__webpack_require__(4624);const debug_1=__importDefault(__webpack_require__(7833));// debug()
4347
4328
  const debug=(0, debug_1.default)("engine.io-client:socket");// debug()
4348
4329
  const withEventListeners=typeof addEventListener==="function"&&typeof removeEventListener==="function";const OFFLINE_EVENT_LISTENERS=[];if(withEventListeners){// within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the
4349
4330
  // script, so we create one single event listener here which will forward the event to the socket instances
@@ -5566,15 +5547,9 @@ var index={Parser:Parser,Expression:Expression};/* harmony default export */cons
5566
5547
  /******/return module.exports;/******/}/******//************************************************************************//******//* webpack/runtime/define property getters *//******/(()=>{/******/// define getter functions for harmony exports
5567
5548
  /******/__webpack_require__.d=(exports,definition)=>{/******/for(var key in definition){/******/if(__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)){/******/Object.defineProperty(exports,key,{enumerable:true,get:definition[key]});/******/}/******/}/******/};/******/})();/******//******//* webpack/runtime/global *//******/(()=>{/******/__webpack_require__.g=function(){/******/if(typeof globalThis==='object')return globalThis;/******/try{/******/return this||new Function('return this')();/******/}catch(e){/******/if(typeof window==='object')return window;/******/}/******/}();/******/})();/******//******//* webpack/runtime/hasOwnProperty shorthand *//******/(()=>{/******/__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop);/******/})();/******//******//* webpack/runtime/make namespace object *//******/(()=>{/******/// define __esModule on exports
5568
5549
  /******/__webpack_require__.r=exports=>{/******/if(typeof Symbol!=='undefined'&&Symbol.toStringTag){/******/Object.defineProperty(exports,Symbol.toStringTag,{value:'Module'});/******/}/******/Object.defineProperty(exports,'__esModule',{value:true});/******/};/******/})();/******//******//* webpack/runtime/node module decorator *//******/(()=>{/******/__webpack_require__.nmd=module=>{/******/module.paths=[];/******/if(!module.children)module.children=[];/******/return module;/******/};/******/})();/******//************************************************************************/var __webpack_exports__={};// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
5569
- (()=>{var exports=__webpack_exports__;Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Client",{enumerable:true,get:function(){return _client.Client;}});Object.defineProperty(exports,"gameFactory",{enumerable:true,get:function(){return _gameFactory.default;}});var _client=__webpack_require__(4245);var _gameFactory=_interopRequireDefault(__webpack_require__(4913));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}})();/******/return __webpack_exports__;/******/})();});})(boardGameEngine$2,boardGameEngine$2.exports);return boardGameEngine$2.exports;}
5550
+ (()=>{var exports=__webpack_exports__;Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Client",{enumerable:true,get:function(){return _client.Client;}});Object.defineProperty(exports,"gameFactory",{enumerable:true,get:function(){return _gameFactory.default;}});var _gameFactory=_interopRequireDefault(__webpack_require__(4913));var _client=__webpack_require__(4245);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}})();/******/return __webpack_exports__;/******/})();});})(boardGameEngine$1,boardGameEngine$1.exports);return boardGameEngine$1.exports;}
5570
5551
 
5571
5552
  var boardGameEngineExports = requireBoardGameEngine();
5572
- var boardGameEngine = /*@__PURE__*/getDefaultExportFromCjs(boardGameEngineExports);
5573
-
5574
- var BoardGameEngine = /*#__PURE__*/_mergeNamespaces({
5575
- __proto__: null,
5576
- 'default': boardGameEngine
5577
- }, [boardGameEngineExports]);
5578
5553
 
5579
5554
  const GameContext = /*#__PURE__*/createContext({
5580
5555
  clickTarget: () => {}
@@ -5810,7 +5785,6 @@ function Game({
5810
5785
  }))) : loading;
5811
5786
  }
5812
5787
 
5813
- console.log('BoardGameEngine', BoardGameEngine);
5814
5788
  const Client$1 = boardGameEngineExports.Client;
5815
5789
  const useGameserverConnection = ({
5816
5790
  server,
@@ -1 +1 @@
1
- :root{--dark-orange: #F58F29;--dark-amethyst: #380036;--lipstick-red: #EC0B43}html,body,#storybook-root,.story{height:100%}.button{border:3px solid var(--dark-amethyst);display:inline-block;padding:.5em;font-size:1.5em;font-family:inherit;text-decoration:none;cursor:pointer;border-radius:.3em;box-shadow:0 4px 6px rgba(0,0,0,0.15);margin:.5em}.button--style-b{background-color:var(--dark-amethyst);color:white}.button--style-c{background-color:var(--lipstick-red);color:white}.button--x-small{font-size:.9em;padding:.3em .5em;border-radius:.2em}.game{color:black}.shared-board,.personal-board{padding:1em 0;border-bottom:1px solid white}.grid{border:1px solid black;box-sizing:border-box;background-color:#333;max-width:500px}.grid__cell{border:1px solid black;background-color:#fff;aspect-ratio:1;display:flex;align-items:center;justify-content:center;color:#666;position:relative;overflow:auto}.grid__cell .space{height:100%;width:100%}.space{box-sizing:border-box;min-width:10px;min-height:10px}.space:not(:has(.entity)):not(.grid__cell>:only-child){border:1px solid grey}.space--clickable{background-color:rgba(144,238,144,0.4)}.space--targeted{background-color:grey}.space__entity-grid{box-sizing:border-box;align-items:center;justify-content:center}.space__entity-grid__cell{box-sizing:border-box;overflow:auto}.entity{padding:.2em;min-height:20px;min-width:20px;box-sizing:border-box;border:1px solid black;overflow:hidden;font-size:.5em;font-family:"Nunito", sans-serif;font-weight:bold;display:inline-block}.entity.player-0{background-color:pink}.entity--clickable{background-color:rgba(144,238,144,0.4)}.entity.player-0.entity--clickable{background-color:#f0e0d8}.entity.player-1{background-color:lightblue}.entity.player-1.entity--clickable{background-color:paleturquoise}.debug-panel .pane{max-width:420px !important}.game-status{text-align:center;position:absolute;top:50%;left:0;transform:translateY(-50%);width:100%;border-top:1em;border-bottom:1em;padding:1em;background-color:var(--dark-orange);color:black;box-sizing:border-box;font-size:3em}.debug-panel .visibility-toggle{top:70px !important}.debug-panel .visibility-toggle svg{display:none}.debug-panel .visibility-toggle .icon::after{position:relative;left:3px;content:"⚙️";font-size:20px;display:block;width:20px;height:20px}.debug-panel .menu{position:relative;top:70px !important}
1
+ :root{--dark-orange: #F58F29;--dark-amethyst: #380036;--lipstick-red: #EC0B43}html,body,#storybook-root,.story{height:100%}.button{border:3px solid var(--dark-amethyst);display:inline-block;padding:.5em;font-size:1.5em;font-family:inherit;text-decoration:none;cursor:pointer;border-radius:.3em;box-shadow:0 4px 6px rgba(0,0,0,0.15);margin:.5em}.button--style-b{background-color:var(--dark-amethyst);color:white}.button--style-c{background-color:var(--lipstick-red);color:white}.button--x-small{font-size:.9em;padding:.3em .5em;border-radius:.2em}.game{color:black}.shared-board,.personal-board{padding:1em 0}.grid{border:1px solid black;box-sizing:border-box;background-color:#333;max-width:500px}.grid__cell{border:1px solid black;background-color:#fff;aspect-ratio:1;display:flex;align-items:center;justify-content:center;color:#666;position:relative;overflow:auto}.grid__cell .space{height:100%;width:100%}.space{box-sizing:border-box;min-width:10px;min-height:10px}.space:not(:has(.entity)):not(.grid__cell>:only-child){border:1px solid grey}.space--clickable{background-color:rgba(144,238,144,0.4)}.space--targeted{background-color:grey}.space__entity-grid{box-sizing:border-box;align-items:center;justify-content:center}.space__entity-grid__cell{box-sizing:border-box;overflow:auto}.entity{padding:.2em;min-height:20px;min-width:20px;box-sizing:border-box;border:1px solid black;overflow:hidden;font-size:.5em;font-family:"Nunito", sans-serif;font-weight:bold;display:inline-block}.entity.player-0{background-color:pink}.entity--clickable{background-color:rgba(144,238,144,0.4)}.entity.player-0.entity--clickable{background-color:#f0e0d8}.entity.player-1{background-color:lightblue}.entity.player-1.entity--clickable{background-color:paleturquoise}.debug-panel .pane{max-width:420px !important}.game-status{text-align:center;position:absolute;top:50%;left:0;transform:translateY(-50%);width:100%;border-top:1em;border-bottom:1em;padding:1em;background-color:var(--dark-orange);color:black;box-sizing:border-box;font-size:3em}.debug-panel .visibility-toggle{top:70px !important}.debug-panel .visibility-toggle svg{display:none}.debug-panel .visibility-toggle .icon::after{position:relative;left:3px;content:"⚙️";font-size:20px;display:block;width:20px;height:20px}.debug-panel .menu{position:relative;top:70px !important}