summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjbion <joffrey.bion@amadeus.com>2017-01-20 16:11:24 +0100
committerjbion <joffrey.bion@amadeus.com>2017-01-20 16:11:35 +0100
commitb32cdf5c4f5d0b4f31b3bcfa64fe9328ed78d818 (patch)
treebdda009d448cb6b56415d90eae90eceb138318e4 /src
parentMerge remote-tracking branch 'origin/feature/front' (diff)
downloadseven-wonders-b32cdf5c4f5d0b4f31b3bcfa64fe9328ed78d818.tar.gz
seven-wonders-b32cdf5c4f5d0b4f31b3bcfa64fe9328ed78d818.tar.bz2
seven-wonders-b32cdf5c4f5d0b4f31b3bcfa64fe9328ed78d818.zip
Move frontend and backend into 2 separate subprojects
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/luxons/sevenwonders/SevenWonders.java12
-rw-r--r--src/main/java/org/luxons/sevenwonders/actions/ChooseNameAction.java19
-rw-r--r--src/main/java/org/luxons/sevenwonders/actions/CreateGameAction.java19
-rw-r--r--src/main/java/org/luxons/sevenwonders/actions/JoinGameAction.java17
-rw-r--r--src/main/java/org/luxons/sevenwonders/actions/PrepareCardAction.java16
-rw-r--r--src/main/java/org/luxons/sevenwonders/actions/ReorderPlayersAction.java18
-rw-r--r--src/main/java/org/luxons/sevenwonders/actions/UpdateSettingsAction.java19
-rw-r--r--src/main/java/org/luxons/sevenwonders/config/AnonymousUsersHandshakeHandler.java24
-rw-r--r--src/main/java/org/luxons/sevenwonders/config/TopicSubscriptionInterceptor.java38
-rw-r--r--src/main/java/org/luxons/sevenwonders/config/WebSocketConfig.java51
-rw-r--r--src/main/java/org/luxons/sevenwonders/controllers/GameController.java63
-rw-r--r--src/main/java/org/luxons/sevenwonders/controllers/LobbyController.java170
-rw-r--r--src/main/java/org/luxons/sevenwonders/errors/ApiMisuseException.java8
-rw-r--r--src/main/java/org/luxons/sevenwonders/errors/ErrorType.java5
-rw-r--r--src/main/java/org/luxons/sevenwonders/errors/ExceptionHandler.java81
-rw-r--r--src/main/java/org/luxons/sevenwonders/errors/UIError.java54
-rw-r--r--src/main/java/org/luxons/sevenwonders/errors/UIErrorDetail.java37
-rw-r--r--src/main/java/org/luxons/sevenwonders/errors/UserInputException.java21
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/Game.java235
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/Lobby.java138
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/Player.java59
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/Settings.java84
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/State.java6
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/api/Action.java20
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java95
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/api/HandCard.java44
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java45
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java76
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/api/PreparedCard.java24
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/api/Table.java84
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/boards/Board.java173
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java28
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/boards/Military.java54
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java28
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/boards/Science.java65
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java5
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/cards/Card.java116
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java14
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/cards/Color.java5
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/cards/Decks.java65
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java20
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/cards/Hands.java64
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java88
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java68
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java84
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java38
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java76
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java24
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java66
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java27
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java5
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java30
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java36
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java21
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java48
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java84
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java30
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java38
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java41
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java64
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java86
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/Discount.java44
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/Effect.java15
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java11
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java40
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java20
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java40
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java41
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java40
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java22
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java46
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java26
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java38
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java20
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java49
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java27
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/moves/Move.java50
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java39
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java35
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java39
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java24
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/resources/Production.java103
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/resources/Provider.java18
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java39
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/resources/Resources.java65
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java40
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java33
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java24
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java5
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java102
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java50
-rw-r--r--src/main/java/org/luxons/sevenwonders/repositories/GameRepository.java49
-rw-r--r--src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java59
-rw-r--r--src/main/java/org/luxons/sevenwonders/repositories/PlayerRepository.java60
-rw-r--r--src/main/java/org/luxons/sevenwonders/validation/DestinationAccessValidator.java76
-rw-r--r--src/main/js/.editorconfig9
-rw-r--r--src/main/js/.gitignore15
-rw-r--r--src/main/js/README.md1244
-rw-r--r--src/main/js/package.json33
-rw-r--r--src/main/js/public/favicon.icobin24838 -> 0 bytes
-rw-r--r--src/main/js/public/index.html31
-rw-r--r--src/main/js/src/components/errors/Error404.js8
-rw-r--r--src/main/js/src/components/modals/username.js40
-rw-r--r--src/main/js/src/containers/App/actions.js5
-rw-r--r--src/main/js/src/containers/App/constants.js1
-rw-r--r--src/main/js/src/containers/App/index.js83
-rw-r--r--src/main/js/src/containers/App/saga.js28
-rw-r--r--src/main/js/src/containers/GameBrowser/actions.js16
-rw-r--r--src/main/js/src/containers/GameBrowser/constants.js3
-rw-r--r--src/main/js/src/containers/GameBrowser/index.js31
-rw-r--r--src/main/js/src/containers/GameBrowser/reducer.js13
-rw-r--r--src/main/js/src/containers/GameBrowser/saga.js75
-rw-r--r--src/main/js/src/containers/HomePage/actions.js6
-rw-r--r--src/main/js/src/containers/HomePage/index.js39
-rw-r--r--src/main/js/src/containers/HomePage/saga.js57
-rw-r--r--src/main/js/src/containers/UserRepo/actions.js8
-rw-r--r--src/main/js/src/containers/UserRepo/reducer.js18
-rw-r--r--src/main/js/src/global-styles.css10
-rw-r--r--src/main/js/src/index.js26
-rw-r--r--src/main/js/src/layouts/.gitkeep0
-rw-r--r--src/main/js/src/reducers.js13
-rw-r--r--src/main/js/src/sagas.js25
-rw-r--r--src/main/js/src/store.js40
-rw-r--r--src/main/js/src/utils/createWebSocketConnection.js14
-rw-r--r--src/main/js/yarn.lock5418
-rw-r--r--src/main/resources/org/luxons/sevenwonders/game/data/cards.json1719
-rw-r--r--src/main/resources/org/luxons/sevenwonders/game/data/wonders.json515
-rw-r--r--src/main/resources/static/app.js90
-rw-r--r--src/main/resources/static/images/background.jpgbin100272 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/academy.pngbin87620 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/age1.pngbin67850 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/age2.pngbin68501 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/age3.pngbin63391 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/altar.pngbin80843 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/apothecary.pngbin88905 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/aqueduct.pngbin90765 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/archeryrange.pngbin86327 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/arena.pngbin84837 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/arsenal.pngbin88257 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/barracks.pngbin83840 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/baths.pngbin84236 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/bazar.pngbin80862 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/brickyard.pngbin79194 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/buildersguild.pngbin86054 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/caravansery.pngbin85841 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/chamberofcommerce.pngbin89136 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/circus.pngbin95879 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/claypit.pngbin78992 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/claypool.pngbin76294 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/courthouse.pngbin82399 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/craftsmensguild.pngbin90528 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/dispensary.pngbin86175 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/easttradingpost.pngbin88611 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/excavation.pngbin82667 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/forestcave.pngbin75845 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/fortifications.pngbin85633 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/forum.pngbin85713 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/foundry.pngbin78894 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/gardens.pngbin85889 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/glassworks.pngbin81916 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/guardtower.pngbin77432 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/haven.pngbin93143 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/laboratory.pngbin87869 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/library.pngbin80338 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/lighthouse.pngbin79746 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/lodge.pngbin76021 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/loom.pngbin85480 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/lumberyard.pngbin83067 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/magistratesguild.pngbin88073 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/marketplace.pngbin89816 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/mine.pngbin83500 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/observatory.pngbin81745 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/orevein.pngbin82176 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/palace.pngbin85097 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/pantheon.pngbin83290 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/pawnshop.pngbin83440 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/philosophersguild.pngbin89645 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/press.pngbin88277 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/quarry.pngbin77177 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/sawmill.pngbin80987 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/school.pngbin80260 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/scientistsguild.pngbin86768 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/scriptorium.pngbin84987 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/senate.pngbin91055 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/shipownersguild.pngbin86836 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/siegeworkshop.pngbin89072 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/spiesguild.pngbin83823 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/stables.pngbin85649 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/statue.pngbin83639 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/stockade.pngbin70706 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/stonepit.pngbin84418 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/strategistsguild.pngbin86575 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/study.pngbin84016 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/tavern.pngbin81229 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/temple.pngbin78057 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/theater.pngbin89703 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/timberyard.pngbin82874 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/townhall.pngbin84439 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/tradersguild.pngbin88057 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/trainingground.pngbin84102 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/treefarm.pngbin88252 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/university.pngbin74203 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/vineyard.pngbin81329 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/walls.pngbin83027 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/westtradingpost.pngbin90680 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/workersguild.pngbin84595 -> 0 bytes
-rw-r--r--src/main/resources/static/images/cards/workshop.pngbin82116 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/buy.pngbin5534 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/card.pngbin4367 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/check.pngbin3655 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/clay.pngbin19566 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/coin.pngbin4515 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/coin1.pngbin6284 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/coin3.pngbin8770 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/free.pngbin5062 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/glass.pngbin20961 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/linen.pngbin21053 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/no.pngbin5883 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/ore.pngbin21524 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/paper.pngbin22695 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/pyramid-stage0.pngbin3286 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/pyramid-stage1.pngbin4114 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/pyramid-stage2.pngbin4285 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/pyramid-stage3.pngbin20663 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/pyramid.pngbin3886 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/stone.pngbin21516 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/trash.pngbin5146 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/victory1.pngbin3676 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/victory3.pngbin4786 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/victory5.pngbin7657 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/victoryminus1.pngbin5925 -> 0 bytes
-rw-r--r--src/main/resources/static/images/tokens/wood.pngbin21642 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/alexandriaA.pngbin334731 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/alexandriaB.pngbin336572 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/babylonA.pngbin372621 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/babylonB.pngbin372561 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/ephesosA.pngbin352173 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/ephesosB.pngbin352272 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/agrigentoA.jpgbin705403 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/angkorwatA.jpgbin930685 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/angkorwatB.jpgbin987688 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/avalonA.jpgbin658280 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/ctesiphonB.jpgbin692738 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/iramA.jpgbin734054 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/persepolisA.jpgbin1057711 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/romaA.jpgbin200076 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/sangri-laA.jpgbin682795 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/spahanA.jpgbin774749 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/the-great-wallA.jpgbin72721 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/veniseA.jpgbin945317 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/extra/veniseB.jpgbin941879 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/gizahA.pngbin316028 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/gizahB.pngbin322626 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/halikarnassusA.pngbin311219 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/halikarnassusB.pngbin319909 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/olympiaA.pngbin338194 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/olympiaB.pngbin338448 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/rhodosA.pngbin450747 -> 0 bytes
-rw-r--r--src/main/resources/static/images/wonders/rhodosB.pngbin398666 -> 0 bytes
-rw-r--r--src/main/resources/static/index.html64
-rw-r--r--src/main/resources/static/test-ws.js40
-rw-r--r--src/main/resources/static/test.html55
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/LobbyTest.java170
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/api/TableTest.java49
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java107
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java72
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java44
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java113
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java15
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java106
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java110
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java15
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java141
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java16
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java25
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java96
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java128
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java203
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java50
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java100
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java107
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java145
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java139
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java72
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java78
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java79
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java85
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java61
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java38
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java94
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java271
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java431
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java96
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java191
-rw-r--r--src/test/java/org/luxons/sevenwonders/repositories/GameRepositoryTest.java61
-rw-r--r--src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java77
-rw-r--r--src/test/java/org/luxons/sevenwonders/repositories/PlayerRepositoryTest.java73
-rw-r--r--src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java147
298 files changed, 0 insertions, 18159 deletions
diff --git a/src/main/java/org/luxons/sevenwonders/SevenWonders.java b/src/main/java/org/luxons/sevenwonders/SevenWonders.java
deleted file mode 100644
index 2c20c5d3..00000000
--- a/src/main/java/org/luxons/sevenwonders/SevenWonders.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.luxons.sevenwonders;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class SevenWonders {
-
- public static void main(String[] args) {
- SpringApplication.run(SevenWonders.class, args);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/actions/ChooseNameAction.java b/src/main/java/org/luxons/sevenwonders/actions/ChooseNameAction.java
deleted file mode 100644
index 42a26f37..00000000
--- a/src/main/java/org/luxons/sevenwonders/actions/ChooseNameAction.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.luxons.sevenwonders.actions;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-public class ChooseNameAction {
-
- @NotNull
- @Size(min=2, max=20)
- private String playerName;
-
- public String getPlayerName() {
- return playerName;
- }
-
- public void setPlayerName(String playerName) {
- this.playerName = playerName;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/actions/CreateGameAction.java b/src/main/java/org/luxons/sevenwonders/actions/CreateGameAction.java
deleted file mode 100644
index ce1783c0..00000000
--- a/src/main/java/org/luxons/sevenwonders/actions/CreateGameAction.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.luxons.sevenwonders.actions;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-public class CreateGameAction {
-
- @NotNull
- @Size(min=2, max=30)
- private String gameName;
-
- public String getGameName() {
- return gameName;
- }
-
- public void setGameName(String gameName) {
- this.gameName = gameName;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/actions/JoinGameAction.java b/src/main/java/org/luxons/sevenwonders/actions/JoinGameAction.java
deleted file mode 100644
index 82bff168..00000000
--- a/src/main/java/org/luxons/sevenwonders/actions/JoinGameAction.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.luxons.sevenwonders.actions;
-
-import javax.validation.constraints.NotNull;
-
-public class JoinGameAction {
-
- @NotNull
- private Long gameId;
-
- public Long getGameId() {
- return gameId;
- }
-
- public void setGameId(Long gameId) {
- this.gameId = gameId;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/actions/PrepareCardAction.java b/src/main/java/org/luxons/sevenwonders/actions/PrepareCardAction.java
deleted file mode 100644
index b333d6c1..00000000
--- a/src/main/java/org/luxons/sevenwonders/actions/PrepareCardAction.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.luxons.sevenwonders.actions;
-
-import org.luxons.sevenwonders.game.api.PlayerMove;
-
-public class PrepareCardAction {
-
- private PlayerMove move;
-
- public PlayerMove getMove() {
- return move;
- }
-
- public void setMove(PlayerMove move) {
- this.move = move;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/actions/ReorderPlayersAction.java b/src/main/java/org/luxons/sevenwonders/actions/ReorderPlayersAction.java
deleted file mode 100644
index 803a71d8..00000000
--- a/src/main/java/org/luxons/sevenwonders/actions/ReorderPlayersAction.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.luxons.sevenwonders.actions;
-
-import java.util.List;
-import javax.validation.constraints.NotNull;
-
-public class ReorderPlayersAction {
-
- @NotNull
- private List<String> orderedPlayers;
-
- public List<String> getOrderedPlayers() {
- return orderedPlayers;
- }
-
- public void setOrderedPlayers(List<String> orderedPlayers) {
- this.orderedPlayers = orderedPlayers;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/actions/UpdateSettingsAction.java b/src/main/java/org/luxons/sevenwonders/actions/UpdateSettingsAction.java
deleted file mode 100644
index 822a5a1c..00000000
--- a/src/main/java/org/luxons/sevenwonders/actions/UpdateSettingsAction.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.luxons.sevenwonders.actions;
-
-import javax.validation.constraints.NotNull;
-
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-
-public class UpdateSettingsAction {
-
- @NotNull
- private CustomizableSettings settings;
-
- public CustomizableSettings getSettings() {
- return settings;
- }
-
- public void setSettings(CustomizableSettings settings) {
- this.settings = settings;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/config/AnonymousUsersHandshakeHandler.java b/src/main/java/org/luxons/sevenwonders/config/AnonymousUsersHandshakeHandler.java
deleted file mode 100644
index bebbd477..00000000
--- a/src/main/java/org/luxons/sevenwonders/config/AnonymousUsersHandshakeHandler.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.config;
-
-import java.security.Principal;
-import java.util.Map;
-
-import org.springframework.http.server.ServerHttpRequest;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.web.socket.WebSocketHandler;
-import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
-
-class AnonymousUsersHandshakeHandler extends DefaultHandshakeHandler {
-
- private int playerId = 0;
-
- @Override
- public Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler,
- Map<String, Object> attributes) {
- Principal p = super.determineUser(request, wsHandler, attributes);
- if (p == null) {
- p = new UsernamePasswordAuthenticationToken("player" + playerId++, null);
- }
- return p;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/config/TopicSubscriptionInterceptor.java b/src/main/java/org/luxons/sevenwonders/config/TopicSubscriptionInterceptor.java
deleted file mode 100644
index f8d92068..00000000
--- a/src/main/java/org/luxons/sevenwonders/config/TopicSubscriptionInterceptor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.config;
-
-import java.security.Principal;
-
-import org.luxons.sevenwonders.validation.DestinationAccessValidator;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.messaging.Message;
-import org.springframework.messaging.MessageChannel;
-import org.springframework.messaging.simp.stomp.StompCommand;
-import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
-import org.springframework.messaging.support.ChannelInterceptorAdapter;
-import org.springframework.stereotype.Component;
-
-@Component
-public class TopicSubscriptionInterceptor extends ChannelInterceptorAdapter {
-
- private final DestinationAccessValidator destinationAccessValidator;
-
- @Autowired
- public TopicSubscriptionInterceptor(DestinationAccessValidator destinationAccessValidator) {
- this.destinationAccessValidator = destinationAccessValidator;
- }
-
- @Override
- public Message<?> preSend(Message<?> message, MessageChannel channel) {
- StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(message);
- if (StompCommand.SUBSCRIBE.equals(headerAccessor.getCommand())) {
- Principal userPrincipal = headerAccessor.getUser();
- if (!destinationAccessValidator.hasAccess(userPrincipal.getName(), headerAccessor.getDestination())) {
- throw new ForbiddenSubscriptionException();
- }
- }
- return message;
- }
-
- private static class ForbiddenSubscriptionException extends RuntimeException {
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/config/WebSocketConfig.java b/src/main/java/org/luxons/sevenwonders/config/WebSocketConfig.java
deleted file mode 100644
index d54d8da4..00000000
--- a/src/main/java/org/luxons/sevenwonders/config/WebSocketConfig.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.luxons.sevenwonders.config;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.messaging.simp.config.ChannelRegistration;
-import org.springframework.messaging.simp.config.MessageBrokerRegistry;
-import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
-import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
-import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
-import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
-
-@Configuration
-@EnableWebSocketMessageBroker
-public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
-
- private final TopicSubscriptionInterceptor topicSubscriptionInterceptor;
-
- @Autowired
- public WebSocketConfig(TopicSubscriptionInterceptor topicSubscriptionInterceptor) {
- this.topicSubscriptionInterceptor = topicSubscriptionInterceptor;
- }
-
- @Override
- public void configureMessageBroker(MessageBrokerRegistry config) {
- // prefixes for all subscriptions
- config.enableSimpleBroker("/queue", "/topic");
- config.setUserDestinationPrefix("/user");
-
- // /app for normal calls, /topic for subscription events
- config.setApplicationDestinationPrefixes("/app", "/topic");
- }
-
- @Override
- public void registerStompEndpoints(StompEndpointRegistry registry) {
- registry.addEndpoint("/seven-wonders-websocket")
- .setHandshakeHandler(handshakeHandler())
- .setAllowedOrigins("http://localhost:3000") // to allow frontend server proxy requests in dev mode
- .withSockJS();
- }
-
- @Bean
- public DefaultHandshakeHandler handshakeHandler() {
- return new AnonymousUsersHandshakeHandler();
- }
-
- @Override
- public void configureClientInboundChannel(ChannelRegistration registration) {
- registration.setInterceptors(topicSubscriptionInterceptor);
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/luxons/sevenwonders/controllers/GameController.java b/src/main/java/org/luxons/sevenwonders/controllers/GameController.java
deleted file mode 100644
index 0deac4a3..00000000
--- a/src/main/java/org/luxons/sevenwonders/controllers/GameController.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.luxons.sevenwonders.controllers;
-
-import java.security.Principal;
-import java.util.List;
-
-import org.luxons.sevenwonders.actions.PrepareCardAction;
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.api.PlayerTurnInfo;
-import org.luxons.sevenwonders.game.api.PreparedCard;
-import org.luxons.sevenwonders.repositories.GameRepository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.messaging.handler.annotation.DestinationVariable;
-import org.springframework.messaging.handler.annotation.MessageMapping;
-import org.springframework.messaging.simp.SimpMessagingTemplate;
-import org.springframework.stereotype.Controller;
-
-@Controller
-public class GameController {
-
- private static final Logger logger = LoggerFactory.getLogger(GameController.class);
-
- private final SimpMessagingTemplate template;
-
- private final GameRepository gameRepository;
-
- @Autowired
- public GameController(SimpMessagingTemplate template, GameRepository gameRepository) {
- this.template = template;
- this.gameRepository = gameRepository;
- }
-
- @MessageMapping("/game/{gameId}/prepare")
- public void prepareCard(@DestinationVariable long gameId, PrepareCardAction action, Principal principal) {
- Game game = gameRepository.find(gameId);
- PreparedCard preparedCard = game.prepareCard(principal.getName(), action.getMove());
- logger.info("Game '{}': player {} prepared move {}", gameId, principal.getName(), action.getMove());
-
- if (game.areAllPlayersReady()) {
- game.playTurn();
- sendTurnInfo(game);
- } else {
- sendPreparedCard(preparedCard, game);
- }
- }
-
- private void sendPreparedCard(PreparedCard preparedCard, Game game) {
- for (Player player : game.getPlayers()) {
- String username = player.getUsername();
- template.convertAndSendToUser(username, "/topic/game/" + game.getId() + "/prepared", preparedCard);
- }
- }
-
- private void sendTurnInfo(Game game) {
- List<PlayerTurnInfo> turnInfos = game.getTurnInfo();
- for (PlayerTurnInfo turnInfo : turnInfos) {
- String username = turnInfo.getPlayer().getUsername();
- template.convertAndSendToUser(username, "/topic/game/" + game.getId() + "/turn", turnInfo);
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/controllers/LobbyController.java b/src/main/java/org/luxons/sevenwonders/controllers/LobbyController.java
deleted file mode 100644
index 996ea361..00000000
--- a/src/main/java/org/luxons/sevenwonders/controllers/LobbyController.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.luxons.sevenwonders.controllers;
-
-import java.security.Principal;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.luxons.sevenwonders.actions.ChooseNameAction;
-import org.luxons.sevenwonders.actions.CreateGameAction;
-import org.luxons.sevenwonders.actions.JoinGameAction;
-import org.luxons.sevenwonders.actions.ReorderPlayersAction;
-import org.luxons.sevenwonders.actions.UpdateSettingsAction;
-import org.luxons.sevenwonders.errors.ApiMisuseException;
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Lobby;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.repositories.GameRepository;
-import org.luxons.sevenwonders.repositories.LobbyRepository;
-import org.luxons.sevenwonders.repositories.PlayerRepository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.messaging.handler.annotation.MessageMapping;
-import org.springframework.messaging.handler.annotation.SendTo;
-import org.springframework.messaging.simp.SimpMessagingTemplate;
-import org.springframework.messaging.simp.annotation.SendToUser;
-import org.springframework.messaging.simp.annotation.SubscribeMapping;
-import org.springframework.stereotype.Controller;
-import org.springframework.validation.annotation.Validated;
-
-@Controller
-public class LobbyController {
-
- private static final Logger logger = LoggerFactory.getLogger(LobbyController.class);
-
- private final LobbyRepository lobbyRepository;
-
- private final GameRepository gameRepository;
-
- private final PlayerRepository playerRepository;
-
- private final SimpMessagingTemplate template;
-
- @Autowired
- public LobbyController(LobbyRepository lobbyRepository, GameRepository gameRepository,
- PlayerRepository playerRepository, SimpMessagingTemplate template) {
- this.lobbyRepository = lobbyRepository;
- this.gameRepository = gameRepository;
- this.playerRepository = playerRepository;
- this.template = template;
- }
-
- @MessageMapping("/chooseName")
- @SendToUser("/queue/nameChoice")
- public Player chooseName(@Validated ChooseNameAction action, Principal principal) {
- String username = principal.getName();
- Player player = playerRepository.createOrUpdate(username, action.getPlayerName());
-
- logger.info("Player '{}' chose the name '{}'", username, player.getDisplayName());
- return player;
- }
-
- @SubscribeMapping("/games") // prefix /topic not shown
- public Collection<Lobby> listGames(Principal principal) {
- logger.info("Player '{}' subscribed to /topic/games", principal.getName());
- return lobbyRepository.list();
- }
-
- @MessageMapping("/lobby/create")
- @SendTo("/topic/games")
- public Collection<Lobby> createGame(@Validated CreateGameAction action, Principal principal) {
- checkThatUserIsNotInAGame(principal, "cannot create another game");
-
- Player gameOwner = playerRepository.find(principal.getName());
- Lobby lobby = lobbyRepository.create(action.getGameName(), gameOwner);
- gameOwner.setLobby(lobby);
-
- logger.info("Game '{}' ({}) created by {} ({})", lobby.getName(), lobby.getId(), gameOwner.getDisplayName(),
- gameOwner.getUsername());
- return Collections.singletonList(lobby);
- }
-
- @MessageMapping("/lobby/join")
- @SendToUser("/queue/lobby/joined")
- public Lobby joinGame(@Validated JoinGameAction action, Principal principal) {
- checkThatUserIsNotInAGame(principal, "cannot join another game");
-
- Lobby lobby = lobbyRepository.find(action.getGameId());
- Player newPlayer = playerRepository.find(principal.getName());
- lobby.addPlayer(newPlayer);
- newPlayer.setLobby(lobby);
-
- logger.info("Player '{}' ({}) joined game {}", newPlayer.getDisplayName(), newPlayer.getUsername(),
- lobby.getName());
- sendLobbyUpdateToPlayers(lobby);
- return lobby;
- }
-
- private void checkThatUserIsNotInAGame(Principal principal, String impossibleActionDescription) {
- Lobby lobby = playerRepository.find(principal.getName()).getLobby();
- if (lobby != null) {
- throw new UserAlreadyInGameException(lobby.getName(), impossibleActionDescription);
- }
- }
-
- @MessageMapping("/lobby/reorderPlayers")
- public void reorderPlayers(@Validated ReorderPlayersAction action, Principal principal) {
- Lobby lobby = getLobby(principal);
- lobby.reorderPlayers(action.getOrderedPlayers());
-
- logger.info("Players in game {} reordered to {}", lobby.getName(), action.getOrderedPlayers());
- sendLobbyUpdateToPlayers(lobby);
- }
-
- @MessageMapping("/lobby/updateSettings")
- public void updateSettings(@Validated UpdateSettingsAction action, Principal principal) {
- Lobby lobby = getLobby(principal);
- lobby.setSettings(action.getSettings());
-
- logger.info("Updated settings of game {}", lobby.getName());
- sendLobbyUpdateToPlayers(lobby);
- }
-
- private void sendLobbyUpdateToPlayers(Lobby lobby) {
- template.convertAndSend("/topic/lobby/" + lobby.getId() + "/updated", lobby);
- }
-
- @MessageMapping("/lobby/start")
- public void startGame(Principal principal) {
- Lobby lobby = getOwnedLobby(principal);
- Game game = lobby.startGame();
- gameRepository.add(game);
-
- logger.info("Game {} successfully started", game.getId());
- template.convertAndSend("/topic/lobby/" + lobby.getId() + "/started", (Object)null);
- }
-
- private Lobby getOwnedLobby(Principal principal) {
- Lobby lobby = getLobby(principal);
- if (!lobby.isOwner(principal.getName())) {
- throw new UserIsNotOwnerException(principal.getName());
- }
- return lobby;
- }
-
- private Lobby getLobby(Principal principal) {
- Lobby lobby = playerRepository.find(principal.getName()).getLobby();
- if (lobby == null) {
- throw new UserNotInLobbyException(principal.getName());
- }
- return lobby;
- }
-
- private static class UserNotInLobbyException extends ApiMisuseException {
- UserNotInLobbyException(String username) {
- super("User " + username + " is not in a lobby, create or join a game first");
- }
- }
-
- private static class UserIsNotOwnerException extends ApiMisuseException {
- UserIsNotOwnerException(String username) {
- super("User " + username + " does not own the lobby he's in");
- }
- }
-
- private static class UserAlreadyInGameException extends ApiMisuseException {
- UserAlreadyInGameException(String gameName, String impossibleActionDescription) {
- super("Client already in game '" + gameName + "', " + impossibleActionDescription);
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/errors/ApiMisuseException.java b/src/main/java/org/luxons/sevenwonders/errors/ApiMisuseException.java
deleted file mode 100644
index 0d7d1a82..00000000
--- a/src/main/java/org/luxons/sevenwonders/errors/ApiMisuseException.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.luxons.sevenwonders.errors;
-
-public class ApiMisuseException extends RuntimeException {
-
- public ApiMisuseException(String message) {
- super(message);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/errors/ErrorType.java b/src/main/java/org/luxons/sevenwonders/errors/ErrorType.java
deleted file mode 100644
index 1cd18d09..00000000
--- a/src/main/java/org/luxons/sevenwonders/errors/ErrorType.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.luxons.sevenwonders.errors;
-
-enum ErrorType {
- USER_INPUT, VALIDATION, CLIENT, SERVER
-}
diff --git a/src/main/java/org/luxons/sevenwonders/errors/ExceptionHandler.java b/src/main/java/org/luxons/sevenwonders/errors/ExceptionHandler.java
deleted file mode 100644
index 628da4f8..00000000
--- a/src/main/java/org/luxons/sevenwonders/errors/ExceptionHandler.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.luxons.sevenwonders.errors;
-
-import java.util.List;
-import java.util.Locale;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.MessageSource;
-import org.springframework.messaging.converter.MessageConversionException;
-import org.springframework.messaging.handler.annotation.MessageExceptionHandler;
-import org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException;
-import org.springframework.messaging.simp.annotation.SendToUser;
-import org.springframework.validation.BindingResult;
-import org.springframework.validation.ObjectError;
-import org.springframework.web.bind.annotation.ControllerAdvice;
-
-@ControllerAdvice
-public class ExceptionHandler {
-
- private static final Logger logger = LoggerFactory.getLogger(ExceptionHandler.class);
-
- private static final String ERROR_CODE_VALIDATION = "INVALID_DATA";
-
- private static final String ERROR_CODE_CONVERSION = "INVALID_MESSAGE_FORMAT";
-
- private static final String ERROR_MSG_VALIDATION = "Invalid input data";
-
- private static final String ERROR_MSG_CONVERSION = "Invalid input format";
-
- private final MessageSource messageSource;
-
- @Autowired
- public ExceptionHandler(MessageSource messageSource) {
- this.messageSource = messageSource;
- }
-
- @MessageExceptionHandler
- @SendToUser("/queue/errors")
- public UIError handleUserInputError(UserInputException exception) {
- logger.error("Incorrect user input: " + exception.getMessage());
- String messageKey = exception.getMessageResourceKey();
- String message = messageSource.getMessage(messageKey, exception.getParams(), messageKey, Locale.US);
- return new UIError(messageKey, message, ErrorType.USER_INPUT);
- }
-
- @MessageExceptionHandler
- @SendToUser("/queue/errors")
- public UIError handleValidationError(MethodArgumentNotValidException exception) {
- logger.error("Invalid input", exception);
- UIError uiError = new UIError(ERROR_CODE_VALIDATION, ERROR_MSG_VALIDATION, ErrorType.VALIDATION);
-
- BindingResult result = exception.getBindingResult();
- if (result != null) {
- List<ObjectError> errors = result.getAllErrors();
- uiError.addDetails(errors);
- }
- return uiError;
- }
-
- @MessageExceptionHandler
- @SendToUser("/queue/errors")
- public UIError handleConversionError(MessageConversionException exception) {
- logger.error("Error interpreting the message", exception);
- return new UIError(ERROR_CODE_CONVERSION, ERROR_MSG_CONVERSION, ErrorType.VALIDATION);
- }
-
- @MessageExceptionHandler
- @SendToUser("/queue/errors")
- public UIError handleApiError(ApiMisuseException exception) {
- logger.error("Invalid API input", exception);
- return new UIError(exception.getClass().getSimpleName(), exception.getMessage(), ErrorType.CLIENT);
- }
-
- @MessageExceptionHandler
- @SendToUser("/queue/errors")
- public UIError handleUnexpectedInternalError(Throwable exception) {
- logger.error("Uncaught exception thrown during message handling", exception);
- return new UIError(exception.getClass().getSimpleName(), exception.getMessage(), ErrorType.SERVER);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/errors/UIError.java b/src/main/java/org/luxons/sevenwonders/errors/UIError.java
deleted file mode 100644
index ee5fcbe0..00000000
--- a/src/main/java/org/luxons/sevenwonders/errors/UIError.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.luxons.sevenwonders.errors;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.validation.FieldError;
-import org.springframework.validation.ObjectError;
-
-public class UIError {
-
- private final String code;
-
- private final String message;
-
- private final ErrorType type;
-
- private List<UIErrorDetail> details = new ArrayList<>();
-
- UIError(String code, String message, ErrorType type) {
- this.code = code;
- this.message = message;
- this.type = type;
- }
-
- public String getCode() {
- return code;
- }
-
- public String getMessage() {
- return message;
- }
-
- public ErrorType getType() {
- return type;
- }
-
- public List<UIErrorDetail> getDetails() {
- return details;
- }
-
- void addDetails(List<ObjectError> objectErrors) {
- for (ObjectError objectError : objectErrors) {
- this.details.add(convertError(objectError));
- }
- }
-
- private UIErrorDetail convertError(ObjectError objectError) {
- if (objectError instanceof FieldError) {
- return new UIErrorDetail((FieldError)objectError);
- } else {
- return new UIErrorDetail(objectError);
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/errors/UIErrorDetail.java b/src/main/java/org/luxons/sevenwonders/errors/UIErrorDetail.java
deleted file mode 100644
index dc4250bb..00000000
--- a/src/main/java/org/luxons/sevenwonders/errors/UIErrorDetail.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.luxons.sevenwonders.errors;
-
-import org.springframework.validation.FieldError;
-import org.springframework.validation.ObjectError;
-
-class UIErrorDetail {
-
- private final Object rejectedValue;
-
- private final String path;
-
- private final String message;
-
- UIErrorDetail(FieldError error) {
- rejectedValue = error.getRejectedValue();
- path = error.getObjectName() + '.' + error.getField();
- message = "Invalid value for field '" + error.getField() + "': " + error.getDefaultMessage();
- }
-
- UIErrorDetail(ObjectError error) {
- rejectedValue = null;
- path = error.getObjectName();
- message = "Invalid value for object '" + error.getObjectName() + "': " + error.getDefaultMessage();
- }
-
- public Object getRejectedValue() {
- return rejectedValue;
- }
-
- public String getPath() {
- return path;
- }
-
- public String getMessage() {
- return message;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/errors/UserInputException.java b/src/main/java/org/luxons/sevenwonders/errors/UserInputException.java
deleted file mode 100644
index 4033a696..00000000
--- a/src/main/java/org/luxons/sevenwonders/errors/UserInputException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.luxons.sevenwonders.errors;
-
-public class UserInputException extends RuntimeException {
-
- private final String messageResourceKey;
-
- private final Object[] params;
-
- public UserInputException(String messageResourceKey, Object... params) {
- this.messageResourceKey = messageResourceKey;
- this.params = params;
- }
-
- String getMessageResourceKey() {
- return messageResourceKey;
- }
-
- Object[] getParams() {
- return params;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/Game.java b/src/main/java/org/luxons/sevenwonders/game/Game.java
deleted file mode 100644
index 8aa7d1b9..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/Game.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.api.Action;
-import org.luxons.sevenwonders.game.api.HandCard;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.PlayerTurnInfo;
-import org.luxons.sevenwonders.game.api.PreparedCard;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Decks;
-import org.luxons.sevenwonders.game.cards.Hands;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-import org.luxons.sevenwonders.game.moves.Move;
-import org.luxons.sevenwonders.game.scoring.ScoreBoard;
-
-public class Game {
-
- private static final int LAST_AGE = 3;
-
- private final long id;
-
- private final Settings settings;
-
- private final List<Player> players;
-
- private final Table table;
-
- private final Decks decks;
-
- private final List<Card> discardedCards;
-
- private final Map<Integer, Move> preparedMoves;
-
- private Hands hands;
-
- public Game(long id, Settings settings, List<Player> players, List<Board> boards, Decks decks) {
- this.id = id;
- this.settings = settings;
- this.players = players;
- this.table = new Table(boards);
- this.decks = decks;
- this.discardedCards = new ArrayList<>();
- this.preparedMoves = new HashMap<>();
- startNewAge();
- }
-
- public long getId() {
- return id;
- }
-
- public boolean containsUser(String username) {
- return players.stream().anyMatch(p -> p.getUsername().equals(username));
- }
-
- public List<Player> getPlayers() {
- return players;
- }
-
- private void startNewAge() {
- table.increaseCurrentAge();
- hands = decks.deal(table.getCurrentAge(), table.getNbPlayers());
- }
-
- public List<PlayerTurnInfo> getTurnInfo() {
- return players.stream().map(this::createPlayerTurnInfo).collect(Collectors.toList());
- }
-
- private PlayerTurnInfo createPlayerTurnInfo(Player player) {
- PlayerTurnInfo pti = new PlayerTurnInfo(player, table);
- List<HandCard> hand = hands.createHand(table, player.getIndex());
- pti.setHand(hand);
- Action action = determineAction(hand, table.getBoard(player.getIndex()));
- pti.setAction(action);
- pti.setMessage(action.getMessage());
- return pti;
- }
-
- private Action determineAction(List<HandCard> hand, Board board) {
- if (endOfGameReached() && board.hasSpecial(SpecialAbility.COPY_GUILD)) {
- return Action.PICK_NEIGHBOR_GUILD;
- } else if (hand.size() == 1 && board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) {
- return Action.PLAY_LAST;
- } else if (hand.size() == 2 && board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) {
- return Action.PLAY_2;
- } else if (hand.isEmpty()) {
- return Action.WAIT;
- } else {
- return Action.PLAY;
- }
- }
-
- public PreparedCard prepareCard(String username, PlayerMove playerMove) throws InvalidMoveException {
- Player player = getPlayer(username);
- Card card = decks.getCard(playerMove.getCardName());
- Move move = playerMove.getType().resolve(player.getIndex(), card, playerMove);
- validate(move);
- preparedMoves.put(player.getIndex(), move);
- return new PreparedCard(player, card.getBack());
- }
-
- private Player getPlayer(String username) {
- return players.stream()
- .filter(p -> p.getUsername().equals(username))
- .findAny()
- .orElseThrow(() -> new UnknownPlayerException(username));
- }
-
- private void validate(Move move) throws InvalidMoveException {
- List<Card> hand = hands.get(move.getPlayerIndex());
- if (!move.isValid(table, hand)) {
- throw new InvalidMoveException(
- "Player " + move.getPlayerIndex() + " cannot play the card " + move.getCard().getName());
- }
- }
-
- public boolean areAllPlayersReady() {
- return preparedMoves.size() == players.size();
- }
-
- public void playTurn() {
- makeMoves();
- if (endOfAgeReached()) {
- executeEndOfAgeEvents();
- if (!endOfGameReached()) {
- startNewAge();
- }
- } else if (!hands.maxOneCardRemains()) {
- // we don't rotate hands if some player can play his last card (with the special ability)
- hands.rotate(table.getHandRotationDirection());
- }
- }
-
- private void makeMoves() {
- List<Move> playedMoves = mapToList(preparedMoves);
-
- // all cards from this turn need to be placed before executing any effect
- // because effects depending on played cards need to take the ones from the current turn into account too
- placePreparedCards(playedMoves);
-
- // same goes for the discarded cards during the last turn, which should be available for special actions
- if (hands.maxOneCardRemains()) {
- discardLastCardsOfHands();
- }
-
- activatePlayedCards(playedMoves);
-
- table.setLastPlayedMoves(playedMoves);
- preparedMoves.clear();
- }
-
- private static List<Move> mapToList(Map<Integer, Move> movesPerPlayer) {
- List<Move> moves = new ArrayList<>(movesPerPlayer.size());
- for (int p = 0; p < movesPerPlayer.size(); p++) {
- Move move = movesPerPlayer.get(p);
- if (move == null) {
- throw new MissingPreparedMoveException(p);
- }
- moves.add(move);
- }
- return moves;
- }
-
- private void placePreparedCards(List<Move> playedMoves) {
- playedMoves.forEach(move -> {
- move.place(table, discardedCards, settings);
- removeFromHand(move.getPlayerIndex(), move.getCard());
- });
- }
-
- private void discardLastCardsOfHands() {
- for (Player p : players) {
- Board board = table.getBoard(p.getIndex());
- if (!board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) {
- discardHand(p.getIndex());
- }
- }
- }
-
- private void discardHand(int playerIndex) {
- List<Card> hand = hands.get(playerIndex);
- discardedCards.addAll(hand);
- hand.clear();
- }
-
- private void removeFromHand(int playerIndex, Card card) {
- hands.get(playerIndex).remove(card);
- }
-
- private void activatePlayedCards(List<Move> playedMoves) {
- playedMoves.forEach(move -> move.activate(table, discardedCards, settings));
- }
-
- private boolean endOfAgeReached() {
- return hands.isEmpty();
- }
-
- private void executeEndOfAgeEvents() {
- table.resolveMilitaryConflicts();
- }
-
- private boolean endOfGameReached() {
- return endOfAgeReached() && table.getCurrentAge() == LAST_AGE;
- }
-
- public ScoreBoard computeScore() {
- ScoreBoard scoreBoard = new ScoreBoard();
- table.getBoards().stream().map(b -> b.computePoints(table)).forEach(scoreBoard::add);
- return scoreBoard;
- }
-
- private static class MissingPreparedMoveException extends IllegalStateException {
- MissingPreparedMoveException(int playerIndex) {
- super("Player " + playerIndex + " is not ready to play");
- }
- }
-
- private static class UnknownPlayerException extends IllegalArgumentException {
- UnknownPlayerException(String username) {
- super(username);
- }
- }
-
- private static class InvalidMoveException extends IllegalArgumentException {
- InvalidMoveException(String message) {
- super(message);
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/Lobby.java b/src/main/java/org/luxons/sevenwonders/game/Lobby.java
deleted file mode 100644
index 6975349a..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/Lobby.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.data.GameDefinition;
-
-public class Lobby {
-
- private final long id;
-
- private final String name;
-
- private final Player owner;
-
- private final GameDefinition gameDefinition;
-
- private final List<Player> players;
-
- private CustomizableSettings settings;
-
- private State state = State.LOBBY;
-
- public Lobby(long id, String name, Player owner, GameDefinition gameDefinition) {
- this.id = id;
- this.name = name;
- this.owner = owner;
- this.gameDefinition = gameDefinition;
- this.players = new ArrayList<>(gameDefinition.getMinPlayers());
- this.settings = new CustomizableSettings();
- players.add(owner);
- }
-
- public long getId() {
- return id;
- }
-
- public String getName() {
- return name;
- }
-
- public List<Player> getPlayers() {
- return players;
- }
-
- public CustomizableSettings getSettings() {
- return settings;
- }
-
- public void setSettings(CustomizableSettings settings) {
- this.settings = settings;
- }
-
- public synchronized void addPlayer(Player player) throws GameAlreadyStartedException, PlayerOverflowException {
- if (hasStarted()) {
- throw new GameAlreadyStartedException();
- }
- if (maxPlayersReached()) {
- throw new PlayerOverflowException();
- }
- if (playerNameAlreadyUsed(player.getDisplayName())) {
- throw new PlayerNameAlreadyUsedException(player.getDisplayName());
- }
- player.setIndex(players.size());
- players.add(player);
- }
-
- private boolean hasStarted() {
- return state != State.LOBBY;
- }
-
- private boolean maxPlayersReached() {
- return players.size() >= gameDefinition.getMaxPlayers();
- }
-
- private boolean playerNameAlreadyUsed(String name) {
- return players.stream().anyMatch(p -> p.getDisplayName().equals(name));
- }
-
- public synchronized Game startGame() throws PlayerUnderflowException {
- if (!hasEnoughPlayers()) {
- throw new PlayerUnderflowException();
- }
- state = State.PLAYING;
- return gameDefinition.initGame(id, settings, players);
- }
-
- private boolean hasEnoughPlayers() {
- return players.size() >= gameDefinition.getMinPlayers();
- }
-
- public void reorderPlayers(List<String> orderedUsernames) {
- List<Player> formerList = new ArrayList<>(players);
- players.clear();
- for (int i = 0; i < orderedUsernames.size(); i++) {
- Player player = getPlayer(formerList, orderedUsernames.get(i));
- players.add(player);
- player.setIndex(i);
- }
- }
-
- private static Player getPlayer(List<Player> players, String username) {
- return players.stream()
- .filter(p -> p.getUsername().equals(username))
- .findAny()
- .orElseThrow(() -> new UnknownPlayerException(username));
- }
-
- public boolean isOwner(String username) {
- return owner.getUsername().equals(username);
- }
-
- public boolean containsUser(String username) {
- return players.stream().anyMatch(p -> p.getUsername().equals(username));
- }
-
- static class GameAlreadyStartedException extends IllegalStateException {
- }
-
- static class PlayerOverflowException extends IllegalStateException {
- }
-
- static class PlayerUnderflowException extends IllegalStateException {
- }
-
- static class PlayerNameAlreadyUsedException extends RuntimeException {
- PlayerNameAlreadyUsedException(String name) {
- super(name);
- }
- }
-
- static class UnknownPlayerException extends IllegalArgumentException {
- UnknownPlayerException(String username) {
- super(username);
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/Player.java b/src/main/java/org/luxons/sevenwonders/game/Player.java
deleted file mode 100644
index f1095049..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/Player.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-
-public class Player {
-
- private final String username;
-
- private String displayName;
-
- private int index;
-
- private transient Lobby lobby;
-
- private transient Game game;
-
- public Player(String username, String displayName) {
- this.username = username;
- this.displayName = displayName;
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getDisplayName() {
- return displayName;
- }
-
- public void setDisplayName(String displayName) {
- this.displayName = displayName;
- }
-
- public int getIndex() {
- return index;
- }
-
- public void setIndex(int index) {
- this.index = index;
- }
-
- @JsonIgnore
- public Lobby getLobby() {
- return lobby;
- }
-
- public void setLobby(Lobby lobby) {
- this.lobby = lobby;
- }
-
- @JsonIgnore
- public Game getGame() {
- return game;
- }
-
- public void setGame(Game game) {
- this.game = game;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/Settings.java b/src/main/java/org/luxons/sevenwonders/game/Settings.java
deleted file mode 100644
index 63ef3522..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/Settings.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-import java.util.Map;
-import java.util.Random;
-
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.data.definitions.WonderSide;
-import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod;
-
-public class Settings {
-
- private final Random random;
-
- private final int nbPlayers;
-
- private final int initialGold;
-
- private final int discardedCardGold;
-
- private final int defaultTradingCost;
-
- private final int pointsPer3Gold;
-
- private final WonderSidePickMethod wonderSidePickMethod;
-
- private WonderSide lastPickedSide = null;
-
- private final int lostPointsPerDefeat;
-
- private final Map<Integer, Integer> wonPointsPerVictoryPerAge;
-
- public Settings(int nbPlayers) {
- this(nbPlayers, new CustomizableSettings());
- }
-
- public Settings(int nbPlayers, CustomizableSettings customSettings) {
- long seed = customSettings.getRandomSeedForTests();
- this.random = seed > 0 ? new Random(seed) : new Random();
- this.nbPlayers = nbPlayers;
- this.initialGold = customSettings.getInitialGold();
- this.discardedCardGold = customSettings.getDiscardedCardGold();
- this.defaultTradingCost = customSettings.getDefaultTradingCost();
- this.pointsPer3Gold = customSettings.getPointsPer3Gold();
- this.wonderSidePickMethod = customSettings.getWonderSidePickMethod();
- this.lostPointsPerDefeat = customSettings.getLostPointsPerDefeat();
- this.wonPointsPerVictoryPerAge = customSettings.getWonPointsPerVictoryPerAge();
- }
-
- public Random getRandom() {
- return random;
- }
-
- public int getNbPlayers() {
- return nbPlayers;
- }
-
- public int getInitialGold() {
- return initialGold;
- }
-
- public int getDiscardedCardGold() {
- return discardedCardGold;
- }
-
- public int getDefaultTradingCost() {
- return defaultTradingCost;
- }
-
- public int getPointsPer3Gold() {
- return pointsPer3Gold;
- }
-
- public WonderSide pickWonderSide() {
- return lastPickedSide = wonderSidePickMethod.pickSide(getRandom(), lastPickedSide);
- }
-
- public int getLostPointsPerDefeat() {
- return lostPointsPerDefeat;
- }
-
- public Map<Integer, Integer> getWonPointsPerVictoryPerAge() {
- return wonPointsPerVictoryPerAge;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/State.java b/src/main/java/org/luxons/sevenwonders/game/State.java
deleted file mode 100644
index 0bd71d3a..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/State.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-public enum State {
- LOBBY,
- PLAYING
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/api/Action.java b/src/main/java/org/luxons/sevenwonders/game/api/Action.java
deleted file mode 100644
index 88e392f9..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/api/Action.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-public enum Action {
- PLAY("Pick the card you want to play or discard."),
- PLAY_2("Pick the first card you want to play or discard. Note that you have the ability to play these 2 last cards."
- + " You will choose how to play the last one during your next turn."),
- PLAY_LAST("You have the special ability to play your last card. Choose how you want to play it."),
- PICK_NEIGHBOR_GUILD("Choose a Guild card (purple) that you want to copy from one of your neighbours."),
- WAIT("Please wait for other players to perform extra actions.");
-
- private final String message;
-
- Action(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java b/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java
deleted file mode 100644
index c270a2af..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod;
-
-public class CustomizableSettings {
-
- private long randomSeedForTests = -1;
-
- private WonderSidePickMethod wonderSidePickMethod = WonderSidePickMethod.EACH_RANDOM;
-
- private int initialGold = 3;
-
- private int discardedCardGold = 3;
-
- private int defaultTradingCost = 2;
-
- private int pointsPer3Gold = 1;
-
- private int lostPointsPerDefeat = 1;
-
- private Map<Integer, Integer> wonPointsPerVictoryPerAge = new HashMap<>();
-
- public CustomizableSettings() {
- wonPointsPerVictoryPerAge.put(1, 1);
- wonPointsPerVictoryPerAge.put(2, 3);
- wonPointsPerVictoryPerAge.put(3, 5);
- }
-
- public long getRandomSeedForTests() {
- return randomSeedForTests;
- }
-
- public void setRandomSeedForTests(long randomSeedForTests) {
- this.randomSeedForTests = randomSeedForTests;
- }
-
- public int getInitialGold() {
- return initialGold;
- }
-
- public void setInitialGold(int initialGold) {
- this.initialGold = initialGold;
- }
-
- public int getDiscardedCardGold() {
- return discardedCardGold;
- }
-
- public void setDiscardedCardGold(int discardedCardGold) {
- this.discardedCardGold = discardedCardGold;
- }
-
- public int getDefaultTradingCost() {
- return defaultTradingCost;
- }
-
- public void setDefaultTradingCost(int defaultTradingCost) {
- this.defaultTradingCost = defaultTradingCost;
- }
-
- public int getPointsPer3Gold() {
- return pointsPer3Gold;
- }
-
- public void setPointsPer3Gold(int pointsPer3Gold) {
- this.pointsPer3Gold = pointsPer3Gold;
- }
-
- public WonderSidePickMethod getWonderSidePickMethod() {
- return wonderSidePickMethod;
- }
-
- public void setWonderSidePickMethod(WonderSidePickMethod wonderSidePickMethod) {
- this.wonderSidePickMethod = wonderSidePickMethod;
- }
-
- public int getLostPointsPerDefeat() {
- return lostPointsPerDefeat;
- }
-
- public void setLostPointsPerDefeat(int lostPointsPerDefeat) {
- this.lostPointsPerDefeat = lostPointsPerDefeat;
- }
-
- public Map<Integer, Integer> getWonPointsPerVictoryPerAge() {
- return wonPointsPerVictoryPerAge;
- }
-
- public void setWonPointsPerVictoryPerAge(Map<Integer, Integer> wonPointsPerVictoryPerAge) {
- this.wonPointsPerVictoryPerAge = wonPointsPerVictoryPerAge;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java b/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java
deleted file mode 100644
index 54045607..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-/**
- * A card with contextual information relative to the hand it is sitting in. The extra information is especially
- * useful because it frees the client from a painful business logic implementation.
- */
-public class HandCard {
-
- private final Card card;
-
- private final boolean chainable;
-
- private final boolean free;
-
- private final boolean playable;
-
- public HandCard(Card card, Table table, int playerIndex) {
- Board board = table.getBoard(playerIndex);
- this.card = card;
- this.chainable = card.isChainableOn(board);
- this.free = card.isAffordedBy(board) && card.getRequirements().getGold() == 0;
- this.playable = card.isPlayable(table, playerIndex);
- }
-
- public Card getCard() {
- return card;
- }
-
- public boolean isChainable() {
- return chainable;
- }
-
- public boolean isFree() {
- return free;
- }
-
- public boolean isPlayable() {
- return playable;
- }
-
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java b/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java
deleted file mode 100644
index 6d2889e0..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.moves.MoveType;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-
-public class PlayerMove {
-
- private String cardName;
-
- private MoveType type;
-
- private List<BoughtResources> boughtResources = new ArrayList<>();
-
- public String getCardName() {
- return cardName;
- }
-
- public void setCardName(String cardName) {
- this.cardName = cardName;
- }
-
- public MoveType getType() {
- return type;
- }
-
- public void setType(MoveType type) {
- this.type = type;
- }
-
- public List<BoughtResources> getBoughtResources() {
- return boughtResources;
- }
-
- public void setBoughtResources(List<BoughtResources> boughtResources) {
- this.boughtResources = boughtResources;
- }
-
- @Override
- public String toString() {
- return type + " '" + cardName + '\'';
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java b/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java
deleted file mode 100644
index 1ff6f541..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.cards.HandRotationDirection;
-
-public class PlayerTurnInfo {
-
- private final Player player;
-
- private final Table table;
-
- private int currentAge;
-
- private HandRotationDirection handRotationDirection;
-
- private Action action;
-
- private List<HandCard> hand;
-
- private String message;
-
- public PlayerTurnInfo(Player player, Table table) {
- this.player = player;
- this.table = table;
- }
-
- public Player getPlayer() {
- return player;
- }
-
- public Table getTable() {
- return table;
- }
-
- public int getCurrentAge() {
- return currentAge;
- }
-
- public void setCurrentAge(int currentAge) {
- this.currentAge = currentAge;
- }
-
- public HandRotationDirection getHandRotationDirection() {
- return handRotationDirection;
- }
-
- public void setHandRotationDirection(HandRotationDirection handRotationDirection) {
- this.handRotationDirection = handRotationDirection;
- }
-
- public List<HandCard> getHand() {
- return hand;
- }
-
- public void setHand(List<HandCard> hand) {
- this.hand = hand;
- }
-
- public Action getAction() {
- return action;
- }
-
- public void setAction(Action action) {
- this.action = action;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/api/PreparedCard.java b/src/main/java/org/luxons/sevenwonders/game/api/PreparedCard.java
deleted file mode 100644
index 85cac1de..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/api/PreparedCard.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.cards.CardBack;
-
-public class PreparedCard {
-
- private final Player player;
-
- private final CardBack cardBack;
-
- public PreparedCard(Player player, CardBack cardBack) {
- this.player = player;
- this.cardBack = cardBack;
- }
-
- public Player getPlayer() {
- return player;
- }
-
- public CardBack getCardBack() {
- return cardBack;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/api/Table.java b/src/main/java/org/luxons/sevenwonders/game/api/Table.java
deleted file mode 100644
index 8b831527..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/api/Table.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.HandRotationDirection;
-import org.luxons.sevenwonders.game.moves.Move;
-
-/**
- * The table contains what is visible by all the players in the game: the boards and their played cards, and the
- * players' information.
- */
-public class Table {
-
- private final int nbPlayers;
-
- private final List<Board> boards;
-
- private int currentAge = 0;
-
- private List<Move> lastPlayedMoves;
-
- public Table(List<Board> boards) {
- this.nbPlayers = boards.size();
- this.boards = boards;
- }
-
- public int getNbPlayers() {
- return nbPlayers;
- }
-
- public List<Board> getBoards() {
- return boards;
- }
-
- public Board getBoard(int playerIndex) {
- return boards.get(playerIndex);
- }
-
- public Board getBoard(int playerIndex, RelativeBoardPosition position) {
- return boards.get(position.getIndexFrom(playerIndex, nbPlayers));
- }
-
- public List<Move> getLastPlayedMoves() {
- return lastPlayedMoves;
- }
-
- public void setLastPlayedMoves(List<Move> lastPlayedMoves) {
- this.lastPlayedMoves = lastPlayedMoves;
- }
-
- public int getCurrentAge() {
- return currentAge;
- }
-
- public void increaseCurrentAge() {
- this.currentAge++;
- }
-
- public HandRotationDirection getHandRotationDirection() {
- return HandRotationDirection.forAge(currentAge);
- }
-
- public void resolveMilitaryConflicts() {
- for (int i = 0; i < nbPlayers; i++) {
- Board board1 = getBoard(i);
- Board board2 = getBoard((i + 1) % nbPlayers);
- resolveConflict(board1, board2, currentAge);
- }
- }
-
- private static void resolveConflict(Board board1, Board board2, int age) {
- int shields1 = board1.getMilitary().getNbShields();
- int shields2 = board2.getMilitary().getNbShields();
- if (shields1 < shields2) {
- board2.getMilitary().victory(age);
- board1.getMilitary().defeat();
- } else if (shields1 > shields2) {
- board1.getMilitary().victory(age);
- board2.getMilitary().defeat();
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/boards/Board.java b/src/main/java/org/luxons/sevenwonders/game/boards/Board.java
deleted file mode 100644
index ab557d38..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/boards/Board.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.TradingRules;
-import org.luxons.sevenwonders.game.scoring.PlayerScore;
-import org.luxons.sevenwonders.game.scoring.ScoreCategory;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-public class Board {
-
- private final Wonder wonder;
-
- private final Player player;
-
- private final List<Card> playedCards = new ArrayList<>();
-
- private final Production production = new Production();
-
- private final Science science = new Science();
-
- private final TradingRules tradingRules;
-
- private final Military military;
-
- private final Set<SpecialAbility> specialAbilities = EnumSet.noneOf(SpecialAbility.class);
-
- private Map<Integer, Boolean> consumedFreeCards = new HashMap<>();
-
- private Card copiedGuild;
-
- private int gold;
-
- private int pointsPer3Gold;
-
- public Board(Wonder wonder, Player player, Settings settings) {
- this.wonder = wonder;
- this.player = player;
- this.gold = settings.getInitialGold();
- this.tradingRules = new TradingRules(settings.getDefaultTradingCost());
- this.military = new Military(settings);
- this.pointsPer3Gold = settings.getPointsPer3Gold();
- this.production.addFixedResource(wonder.getInitialResource(), 1);
- }
-
- public Wonder getWonder() {
- return wonder;
- }
-
- public Player getPlayer() {
- return player;
- }
-
- public List<Card> getPlayedCards() {
- return playedCards;
- }
-
- public void addCard(Card card) {
- playedCards.add(card);
- }
-
- public int getNbCardsOfColor(List<Color> colorFilter) {
- return (int) playedCards.stream().filter(c -> colorFilter.contains(c.getColor())).count();
- }
-
- public boolean isPlayed(String cardName) {
- return getPlayedCards().stream().map(Card::getName).filter(name -> name.equals(cardName)).count() > 0;
- }
-
- public Production getProduction() {
- return production;
- }
-
- public TradingRules getTradingRules() {
- return tradingRules;
- }
-
- public Science getScience() {
- return science;
- }
-
- public int getGold() {
- return gold;
- }
-
- public void setGold(int amount) {
- this.gold = amount;
- }
-
- public void addGold(int amount) {
- this.gold += amount;
- }
-
- public void removeGold(int amount) {
- if (gold < amount) {
- throw new InsufficientFundsException(gold, amount);
- }
- this.gold -= amount;
- }
-
- public Military getMilitary() {
- return military;
- }
-
- public void addSpecial(SpecialAbility specialAbility) {
- specialAbilities.add(specialAbility);
- }
-
- public boolean hasSpecial(SpecialAbility specialAbility) {
- return specialAbilities.contains(specialAbility);
- }
-
- public boolean canPlayFreeCard(int age) {
- return hasSpecial(SpecialAbility.ONE_FREE_PER_AGE) && !consumedFreeCards.getOrDefault(age, false);
- }
-
- public void consumeFreeCard(int age) {
- consumedFreeCards.put(age, true);
- }
-
- public void setCopiedGuild(Card copiedGuild) {
- if (copiedGuild.getColor() != Color.PURPLE) {
- throw new IllegalArgumentException("The given card '" + copiedGuild + "' is not a Guild card");
- }
- this.copiedGuild = copiedGuild;
- }
-
- public Card getCopiedGuild() {
- return copiedGuild;
- }
-
- public PlayerScore computePoints(Table table) {
- PlayerScore score = new PlayerScore(player, gold);
- score.put(ScoreCategory.CIVIL, computePointsForCards(table, Color.BLUE));
- score.put(ScoreCategory.MILITARY, military.getTotalPoints());
- score.put(ScoreCategory.SCIENCE, science.computePoints());
- score.put(ScoreCategory.TRADE, computePointsForCards(table, Color.YELLOW));
- score.put(ScoreCategory.GUILD, computePointsForCards(table, Color.PURPLE));
- score.put(ScoreCategory.WONDER, wonder.computePoints(table, player.getIndex()));
- score.put(ScoreCategory.GOLD, computeGoldPoints());
- return score;
- }
-
- private int computePointsForCards(Table table, Color color) {
- return playedCards.stream()
- .filter(c -> c.getColor() == color)
- .flatMap(c -> c.getEffects().stream())
- .mapToInt(e -> e.computePoints(table, player.getIndex()))
- .sum();
- }
-
- private int computeGoldPoints() {
- return gold / 3 * pointsPer3Gold;
- }
-
- static class InsufficientFundsException extends RuntimeException {
- InsufficientFundsException(int current, int required) {
- super(String.format("Current balance is %d gold, but %d are required", current, required));
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java b/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java
deleted file mode 100644
index e50f4ea0..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.cards.Color;
-
-public enum BoardElementType {
- CARD {
- @Override
- public int getElementCount(Board board, List<Color> colors) {
- return board.getNbCardsOfColor(colors);
- }
- },
- BUILT_WONDER_STAGES {
- @Override
- public int getElementCount(Board board, List<Color> colors) {
- return board.getWonder().getNbBuiltStages();
- }
- },
- DEFEAT_TOKEN {
- @Override
- public int getElementCount(Board board, List<Color> colors) {
- return board.getMilitary().getNbDefeatTokens();
- }
- };
-
- public abstract int getElementCount(Board board, List<Color> colors);
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/boards/Military.java b/src/main/java/org/luxons/sevenwonders/game/boards/Military.java
deleted file mode 100644
index fb93fa96..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/boards/Military.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import org.luxons.sevenwonders.game.Settings;
-
-public class Military {
-
- private final Settings settings;
-
- private int nbShields = 0;
-
- private int totalPoints = 0;
-
- private int nbDefeatTokens = 0;
-
- Military(Settings settings) {
- this.settings = settings;
- }
-
- public int getNbShields() {
- return nbShields;
- }
-
- public void addShields(int nbShields) {
- this.nbShields += nbShields;
- }
-
- public int getTotalPoints() {
- return totalPoints;
- }
-
- public int getNbDefeatTokens() {
- return nbDefeatTokens;
- }
-
- public void victory(int age) {
- Integer wonPoints = settings.getWonPointsPerVictoryPerAge().get(age);
- if (wonPoints == null) {
- throw new UnknownAgeException(age);
- }
- totalPoints += wonPoints;
- }
-
- public void defeat() {
- int lostPoints = settings.getLostPointsPerDefeat();
- totalPoints -= lostPoints;
- nbDefeatTokens++;
- }
-
- static final class UnknownAgeException extends IllegalArgumentException {
- UnknownAgeException(int unknownAge) {
- super(String.valueOf(unknownAge));
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java b/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java
deleted file mode 100644
index 16b2f3a9..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-public enum RelativeBoardPosition {
- LEFT {
- @Override
- public int getIndexFrom(int playerIndex, int nbPlayers) {
- return wrapIndex(playerIndex - 1, nbPlayers);
- }
- },
- SELF {
- @Override
- public int getIndexFrom(int playerIndex, int nbPlayers) {
- return playerIndex;
- }
- },
- RIGHT {
- @Override
- public int getIndexFrom(int playerIndex, int nbPlayers) {
- return wrapIndex(playerIndex + 1, nbPlayers);
- }
- };
-
- public abstract int getIndexFrom(int playerIndex, int nbPlayers);
-
- int wrapIndex(int index, int nbPlayers) {
- return Math.floorMod(index, nbPlayers);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/boards/Science.java b/src/main/java/org/luxons/sevenwonders/game/boards/Science.java
deleted file mode 100644
index 34928bcc..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/boards/Science.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.Map;
-
-public class Science {
-
- private Map<ScienceType, Integer> quantities = new EnumMap<>(ScienceType.class);
-
- private int jokers;
-
- public void add(ScienceType type, int quantity) {
- quantities.merge(type, quantity, (x, y) -> x + y);
- }
-
- public void addJoker(int quantity) {
- jokers += quantity;
- }
-
- public int getJokers() {
- return jokers;
- }
-
- public void addAll(Science science) {
- science.quantities.forEach(this::add);
- jokers += science.jokers;
- }
-
- public int getQuantity(ScienceType type) {
- return quantities.getOrDefault(type, 0);
- }
-
- public int size() {
- return quantities.values().stream().mapToInt(q -> q).sum() + jokers;
- }
-
- public int computePoints() {
- ScienceType[] types = ScienceType.values();
- Integer[] values = new Integer[types.length];
- for (int i = 0; i < types.length; i++) {
- values[i] = quantities.getOrDefault(types[i], 0);
- }
- return computePoints(values, jokers);
- }
-
- private static int computePoints(Integer[] values, int jokers) {
- if (jokers == 0) {
- return computePointsNoJoker(values);
- }
- int maxPoints = 0;
- for (int i = 0; i < values.length; i++) {
- values[i]++;
- maxPoints = Math.max(maxPoints, computePoints(values, jokers - 1));
- values[i]--;
- }
- return maxPoints;
- }
-
- private static int computePointsNoJoker(Integer[] values) {
- int independentSquaresSum = Arrays.stream(values).mapToInt(i -> i * i).sum();
- int nbGroupsOfAll = Arrays.stream(values).mapToInt(i -> i).min().orElse(0);
- return independentSquaresSum + nbGroupsOfAll * 7;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java b/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java
deleted file mode 100644
index 06408b9e..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-public enum ScienceType {
- COMPASS, WHEEL, TABLET
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/cards/Card.java b/src/main/java/org/luxons/sevenwonders/game/cards/Card.java
deleted file mode 100644
index de674011..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/cards/Card.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.List;
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-
-public class Card {
-
- private final String name;
-
- private final Color color;
-
- private final Requirements requirements;
-
- private final List<Effect> effects;
-
- private final String chainParent;
-
- private final List<String> chainChildren;
-
- private final String image;
-
- private CardBack back;
-
- public Card(String name, Color color, Requirements requirements, List<Effect> effects, String chainParent,
- List<String> chainChildren, String image) {
- this.name = name;
- this.color = color;
- this.requirements = requirements;
- this.chainParent = chainParent;
- this.effects = effects;
- this.chainChildren = chainChildren;
- this.image = image;
- }
-
- public String getName() {
- return name;
- }
-
- public Color getColor() {
- return color;
- }
-
- public String getChainParent() {
- return chainParent;
- }
-
- public Requirements getRequirements() {
- return requirements;
- }
-
- public List<Effect> getEffects() {
- return effects;
- }
-
- public List<String> getChainChildren() {
- return chainChildren;
- }
-
- public String getImage() {
- return image;
- }
-
- public CardBack getBack() {
- return back;
- }
-
- public void setBack(CardBack back) {
- this.back = back;
- }
-
- public boolean isChainableOn(Board board) {
- return board.isPlayed(chainParent);
- }
-
- public boolean isAffordedBy(Board board) {
- return requirements.isAffordedBy(board);
- }
-
- public boolean isPlayable(Table table, int playerIndex) {
- Board board = table.getBoard(playerIndex);
- if (board.isPlayed(name)) {
- return false; // cannot play twice the same card
- }
- return isChainableOn(board) || requirements.couldBeAffordedBy(table, playerIndex);
- }
-
- public void applyTo(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- Board playerBoard = table.getBoard(playerIndex);
- if (!isChainableOn(playerBoard)) {
- requirements.pay(table, playerIndex, boughtResources);
- }
- effects.forEach(e -> e.apply(table, playerIndex));
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- Card card = (Card)o;
- return Objects.equals(name, card.name);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(name);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java b/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java
deleted file mode 100644
index f925b6c4..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-public class CardBack {
-
- private final String image;
-
- public CardBack(String image) {
- this.image = image;
- }
-
- public String getImage() {
- return image;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/cards/Color.java b/src/main/java/org/luxons/sevenwonders/game/cards/Color.java
deleted file mode 100644
index 5b4e4473..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/cards/Color.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-public enum Color {
- BROWN, GREY, YELLOW, BLUE, GREEN, RED, PURPLE
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java b/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java
deleted file mode 100644
index aa2b00bf..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class Decks {
-
- private Map<Integer, List<Card>> cardsPerAge = new HashMap<>();
-
- public Decks(Map<Integer, List<Card>> cardsPerAge) {
- this.cardsPerAge = cardsPerAge;
- }
-
- public Card getCard(String cardName) throws CardNotFoundException {
- return cardsPerAge.values()
- .stream()
- .flatMap(List::stream)
- .filter(c -> c.getName().equals(cardName))
- .findAny()
- .orElseThrow(() -> new CardNotFoundException(cardName));
- }
-
- public Hands deal(int age, int nbPlayers) {
- List<Card> deck = getDeck(age);
- validateNbCards(deck, nbPlayers);
- return deal(deck, nbPlayers);
- }
-
- private List<Card> getDeck(int age) {
- List<Card> deck = cardsPerAge.get(age);
- if (deck == null) {
- throw new IllegalArgumentException("No deck found for age " + age);
- }
- return deck;
- }
-
- private void validateNbCards(List<Card> deck, int nbPlayers) {
- if (nbPlayers == 0) {
- throw new IllegalArgumentException("Cannot deal cards between 0 players");
- }
- if (deck.size() % nbPlayers != 0) {
- throw new IllegalArgumentException(
- String.format("Cannot deal %d cards evenly between %d players", deck.size(), nbPlayers));
- }
- }
-
- private Hands deal(List<Card> deck, int nbPlayers) {
- Map<Integer, List<Card>> hands = new HashMap<>(nbPlayers);
- for (int i = 0; i < nbPlayers; i++) {
- hands.put(i, new ArrayList<>());
- }
- for (int i = 0; i < deck.size(); i++) {
- hands.get(i % nbPlayers).add(deck.get(i));
- }
- return new Hands(hands, nbPlayers);
- }
-
- class CardNotFoundException extends RuntimeException {
- CardNotFoundException(String message) {
- super(message);
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java b/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java
deleted file mode 100644
index 9c4f4b02..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-public enum HandRotationDirection {
- LEFT(-1), RIGHT(1);
-
- private final int indexOffset;
-
- HandRotationDirection(int i) {
- this.indexOffset = i;
- }
-
- public int getIndexOffset() {
- return indexOffset;
- }
-
- public static HandRotationDirection forAge(int age) {
- // clockwise (pass to the left) at age 1, and alternating
- return age % 2 == 0 ? HandRotationDirection.RIGHT : HandRotationDirection.LEFT;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java b/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java
deleted file mode 100644
index 4a8bc143..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.api.HandCard;
-import org.luxons.sevenwonders.game.api.Table;
-
-public class Hands {
-
- private final int nbPlayers;
-
- private Map<Integer, List<Card>> hands;
-
- Hands(Map<Integer, List<Card>> hands, int nbPlayers) {
- this.hands = hands;
- this.nbPlayers = nbPlayers;
- }
-
- public List<Card> get(int playerIndex) {
- if (!hands.containsKey(playerIndex)) {
- throw new PlayerIndexOutOfBoundsException(playerIndex);
- }
- return hands.get(playerIndex);
- }
-
- public List<HandCard> createHand(Table table, int playerIndex) {
- return hands.get(playerIndex)
- .stream()
- .map(c -> new HandCard(c, table, playerIndex))
- .collect(Collectors.toList());
- }
-
- public Hands rotate(HandRotationDirection direction) {
- Map<Integer, List<Card>> newHands = new HashMap<>(hands.size());
- for (int i = 0; i < nbPlayers; i++) {
- int newIndex = Math.floorMod(i + direction.getIndexOffset(), nbPlayers);
- newHands.put(newIndex, hands.get(i));
- }
- return new Hands(newHands, nbPlayers);
- }
-
- public boolean isEmpty() {
- return hands.values().stream().allMatch(List::isEmpty);
- }
-
- public boolean maxOneCardRemains() {
- return hands.values().stream().mapToInt(List::size).max().orElse(0) <= 1;
- }
-
- public List<Card> gatherAndClear() {
- List<Card> remainingCards = hands.values().stream().flatMap(List::stream).collect(Collectors.toList());
- hands.clear();
- return remainingCards;
- }
-
- class PlayerIndexOutOfBoundsException extends ArrayIndexOutOfBoundsException {
- PlayerIndexOutOfBoundsException(int index) {
- super(index);
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java b/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java
deleted file mode 100644
index f6d7934c..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-public class Requirements {
-
- private int gold;
-
- private Resources resources = new Resources();
-
- public int getGold() {
- return gold;
- }
-
- public void setGold(int gold) {
- this.gold = gold;
- }
-
- public Resources getResources() {
- return resources;
- }
-
- public void setResources(Resources resources) {
- this.resources = resources;
- }
-
- boolean isAffordedBy(Board board) {
- return board.getGold() >= gold && board.getProduction().contains(resources);
- }
-
- public boolean couldBeAffordedBy(Table table, int playerIndex) {
- Board board = table.getBoard(playerIndex);
- if (board.getGold() < gold) {
- return false;
- }
- if (board.getProduction().contains(resources)) {
- return true;
- }
- Resources leftToPay = resources.minus(board.getProduction().getFixedResources());
- // TODO take into account resources buyable from neighbours
- return true;
- }
-
- public boolean isAffordedBy(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- Board board = table.getBoard(playerIndex);
- if (isAffordedBy(board)) {
- return true;
- }
- int totalPrice = board.getTradingRules().computeCost(boughtResources);
- if (board.getGold() < totalPrice) {
- return false;
- }
- Resources totalBoughtResources = getTotalResources(boughtResources);
- Resources remainingResources = this.resources.minus(totalBoughtResources);
- return board.getProduction().contains(remainingResources);
- }
-
- private Resources getTotalResources(List<BoughtResources> boughtResources) {
- return boughtResources.stream().map(BoughtResources::getResources).reduce(new Resources(), (r1, r2) -> {
- r1.addAll(r2);
- return r1;
- });
- }
-
- void pay(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- table.getBoard(playerIndex).removeGold(gold);
- payBoughtResources(table, playerIndex, boughtResources);
- }
-
- private void payBoughtResources(Table table, int playerIndex, List<BoughtResources> boughtResourcesList) {
- boughtResourcesList.forEach(res -> payBoughtResources(table, playerIndex, res));
- }
-
- private void payBoughtResources(Table table, int playerIndex, BoughtResources boughtResources) {
- Board board = table.getBoard(playerIndex);
- int price = board.getTradingRules().computeCost(boughtResources);
- board.removeGold(price);
- RelativeBoardPosition providerPosition = boughtResources.getProvider().getBoardPosition();
- Board providerBoard = table.getBoard(playerIndex, providerPosition);
- providerBoard.addGold(price);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java b/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java
deleted file mode 100644
index 4c63718b..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Decks;
-import org.luxons.sevenwonders.game.data.definitions.DecksDefinition;
-import org.luxons.sevenwonders.game.data.definitions.WonderDefinition;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-public class GameDefinition {
-
- /**
- * This value is heavily dependent on the JSON data. Any change must be carefully thought through.
- */
- private static final int MIN_PLAYERS = 3;
-
- /**
- * This value is heavily dependent on the JSON data. Any change must be carefully thought through.
- */
- private static final int MAX_PLAYERS = 7;
-
- private WonderDefinition[] wonders;
-
- private DecksDefinition decksDefinition;
-
- GameDefinition(WonderDefinition[] wonders, DecksDefinition decksDefinition) {
- this.wonders = wonders;
- this.decksDefinition = decksDefinition;
- }
-
- public int getMinPlayers() {
- return MIN_PLAYERS;
- }
-
- public int getMaxPlayers() {
- return MAX_PLAYERS;
- }
-
- public Game initGame(long id, CustomizableSettings customSettings, List<Player> orderedPlayers) {
- Settings settings = new Settings(orderedPlayers.size(), customSettings);
- List<Board> boards = assignBoards(settings, orderedPlayers);
- Decks decks = decksDefinition.create(settings);
- return new Game(id, settings, orderedPlayers, boards, decks);
- }
-
- private List<Board> assignBoards(Settings settings, List<Player> orderedPlayers) {
- List<WonderDefinition> randomizedWonders = Arrays.asList(wonders);
- Collections.shuffle(randomizedWonders, settings.getRandom());
-
- List<Board> boards = new ArrayList<>(orderedPlayers.size());
- for (int i = 0; i < orderedPlayers.size(); i++) {
- Player player = orderedPlayers.get(i);
- WonderDefinition def = randomizedWonders.get(i);
- Wonder w = def.create(settings);
- Board b = new Board(w, player, settings);
- boards.add(b);
- }
- return boards;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java b/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java
deleted file mode 100644
index 30457d86..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.lang.reflect.Type;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.data.definitions.DecksDefinition;
-import org.luxons.sevenwonders.game.data.definitions.WonderDefinition;
-import org.luxons.sevenwonders.game.data.serializers.NumericEffectSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ProductionIncreaseSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourceTypeSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourceTypesSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourcesSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ScienceProgressSerializer;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.springframework.stereotype.Component;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-
-@Component
-public class GameDefinitionLoader {
-
- private static final String BASE_PACKAGE = GameDefinitionLoader.class.getPackage().getName();
-
- private static final String BASE_PACKAGE_PATH = '/' + BASE_PACKAGE.replace('.', '/');
-
- private static final String CARDS_FILE = "cards.json";
-
- private static final String WONDERS_FILE = "wonders.json";
-
- private final GameDefinition gameDefinition;
-
- public GameDefinitionLoader() {
- gameDefinition = load();
- }
-
- public GameDefinition getGameDefinition() {
- return gameDefinition;
- }
-
- private static GameDefinition load() {
- return new GameDefinition(loadWonders(), loadDecks());
- }
-
- private static WonderDefinition[] loadWonders() {
- return readJsonFile(WONDERS_FILE, WonderDefinition[].class);
- }
-
- private static DecksDefinition loadDecks() {
- return readJsonFile(CARDS_FILE, DecksDefinition.class);
- }
-
- private static <T> T readJsonFile(String filename, Class<T> clazz) {
- InputStream in = GameDefinitionLoader.class.getResourceAsStream(BASE_PACKAGE_PATH + '/' + filename);
- Reader reader = new BufferedReader(new InputStreamReader(in));
- Gson gson = createGson();
- return gson.fromJson(reader, clazz);
- }
-
- private static Gson createGson() {
- Type resourceTypeList = new TypeToken<List<ResourceType>>() {}.getType();
- return new GsonBuilder().disableHtmlEscaping()
- .registerTypeAdapter(Resources.class, new ResourcesSerializer())
- .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer())
- .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer())
- .registerTypeAdapter(ProductionIncrease.class, new ProductionIncreaseSerializer())
- .registerTypeAdapter(MilitaryReinforcements.class, new NumericEffectSerializer())
- .registerTypeAdapter(RawPointsIncrease.class, new NumericEffectSerializer())
- .registerTypeAdapter(GoldIncrease.class, new NumericEffectSerializer())
- .registerTypeAdapter(ScienceProgress.class, new ScienceProgressSerializer())
- .create();
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java
deleted file mode 100644
index 621bed2c..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.List;
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.cards.Requirements;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class CardDefinition implements Definition<Card> {
-
- private String name;
-
- private Color color;
-
- private Requirements requirements;
-
- private EffectsDefinition effect;
-
- private String chainParent;
-
- private List<String> chainChildren;
-
- private Map<Integer, Integer> countPerNbPlayer;
-
- private String image;
-
- @Override
- public Card create(Settings settings) {
- return new Card(name, color, requirements, effect.create(settings), chainParent, chainChildren, image);
- }
-
- Map<Integer, Integer> getCountPerNbPlayer() {
- return countPerNbPlayer;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java
deleted file mode 100644
index 6f97e55f..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.cards.Decks;
-
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson
-public class DecksDefinition implements Definition<Decks> {
-
- private List<CardDefinition> age1;
-
- private List<CardDefinition> age2;
-
- private List<CardDefinition> age3;
-
- private String age1Back;
-
- private String age2Back;
-
- private String age3Back;
-
- private List<CardDefinition> guildCards;
-
- @Override
- public Decks create(Settings settings) {
- Map<Integer, List<Card>> cardsPerAge = new HashMap<>();
- cardsPerAge.put(1, prepareStandardDeck(age1, settings, age1Back));
- cardsPerAge.put(2, prepareStandardDeck(age2, settings, age2Back));
- cardsPerAge.put(3, prepareAge3Deck(settings));
- return new Decks(cardsPerAge);
- }
-
- private static List<Card> prepareStandardDeck(List<CardDefinition> defs, Settings settings, String backImage) {
- CardBack back = new CardBack(backImage);
- List<Card> cards = createDeck(defs, settings, back);
- Collections.shuffle(cards, settings.getRandom());
- return cards;
- }
-
- private List<Card> prepareAge3Deck(Settings settings) {
- CardBack back = new CardBack(age3Back);
- List<Card> age3deck = createDeck(age3, settings, back);
- age3deck.addAll(createGuildCards(settings, back));
- Collections.shuffle(age3deck, settings.getRandom());
- return age3deck;
- }
-
- private static List<Card> createDeck(List<CardDefinition> defs, Settings settings, CardBack back) {
- List<Card> cards = new ArrayList<>();
- for (CardDefinition def : defs) {
- for (int i = 0; i < def.getCountPerNbPlayer().get(settings.getNbPlayers()); i++) {
- Card card = def.create(settings);
- card.setBack(back);
- cards.add(card);
- }
- }
- return cards;
- }
-
- private List<Card> createGuildCards(Settings settings, CardBack back) {
- List<Card> guild = guildCards.stream()
- .map((def) -> def.create(settings))
- .peek(c -> c.setBack(back))
- .collect(Collectors.toList());
- Collections.shuffle(guild, settings.getRandom());
- return guild.subList(0, settings.getNbPlayers() + 2);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java
deleted file mode 100644
index 6c6b4b19..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import org.luxons.sevenwonders.game.Settings;
-
-/**
- * Represents a deserialized JSON definition of some data about the game. It is settings-agnostic. An instance of
- * in-game data can be generated from this, given specific game settings.
- *
- * @param <T>
- * the type of in-game object that can be generated from this definition
- */
-public interface Definition<T> {
-
- /**
- * Creates a T object from the given settings. This method mustn't mutate this Definition as it may be called
- * multiple times with different settings.
- *
- * @param settings
- * the game settings to use to generate a game-specific object from this definition
- *
- * @return the new game-specific object created from this definition
- */
- T create(Settings settings);
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java
deleted file mode 100644
index e35463d4..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.effects.BonusPerBoardElement;
-import org.luxons.sevenwonders.game.effects.Discount;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-import org.luxons.sevenwonders.game.effects.SpecialAbilityActivation;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class EffectsDefinition implements Definition<List<Effect>> {
-
- private GoldIncrease gold;
-
- private MilitaryReinforcements military;
-
- private ScienceProgress science;
-
- private Discount discount;
-
- private BonusPerBoardElement perBoardElement;
-
- private ProductionIncrease production;
-
- private RawPointsIncrease points;
-
- private SpecialAbility action;
-
- @Override
- public List<Effect> create(Settings settings) {
- List<Effect> effects = new ArrayList<>();
- if (gold != null) {
- effects.add(gold);
- }
- if (military != null) {
- effects.add(military);
- }
- if (science != null) {
- effects.add(science);
- }
- if (discount != null) {
- effects.add(discount);
- }
- if (perBoardElement != null) {
- effects.add(perBoardElement);
- }
- if (production != null) {
- effects.add(production);
- }
- if (points != null) {
- effects.add(points);
- }
- if (action != null) {
- effects.add(new SpecialAbilityActivation(action));
- }
- return effects;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java
deleted file mode 100644
index a972a517..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson
-public class WonderDefinition implements Definition<Wonder> {
-
- private String name;
-
- private Map<WonderSide, WonderSideDefinition> sides;
-
- @Override
- public Wonder create(Settings settings) {
- Wonder wonder = new Wonder();
- wonder.setName(name);
-
- WonderSideDefinition wonderSideDef = sides.get(settings.pickWonderSide());
- wonder.setInitialResource(wonderSideDef.getInitialResource());
- wonder.setStages(wonderSideDef.createStages(settings));
- wonder.setImage(wonderSideDef.getImage());
- return wonder;
- }
-
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java
deleted file mode 100644
index 08c85f57..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-public enum WonderSide {
- A, B
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java
deleted file mode 100644
index 9b2bc2d5..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.wonders.WonderStage;
-
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson
-class WonderSideDefinition {
-
- private ResourceType initialResource;
-
- private List<WonderStageDefinition> stages;
-
- private String image;
-
- ResourceType getInitialResource() {
- return initialResource;
- }
-
- List<WonderStage> createStages(Settings settings) {
- return stages.stream().map(def -> def.create(settings)).collect(Collectors.toList());
- }
-
- String getImage() {
- return image;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java
deleted file mode 100644
index 08aaad14..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.Random;
-
-public enum WonderSidePickMethod {
- ALL_A {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return WonderSide.A;
- }
- },
- ALL_B {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return WonderSide.B;
- }
- },
- EACH_RANDOM {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return random.nextBoolean() ? WonderSide.A : WonderSide.B;
- }
- },
- SAME_RANDOM_FOR_ALL {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- if (lastPickedSide == null) {
- return random.nextBoolean() ? WonderSide.A : WonderSide.B;
- } else {
- return lastPickedSide;
- }
- }
- };
-
- public abstract WonderSide pickSide(Random random, WonderSide lastPickedSide);
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java b/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java
deleted file mode 100644
index 887b414a..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Requirements;
-import org.luxons.sevenwonders.game.wonders.WonderStage;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class WonderStageDefinition implements Definition<WonderStage> {
-
- private Requirements requirements;
-
- private EffectsDefinition effects;
-
- @Override
- public WonderStage create(Settings settings) {
- WonderStage stage = new WonderStage();
- stage.setRequirements(requirements);
- stage.setEffects(effects.create(settings));
- return stage;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java b/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
deleted file mode 100644
index c1a51f24..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class NumericEffectSerializer implements JsonSerializer<Effect>, JsonDeserializer<Effect> {
-
- @Override
- public JsonElement serialize(Effect effect, Type typeOfSrc, JsonSerializationContext context) {
- int value;
- if (MilitaryReinforcements.class.equals(typeOfSrc)) {
- value = ((MilitaryReinforcements)effect).getCount();
- } else if (GoldIncrease.class.equals(typeOfSrc)) {
- value = ((GoldIncrease)effect).getAmount();
- } else if (RawPointsIncrease.class.equals(typeOfSrc)) {
- value = ((RawPointsIncrease)effect).getPoints();
- } else {
- throw new IllegalArgumentException("Unknown numeric effect " + typeOfSrc.getTypeName());
- }
- return new JsonPrimitive(value);
- }
-
- @Override
- public Effect deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
- JsonParseException {
- int value = json.getAsInt();
- if (MilitaryReinforcements.class.equals(typeOfT)) {
- return new MilitaryReinforcements(value);
- } else if (GoldIncrease.class.equals(typeOfT)) {
- return new GoldIncrease(value);
- } else if (RawPointsIncrease.class.equals(typeOfT)) {
- return new RawPointsIncrease(value);
- }
- throw new IllegalArgumentException("Unknown numeric effet " + typeOfT.getTypeName());
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java b/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java
deleted file mode 100644
index 6c70a44d..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ProductionIncreaseSerializer implements JsonSerializer<ProductionIncrease>,
- JsonDeserializer<ProductionIncrease> {
-
- @Override
- public JsonElement serialize(ProductionIncrease productionIncrease, Type typeOfSrc,
- JsonSerializationContext context) {
- Production production = productionIncrease.getProduction();
- Resources fixedResources = production.getFixedResources();
- List<Set<ResourceType>> choices = production.getAlternativeResources();
- if (fixedResources.isEmpty()) {
- return serializeAsChoice(choices, context);
- } else if (choices.isEmpty()) {
- return serializeAsResources(fixedResources, context);
- } else {
- throw new IllegalArgumentException("Cannot serialize a production with mixed fixed resources and choices");
- }
- }
-
- private JsonElement serializeAsResources(Resources fixedResources, JsonSerializationContext context) {
- return context.serialize(fixedResources);
- }
-
- private JsonElement serializeAsChoice(List<Set<ResourceType>> choices, JsonSerializationContext context) {
- if (choices.isEmpty()) {
- return JsonNull.INSTANCE;
- }
- if (choices.size() > 1) {
- throw new IllegalArgumentException("Cannot serialize a production with more than one choice");
- }
- String str = choices.get(0).stream()
- .map(ResourceType::getSymbol)
- .map(Object::toString)
- .collect(Collectors.joining("/"));
- return context.serialize(str);
- }
-
- @Override
- public ProductionIncrease deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
- JsonParseException {
- String s = json.getAsString();
- ProductionIncrease productionIncrease = new ProductionIncrease();
- Production production = new Production();
- if (s.contains("/")) {
- production.addChoice(createChoice(s));
- } else {
- Resources fixedResources = context.deserialize(json, Resources.class);
- production.addAll(fixedResources);
- }
- productionIncrease.setProduction(production);
- return productionIncrease;
- }
-
- private ResourceType[] createChoice(String choiceStr) {
- String[] symbols = choiceStr.split("/");
- ResourceType[] choice = new ResourceType[symbols.length];
- for (int i = 0; i < symbols.length; i++) {
- if (symbols[i].length() != 1) {
- throw new IllegalArgumentException("Choice elements must be resource types, got " + symbols[i]);
- }
- choice[i] = ResourceType.fromSymbol(symbols[i].charAt(0));
- }
- return choice;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java b/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java
deleted file mode 100644
index 145063eb..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-public class ResourceTypeSerializer implements JsonSerializer<ResourceType>, JsonDeserializer<ResourceType> {
-
- @Override
- public JsonElement serialize(ResourceType type, Type typeOfSrc, JsonSerializationContext context) {
- return new JsonPrimitive(type.getSymbol());
- }
-
- @Override
- public ResourceType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
- JsonParseException {
- String str = json.getAsString();
- if (str.isEmpty()) {
- throw new IllegalArgumentException("Empty string is not a valid resource type");
- }
- return ResourceType.fromSymbol(str.charAt(0));
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java b/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java
deleted file mode 100644
index 8aca5561..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-public class ResourceTypesSerializer implements JsonSerializer<List<ResourceType>>, JsonDeserializer<List<ResourceType>> {
-
- @Override
- public JsonElement serialize(List<ResourceType> resources, Type typeOfSrc, JsonSerializationContext context) {
- String s = resources.stream()
- .map(ResourceType::getSymbol)
- .map(Object::toString)
- .collect(Collectors.joining());
- return new JsonPrimitive(s);
- }
-
- @Override
- public List<ResourceType> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
- JsonParseException {
- String s = json.getAsString();
- List<ResourceType> resources = new ArrayList<>();
- for (char c : s.toCharArray()) {
- resources.add(ResourceType.fromSymbol(c));
- }
- return resources;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java b/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java
deleted file mode 100644
index efeafd15..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-public class ResourcesSerializer implements JsonSerializer<Resources>, JsonDeserializer<Resources> {
-
- @Override
- public JsonElement serialize(Resources resources, Type typeOfSrc, JsonSerializationContext context) {
- String s = resources.getQuantities()
- .entrySet()
- .stream()
- .flatMap(e -> Stream.generate(() -> e.getKey().getSymbol()).limit(e.getValue()))
- .map(Object::toString)
- .collect(Collectors.joining());
- return s.isEmpty() ? JsonNull.INSTANCE : new JsonPrimitive(s);
- }
-
- @Override
- public Resources deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
- JsonParseException {
- String s = json.getAsString();
- Resources resources = new Resources();
- for (char c : s.toCharArray()) {
- resources.add(ResourceType.fromSymbol(c), 1);
- }
- return resources;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java b/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java
deleted file mode 100644
index b6e38540..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.boards.Science;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ScienceProgressSerializer implements JsonSerializer<ScienceProgress>, JsonDeserializer<ScienceProgress> {
-
- @Override
- public JsonElement serialize(ScienceProgress scienceProgress, Type typeOfSrc, JsonSerializationContext context) {
- Science science = scienceProgress.getScience();
-
- if (science.size() > 1) {
- throw new UnsupportedOperationException("Cannot serialize science containing more than one element");
- }
-
- for (ScienceType type : ScienceType.values()) {
- int quantity = science.getQuantity(type);
- if (quantity == 1) {
- return context.serialize(type);
- }
- }
-
- if (science.getJokers() == 1) {
- return new JsonPrimitive("any");
- }
-
- return JsonNull.INSTANCE;
- }
-
- @Override
- public ScienceProgress deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
- JsonParseException {
- String s = json.getAsString();
- ScienceProgress scienceProgress = new ScienceProgress();
- Science science = new Science();
- if ("any".equals(s)) {
- science.addJoker(1);
- } else {
- science.add(deserializeScienceType(json, context), 1);
- }
- scienceProgress.setScience(science);
- return scienceProgress;
- }
-
- private ScienceType deserializeScienceType(JsonElement json, JsonDeserializationContext context) {
- ScienceType type = context.deserialize(json, ScienceType.class);
- if (type == null) {
- throw new IllegalArgumentException("Invalid science type " + json.getAsString());
- }
- return type;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java b/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java
deleted file mode 100644
index e9f9fe5f..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.BoardElementType;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.Color;
-
-public class BonusPerBoardElement implements Effect {
-
- private List<RelativeBoardPosition> boards;
-
- private int gold;
-
- private int points;
-
- private BoardElementType type;
-
- // only relevant if type=CARD
- private List<Color> colors;
-
- public List<RelativeBoardPosition> getBoards() {
- return boards;
- }
-
- public void setBoards(List<RelativeBoardPosition> boards) {
- this.boards = boards;
- }
-
- public int getGold() {
- return gold;
- }
-
- public void setGold(int gold) {
- this.gold = gold;
- }
-
- public int getPoints() {
- return points;
- }
-
- public void setPoints(int points) {
- this.points = points;
- }
-
- public BoardElementType getType() {
- return type;
- }
-
- public void setType(BoardElementType type) {
- this.type = type;
- }
-
- public List<Color> getColors() {
- return colors;
- }
-
- public void setColors(List<Color> colors) {
- this.colors = colors;
- }
-
- @Override
- public void apply(Table table, int playerIndex) {
- int goldGain = gold * computeNbOfMatchingElementsIn(table, playerIndex);
- Board board = table.getBoard(playerIndex);
- board.addGold(goldGain);
- }
-
- @Override
- public int computePoints(Table table, int playerIndex) {
- return points * computeNbOfMatchingElementsIn(table, playerIndex);
- }
-
- private int computeNbOfMatchingElementsIn(Table table, int playerIndex) {
- return boards.stream()
- .map(pos -> table.getBoard(playerIndex, pos))
- .mapToInt(this::computeNbOfMatchingElementsIn)
- .sum();
- }
-
- private int computeNbOfMatchingElementsIn(Board board) {
- return type.getElementCount(board, colors);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java b/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java
deleted file mode 100644
index 3a44574b..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.Provider;
-import org.luxons.sevenwonders.game.resources.TradingRules;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-public class Discount extends InstantOwnBoardEffect {
-
- private final List<ResourceType> resourceTypes = new ArrayList<>();
-
- private final List<Provider> providers = new ArrayList<>();
-
- private int discountedPrice = 1;
-
- public List<ResourceType> getResourceTypes() {
- return resourceTypes;
- }
-
- public List<Provider> getProviders() {
- return providers;
- }
-
- public int getDiscountedPrice() {
- return discountedPrice;
- }
-
- public void setDiscountedPrice(int discountedPrice) {
- this.discountedPrice = discountedPrice;
- }
-
- @Override
- public void apply(Board board) {
- TradingRules rules = board.getTradingRules();
- for (ResourceType type : resourceTypes) {
- for (Provider provider : providers) {
- rules.setCost(type, provider, discountedPrice);
- }
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java b/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java
deleted file mode 100644
index 692eaea0..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-
-/**
- * Represents an effect than can be applied to a player's board when playing a card or building his wonder. The effect
- * may affect (or depend on) the adjacent boards. It can have an instantaneous effect on the board, or be postponed to
- * the end of game where point calculations take place.
- */
-public interface Effect {
-
- void apply(Table table, int playerIndex);
-
- int computePoints(Table table, int playerIndex);
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java b/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java
deleted file mode 100644
index 1bae16a6..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-
-public abstract class EndGameEffect implements Effect {
-
- @Override
- public void apply(Table table, int playerIndex) {
- // EndGameEffects don't do anything when applied to the board, they simply give more points in the end
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java b/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java
deleted file mode 100644
index 79e7bd1a..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.boards.Board;
-
-public class GoldIncrease extends InstantOwnBoardEffect {
-
- private final int amount;
-
- public int getAmount() {
- return amount;
- }
-
- public GoldIncrease(int amount) {
- this.amount = amount;
- }
-
- @Override
- public void apply(Board board) {
- board.addGold(amount);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- GoldIncrease that = (GoldIncrease)o;
- return amount == that.amount;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(amount);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java b/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java
deleted file mode 100644
index 8f4340cf..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-
-public abstract class InstantOwnBoardEffect implements Effect {
-
- @Override
- public void apply(Table table, int playerIndex) {
- apply(table.getBoard(playerIndex));
- }
-
- protected abstract void apply(Board board);
-
- @Override
- public int computePoints(Table table, int playerIndex) {
- // InstantEffects are only important when applied to the board, they don't give extra points in the end
- return 0;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java b/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java
deleted file mode 100644
index b08e2f59..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.boards.Board;
-
-public class MilitaryReinforcements extends InstantOwnBoardEffect {
-
- private final int count;
-
- public int getCount() {
- return count;
- }
-
- public MilitaryReinforcements(int count) {
- this.count = count;
- }
-
- @Override
- public void apply(Board board) {
- board.getMilitary().addShields(count);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- MilitaryReinforcements that = (MilitaryReinforcements)o;
- return count == that.count;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(count);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java b/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java
deleted file mode 100644
index 9724dfcd..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.Production;
-
-public class ProductionIncrease extends InstantOwnBoardEffect {
-
- private Production production = new Production();
-
- public Production getProduction() {
- return production;
- }
-
- public void setProduction(Production production) {
- this.production = production;
- }
-
- @Override
- public void apply(Board board) {
- board.getProduction().addAll(production);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- ProductionIncrease that = (ProductionIncrease)o;
- return Objects.equals(production, that.production);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(production);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java b/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java
deleted file mode 100644
index 0d117cec..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.api.Table;
-
-public class RawPointsIncrease extends EndGameEffect {
-
- private final int points;
-
- public int getPoints() {
- return points;
- }
-
- public RawPointsIncrease(int points) {
- this.points = points;
- }
-
- @Override
- public int computePoints(Table table, int playerIndex) {
- return points;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- RawPointsIncrease that = (RawPointsIncrease)o;
- return points == that.points;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(points);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java b/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java
deleted file mode 100644
index 4e6764ee..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.Science;
-
-public class ScienceProgress extends InstantOwnBoardEffect {
-
- private Science science;
-
- public Science getScience() {
- return science;
- }
-
- public void setScience(Science science) {
- this.science = science;
- }
-
- @Override
- public void apply(Board board) {
- board.getScience().addAll(science);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java b/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java
deleted file mode 100644
index 5de87784..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public enum SpecialAbility {
- /**
- * The player can play the last card of each age instead of discarding it. This card can be played by paying its
- * cost, discarded to gain 3 coins or used in the construction of his or her Wonder.
- */
- PLAY_LAST_CARD,
-
- /**
- * Once per age, a player can construct a building from his or her hand for free.
- */
- ONE_FREE_PER_AGE,
-
- /**
- * The player can look at all cards discarded since the beginning of the game, pick one and build it for free.
- */
- PLAY_DISCARDED,
-
- /**
- * The player can, at the end of the game, “copy” a Guild of his or her choice (purple card), built by one of his or
- * her two neighboring cities.
- */
- COPY_GUILD {
- @Override
- public int computePoints(Table table, int playerIndex) {
- Card copiedGuild = table.getBoard(playerIndex).getCopiedGuild();
- if (copiedGuild == null) {
- throw new IllegalStateException("The copied Guild has not been chosen, cannot compute points");
- }
- return copiedGuild.getEffects().stream().mapToInt(e -> e.computePoints(table, playerIndex)).sum();
- }
- };
-
- protected void apply(Board board) {
- board.addSpecial(this);
- }
-
- public int computePoints(Table table, int playerIndex) {
- return 0;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java b/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java
deleted file mode 100644
index a5953c2f..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-
-public class SpecialAbilityActivation implements Effect {
-
- private final SpecialAbility specialAbility;
-
- public SpecialAbilityActivation(SpecialAbility specialAbility) {
- this.specialAbility = specialAbility;
- }
-
- public SpecialAbility getSpecialAbility() {
- return specialAbility;
- }
-
- @Override
- public void apply(Table table, int playerIndex) {
- specialAbility.apply(table.getBoard(playerIndex));
- }
-
- @Override
- public int computePoints(Table table, int playerIndex) {
- return specialAbility.computePoints(table, playerIndex);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java b/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java
deleted file mode 100644
index bddd6ec6..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class BuildWonderMove extends CardFromHandMove {
-
- BuildWonderMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public boolean isValid(Table table, List<Card> playerHand) {
- if (!super.isValid(table, playerHand)) {
- return false;
- }
- Board board = table.getBoard(getPlayerIndex());
- return board.getWonder().isNextStageBuildable(table, getPlayerIndex(), getBoughtResources());
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.getWonder().buildLevel(getCard().getBack());
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- int playerIndex = getPlayerIndex();
- Board board = table.getBoard(playerIndex);
- board.getWonder().activateLastBuiltStage(table, playerIndex, getBoughtResources());
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java b/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java
deleted file mode 100644
index 7bbee1e5..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public abstract class CardFromHandMove extends Move {
-
- CardFromHandMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public boolean isValid(Table table, List<Card> playerHand) {
- return playerHand.contains(getCard());
- }
-
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java b/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java
deleted file mode 100644
index 5ebde772..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-
-public class CopyGuildMove extends Move {
-
- CopyGuildMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public boolean isValid(Table table, List<Card> playerHand) {
- Board board = table.getBoard(getPlayerIndex());
- if (!board.hasSpecial(SpecialAbility.COPY_GUILD)) {
- return false;
- }
- if (getCard().getColor() != Color.PURPLE) {
- return false;
- }
- boolean leftNeighbourHasIt = neighbourHasTheCard(table, RelativeBoardPosition.LEFT);
- boolean rightNeighbourHasIt = neighbourHasTheCard(table, RelativeBoardPosition.RIGHT);
- return leftNeighbourHasIt || rightNeighbourHasIt;
- }
-
- private boolean neighbourHasTheCard(Table table, RelativeBoardPosition position) {
- Board neighbourBoard = table.getBoard(getPlayerIndex(), position);
- return neighbourBoard.getPlayedCards().contains(getCard());
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- // nothing special to do here
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.setCopiedGuild(getCard());
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java b/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java
deleted file mode 100644
index 076a593c..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class DiscardMove extends CardFromHandMove {
-
- DiscardMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- discardedCards.add(getCard());
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.addGold(settings.getDiscardedCardGold());
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/moves/Move.java b/src/main/java/org/luxons/sevenwonders/game/moves/Move.java
deleted file mode 100644
index 8b6b60a8..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/moves/Move.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-
-public abstract class Move {
-
- private int playerIndex;
-
- private Card card;
-
- private MoveType type;
-
- private List<BoughtResources> boughtResources = new ArrayList<>();
-
- Move(int playerIndex, Card card, PlayerMove move) {
- this.playerIndex = playerIndex;
- this.card = card;
- this.type = move.getType();
- this.boughtResources = move.getBoughtResources();
- }
-
- public int getPlayerIndex() {
- return playerIndex;
- }
-
- public Card getCard() {
- return card;
- }
-
- public MoveType getType() {
- return type;
- }
-
- public List<BoughtResources> getBoughtResources() {
- return boughtResources;
- }
-
- public abstract boolean isValid(Table table, List<Card> playerHand);
-
- public abstract void place(Table table, List<Card> discardedCards, Settings settings);
-
- public abstract void activate(Table table, List<Card> discardedCards, Settings settings);
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java b/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java
deleted file mode 100644
index bf64344d..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public enum MoveType {
- PLAY {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new PlayCardMove(playerIndex, card, move);
- }
- },
- PLAY_FREE {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new PlayFreeCardMove(playerIndex, card, move);
- }
- },
- UPGRADE_WONDER {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new BuildWonderMove(playerIndex, card, move);
- }
- },
- DISCARD {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new DiscardMove(playerIndex, card, move);
- }
- },
- COPY_GUILD {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new CopyGuildMove(playerIndex, card, move);
- }
- };
-
- public abstract Move resolve(int playerIndex, Card card, PlayerMove move);
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java b/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java
deleted file mode 100644
index affebc4a..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class PlayCardMove extends CardFromHandMove {
-
- PlayCardMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public boolean isValid(Table table, List<Card> playerHand) {
- if (!super.isValid(table, playerHand)) {
- return false;
- }
- return getCard().getRequirements().isAffordedBy(table, getPlayerIndex(), getBoughtResources());
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.addCard(getCard());
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- getCard().applyTo(table, getPlayerIndex(), getBoughtResources());
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java b/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java
deleted file mode 100644
index fb28b09c..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class PlayFreeCardMove extends CardFromHandMove {
-
- PlayFreeCardMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public boolean isValid(Table table, List<Card> playerHand) {
- if (!super.isValid(table, playerHand)) {
- return false;
- }
- Board board = table.getBoard(getPlayerIndex());
- return board.canPlayFreeCard(table.getCurrentAge());
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.addCard(getCard());
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- // only apply effects, without paying the cost
- getCard().getEffects().forEach(e -> e.apply(table, getPlayerIndex()));
- Board board = table.getBoard(getPlayerIndex());
- board.consumeFreeCard(table.getCurrentAge());
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java b/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java
deleted file mode 100644
index ec261c8c..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-public class BoughtResources {
-
- private Provider provider;
-
- private Resources resources;
-
- public Provider getProvider() {
- return provider;
- }
-
- public void setProvider(Provider provider) {
- this.provider = provider;
- }
-
- public Resources getResources() {
- return resources;
- }
-
- public void setResources(Resources resources) {
- this.resources = resources;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/resources/Production.java b/src/main/java/org/luxons/sevenwonders/game/resources/Production.java
deleted file mode 100644
index b7701c27..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/resources/Production.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Set;
-
-public class Production {
-
- private final Resources fixedResources = new Resources();
-
- private final List<Set<ResourceType>> alternativeResources = new ArrayList<>();
-
- public void addFixedResource(ResourceType type, int quantity) {
- fixedResources.add(type, quantity);
- }
-
- public void addChoice(ResourceType... options) {
- EnumSet<ResourceType> optionSet = EnumSet.noneOf(ResourceType.class);
- optionSet.addAll(Arrays.asList(options));
- alternativeResources.add(optionSet);
- }
-
- public void addAll(Resources resources) {
- fixedResources.addAll(resources);
- }
-
- public void addAll(Production production) {
- fixedResources.addAll(production.getFixedResources());
- alternativeResources.addAll(production.getAlternativeResources());
- }
-
- public Resources getFixedResources() {
- return fixedResources;
- }
-
- public List<Set<ResourceType>> getAlternativeResources() {
- return alternativeResources;
- }
-
- public boolean contains(Resources resources) {
- if (fixedResources.contains(resources)) {
- return true;
- }
- Resources remaining = resources.minus(fixedResources);
- return containedInAlternatives(remaining);
- }
-
- private boolean containedInAlternatives(Resources resources) {
- return containedInAlternatives(resources, alternativeResources);
- }
-
- private static boolean containedInAlternatives(Resources resources, List<Set<ResourceType>> alternatives) {
- if (resources.isEmpty()) {
- return true;
- }
- for (Entry<ResourceType, Integer> entry : resources.getQuantities().entrySet()) {
- ResourceType type = entry.getKey();
- int count = entry.getValue();
- if (count <= 0) {
- continue;
- }
- Set<ResourceType> candidate = findFirstAlternativeContaining(alternatives, type);
- if (candidate == null) {
- return false; // no alternative produces the resource of this entry
- }
- entry.setValue(count - 1);
- alternatives.remove(candidate);
- boolean remainingAreContainedToo = containedInAlternatives(resources, alternatives);
- entry.setValue(count);
- alternatives.add(candidate);
- if (remainingAreContainedToo) {
- return true;
- }
- }
- return false;
- }
-
- private static Set<ResourceType> findFirstAlternativeContaining(List<Set<ResourceType>> alternatives, ResourceType type) {
- return alternatives.stream().filter(a -> a.contains(type)).findAny().orElse(null);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- Production that = (Production)o;
- return Objects.equals(fixedResources, that.fixedResources) && Objects.equals(alternativeResources,
- that.alternativeResources);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(fixedResources, alternativeResources);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java b/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java
deleted file mode 100644
index 9c4aa3f9..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-
-public enum Provider {
- LEFT_PLAYER(RelativeBoardPosition.LEFT),
- RIGHT_PLAYER(RelativeBoardPosition.RIGHT);
-
- private final RelativeBoardPosition boardPosition;
-
- Provider(RelativeBoardPosition boardPosition) {
- this.boardPosition = boardPosition;
- }
-
- public RelativeBoardPosition getBoardPosition() {
- return boardPosition;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java b/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java
deleted file mode 100644
index 46d60123..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public enum ResourceType {
- WOOD('W'),
- STONE('S'),
- ORE('O'),
- CLAY('C'),
- GLASS('G'),
- PAPYRUS('P'),
- LOOM('L');
-
- private static final Map<Character, ResourceType> typesPerSymbol = new HashMap<>(7);
- static {
- for (ResourceType type : values()) {
- typesPerSymbol.put(type.symbol, type);
- }
- }
-
- private final Character symbol;
-
- ResourceType(Character symbol) {
- this.symbol = symbol;
- }
-
- public static ResourceType fromSymbol(Character symbol) {
- ResourceType type = typesPerSymbol.get(symbol);
- if (type == null) {
- throw new IllegalArgumentException(String.format("Unknown resource type symbol '%s'", symbol));
- }
- return type;
- }
-
- public Character getSymbol() {
- return symbol;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java b/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java
deleted file mode 100644
index 5bf6f269..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.EnumMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-
-public class Resources {
-
- private final Map<ResourceType, Integer> quantities = new EnumMap<>(ResourceType.class);
-
- public void add(ResourceType type, int quantity) {
- quantities.merge(type, quantity, (x, y) -> x + y);
- }
-
- public void addAll(Resources resources) {
- resources.getQuantities().forEach(this::add);
- }
-
- public int getQuantity(ResourceType type) {
- return quantities.getOrDefault(type, 0);
- }
-
- public Map<ResourceType, Integer> getQuantities() {
- return quantities;
- }
-
- public boolean contains(Resources resources) {
- return resources.quantities.entrySet().stream().allMatch(this::hasAtLeast);
- }
-
- private boolean hasAtLeast(Entry<ResourceType, Integer> quantity) {
- return quantity.getValue() <= getQuantity(quantity.getKey());
- }
-
- public Resources minus(Resources resources) {
- Resources diff = new Resources();
- quantities.forEach((type, count) -> {
- int remainder = count - resources.getQuantity(type);
- diff.quantities.put(type, Math.max(0, remainder));
- });
- return diff;
- }
-
- public boolean isEmpty() {
- return quantities.values().stream().reduce(0, Integer::sum) == 0;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- Resources resources = (Resources)o;
- return Objects.equals(quantities, resources.quantities);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(quantities);
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java b/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java
deleted file mode 100644
index 19409844..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-public class TradingRules {
-
- private final Map<ResourceType, Map<Provider, Integer>> costs = new EnumMap<>(ResourceType.class);
-
- private final int defaultCost;
-
- public TradingRules(int defaultCost) {
- this.defaultCost = defaultCost;
- }
-
- private int getCost(ResourceType type, Provider provider) {
- return costs.computeIfAbsent(type, t -> new EnumMap<>(Provider.class)).getOrDefault(provider, defaultCost);
- }
-
- public void setCost(ResourceType type, Provider provider, int cost) {
- costs.computeIfAbsent(type, t -> new EnumMap<>(Provider.class)).put(provider, cost);
- }
-
- public int computeCost(List<BoughtResources> boughtResources) {
- return boughtResources.stream().mapToInt(this::computeCost).sum();
- }
-
- public int computeCost(BoughtResources boughtResources) {
- Resources resources = boughtResources.getResources();
- int total = 0;
- for (Entry<ResourceType, Integer> entry : resources.getQuantities().entrySet()) {
- ResourceType type = entry.getKey();
- int count = entry.getValue();
- total += getCost(type, boughtResources.getProvider()) * count;
- }
- return total;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java b/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java
deleted file mode 100644
index 42acec54..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.luxons.sevenwonders.game.scoring;
-
-import java.util.HashMap;
-
-import org.luxons.sevenwonders.game.Player;
-
-public class PlayerScore extends HashMap<ScoreCategory, Integer> {
-
- private final Player player;
-
- private final int boardGold;
-
- private int totalPoints = 0;
-
- public PlayerScore(Player player, int boardGold) {
- this.player = player;
- this.boardGold = boardGold;
- }
-
- @Override
- public Integer put(ScoreCategory category, Integer points) {
- totalPoints += points;
- return super.put(category, points);
- }
-
- public int getTotalPoints() {
- return totalPoints;
- }
-
- public int getBoardGold() {
- return boardGold;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java b/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java
deleted file mode 100644
index 26b5f8ba..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.game.scoring;
-
-import java.util.Comparator;
-import java.util.PriorityQueue;
-
-public class ScoreBoard {
-
- private static final Comparator<PlayerScore> comparator = Comparator.comparing(PlayerScore::getTotalPoints)
- .thenComparing(PlayerScore::getBoardGold);
-
- private PriorityQueue<PlayerScore> scores;
-
- public ScoreBoard() {
- scores = new PriorityQueue<>(comparator);
- }
-
- public void add(PlayerScore score) {
- scores.add(score);
- }
-
- public PriorityQueue<PlayerScore> getScores() {
- return scores;
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java b/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java
deleted file mode 100644
index 54976072..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.luxons.sevenwonders.game.scoring;
-
-public enum ScoreCategory {
- CIVIL, SCIENCE, MILITARY, TRADE, GUILD, WONDER, GOLD
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java b/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java
deleted file mode 100644
index 3ddddd30..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.luxons.sevenwonders.game.wonders;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-public class Wonder {
-
- private String name;
-
- private ResourceType initialResource;
-
- private List<WonderStage> stages;
-
- private String image;
-
- public Wonder() {
- }
-
- public Wonder(String name, ResourceType initialResource, WonderStage... stages) {
- this.name = name;
- this.initialResource = initialResource;
- this.stages = Arrays.asList(stages);
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public ResourceType getInitialResource() {
- return initialResource;
- }
-
- public void setInitialResource(ResourceType initialResource) {
- this.initialResource = initialResource;
- }
-
- public List<WonderStage> getStages() {
- return stages;
- }
-
- public void setStages(List<WonderStage> stages) {
- this.stages = stages;
- }
-
- public int getNbBuiltStages() {
- return (int)stages.stream().filter(WonderStage::isBuilt).count();
- }
-
- public String getImage() {
- return image;
- }
-
- public void setImage(String image) {
- this.image = image;
- }
-
- public boolean isNextStageBuildable(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- int nextLevel = getNbBuiltStages();
- if (nextLevel == stages.size()) {
- return false;
- }
- return getNextStage().isBuildable(table, playerIndex, boughtResources);
- }
-
- public void buildLevel(CardBack cardBack) {
- getNextStage().build(cardBack);
- }
-
- private WonderStage getNextStage() {
- int nextLevel = getNbBuiltStages();
- if (nextLevel == stages.size()) {
- throw new IllegalStateException("This wonder has already reached its maximum level");
- }
- return stages.get(nextLevel);
- }
-
- public void activateLastBuiltStage(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- getLastBuiltStage().activate(table, playerIndex, boughtResources);
- }
-
- private WonderStage getLastBuiltStage() {
- int lastLevel = getNbBuiltStages() - 1;
- return stages.get(lastLevel);
- }
-
- public int computePoints(Table table, int playerIndex) {
- return stages.stream()
- .filter(WonderStage::isBuilt)
- .flatMap(c -> c.getEffects().stream())
- .mapToInt(e -> e.computePoints(table, playerIndex))
- .sum();
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java b/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java
deleted file mode 100644
index 64d506fc..00000000
--- a/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.luxons.sevenwonders.game.wonders;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.cards.Requirements;
-import org.luxons.sevenwonders.game.effects.Effect;
-
-public class WonderStage {
-
- private Requirements requirements;
-
- private List<Effect> effects;
-
- private CardBack cardBack;
-
- public Requirements getRequirements() {
- return requirements;
- }
-
- public void setRequirements(Requirements requirements) {
- this.requirements = requirements;
- }
-
- public List<Effect> getEffects() {
- return effects;
- }
-
- public void setEffects(List<Effect> effects) {
- this.effects = effects;
- }
-
- public boolean isBuilt() {
- return cardBack != null;
- }
-
- public boolean isBuildable(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- return requirements.isAffordedBy(table, playerIndex, boughtResources);
- }
-
- void build(CardBack cardBack) {
- this.cardBack = cardBack;
- }
-
- void activate(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- effects.forEach(e -> e.apply(table, playerIndex));
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/repositories/GameRepository.java b/src/main/java/org/luxons/sevenwonders/repositories/GameRepository.java
deleted file mode 100644
index efe39b85..00000000
--- a/src/main/java/org/luxons/sevenwonders/repositories/GameRepository.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.luxons.sevenwonders.repositories;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.luxons.sevenwonders.errors.ApiMisuseException;
-import org.luxons.sevenwonders.game.Game;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public class GameRepository {
-
- private Map<Long, Game> games = new HashMap<>();
-
- public void add(Game game) throws GameAlreadyExistsException {
- if (games.containsKey(game.getId())) {
- throw new GameAlreadyExistsException(game.getId());
- }
- games.put(game.getId(), game);
- }
-
- public Game find(long gameId) throws GameNotFoundException {
- Game game = games.get(gameId);
- if (game == null) {
- throw new GameNotFoundException(gameId);
- }
- return game;
- }
-
- public Game remove(long gameId) throws GameNotFoundException {
- Game game = games.remove(gameId);
- if (game == null) {
- throw new GameNotFoundException(gameId);
- }
- return game;
- }
-
- public static class GameNotFoundException extends ApiMisuseException {
- GameNotFoundException(long id) {
- super("Game " + id + " doesn't exist");
- }
- }
-
- static class GameAlreadyExistsException extends ApiMisuseException {
- GameAlreadyExistsException(long id) {
- super("Game " + id + " already exists");
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java b/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java
deleted file mode 100644
index 8f305791..00000000
--- a/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.luxons.sevenwonders.repositories;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.Lobby;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public class LobbyRepository {
-
- private final GameDefinitionLoader gameDefinitionLoader;
-
- private Map<Long, Lobby> lobbies = new HashMap<>();
-
- private long lastGameId = 0;
-
- @Autowired
- public LobbyRepository(GameDefinitionLoader gameDefinitionLoader) {
- this.gameDefinitionLoader = gameDefinitionLoader;
- }
-
- public Collection<Lobby> list() {
- return lobbies.values();
- }
-
- public Lobby create(String gameName, Player owner) {
- long id = lastGameId++;
- Lobby lobby = new Lobby(id, gameName, owner, gameDefinitionLoader.getGameDefinition());
- lobbies.put(id, lobby);
- return lobby;
- }
-
- public Lobby find(long lobbyId) throws LobbyNotFoundException {
- Lobby lobby = lobbies.get(lobbyId);
- if (lobby == null) {
- throw new LobbyNotFoundException(lobbyId);
- }
- return lobby;
- }
-
- public Lobby remove(long lobbyId) throws LobbyNotFoundException {
- Lobby lobby = lobbies.remove(lobbyId);
- if (lobby == null) {
- throw new LobbyNotFoundException(lobbyId);
- }
- return lobby;
- }
-
- public static class LobbyNotFoundException extends RuntimeException {
- LobbyNotFoundException(long id) {
- super("Lobby not found for id '" + id + "'");
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/repositories/PlayerRepository.java b/src/main/java/org/luxons/sevenwonders/repositories/PlayerRepository.java
deleted file mode 100644
index 049c5ef9..00000000
--- a/src/main/java/org/luxons/sevenwonders/repositories/PlayerRepository.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.luxons.sevenwonders.repositories;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.luxons.sevenwonders.errors.ApiMisuseException;
-import org.luxons.sevenwonders.game.Player;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public class PlayerRepository {
-
- private Map<String, Player> players = new HashMap<>();
-
- public boolean contains(String username) {
- return players.containsKey(username);
- }
-
- public Player createOrUpdate(String username, String displayName) {
- if (players.containsKey(username)) {
- return update(username, displayName);
- } else {
- return create(username, displayName);
- }
- }
-
- private Player create(String username, String displayName) {
- Player player = new Player(username, displayName);
- players.put(username, player);
- return player;
- }
-
- private Player update(String username, String displayName) throws PlayerNotFoundException {
- Player player = find(username);
- player.setDisplayName(displayName);
- return player;
- }
-
- public Player find(String username) throws PlayerNotFoundException {
- Player player = players.get(username);
- if (player == null) {
- throw new PlayerNotFoundException(username);
- }
- return player;
- }
-
- public Player remove(String username) {
- Player player = players.remove(username);
- if (player == null) {
- throw new PlayerNotFoundException(username);
- }
- return player;
- }
-
- static class PlayerNotFoundException extends ApiMisuseException {
- PlayerNotFoundException(String username) {
- super("Player '" + username + "' doesn't exist");
- }
- }
-}
diff --git a/src/main/java/org/luxons/sevenwonders/validation/DestinationAccessValidator.java b/src/main/java/org/luxons/sevenwonders/validation/DestinationAccessValidator.java
deleted file mode 100644
index 65b3623c..00000000
--- a/src/main/java/org/luxons/sevenwonders/validation/DestinationAccessValidator.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.luxons.sevenwonders.validation;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Lobby;
-import org.luxons.sevenwonders.repositories.GameRepository;
-import org.luxons.sevenwonders.repositories.LobbyRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class DestinationAccessValidator {
-
- private static final Pattern lobbyDestination = Pattern.compile(".*?/lobby/(?<id>\\d+?)(/.*)?");
-
- private static final Pattern gameDestination = Pattern.compile(".*?/game/(?<id>\\d+?)(/.*)?");
-
- private final LobbyRepository lobbyRepository;
-
- private final GameRepository gameRepository;
-
- @Autowired
- public DestinationAccessValidator(LobbyRepository lobbyRepository, GameRepository gameRepository) {
- this.lobbyRepository = lobbyRepository;
- this.gameRepository = gameRepository;
- }
-
- public boolean hasAccess(String username, String destination) {
- if (username == null) {
- // unnamed user cannot belong to anything
- return false;
- }
- if (hasForbiddenGameReference(username, destination)) {
- return false;
- }
- if (hasForbiddenLobbyReference(username, destination)) {
- return false;
- }
- return true;
- }
-
- private boolean hasForbiddenGameReference(String username, String destination) {
- Matcher gameMatcher = gameDestination.matcher(destination);
- if (!gameMatcher.matches()) {
- return false; // no game reference is always OK
- }
- int gameId = extractId(gameMatcher);
- return !isUserInGame(username, gameId);
- }
-
- private boolean hasForbiddenLobbyReference(String username, String destination) {
- Matcher lobbyMatcher = lobbyDestination.matcher(destination);
- if (!lobbyMatcher.matches()) {
- return false; // no lobby reference is always OK
- }
- int lobbyId = extractId(lobbyMatcher);
- return !isUserInLobby(username, lobbyId);
- }
-
- private boolean isUserInGame(String username, int gameId) {
- Game game = gameRepository.find(gameId);
- return game.containsUser(username);
- }
-
- private boolean isUserInLobby(String username, int lobbyId) {
- Lobby lobby = lobbyRepository.find(lobbyId);
- return lobby.containsUser(username);
- }
-
- private static int extractId(Matcher matcher) {
- String id = matcher.group("id");
- return Integer.parseInt(id);
- }
-}
diff --git a/src/main/js/.editorconfig b/src/main/js/.editorconfig
deleted file mode 100644
index 32c3b3d4..00000000
--- a/src/main/js/.editorconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-root = false
-
-[*]
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-indent_style = space
-indent_size = 2 \ No newline at end of file
diff --git a/src/main/js/.gitignore b/src/main/js/.gitignore
deleted file mode 100644
index 6c96c5cf..00000000
--- a/src/main/js/.gitignore
+++ /dev/null
@@ -1,15 +0,0 @@
-# See http://help.github.com/ignore-files/ for more about ignoring files.
-
-# dependencies
-node_modules
-
-# testing
-coverage
-
-# production
-build
-
-# misc
-.DS_Store
-.env
-npm-debug.log
diff --git a/src/main/js/README.md b/src/main/js/README.md
deleted file mode 100644
index bdb88df6..00000000
--- a/src/main/js/README.md
+++ /dev/null
@@ -1,1244 +0,0 @@
-This project was bootstrapped with [Create React App](https://github.com/facebookincubator/create-react-app).
-
-Below you will find some information on how to perform common tasks.<br>
-You can find the most recent version of this guide [here](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md).
-
-## Table of Contents
-
-- [Updating to New Releases](#updating-to-new-releases)
-- [Sending Feedback](#sending-feedback)
-- [Folder Structure](#folder-structure)
-- [Available Scripts](#available-scripts)
- - [npm start](#npm-start)
- - [npm test](#npm-test)
- - [npm run build](#npm-run-build)
- - [npm run eject](#npm-run-eject)
-- [Syntax Highlighting in the Editor](#syntax-highlighting-in-the-editor)
-- [Displaying Lint Output in the Editor](#displaying-lint-output-in-the-editor)
-- [Installing a Dependency](#installing-a-dependency)
-- [Importing a Component](#importing-a-component)
-- [Adding a Stylesheet](#adding-a-stylesheet)
-- [Post-Processing CSS](#post-processing-css)
-- [Adding Images and Fonts](#adding-images-and-fonts)
-- [Using the `public` Folder](#using-the-public-folder)
-- [Using Global Variables](#using-global-variables)
-- [Adding Bootstrap](#adding-bootstrap)
-- [Adding Flow](#adding-flow)
-- [Adding Custom Environment Variables](#adding-custom-environment-variables)
-- [Can I Use Decorators?](#can-i-use-decorators)
-- [Integrating with a Node Backend](#integrating-with-a-node-backend)
-- [Proxying API Requests in Development](#proxying-api-requests-in-development)
-- [Using HTTPS in Development](#using-https-in-development)
-- [Generating Dynamic `<meta>` Tags on the Server](#generating-dynamic-meta-tags-on-the-server)
-- [Running Tests](#running-tests)
- - [Filename Conventions](#filename-conventions)
- - [Command Line Interface](#command-line-interface)
- - [Version Control Integration](#version-control-integration)
- - [Writing Tests](#writing-tests)
- - [Testing Components](#testing-components)
- - [Using Third Party Assertion Libraries](#using-third-party-assertion-libraries)
- - [Initializing Test Environment](#initializing-test-environment)
- - [Focusing and Excluding Tests](#focusing-and-excluding-tests)
- - [Coverage Reporting](#coverage-reporting)
- - [Continuous Integration](#continuous-integration)
- - [Disabling jsdom](#disabling-jsdom)
- - [Experimental Snapshot Testing](#experimental-snapshot-testing)
- - [Editor Integration](#editor-integration)
-- [Developing Components in Isolation](#developing-components-in-isolation)
-- [Making a Progressive Web App](#making-a-progressive-web-app)
-- [Deployment](#deployment)
- - [Serving Apps with Client-Side Routing](#serving-apps-with-client-side-routing)
- - [Building for Relative Paths](#building-for-relative-paths)
- - [Firebase](#firebase)
- - [GitHub Pages](#github-pages)
- - [Heroku](#heroku)
- - [Modulus](#modulus)
- - [Netlify](#netlify)
- - [Now](#now)
- - [S3 and CloudFront](#s3-and-cloudfront)
- - [Surge](#surge)
-- [Troubleshooting](#troubleshooting)
- - [`npm test` hangs on macOS Sierra](#npm-test-hangs-on-macos-sierra)
- - [`npm run build` silently fails](#npm-run-build-silently-fails)
-- [Something Missing?](#something-missing)
-
-## Updating to New Releases
-
-Create React App is divided into two packages:
-
-* `create-react-app` is a global command-line utility that you use to create new projects.
-* `react-scripts` is a development dependency in the generated projects (including this one).
-
-You almost never need to update `create-react-app` itself: it delegates all the setup to `react-scripts`.
-
-When you run `create-react-app`, it always creates the project with the latest version of `react-scripts` so you’ll get all the new features and improvements in newly created apps automatically.
-
-To update an existing project to a new version of `react-scripts`, [open the changelog](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md), find the version you’re currently on (check `package.json` in this folder if you’re not sure), and apply the migration instructions for the newer versions.
-
-In most cases bumping the `react-scripts` version in `package.json` and running `npm install` in this folder should be enough, but it’s good to consult the [changelog](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md) for potential breaking changes.
-
-We commit to keeping the breaking changes minimal so you can upgrade `react-scripts` painlessly.
-
-## Sending Feedback
-
-We are always open to [your feedback](https://github.com/facebookincubator/create-react-app/issues).
-
-## Folder Structure
-
-After creation, your project should look like this:
-
-```
-my-app/
- README.md
- node_modules/
- package.json
- public/
- index.html
- favicon.ico
- src/
- App.css
- App.js
- App.test.js
- index.css
- index.js
- logo.svg
-```
-
-For the project to build, **these files must exist with exact filenames**:
-
-* `public/index.html` is the page template;
-* `src/index.js` is the JavaScript entry point.
-
-You can delete or rename the other files.
-
-You may create subdirectories inside `src`. For faster rebuilds, only files inside `src` are processed by Webpack.<br>
-You need to **put any JS and CSS files inside `src`**, or Webpack won’t see them.
-
-Only files inside `public` can be used from `public/index.html`.<br>
-Read instructions below for using assets from JavaScript and HTML.
-
-You can, however, create more top-level directories.<br>
-They will not be included in the production build so you can use them for things like documentation.
-
-## Available Scripts
-
-In the project directory, you can run:
-
-### `npm start`
-
-Runs the app in the development mode.<br>
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
-
-The page will reload if you make edits.<br>
-You will also see any lint errors in the console.
-
-### `npm test`
-
-Launches the test runner in the interactive watch mode.<br>
-See the section about [running tests](#running-tests) for more information.
-
-### `npm run build`
-
-Builds the app for production to the `build` folder.<br>
-It correctly bundles React in production mode and optimizes the build for the best performance.
-
-The build is minified and the filenames include the hashes.<br>
-Your app is ready to be deployed!
-
-See the section about [deployment](#deployment) for more information.
-
-### `npm run eject`
-
-**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
-
-If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
-
-Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
-
-You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
-
-## Syntax Highlighting in the Editor
-
-To configure the syntax highlighting in your favorite text editor, head to the [Babel's docs](https://babeljs.io/docs/editors) and follow the instructions. Some of the most popular editors are covered.
-
-## Displaying Lint Output in the Editor
-
->Note: this feature is available with `react-scripts@0.2.0` and higher.
-
-Some editors, including Sublime Text, Atom, and Visual Studio Code, provide plugins for ESLint.
-
-They are not required for linting. You should see the linter output right in your terminal as well as the browser console. However, if you prefer the lint results to appear right in your editor, there are some extra steps you can do.
-
-You would need to install an ESLint plugin for your editor first.
-
->**A note for Atom `linter-eslint` users**
-
->If you are using the Atom `linter-eslint` plugin, make sure that **Use global ESLint installation** option is checked:
-
-><img src="http://i.imgur.com/yVNNHJM.png" width="300">
-
-Then add this block to the `package.json` file of your project:
-
-```js
-{
- // ...
- "eslintConfig": {
- "extends": "react-app"
- }
-}
-```
-
-Finally, you will need to install some packages *globally*:
-
-```sh
-npm install -g eslint-config-react-app@0.3.0 eslint@3.8.1 babel-eslint@7.0.0 eslint-plugin-react@6.4.1 eslint-plugin-import@2.0.1 eslint-plugin-jsx-a11y@2.2.3 eslint-plugin-flowtype@2.21.0
-```
-
-We recognize that this is suboptimal, but it is currently required due to the way we hide the ESLint dependency. The ESLint team is already [working on a solution to this](https://github.com/eslint/eslint/issues/3458) so this may become unnecessary in a couple of months.
-
-## Installing a Dependency
-
-The generated project includes React and ReactDOM as dependencies. It also includes a set of scripts used by Create React App as a development dependency. You may install other dependencies (for example, React Router) with `npm`:
-
-```
-npm install --save <library-name>
-```
-
-## Importing a Component
-
-This project setup supports ES6 modules thanks to Babel.<br>
-While you can still use `require()` and `module.exports`, we encourage you to use [`import` and `export`](http://exploringjs.com/es6/ch_modules.html) instead.
-
-For example:
-
-### `Button.js`
-
-```js
-import React, { Component } from 'react';
-
-class Button extends Component {
- render() {
- // ...
- }
-}
-
-export default Button; // Don’t forget to use export default!
-```
-
-### `DangerButton.js`
-
-
-```js
-import React, { Component } from 'react';
-import Button from './Button'; // Import a component from another file
-
-class DangerButton extends Component {
- render() {
- return <Button color="red" />;
- }
-}
-
-export default DangerButton;
-```
-
-Be aware of the [difference between default and named exports](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281). It is a common source of mistakes.
-
-We suggest that you stick to using default imports and exports when a module only exports a single thing (for example, a component). That’s what you get when you use `export default Button` and `import Button from './Button'`.
-
-Named exports are useful for utility modules that export several functions. A module may have at most one default export and as many named exports as you like.
-
-Learn more about ES6 modules:
-
-* [When to use the curly braces?](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281)
-* [Exploring ES6: Modules](http://exploringjs.com/es6/ch_modules.html)
-* [Understanding ES6: Modules](https://leanpub.com/understandinges6/read#leanpub-auto-encapsulating-code-with-modules)
-
-## Adding a Stylesheet
-
-This project setup uses [Webpack](https://webpack.github.io/) for handling all assets. Webpack offers a custom way of “extending” the concept of `import` beyond JavaScript. To express that a JavaScript file depends on a CSS file, you need to **import the CSS from the JavaScript file**:
-
-### `Button.css`
-
-```css
-.Button {
- padding: 20px;
-}
-```
-
-### `Button.js`
-
-```js
-import React, { Component } from 'react';
-import './Button.css'; // Tell Webpack that Button.js uses these styles
-
-class Button extends Component {
- render() {
- // You can use them as regular CSS styles
- return <div className="Button" />;
- }
-}
-```
-
-**This is not required for React** but many people find this feature convenient. You can read about the benefits of this approach [here](https://medium.com/seek-ui-engineering/block-element-modifying-your-javascript-components-d7f99fcab52b). However you should be aware that this makes your code less portable to other build tools and environments than Webpack.
-
-In development, expressing dependencies this way allows your styles to be reloaded on the fly as you edit them. In production, all CSS files will be concatenated into a single minified `.css` file in the build output.
-
-If you are concerned about using Webpack-specific semantics, you can put all your CSS right into `src/index.css`. It would still be imported from `src/index.js`, but you could always remove that import if you later migrate to a different build tool.
-
-## Post-Processing CSS
-
-This project setup minifies your CSS and adds vendor prefixes to it automatically through [Autoprefixer](https://github.com/postcss/autoprefixer) so you don’t need to worry about it.
-
-For example, this:
-
-```css
-.App {
- display: flex;
- flex-direction: row;
- align-items: center;
-}
-```
-
-becomes this:
-
-```css
-.App {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
-}
-```
-
-There is currently no support for preprocessors such as Less, or for sharing variables across CSS files.
-
-## Adding Images and Fonts
-
-With Webpack, using static assets like images and fonts works similarly to CSS.
-
-You can **`import` an image right in a JavaScript module**. This tells Webpack to include that image in the bundle. Unlike CSS imports, importing an image or a font gives you a string value. This value is the final image path you can reference in your code.
-
-Here is an example:
-
-```js
-import React from 'react';
-import logo from './logo.png'; // Tell Webpack this JS file uses this image
-
-console.log(logo); // /logo.84287d09.png
-
-function Header() {
- // Import result is the URL of your image
- return <img src={logo} alt="Logo" />;
-}
-
-export default Header;
-```
-
-This ensures that when the project is built, Webpack will correctly move the images into the build folder, and provide us with correct paths.
-
-This works in CSS too:
-
-```css
-.Logo {
- background-image: url(./logo.png);
-}
-```
-
-Webpack finds all relative module references in CSS (they start with `./`) and replaces them with the final paths from the compiled bundle. If you make a typo or accidentally delete an important file, you will see a compilation error, just like when you import a non-existent JavaScript module. The final filenames in the compiled bundle are generated by Webpack from content hashes. If the file content changes in the future, Webpack will give it a different name in production so you don’t need to worry about long-term caching of assets.
-
-Please be advised that this is also a custom feature of Webpack.
-
-**It is not required for React** but many people enjoy it (and React Native uses a similar mechanism for images).<br>
-An alternative way of handling static assets is described in the next section.
-
-## Using the `public` Folder
-
->Note: this feature is available with `react-scripts@0.5.0` and higher.
-
-Normally we encourage you to `import` assets in JavaScript files as described above. This mechanism provides a number of benefits:
-
-* Scripts and stylesheets get minified and bundled together to avoid extra network requests.
-* Missing files cause compilation errors instead of 404 errors for your users.
-* Result filenames include content hashes so you don’t need to worry about browsers caching their old versions.
-
-However there is an **escape hatch** that you can use to add an asset outside of the module system.
-
-If you put a file into the `public` folder, it will **not** be processed by Webpack. Instead it will be copied into the build folder untouched. To reference assets in the `public` folder, you need to use a special variable called `PUBLIC_URL`.
-
-Inside `index.html`, you can use it like this:
-
-```html
-<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
-```
-
-Only files inside the `public` folder will be accessible by `%PUBLIC_URL%` prefix. If you need to use a file from `src` or `node_modules`, you’ll have to copy it there to explicitly specify your intention to make this file a part of the build.
-
-When you run `npm run build`, Create React App will substitute `%PUBLIC_URL%` with a correct absolute path so your project works even if you use client-side routing or host it at a non-root URL.
-
-In JavaScript code, you can use `process.env.PUBLIC_URL` for similar purposes:
-
-```js
-render() {
- // Note: this is an escape hatch and should be used sparingly!
- // Normally we recommend using `import` for getting asset URLs
- // as described in “Adding Images and Fonts” above this section.
- return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;
-}
-```
-
-Keep in mind the downsides of this approach:
-
-* None of the files in `public` folder get post-processed or minified.
-* Missing files will not be called at compilation time, and will cause 404 errors for your users.
-* Result filenames won’t include content hashes so you’ll need to add query arguments or rename them every time they change.
-
-However, it can be handy for referencing assets like [`manifest.webmanifest`](https://developer.mozilla.org/en-US/docs/Web/Manifest) from HTML, or including small scripts like [`pace.js`](http://github.hubspot.com/pace/docs/welcome/) outside of the bundled code.
-
-Note that if you add a `<script>` that declares global variables, you also need to read the next section on using them.
-
-## Using Global Variables
-
-When you include a script in the HTML file that defines global variables and try to use one of these variables in the code, the linter will complain because it cannot see the definition of the variable.
-
-You can avoid this by reading the global variable explicitly from the `window` object, for example:
-
-```js
-const $ = window.$;
-```
-
-This makes it obvious you are using a global variable intentionally rather than because of a typo.
-
-Alternatively, you can force the linter to ignore any line by adding `// eslint-disable-line` after it.
-
-## Adding Bootstrap
-
-You don’t have to use [React Bootstrap](https://react-bootstrap.github.io) together with React but it is a popular library for integrating Bootstrap with React apps. If you need it, you can integrate it with Create React App by following these steps:
-
-Install React Bootstrap and Bootstrap from NPM. React Bootstrap does not include Bootstrap CSS so this needs to be installed as well:
-
-```
-npm install react-bootstrap --save
-npm install bootstrap@3 --save
-```
-
-Import Bootstrap CSS and optionally Bootstrap theme CSS in the ```src/index.js``` file:
-
-```js
-import 'bootstrap/dist/css/bootstrap.css';
-import 'bootstrap/dist/css/bootstrap-theme.css';
-```
-
-Import required React Bootstrap components within ```src/App.js``` file or your custom component files:
-
-```js
-import { Navbar, Jumbotron, Button } from 'react-bootstrap';
-```
-
-Now you are ready to use the imported React Bootstrap components within your component hierarchy defined in the render method. Here is an example [`App.js`](https://gist.githubusercontent.com/gaearon/85d8c067f6af1e56277c82d19fd4da7b/raw/6158dd991b67284e9fc8d70b9d973efe87659d72/App.js) redone using React Bootstrap.
-
-## Adding Flow
-
-Flow typing is currently [not supported out of the box](https://github.com/facebookincubator/create-react-app/issues/72) with the default `.flowconfig` generated by Flow. If you run it, you might get errors like this:
-
-```js
-node_modules/fbjs/lib/Deferred.js.flow:60
- 60: Promise.prototype.done.apply(this._promise, arguments);
- ^^^^ property `done`. Property not found in
-495: declare class Promise<+R> {
- ^ Promise. See lib: /private/tmp/flow/flowlib_34952d31/core.js:495
-
-node_modules/fbjs/lib/shallowEqual.js.flow:29
- 29: return x !== 0 || 1 / (x: $FlowIssue) === 1 / (y: $FlowIssue);
- ^^^^^^^^^^ identifier `$FlowIssue`. Could not resolve name
-```
-
-To fix this, change your `.flowconfig` to look like this:
-
-```ini
-[ignore]
-<PROJECT_ROOT>/node_modules/fbjs/.*
-```
-
-Re-run flow, and you shouldn’t get any extra issues.
-
-## Adding Custom Environment Variables
-
->Note: this feature is available with `react-scripts@0.2.3` and higher.
-
-Your project can consume variables declared in your environment as if they were declared locally in your JS files. By
-default you will have `NODE_ENV` defined for you, and any other environment variables starting with
-`REACT_APP_`. These environment variables will be defined for you on `process.env`. For example, having an environment
-variable named `REACT_APP_SECRET_CODE` will be exposed in your JS as `process.env.REACT_APP_SECRET_CODE`, in addition
-to `process.env.NODE_ENV`.
-
->Note: Changing any environment variables will require you to restart the development server if it is running.
-
-These environment variables can be useful for displaying information conditionally based on where the project is
-deployed or consuming sensitive data that lives outside of version control.
-
-First, you need to have environment variables defined. For example, let’s say you wanted to consume a secret defined
-in the environment inside a `<form>`:
-
-```jsx
-render() {
- return (
- <div>
- <small>You are running this application in <b>{process.env.NODE_ENV}</b> mode.</small>
- <form>
- <input type="hidden" defaultValue={process.env.REACT_APP_SECRET_CODE} />
- </form>
- </div>
- );
-}
-```
-
-During the build, `process.env.REACT_APP_SECRET_CODE` will be replaced with the current value of the `REACT_APP_SECRET_CODE` environment variable. Remember that the `NODE_ENV` variable will be set for you automatically.
-
-When you load the app in the browser and inspect the `<input>`, you will see its value set to `abcdef`, and the bold text will show the environment provided when using `npm start`:
-
-```html
-<div>
- <small>You are running this application in <b>development</b> mode.</small>
- <form>
- <input type="hidden" value="abcdef" />
- </form>
-</div>
-```
-
-Having access to the `NODE_ENV` is also useful for performing actions conditionally:
-
-```js
-if (process.env.NODE_ENV !== 'production') {
- analytics.disable();
-}
-```
-
-The above form is looking for a variable called `REACT_APP_SECRET_CODE` from the environment. In order to consume this
-value, we need to have it defined in the environment. This can be done using two ways: either in your shell or in
-a `.env` file.
-
-### Adding Temporary Environment Variables In Your Shell
-
-Defining environment variables can vary between OSes. It's also important to know that this manner is temporary for the
-life of the shell session.
-
-#### Windows (cmd.exe)
-
-```cmd
-set REACT_APP_SECRET_CODE=abcdef&&npm start
-```
-
-(Note: the lack of whitespace is intentional.)
-
-#### Linux, OS X (Bash)
-
-```bash
-REACT_APP_SECRET_CODE=abcdef npm start
-```
-
-### Adding Development Environment Variables In `.env`
-
->Note: this feature is available with `react-scripts@0.5.0` and higher.
-
-To define permanent environment variables, create a file called `.env` in the root of your project:
-
-```
-REACT_APP_SECRET_CODE=abcdef
-```
-
-These variables will act as the defaults if the machine does not explicitly set them.<br>
-Please refer to the [dotenv documentation](https://github.com/motdotla/dotenv) for more details.
-
->Note: If you are defining environment variables for development, your CI and/or hosting platform will most likely need
-these defined as well. Consult their documentation how to do this. For example, see the documentation for [Travis CI](https://docs.travis-ci.com/user/environment-variables/) or [Heroku](https://devcenter.heroku.com/articles/config-vars).
-
-## Can I Use Decorators?
-
-Many popular libraries use [decorators](https://medium.com/google-developers/exploring-es7-decorators-76ecb65fb841) in their documentation.<br>
-Create React App doesn’t support decorator syntax at the moment because:
-
-* It is an experimental proposal and is subject to change.
-* The current specification version is not officially supported by Babel.
-* If the specification changes, we won’t be able to write a codemod because we don’t use them internally at Facebook.
-
-However in many cases you can rewrite decorator-based code without decorators just as fine.<br>
-Please refer to these two threads for reference:
-
-* [#214](https://github.com/facebookincubator/create-react-app/issues/214)
-* [#411](https://github.com/facebookincubator/create-react-app/issues/411)
-
-Create React App will add decorator support when the specification advances to a stable stage.
-
-## Integrating with a Node Backend
-
-Check out [this tutorial](https://www.fullstackreact.com/articles/using-create-react-app-with-a-server/) for instructions on integrating an app with a Node backend running on another port, and using `fetch()` to access it. You can find the companion GitHub repository [here](https://github.com/fullstackreact/food-lookup-demo).
-
-## Proxying API Requests in Development
-
->Note: this feature is available with `react-scripts@0.2.3` and higher.
-
-People often serve the front-end React app from the same host and port as their backend implementation.<br>
-For example, a production setup might look like this after the app is deployed:
-
-```
-/ - static server returns index.html with React app
-/todos - static server returns index.html with React app
-/api/todos - server handles any /api/* requests using the backend implementation
-```
-
-Such setup is **not** required. However, if you **do** have a setup like this, it is convenient to write requests like `fetch('/api/todos')` without worrying about redirecting them to another host or port during development.
-
-To tell the development server to proxy any unknown requests to your API server in development, add a `proxy` field to your `package.json`, for example:
-
-```js
- "proxy": "http://localhost:4000",
-```
-
-This way, when you `fetch('/api/todos')` in development, the development server will recognize that it’s not a static asset, and will proxy your request to `http://localhost:4000/api/todos` as a fallback. The development server will only attempt to send requests without a `text/html` accept header to the proxy.
-
-Conveniently, this avoids [CORS issues](http://stackoverflow.com/questions/21854516/understanding-ajax-cors-and-security-considerations) and error messages like this in development:
-
-```
-Fetch API cannot load http://localhost:4000/api/todos. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
-```
-
-Keep in mind that `proxy` only has effect in development (with `npm start`), and it is up to you to ensure that URLs like `/api/todos` point to the right thing in production. You don’t have to use the `/api` prefix. Any unrecognized request without a `text/html` accept header will be redirected to the specified `proxy`.
-
-Currently the `proxy` option only handles HTTP requests, and it won’t proxy WebSocket connections.<br>
-If the `proxy` option is **not** flexible enough for you, alternatively you can:
-
-* Enable CORS on your server ([here’s how to do it for Express](http://enable-cors.org/server_expressjs.html)).
-* Use [environment variables](#adding-custom-environment-variables) to inject the right server host and port into your app.
-
-## Using HTTPS in Development
-
->Note: this feature is available with `react-scripts@0.4.0` and higher.
-
-You may require the dev server to serve pages over HTTPS. One particular case where this could be useful is when using [the "proxy" feature](#proxying-api-requests-in-development) to proxy requests to an API server when that API server is itself serving HTTPS.
-
-To do this, set the `HTTPS` environment variable to `true`, then start the dev server as usual with `npm start`:
-
-#### Windows (cmd.exe)
-
-```cmd
-set HTTPS=true&&npm start
-```
-
-(Note: the lack of whitespace is intentional.)
-
-#### Linux, OS X (Bash)
-
-```bash
-HTTPS=true npm start
-```
-
-Note that the server will use a self-signed certificate, so your web browser will almost definitely display a warning upon accessing the page.
-
-## Generating Dynamic `<meta>` Tags on the Server
-
-Since Create React App doesn’t support server rendering, you might be wondering how to make `<meta>` tags dynamic and reflect the current URL. To solve this, we recommend to add placeholders into the HTML, like this:
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta property="og:title" content="%OG_TITLE%">
- <meta property="og:description" content="%OG_DESCRIPTION%">
-```
-
-Then, on the server, regardless of the backend you use, you can read `index.html` into memory and replace `%OG_TITLE%`, `%OG_DESCRIPTION%`, and any other placeholders with values depending on the current URL. Just make sure to sanitize and escape the interpolated values so that they are safe to embed into HTML!
-
-If you use a Node server, you can even share the route matching logic between the client and the server. However duplicating it also works fine in simple cases.
-
-## Running Tests
-
->Note: this feature is available with `react-scripts@0.3.0` and higher.<br>
->[Read the migration guide to learn how to enable it in older projects!](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md#migrating-from-023-to-030)
-
-Create React App uses [Jest](https://facebook.github.io/jest/) as its test runner. To prepare for this integration, we did a [major revamp](https://facebook.github.io/jest/blog/2016/09/01/jest-15.html) of Jest so if you heard bad things about it years ago, give it another try.
-
-Jest is a Node-based runner. This means that the tests always run in a Node environment and not in a real browser. This lets us enable fast iteration speed and prevent flakiness.
-
-While Jest provides browser globals such as `window` thanks to [jsdom](https://github.com/tmpvar/jsdom), they are only approximations of the real browser behavior. Jest is intended to be used for unit tests of your logic and your components rather than the DOM quirks.
-
-We recommend that you use a separate tool for browser end-to-end tests if you need them. They are beyond the scope of Create React App.
-
-### Filename Conventions
-
-Jest will look for test files with any of the following popular naming conventions:
-
-* Files with `.js` suffix in `__tests__` folders.
-* Files with `.test.js` suffix.
-* Files with `.spec.js` suffix.
-
-The `.test.js` / `.spec.js` files (or the `__tests__` folders) can be located at any depth under the `src` top level folder.
-
-We recommend to put the test files (or `__tests__` folders) next to the code they are testing so that relative imports appear shorter. For example, if `App.test.js` and `App.js` are in the same folder, the test just needs to `import App from './App'` instead of a long relative path. Colocation also helps find tests more quickly in larger projects.
-
-### Command Line Interface
-
-When you run `npm test`, Jest will launch in the watch mode. Every time you save a file, it will re-run the tests, just like `npm start` recompiles the code.
-
-The watcher includes an interactive command-line interface with the ability to run all tests, or focus on a search pattern. It is designed this way so that you can keep it open and enjoy fast re-runs. You can learn the commands from the “Watch Usage” note that the watcher prints after every run:
-
-![Jest watch mode](http://facebook.github.io/jest/img/blog/15-watch.gif)
-
-### Version Control Integration
-
-By default, when you run `npm test`, Jest will only run the tests related to files changed since the last commit. This is an optimization designed to make your tests runs fast regardless of how many tests you have. However it assumes that you don’t often commit the code that doesn’t pass the tests.
-
-Jest will always explicitly mention that it only ran tests related to the files changed since the last commit. You can also press `a` in the watch mode to force Jest to run all tests.
-
-Jest will always run all tests on a [continuous integration](#continuous-integration) server or if the project is not inside a Git or Mercurial repository.
-
-### Writing Tests
-
-To create tests, add `it()` (or `test()`) blocks with the name of the test and its code. You may optionally wrap them in `describe()` blocks for logical grouping but this is neither required nor recommended.
-
-Jest provides a built-in `expect()` global function for making assertions. A basic test could look like this:
-
-```js
-import sum from './sum';
-
-it('sums numbers', () => {
- expect(sum(1, 2)).toEqual(3);
- expect(sum(2, 2)).toEqual(4);
-});
-```
-
-All `expect()` matchers supported by Jest are [extensively documented here](http://facebook.github.io/jest/docs/api.html#expect-value).<br>
-You can also use [`jest.fn()` and `expect(fn).toBeCalled()`](http://facebook.github.io/jest/docs/api.html#tobecalled) to create “spies” or mock functions.
-
-### Testing Components
-
-There is a broad spectrum of component testing techniques. They range from a “smoke test” verifying that a component renders without throwing, to shallow rendering and testing some of the output, to full rendering and testing component lifecycle and state changes.
-
-Different projects choose different testing tradeoffs based on how often components change, and how much logic they contain. If you haven’t decided on a testing strategy yet, we recommend that you start with creating simple smoke tests for your components:
-
-```js
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
-
-it('renders without crashing', () => {
- const div = document.createElement('div');
- ReactDOM.render(<App />, div);
-});
-```
-
-This test mounts a component and makes sure that it didn’t throw during rendering. Tests like this provide a lot value with very little effort so they are great as a starting point, and this is the test you will find in `src/App.test.js`.
-
-When you encounter bugs caused by changing components, you will gain a deeper insight into which parts of them are worth testing in your application. This might be a good time to introduce more specific tests asserting specific expected output or behavior.
-
-If you’d like to test components in isolation from the child components they render, we recommend using [`shallow()` rendering API](http://airbnb.io/enzyme/docs/api/shallow.html) from [Enzyme](http://airbnb.io/enzyme/). You can write a smoke test with it too:
-
-```sh
-npm install --save-dev enzyme react-addons-test-utils
-```
-
-```js
-import React from 'react';
-import { shallow } from 'enzyme';
-import App from './App';
-
-it('renders without crashing', () => {
- shallow(<App />);
-});
-```
-
-Unlike the previous smoke test using `ReactDOM.render()`, this test only renders `<App>` and doesn’t go deeper. For example, even if `<App>` itself renders a `<Button>` that throws, this test will pass. Shallow rendering is great for isolated unit tests, but you may still want to create some full rendering tests to ensure the components integrate correctly. Enzyme supports [full rendering with `mount()`](http://airbnb.io/enzyme/docs/api/mount.html), and you can also use it for testing state changes and component lifecycle.
-
-You can read the [Enzyme documentation](http://airbnb.io/enzyme/) for more testing techniques. Enzyme documentation uses Chai and Sinon for assertions but you don’t have to use them because Jest provides built-in `expect()` and `jest.fn()` for spies.
-
-Here is an example from Enzyme documentation that asserts specific output, rewritten to use Jest matchers:
-
-```js
-import React from 'react';
-import { shallow } from 'enzyme';
-import App from './App';
-
-it('renders welcome message', () => {
- const wrapper = shallow(<App />);
- const welcome = <h2>Welcome to React</h2>;
- // expect(wrapper.contains(welcome)).to.equal(true);
- expect(wrapper.contains(welcome)).toEqual(true);
-});
-```
-
-All Jest matchers are [extensively documented here](http://facebook.github.io/jest/docs/api.html#expect-value).<br>
-Nevertheless you can use a third-party assertion library like [Chai](http://chaijs.com/) if you want to, as described below.
-
-### Using Third Party Assertion Libraries
-
-We recommend that you use `expect()` for assertions and `jest.fn()` for spies. If you are having issues with them please [file those against Jest](https://github.com/facebook/jest/issues/new), and we’ll fix them. We intend to keep making them better for React, supporting, for example, [pretty-printing React elements as JSX](https://github.com/facebook/jest/pull/1566).
-
-However, if you are used to other libraries, such as [Chai](http://chaijs.com/) and [Sinon](http://sinonjs.org/), or if you have existing code using them that you’d like to port over, you can import them normally like this:
-
-```js
-import sinon from 'sinon';
-import { expect } from 'chai';
-```
-
-and then use them in your tests like you normally do.
-
-### Initializing Test Environment
-
->Note: this feature is available with `react-scripts@0.4.0` and higher.
-
-If your app uses a browser API that you need to mock in your tests or if you just need a global setup before running your tests, add a `src/setupTests.js` to your project. It will be automatically executed before running your tests.
-
-For example:
-
-#### `src/setupTests.js`
-```js
-const localStorageMock = {
- getItem: jest.fn(),
- setItem: jest.fn(),
- clear: jest.fn()
-};
-global.localStorage = localStorageMock
-```
-
-### Focusing and Excluding Tests
-
-You can replace `it()` with `xit()` to temporarily exclude a test from being executed.<br>
-Similarly, `fit()` lets you focus on a specific test without running any other tests.
-
-### Coverage Reporting
-
-Jest has an integrated coverage reporter that works well with ES6 and requires no configuration.<br>
-Run `npm test -- --coverage` (note extra `--` in the middle) to include a coverage report like this:
-
-![coverage report](http://i.imgur.com/5bFhnTS.png)
-
-Note that tests run much slower with coverage so it is recommended to run it separately from your normal workflow.
-
-### Continuous Integration
-
-By default `npm test` runs the watcher with interactive CLI. However, you can force it to run tests once and finish the process by setting an environment variable called `CI`.
-
-When creating a build of your application with `npm run build` linter warnings are not checked by default. Like `npm test`, you can force the build to perform a linter warning check by setting the environment variable `CI`. If any warnings are encountered then the build fails.
-
-Popular CI servers already set the environment variable `CI` by default but you can do this yourself too:
-
-### On CI servers
-#### Travis CI
-
-1. Following the [Travis Getting started](https://docs.travis-ci.com/user/getting-started/) guide for syncing your GitHub repository with Travis. You may need to initialize some settings manually in your [profile](https://travis-ci.org/profile) page.
-1. Add a `.travis.yml` file to your git repository.
-```
-language: node_js
-node_js:
- - 4
- - 6
-cache:
- directories:
- - node_modules
-script:
- - npm test
- - npm run build
-```
-1. Trigger your first build with a git push.
-1. [Customize your Travis CI Build](https://docs.travis-ci.com/user/customizing-the-build/) if needed.
-
-### On your own environment
-##### Windows (cmd.exe)
-
-```cmd
-set CI=true&&npm test
-```
-
-```cmd
-set CI=true&&npm run build
-```
-
-(Note: the lack of whitespace is intentional.)
-
-##### Linux, OS X (Bash)
-
-```bash
-CI=true npm test
-```
-
-```bash
-CI=true npm run build
-```
-
-The test command will force Jest to run tests once instead of launching the watcher.
-
-> If you find yourself doing this often in development, please [file an issue](https://github.com/facebookincubator/create-react-app/issues/new) to tell us about your use case because we want to make watcher the best experience and are open to changing how it works to accommodate more workflows.
-
-The build command will check for linter warnings and fail if any are found.
-
-### Disabling jsdom
-
-By default, the `package.json` of the generated project looks like this:
-
-```js
- // ...
- "scripts": {
- // ...
- "test": "react-scripts test --env=jsdom"
- }
-```
-
-If you know that none of your tests depend on [jsdom](https://github.com/tmpvar/jsdom), you can safely remove `--env=jsdom`, and your tests will run faster.<br>
-To help you make up your mind, here is a list of APIs that **need jsdom**:
-
-* Any browser globals like `window` and `document`
-* [`ReactDOM.render()`](https://facebook.github.io/react/docs/top-level-api.html#reactdom.render)
-* [`TestUtils.renderIntoDocument()`](https://facebook.github.io/react/docs/test-utils.html#renderintodocument) ([a shortcut](https://github.com/facebook/react/blob/34761cf9a252964abfaab6faf74d473ad95d1f21/src/test/ReactTestUtils.js#L83-L91) for the above)
-* [`mount()`](http://airbnb.io/enzyme/docs/api/mount.html) in [Enzyme](http://airbnb.io/enzyme/index.html)
-
-In contrast, **jsdom is not needed** for the following APIs:
-
-* [`TestUtils.createRenderer()`](https://facebook.github.io/react/docs/test-utils.html#shallow-rendering) (shallow rendering)
-* [`shallow()`](http://airbnb.io/enzyme/docs/api/shallow.html) in [Enzyme](http://airbnb.io/enzyme/index.html)
-
-Finally, jsdom is also not needed for [snapshot testing](http://facebook.github.io/jest/blog/2016/07/27/jest-14.html). Longer term, this is the direction we are interested in exploring, but snapshot testing is [not fully baked yet](https://github.com/facebookincubator/create-react-app/issues/372) so we don’t officially encourage its usage yet.
-
-### Experimental Snapshot Testing
-
-Snapshot testing is a new feature of Jest that automatically generates text snapshots of your components and saves them on the disk so if the UI output changes, you get notified without manually writing any assertions on the component output.
-
-This feature is experimental and still [has major usage issues](https://github.com/facebookincubator/create-react-app/issues/372) so we only encourage you to use it if you like experimental technology. We intend to gradually improve it over time and eventually offer it as the default solution for testing React components, but this will take time. [Read more about snapshot testing.](http://facebook.github.io/jest/blog/2016/07/27/jest-14.html)
-
-### Editor Integration
-
-If you use [Visual Studio Code](https://code.visualstudio.com), there is a [Jest extension](https://github.com/orta/vscode-jest) which works with Create React App out of the box. This provides a lot of IDE-like features while using a text editor: showing the status of a test run with potential fail messages inline, starting and stopping the watcher automatically, and offering one-click snapshot updates.
-
-![VS Code Jest Preview](https://cloud.githubusercontent.com/assets/49038/20795349/a032308a-b7c8-11e6-9b34-7eeac781003f.png)
-
-## Developing Components in Isolation
-
-Usually, in an app, you have a lot of UI components, and each of them has many different states.
-For an example, a simple button component could have following states:
-
-* With a text label.
-* With an emoji.
-* In the disabled mode.
-
-Usually, it’s hard to see these states without running a sample app or some examples.
-
-Create React App doesn't include any tools for this by default, but you can easily add [React Storybook](https://github.com/kadirahq/react-storybook) to your project. **It is a third-party tool that lets you develop components and see all their states in isolation from your app**.
-
-![React Storybook Demo](http://i.imgur.com/7CIAWpB.gif)
-
-You can also deploy your Storybook as a static app. This way, everyone in your team can view and review different states of UI components without starting a backend server or creating an account in your app.
-
-**Here’s how to setup your app with Storybook:**
-
-First, install the following npm package globally:
-
-```sh
-npm install -g getstorybook
-```
-
-Then, run the following command inside your app’s directory:
-
-```sh
-getstorybook
-```
-
-After that, follow the instructions on the screen.
-
-Learn more about React Storybook:
-
-* Screencast: [Getting Started with React Storybook](https://egghead.io/lessons/react-getting-started-with-react-storybook)
-* [GitHub Repo](https://github.com/kadirahq/react-storybook)
-* [Documentation](https://getstorybook.io/docs)
-* [Snapshot Testing](https://github.com/kadirahq/storyshots) with React Storybook
-
-## Making a Progressive Web App
-
-You can turn your React app into a [Progressive Web App](https://developers.google.com/web/progressive-web-apps/) by following the steps in [this repository](https://github.com/jeffposnick/create-react-pwa).
-
-## Deployment
-
-`npm run build` creates a `build` directory with a production build of your app. Set up your favourite HTTP server so that a visitor to your site is served `index.html`, and requests to static paths like `/static/js/main.<hash>.js` are served with the contents of the `/static/js/main.<hash>.js` file. For example, Python contains a built-in HTTP server that can serve static files:
-
-```sh
-cd build
-python -m SimpleHTTPServer 9000
-```
-
-If you're using [Node](https://nodejs.org/) and [Express](http://expressjs.com/) as a server, it might look like this:
-
-```javascript
-const express = require('express');
-const path = require('path');
-const app = express();
-
-app.use(express.static('./build'));
-
-app.get('/', function (req, res) {
- res.sendFile(path.join(__dirname, './build', 'index.html'));
-});
-
-app.listen(9000);
-```
-
-Create React App is not opinionated about your choice of web server. Any static file server will do. The `build` folder with static assets is the only output produced by Create React App.
-
-However this is not quite enough if you use client-side routing. Read the next section if you want to support URLs like `/todos/42` in your single-page app.
-
-### Serving Apps with Client-Side Routing
-
-If you use routers that use the HTML5 [`pushState` history API](https://developer.mozilla.org/en-US/docs/Web/API/History_API#Adding_and_modifying_history_entries) under the hood (for example, [React Router](https://github.com/ReactTraining/react-router) with `browserHistory`), many static file servers will fail. For example, if you used React Router with a route for `/todos/42`, the development server will respond to `localhost:3000/todos/42` properly, but an Express serving a production build as above will not.
-
-This is because when there is a fresh page load for a `/todos/42`, the server looks for the file `build/todos/42` and does not find it. The server needs to be configured to respond to a request to `/todos/42` by serving `index.html`. For example, we can amend our Express example above to serve `index.html` for any unknown paths:
-
-```diff
- app.use(express.static('./build'));
-
--app.get('/', function (req, res) {
-+app.get('/*', function (req, res) {
- res.sendFile(path.join(__dirname, './build', 'index.html'));
- });
-```
-
-Now requests to `/todos/42` will be handled correctly both in development and in production.
-
-### Building for Relative Paths
-
-By default, Create React App produces a build assuming your app is hosted at the server root.<br>
-To override this, specify the `homepage` in your `package.json`, for example:
-
-```js
- "homepage": "http://mywebsite.com/relativepath",
-```
-
-This will let Create React App correctly infer the root path to use in the generated HTML file.
-
-
-### Firebase
-
-Install the Firebase CLI if you haven't already by running `npm install -g firebase-tools`. Sign up for a [Firebase account](https://console.firebase.google.com/) and create a new project. Run `firebase login` and login with your previous created Firebase account.
-
-Then run the `firebase init` command from your project's root. You need to choose the **Hosting: Configure and deploy Firebase Hosting sites** and choose the Firebase project you created in the previous step. You will need to agree with `database.rules.json` being created, choose `build` as the public directory, and also agree to **Configure as a single-page app** by replying with `y`.
-
-```sh
- === Project Setup
-
- First, let's associate this project directory with a Firebase project.
- You can create multiple project aliases by running firebase use --add,
- but for now we'll just set up a default project.
-
- ? What Firebase project do you want to associate as default? Example app (example-app-fd690)
-
- === Database Setup
-
- Firebase Realtime Database Rules allow you to define how your data should be
- structured and when your data can be read from and written to.
-
- ? What file should be used for Database Rules? database.rules.json
- ✔ Database Rules for example-app-fd690 have been downloaded to database.rules.json.
- Future modifications to database.rules.json will update Database Rules when you run
- firebase deploy.
-
- === Hosting Setup
-
- Your public directory is the folder (relative to your project directory) that
- will contain Hosting assets to uploaded with firebase deploy. If you
- have a build process for your assets, use your build's output directory.
-
- ? What do you want to use as your public directory? build
- ? Configure as a single-page app (rewrite all urls to /index.html)? Yes
- ✔ Wrote build/index.html
-
- i Writing configuration info to firebase.json...
- i Writing project information to .firebaserc...
-
- ✔ Firebase initialization complete!
-```
-
-Now, after you create a production build with `npm run build`, you can deploy it by running `firebase deploy`.
-
-```sh
- === Deploying to 'example-app-fd690'...
-
- i deploying database, hosting
- ✔ database: rules ready to deploy.
- i hosting: preparing build directory for upload...
- Uploading: [============================== ] 75%✔ hosting: build folder uploaded successfully
- ✔ hosting: 8 files uploaded successfully
- i starting release process (may take several minutes)...
-
- ✔ Deploy complete!
-
- Project Console: https://console.firebase.google.com/project/example-app-fd690/overview
- Hosting URL: https://example-app-fd690.firebaseapp.com
-```
-
-For more information see [Add Firebase to your JavaScript Project](https://firebase.google.com/docs/web/setup).
-
-### GitHub Pages
-
->Note: this feature is available with `react-scripts@0.2.0` and higher.
-
-#### Step 1: Add `homepage` to `package.json`
-
-**The step below is important!**<br>
-**If you skip it, your app will not deploy correctly.**
-
-Open your `package.json` and add a `homepage` field:
-
-```js
- "homepage": "https://myusername.github.io/my-app",
-```
-
-Create React App uses the `homepage` field to determine the root URL in the built HTML file.
-
-#### Step 2: Install `gh-pages` and add `deploy` to `scripts` in `package.json`
-
-Now, whenever you run `npm run build`, you will see a cheat sheet with instructions on how to deploy to GitHub Pages.
-
-To publish it at [https://myusername.github.io/my-app](https://myusername.github.io/my-app), run:
-
-```sh
-npm install --save-dev gh-pages
-```
-
-Add the following script in your `package.json`:
-
-```js
- // ...
- "scripts": {
- // ...
- "deploy": "npm run build&&gh-pages -d build"
- }
-```
-
-(Note: the lack of whitespace is intentional.)
-
-#### Step 3: Deploy the site by running `npm run deploy`
-
-Then run:
-
-```sh
-npm run deploy
-```
-
-#### Step 4: Ensure your project's settings use `gh-pages`
-
-Finally, make sure **GitHub Pages** option in your GitHub project settings is set to use the `gh-pages` branch:
-
-<img src="http://i.imgur.com/HUjEr9l.png" width="500" alt="gh-pages branch setting">
-
-#### Step 5: Optionally, configure the domain
-
-You can configure a custom domain with GitHub Pages by adding a `CNAME` file to the `public/` folder.
-
-#### Notes on client-side routing
-
-GitHub Pages doesn't support routers that use the HTML5 `pushState` history API under the hood (for example, React Router using `browserHistory`). This is because when there is a fresh page load for a url like `http://user.github.io/todomvc/todos/42`, where `/todos/42` is a frontend route, the GitHub Pages server returns 404 because it knows nothing of `/todos/42`. If you want to add a router to a project hosted on GitHub Pages, here are a couple of solutions:
-
-* You could switch from using HTML5 history API to routing with hashes. If you use React Router, you can switch to `hashHistory` for this effect, but the URL will be longer and more verbose (for example, `http://user.github.io/todomvc/#/todos/42?_k=yknaj`). [Read more](https://github.com/reactjs/react-router/blob/master/docs/guides/Histories.md#histories) about different history implementations in React Router.
-* Alternatively, you can use a trick to teach GitHub Pages to handle 404 by redirecting to your `index.html` page with a special redirect parameter. You would need to add a `404.html` file with the redirection code to the `build` folder before deploying your project, and you’ll need to add code handling the redirect parameter to `index.html`. You can find a detailed explanation of this technique [in this guide](https://github.com/rafrex/spa-github-pages).
-
-### Heroku
-
-Use the [Heroku Buildpack for Create React App](https://github.com/mars/create-react-app-buildpack).<br>
-You can find instructions in [Deploying React with Zero Configuration](https://blog.heroku.com/deploying-react-with-zero-configuration).
-
-### Modulus
-
-See the [Modulus blog post](http://blog.modulus.io/deploying-react-apps-on-modulus) on how to deploy your react app to Modulus.
-
-## Netlify
-
-**To do a manual deploy to Netlify's CDN:**
-
-```sh
-npm install netlify-cli
-netlify deploy
-```
-
-Choose `build` as the path to deploy.
-
-**To setup continuous delivery:**
-
-With this setup Netlify will build and deploy when you push to git or open a pull request:
-
-1. [Start a new netlify project](https://app.netlify.com/signup)
-2. Pick your Git hosting service and select your repository
-3. Click `Build your site`
-
-**Support for client-side routing:**
-
-To support `pushState`, make sure to create a `public/_redirects` file with the following rewrite rules:
-
-```
-/* /index.html 200
-```
-
-When you build the project, Create React App will place the `public` folder contents into the build output.
-
-### Now
-
-See [this example](https://github.com/xkawi/create-react-app-now) for a zero-configuration single-command deployment with [now](https://zeit.co/now).
-
-### S3 and CloudFront
-
-See this [blog post](https://medium.com/@omgwtfmarc/deploying-create-react-app-to-s3-or-cloudfront-48dae4ce0af) on how to deploy your React app to Amazon Web Services [S3](https://aws.amazon.com/s3) and [CloudFront](https://aws.amazon.com/cloudfront/).
-
-### Surge
-
-Install the Surge CLI if you haven't already by running `npm install -g surge`. Run the `surge` command and log in you or create a new account. You just need to specify the *build* folder and your custom domain, and you are done.
-
-```sh
- email: email@domain.com
- password: ********
- project path: /path/to/project/build
- size: 7 files, 1.8 MB
- domain: create-react-app.surge.sh
- upload: [====================] 100%, eta: 0.0s
- propagate on CDN: [====================] 100%
- plan: Free
- users: email@domain.com
- IP Address: X.X.X.X
-
- Success! Project is published and running at create-react-app.surge.sh
-```
-
-Note that in order to support routers that use HTML5 `pushState` API, you may want to rename the `index.html` in your build folder to `200.html` before deploying to Surge. This [ensures that every URL falls back to that file](https://surge.sh/help/adding-a-200-page-for-client-side-routing).
-
-## Troubleshooting
-
-### `npm test` hangs on macOS Sierra
-
-If you run `npm test` and the console gets stuck after printing `react-scripts test --env=jsdom` to the console there might be a problem with your [Watchman](https://facebook.github.io/watchman/) installation as described in [facebookincubator/create-react-app#713](https://github.com/facebookincubator/create-react-app/issues/713).
-
-We recommend deleting `node_modules` in your project and running `npm install` (or `yarn` if you use it) first. If it doesn't help, you can try one of the numerous workarounds mentioned in these issues:
-
-* [facebook/jest#1767](https://github.com/facebook/jest/issues/1767)
-* [facebook/watchman#358](https://github.com/facebook/watchman/issues/358)
-* [ember-cli/ember-cli#6259](https://github.com/ember-cli/ember-cli/issues/6259)
-
-It is reported that installing Watchman 4.7.0 or newer fixes the issue. If you use [Homebrew](http://brew.sh/), you can run these commands to update it:
-
-```
-watchman shutdown-server
-brew update
-brew reinstall watchman
-```
-
-You can find [other installation methods](https://facebook.github.io/watchman/docs/install.html#build-install) on the Watchman documentation page.
-
-If this still doesn't help, try running `launchctl unload -F ~/Library/LaunchAgents/com.github.facebook.watchman.plist`.
-
-There are also reports that *uninstalling* Watchman fixes the issue. So if nothing else helps, remove it from your system and try again.
-
-### `npm run build` silently fails
-
-It is reported that `npm run build` can fail on machines with no swap space, which is common in cloud environments. If [the symptoms are matching](https://github.com/facebookincubator/create-react-app/issues/1133#issuecomment-264612171), consider adding some swap space to the machine you’re building on, or build the project locally.
-
-## Something Missing?
-
-If you have ideas for more “How To” recipes that should be on this page, [let us know](https://github.com/facebookincubator/create-react-app/issues) or [contribute some!](https://github.com/facebookincubator/create-react-app/edit/master/packages/react-scripts/template/README.md)
diff --git a/src/main/js/package.json b/src/main/js/package.json
deleted file mode 100644
index 34632161..00000000
--- a/src/main/js/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "javascript",
- "version": "0.1.0",
- "private": true,
- "devDependencies": {
- "react-scripts": "0.8.3"
- },
- "dependencies": {
- "babel-polyfill": "^6.20.0",
- "immutable": "^3.8.1",
- "react": "^15.4.1",
- "react-dom": "^15.4.1",
- "react-redux": "^5.0.1",
- "react-router": "^3.0.0",
- "react-router-redux": "^4.0.7",
- "rebass": "^0.3.3",
- "redux": "^3.6.0",
- "redux-saga": "^0.13.0",
- "reflexbox": "^2.2.3",
- "sockjs-client": "latest",
- "webstomp-client": "^1.0.3"
- },
- "scripts": {
- "start": "react-scripts start",
- "build": "react-scripts build",
- "test": "react-scripts test --env=jsdom",
- "eject": "react-scripts eject"
- },
- "eslintConfig": {
- "extends": "react-app"
- },
- "proxy": "ws://localhost:8080"
-}
diff --git a/src/main/js/public/favicon.ico b/src/main/js/public/favicon.ico
deleted file mode 100644
index 5c125de5..00000000
--- a/src/main/js/public/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/src/main/js/public/index.html b/src/main/js/public/index.html
deleted file mode 100644
index aab5e3b0..00000000
--- a/src/main/js/public/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
- <!--
- Notice the use of %PUBLIC_URL% in the tag above.
- It will be replaced with the URL of the `public` folder during the build.
- Only files inside the `public` folder can be referenced from the HTML.
-
- Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
- work correctly both with client-side routing and a non-root public URL.
- Learn how to configure a non-root public URL by running `npm run build`.
- -->
- <title>React App</title>
- </head>
- <body>
- <div id="root"></div>
- <!--
- This HTML file is a template.
- If you open it directly in the browser, you will see an empty page.
-
- You can add webfonts, meta tags, or analytics to this file.
- The build step will place the bundled scripts into the <body> tag.
-
- To begin the development, run `npm start`.
- To create a production bundle, use `npm run build`.
- -->
- </body>
-</html>
diff --git a/src/main/js/src/components/errors/Error404.js b/src/main/js/src/components/errors/Error404.js
deleted file mode 100644
index b657482d..00000000
--- a/src/main/js/src/components/errors/Error404.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from 'react'
-import { Link } from 'react-router'
-
-const Error404 = () => <div>
- <h1>No Match</h1>
- <Link to="/">Take me back home ! 🏠</Link>
-</div>
-export default Error404 \ No newline at end of file
diff --git a/src/main/js/src/components/modals/username.js b/src/main/js/src/components/modals/username.js
deleted file mode 100644
index 61b52114..00000000
--- a/src/main/js/src/components/modals/username.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from 'react'
-import {
- Overlay,
- Panel,
- PanelHeader,
- PanelFooter,
- Button,
- Input,
- Close,
- Space
-} from 'rebass'
-
-const Modal = ({ modalOpen, toggleModal }) => (
- <Overlay open={modalOpen} onDismiss={toggleModal('usernameModal')}>
- <Panel theme="info">
- <PanelHeader>
- What's your username ?
- <Space auto />
- <Close onClick={toggleModal('usernameModal')} />
- </PanelHeader>
- <Input
- label="Username"
- name="username"
- placeholder="Cesar92"
- rounded
- type="text"
- />
- <PanelFooter>
- <Space auto />
- <Button
- theme="success"
- onClick={toggleModal('usernameModal')}
- children="Ok"
- />
- </PanelFooter>
- </Panel>
- </Overlay>
-)
-
-export default Modal
diff --git a/src/main/js/src/containers/App/actions.js b/src/main/js/src/containers/App/actions.js
deleted file mode 100644
index cfb617d5..00000000
--- a/src/main/js/src/containers/App/actions.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { INITIALIZE_WS } from "./constants"
-
-export const initializeWs = () => ({
- type: INITIALIZE_WS
-})
diff --git a/src/main/js/src/containers/App/constants.js b/src/main/js/src/containers/App/constants.js
deleted file mode 100644
index be31f8cc..00000000
--- a/src/main/js/src/containers/App/constants.js
+++ /dev/null
@@ -1 +0,0 @@
-export const INITIALIZE_WS = 'app/INITIALIZE_WS'
diff --git a/src/main/js/src/containers/App/index.js b/src/main/js/src/containers/App/index.js
deleted file mode 100644
index 70f99b6b..00000000
--- a/src/main/js/src/containers/App/index.js
+++ /dev/null
@@ -1,83 +0,0 @@
-import React, { Component } from 'react'
-import { connect } from 'react-redux'
-import {
- Banner,
- Heading,
- Space,
- Button,
- InlineForm,
- Text
-} from 'rebass'
-import { Flex } from 'reflexbox'
-import Modal from '../../components/modals/username'
-import GameBrowser from '../GameBrowser'
-
-class App extends Component {
- state = {
- usernameModal: false,
- }
-
- componentDidMount() {
-
- }
-
- toggleModal = (key) => {
- return (e) => {
- const val = !this.state[key]
- this.setState({ [key]: val })
- }
- }
-
- createGame = (e) => {
- e.preventDefault()
- if (this._gameName !== undefined) {
- this.props.createGame(this._gameName)
- }
- }
-
- render() {
- return (
- <div>
- <Banner
- align="center"
- style={{minHeight: '30vh'}}
- backgroundImage="https://images.unsplash.com/photo-1431207446535-a9296cf995b1?dpr=1&auto=format&fit=crop&w=1199&h=799&q=80&cs=tinysrgb&crop="
- >
- <Heading level={1}>Seven Wonders</Heading>
- </Banner>
- <Flex align="center" p={1}>
- <InlineForm
- buttonLabel="Create Game"
- label="Game name"
- name="game_name"
- onChange={(e) => this._gameName = e.target.value}
- onClick={this.createGame}
- >
-
- </InlineForm>
- <Space auto />
- <Text><b>Username:</b> Cesar92</Text>
- <Space x={1} />
- <Button
- onClick={this.toggleModal('usernameModal')}
- children="Change"/>
- </Flex>
- <GameBrowser />
- <Modal toggleModal={this.toggleModal} modalOpen={this.state.usernameModal} />
- </div>
- )
- }
-}
-
-const mapStateToProps = (state) => ({
-
-})
-
-import { initializeWs } from "./actions";
-import { createGame } from '../GameBrowser/actions'
-const mapDispatchToProps = {
- initializeWs,
- createGame
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(App)
diff --git a/src/main/js/src/containers/App/saga.js b/src/main/js/src/containers/App/saga.js
deleted file mode 100644
index 0c212142..00000000
--- a/src/main/js/src/containers/App/saga.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { put, take } from 'redux-saga/effects'
-import { eventChannel } from 'redux-saga'
-
-function createSocketChannel(socket) {
- return eventChannel(emit => {
- const errorHandler = event => emit(JSON.parse(event.body))
-
- const userErrors = socket.subscribe('/user/queue/errors', errorHandler)
-
- const unsubscribe = () => {
- userErrors.unsubscribe()
- }
-
- return unsubscribe
- })
-}
-
-export function* watchOnErrors(socketConnection) {
- const { socket } = socketConnection
- const socketChannel = createSocketChannel(socket)
-
- while (true) {
- const payload = yield take(socketChannel)
- yield put({ type: 'USER_ERROR', payload })
- }
-}
-
-export default watchOnErrors
diff --git a/src/main/js/src/containers/GameBrowser/actions.js b/src/main/js/src/containers/GameBrowser/actions.js
deleted file mode 100644
index 376973b4..00000000
--- a/src/main/js/src/containers/GameBrowser/actions.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import { NEW_GAME, JOIN_GAME, CREATE_GAME } from './constants'
-
-export const newGame = (game) => ({
- type: NEW_GAME,
- game
-})
-
-export const joinGame = (id) => ({
- type: JOIN_GAME,
- id
-})
-
-export const createGame = (name) => ({
- type: CREATE_GAME,
- name
-})
diff --git a/src/main/js/src/containers/GameBrowser/constants.js b/src/main/js/src/containers/GameBrowser/constants.js
deleted file mode 100644
index 36f701b7..00000000
--- a/src/main/js/src/containers/GameBrowser/constants.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export const NEW_GAME = 'gameBrowser/NEW_GAME'
-export const JOIN_GAME = 'gameBrowser/JOIN_GAME'
-export const CREATE_GAME = 'gameBrowser/CREATE_GAME'
diff --git a/src/main/js/src/containers/GameBrowser/index.js b/src/main/js/src/containers/GameBrowser/index.js
deleted file mode 100644
index 9deb720b..00000000
--- a/src/main/js/src/containers/GameBrowser/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React, { Component } from 'react'
-import { connect } from 'react-redux'
-import { Flex } from 'reflexbox'
-import { Text, Space } from 'rebass'
-
-class GameBrowser extends Component {
-
- listGames = (games) => {
- return games.valueSeq().map((game, index) => {
- return (<Flex key={index}>
- <Text>{game.get('name')}</Text>
- <Space auto />
- <a href="#">Join</a>
- </Flex>)
- })
- }
-
- render() {
- return (
- <div>
- {this.listGames(this.props.games)}
- </div>
- )
- }
-}
-
-const mapStateToProps = (state) => ({
- games: state.games
-})
-
-export default connect(mapStateToProps, {})(GameBrowser)
diff --git a/src/main/js/src/containers/GameBrowser/reducer.js b/src/main/js/src/containers/GameBrowser/reducer.js
deleted file mode 100644
index 4fb3390a..00000000
--- a/src/main/js/src/containers/GameBrowser/reducer.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Map } from 'immutable'
-import { NEW_GAME } from './constants'
-
-const initialState = Map({})
-
-export default function reducer(state = initialState, action) {
- switch (action.type) {
- case NEW_GAME:
- return state.set(action.game.get('id'), action.game)
- default:
- return state
- }
-}
diff --git a/src/main/js/src/containers/GameBrowser/saga.js b/src/main/js/src/containers/GameBrowser/saga.js
deleted file mode 100644
index 4cd3d207..00000000
--- a/src/main/js/src/containers/GameBrowser/saga.js
+++ /dev/null
@@ -1,75 +0,0 @@
-import { call, put, take } from 'redux-saga/effects'
-import { eventChannel } from 'redux-saga'
-import { fromJS } from 'immutable'
-import { push } from 'react-router-redux'
-
-import { NEW_GAME, JOIN_GAME, CREATE_GAME } from './constants'
-import { newGame, joinGame } from './actions'
-
-function createSocketChannel(socket) {
- return eventChannel(emit => {
- const makeHandler = (type) => (event) => {
- const response = fromJS(JSON.parse(event.body))
-
- emit({
- type,
- response
- })
- }
-
- const newGameHandler = makeHandler(NEW_GAME)
- const joinGameHandler = makeHandler(JOIN_GAME)
-
- const newGame = socket.subscribe('/topic/games', newGameHandler)
- const joinGame = socket.subscribe('/user/queue/join-game', joinGameHandler)
-
- const unsubscribe = () => {
- newGame.unsubscribe()
- joinGame.unsubscribe()
- }
-
- return unsubscribe
- })
-}
-
-export function* watchGames(socketConnection) {
-
- const { socket } = socketConnection
- const socketChannel = createSocketChannel(socket)
-
- while (true) {
- const { type, response } = yield take(socketChannel)
-
- switch (type) {
- case NEW_GAME:
- yield put(newGame(response))
- break;
- case JOIN_GAME:
- yield put(joinGame(response))
- break;
- default:
- console.error('Unknown type')
- }
- }
-}
-
-export function* createGame(socketConnection) {
- const { name } = yield take(CREATE_GAME)
- const { socket } = socketConnection
-
- socket.send("/app/lobby/create-game", JSON.stringify({
- 'gameName': name,
- 'playerName': 'Cesar92'
- }), {})
-}
-
-export function* gameBrowserSaga(socketConnection) {
- yield put(push('/lobby'))
-
- yield [
- call(watchGames, socketConnection),
- call(createGame, socketConnection)
- ]
-}
-
-export default gameBrowserSaga
diff --git a/src/main/js/src/containers/HomePage/actions.js b/src/main/js/src/containers/HomePage/actions.js
deleted file mode 100644
index e06d6fa2..00000000
--- a/src/main/js/src/containers/HomePage/actions.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export const ENTER_GAME = 'homePage/ENTER_GAME'
-
-export const enterGame = (username) => ({
- type: ENTER_GAME,
- username
-})
diff --git a/src/main/js/src/containers/HomePage/index.js b/src/main/js/src/containers/HomePage/index.js
deleted file mode 100644
index c8e33239..00000000
--- a/src/main/js/src/containers/HomePage/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React, { Component } from 'react'
-import { connect } from 'react-redux'
-import { Heading, InlineForm } from 'rebass'
-
-class HomePage extends Component {
-
- play = (e) => {
- e.preventDefault()
- if (this._username !== undefined) {
- this.props.enterGame(this._username)
- }
- }
-
- render() {
- return (
- <div>
- <Heading>Enter your username to start playing!</Heading>
- <InlineForm
- buttonLabel="Play now!"
- label="Username"
- name="username"
- onChange={(e) => this._username = e.target.value}
- onClick={this.play}
- />
- </div>
- )
- }
-}
-
-const mapStateToProps = (state) => ({
-
-})
-
-import { enterGame } from './actions'
-const mapDispatchToProps = {
- enterGame
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(HomePage)
diff --git a/src/main/js/src/containers/HomePage/saga.js b/src/main/js/src/containers/HomePage/saga.js
deleted file mode 100644
index 0fbe8a45..00000000
--- a/src/main/js/src/containers/HomePage/saga.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import { call, put, take } from 'redux-saga/effects'
-import { eventChannel } from 'redux-saga'
-import { ENTER_GAME } from './actions'
-import { setUsername } from '../UserRepo/actions'
-
-import gameBrowserSaga from '../GameBrowser/saga'
-
-function* sendUsername(socketConnection) {
- const { username: playerName } = yield take(ENTER_GAME)
- const { socket } = socketConnection
-
- socket.send("/app/chooseName", JSON.stringify({
- playerName
- }), {})
-}
-
-function createSocketChannel(socket) {
- return eventChannel(emit => {
- const receiveUsername = socket.subscribe('/user/queue/nameChoice', event => {
- emit(JSON.parse(event.body))
- })
-
- const unsubscribe = () => {
- receiveUsername.unsubscribe()
- }
-
- return unsubscribe
- })
-}
-
-function* validateUsername(socketConnection) {
- const { socket } = socketConnection
- const socketChannel = createSocketChannel(socket)
-
- const response = yield take(socketChannel)
-
- if (response.error) {
- return false
- }
-
- yield put(setUsername(response.userName, response.displayName, response.index))
- yield call(gameBrowserSaga, socketConnection)
- return true
-}
-
-function* homeSaga(socketConnection) {
- let validated = false
- do {
- const [, usernameValid] = yield [
- call(sendUsername, socketConnection),
- call(validateUsername, socketConnection)
- ]
- validated = usernameValid
- } while (!validated)
-}
-
-export default homeSaga
diff --git a/src/main/js/src/containers/UserRepo/actions.js b/src/main/js/src/containers/UserRepo/actions.js
deleted file mode 100644
index dc06035b..00000000
--- a/src/main/js/src/containers/UserRepo/actions.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export const SET_USERNAME = 'homePage/SET_USERNAME'
-
-export const setUsername = (userName, displayName, index) => ({
- type: SET_USERNAME,
- userName,
- index,
- displayName
-})
diff --git a/src/main/js/src/containers/UserRepo/reducer.js b/src/main/js/src/containers/UserRepo/reducer.js
deleted file mode 100644
index 82960a58..00000000
--- a/src/main/js/src/containers/UserRepo/reducer.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { SET_USERNAME } from './actions'
-import { fromJS } from 'immutable'
-const initialState = fromJS({
- username: '',
- displayName: '',
- id: null
-})
-
-export default (state = initialState, action) => {
- switch (action.type) {
- case SET_USERNAME:
- return state.set('username', action.userName)
- .set('displayName', action.displayName)
- .set('id', action.index)
- default:
- return state
- }
-}
diff --git a/src/main/js/src/global-styles.css b/src/main/js/src/global-styles.css
deleted file mode 100644
index 4b644b66..00000000
--- a/src/main/js/src/global-styles.css
+++ /dev/null
@@ -1,10 +0,0 @@
-* { box-sizing: border-box; }
-
-body {
- margin: 0;
- padding: 0;
- font-family: -apple-system, BlinkMacSystemFont, sans-serif;
- line-height: 1.5;
- color: #111;
- background-color: #fff;
-} \ No newline at end of file
diff --git a/src/main/js/src/index.js b/src/main/js/src/index.js
deleted file mode 100644
index 3edce222..00000000
--- a/src/main/js/src/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import 'babel-polyfill'
-
-import React from 'react'
-import ReactDOM from 'react-dom'
-import { Router, Route } from 'react-router'
-import { Provider } from 'react-redux'
-import configureStore from './store'
-
-const initialState = {}
-const { store, history } = configureStore(initialState)
-
-import './global-styles.css'
-import HomePage from './containers/HomePage'
-import Error404 from './components/errors/Error404'
-
-ReactDOM.render(
- <Provider store={store}>
- <Router history={history}>
- <div className="app">
- <Route path="/" component={HomePage}/>
- <Route path="*" component={Error404}/>
- </div>
- </Router>
- </Provider>,
- document.getElementById('root')
-);
diff --git a/src/main/js/src/layouts/.gitkeep b/src/main/js/src/layouts/.gitkeep
deleted file mode 100644
index e69de29b..00000000
--- a/src/main/js/src/layouts/.gitkeep
+++ /dev/null
diff --git a/src/main/js/src/reducers.js b/src/main/js/src/reducers.js
deleted file mode 100644
index d9db899b..00000000
--- a/src/main/js/src/reducers.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { combineReducers } from 'redux'
-import { routerReducer } from 'react-router-redux'
-
-import gamesReducer from './containers/GameBrowser/reducer'
-import userReducer from './containers/UserRepo/reducer'
-
-export default function createReducer() {
- return combineReducers({
- games: gamesReducer,
- routing: routerReducer,
- user: userReducer,
- })
-}
diff --git a/src/main/js/src/sagas.js b/src/main/js/src/sagas.js
deleted file mode 100644
index 58ef73ee..00000000
--- a/src/main/js/src/sagas.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { fork, call } from 'redux-saga/effects'
-
-import createWsConnection from './utils/createWebSocketConnection'
-
-import errorSaga from './containers/App/saga'
-import homeSaga from './containers/HomePage/saga'
-
-function* wsAwareSagas() {
- let wsConnection
- try {
- wsConnection = yield call(createWsConnection)
- } catch (error) {
- console.error('Could not connect to socket')
- return
- }
-
- yield fork(errorSaga, wsConnection)
- yield fork(homeSaga, wsConnection)
-}
-
-export default function* rootSaga() {
- yield [
- call(wsAwareSagas)
- ]
-}
diff --git a/src/main/js/src/store.js b/src/main/js/src/store.js
deleted file mode 100644
index e9ac401e..00000000
--- a/src/main/js/src/store.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import { createStore, applyMiddleware, compose } from 'redux'
-import { browserHistory} from 'react-router'
-import { syncHistoryWithStore, routerMiddleware } from 'react-router-redux'
-
-import createReducer from './reducers'
-import createSagaMiddleware from 'redux-saga'
-import rootSaga from './sagas'
-
-export default function configureStore(initialState = {}) {
- const sagaMiddleware = createSagaMiddleware()
- const history = browserHistory
-
- const middlewares = [
- sagaMiddleware,
- routerMiddleware(history)
- ]
-
- const enhancers = [
- applyMiddleware(...middlewares)
- ]
-
- const composeEnhancers =
- process.env.NODE_ENV !== 'production' &&
- typeof window === 'object' &&
- window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?
- window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : compose;
-
- const store = createStore(
- createReducer(),
- initialState,
- composeEnhancers(...enhancers)
- )
-
- sagaMiddleware.run(rootSaga)
-
- return {
- store,
- history: syncHistoryWithStore(history, store)
- }
-}
diff --git a/src/main/js/src/utils/createWebSocketConnection.js b/src/main/js/src/utils/createWebSocketConnection.js
deleted file mode 100644
index b0924976..00000000
--- a/src/main/js/src/utils/createWebSocketConnection.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import SockJS from 'sockjs-client'
-import Stomp from 'webstomp-client'
-const wsURL = 'http://localhost:8080/seven-wonders-websocket'
-
-const createConnection = (headers = {}) => new Promise((resolve, reject) => {
- let socket = Stomp.over(new SockJS(wsURL), {
- debug: process.env.NODE_ENV !== "production"
- })
- socket.connect(headers, (frame) => {
- return resolve({ frame, socket })
- }, reject)
-})
-
-export default createConnection
diff --git a/src/main/js/yarn.lock b/src/main/js/yarn.lock
deleted file mode 100644
index cee03120..00000000
--- a/src/main/js/yarn.lock
+++ /dev/null
@@ -1,5418 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-abab@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
-
-abbrev@1, abbrev@1.0.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
-
-accepts@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
- dependencies:
- mime-types "~2.1.11"
- negotiator "0.6.1"
-
-acorn-globals@^1.0.4:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf"
- dependencies:
- acorn "^2.1.0"
-
-acorn-jsx@^3.0.0, acorn-jsx@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
- dependencies:
- acorn "^3.0.4"
-
-acorn@^2.1.0, acorn@^2.4.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
-
-acorn@^3.0.0, acorn@^3.0.4:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-
-acorn@^4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.3.tgz#1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1"
-
-ajv-keywords@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.2.0.tgz#676c4f087bfe1e8b12dca6fda2f3c74f417b099c"
-
-ajv@^4.7.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.9.2.tgz#3f7dcda95b0c34bceb2d69945117d146219f1a2c"
- dependencies:
- co "^4.6.0"
- json-stable-stringify "^1.0.1"
-
-align-text@^0.1.1, align-text@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
- dependencies:
- kind-of "^3.0.2"
- longest "^1.0.1"
- repeat-string "^1.5.2"
-
-alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-escapes@^1.1.0, ansi-escapes@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
-
-ansi-html@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.5.tgz#0dcaa5a081206866bc240a3b773a184ea3b88b64"
-
-ansi-regex@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-ansicolors@~0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef"
-
-anymatch@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
- dependencies:
- arrify "^1.0.0"
- micromatch "^2.1.5"
-
-append-transform@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.3.0.tgz#d6933ce4a85f09445d9ccc4cc119051b7381a813"
-
-aproba@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
-
-are-we-there-yet@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
- dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.0 || ^1.1.13"
-
-argparse@^1.0.7:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
- dependencies:
- sprintf-js "~1.0.2"
-
-arr-diff@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
- dependencies:
- arr-flatten "^1.0.1"
-
-arr-flatten@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
-
-array-differ@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
-
-array-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
-
-array-flatten@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
-
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- dependencies:
- array-uniq "^1.0.1"
-
-array-uniq@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-
-array-unique@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-
-arrify@^1.0.0, arrify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-
-asap@~2.0.3:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
-
-asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
-
-assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assert@^1.1.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
- dependencies:
- util "0.10.3"
-
-async-each@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-
-async@1.x, async@^1.3.0, async@^1.4.0, async@^1.4.2, async@^1.5.0:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-
-async@^0.9.0:
- version "0.9.2"
- resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
-
-async@~0.2.6:
- version "0.2.10"
- resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-autoprefixer@6.5.1, autoprefixer@^6.3.1:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.5.1.tgz#ae759a5221e709f3da17c2d656230e67c43cbb75"
- dependencies:
- browserslist "~1.4.0"
- caniuse-db "^1.0.30000554"
- normalize-range "^0.1.2"
- num2fraction "^1.2.2"
- postcss "^5.2.4"
- postcss-value-parser "^3.2.3"
-
-aws-sign2@~0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
-
-aws4@^1.2.1:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
-
-babel-code-frame@^6.11.0, babel-code-frame@^6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.16.0.tgz#f90e60da0862909d3ce098733b5d3987c97cb8de"
- dependencies:
- chalk "^1.1.0"
- esutils "^2.0.2"
- js-tokens "^2.0.0"
-
-babel-core@6.17.0, babel-core@^6.0.0:
- version "6.17.0"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.17.0.tgz#6c4576447df479e241e58c807e4bc7da4db7f425"
- dependencies:
- babel-code-frame "^6.16.0"
- babel-generator "^6.17.0"
- babel-helpers "^6.16.0"
- babel-messages "^6.8.0"
- babel-register "^6.16.0"
- babel-runtime "^6.9.1"
- babel-template "^6.16.0"
- babel-traverse "^6.16.0"
- babel-types "^6.16.0"
- babylon "^6.11.0"
- convert-source-map "^1.1.0"
- debug "^2.1.1"
- json5 "^0.4.0"
- lodash "^4.2.0"
- minimatch "^3.0.2"
- path-exists "^1.0.0"
- path-is-absolute "^1.0.0"
- private "^0.1.6"
- shebang-regex "^1.0.0"
- slash "^1.0.0"
- source-map "^0.5.0"
-
-babel-core@^6.18.0:
- version "6.18.2"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.2.tgz#d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b"
- dependencies:
- babel-code-frame "^6.16.0"
- babel-generator "^6.18.0"
- babel-helpers "^6.16.0"
- babel-messages "^6.8.0"
- babel-register "^6.18.0"
- babel-runtime "^6.9.1"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
- babylon "^6.11.0"
- convert-source-map "^1.1.0"
- debug "^2.1.1"
- json5 "^0.5.0"
- lodash "^4.2.0"
- minimatch "^3.0.2"
- path-is-absolute "^1.0.0"
- private "^0.1.6"
- slash "^1.0.0"
- source-map "^0.5.0"
-
-babel-eslint@7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.0.0.tgz#54e51b4033f54ac81326ecea4c646a779935196d"
- dependencies:
- babel-traverse "^6.15.0"
- babel-types "^6.15.0"
- babylon "^6.11.2"
- lodash.pickby "^4.6.0"
-
-babel-generator@^6.17.0, babel-generator@^6.18.0:
- version "6.19.0"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.19.0.tgz#9b2f244204777a3d6810ec127c673c87b349fac5"
- dependencies:
- babel-messages "^6.8.0"
- babel-runtime "^6.9.0"
- babel-types "^6.19.0"
- detect-indent "^4.0.0"
- jsesc "^1.3.0"
- lodash "^4.2.0"
- source-map "^0.5.0"
-
-babel-helper-builder-binary-assignment-operator-visitor@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6"
- dependencies:
- babel-helper-explode-assignable-expression "^6.18.0"
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-helper-builder-react-jsx@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.18.0.tgz#ab02f19a2eb7ace936dd87fa55896d02be59bf71"
- dependencies:
- babel-runtime "^6.9.0"
- babel-types "^6.18.0"
- esutils "^2.0.0"
- lodash "^4.2.0"
-
-babel-helper-call-delegate@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd"
- dependencies:
- babel-helper-hoist-variables "^6.18.0"
- babel-runtime "^6.0.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2"
- dependencies:
- babel-helper-function-name "^6.18.0"
- babel-runtime "^6.9.0"
- babel-types "^6.18.0"
- lodash "^4.2.0"
-
-babel-helper-explode-assignable-expression@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe"
- dependencies:
- babel-runtime "^6.0.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6"
- dependencies:
- babel-helper-get-function-arity "^6.18.0"
- babel-runtime "^6.0.0"
- babel-template "^6.8.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-helper-get-function-arity@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-helper-hoist-variables@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-helper-optimise-call-expression@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-helper-regex@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6"
- dependencies:
- babel-runtime "^6.9.0"
- babel-types "^6.18.0"
- lodash "^4.2.0"
-
-babel-helper-remap-async-to-generator@^6.16.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.18.0.tgz#336cdf3cab650bb191b02fc16a3708e7be7f9ce5"
- dependencies:
- babel-helper-function-name "^6.18.0"
- babel-runtime "^6.0.0"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e"
- dependencies:
- babel-helper-optimise-call-expression "^6.18.0"
- babel-messages "^6.8.0"
- babel-runtime "^6.0.0"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-helpers@^6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3"
- dependencies:
- babel-runtime "^6.0.0"
- babel-template "^6.16.0"
-
-babel-jest@17.0.2, babel-jest@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-17.0.2.tgz#8d51e0d03759713c331f108eb0b2eaa4c6efff74"
- dependencies:
- babel-core "^6.0.0"
- babel-plugin-istanbul "^2.0.0"
- babel-preset-jest "^17.0.2"
-
-babel-loader@6.2.7:
- version "6.2.7"
- resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.7.tgz#16fdbf64328030dc5a606827d389c8b92a2a8032"
- dependencies:
- find-cache-dir "^0.1.1"
- loader-utils "^0.2.11"
- mkdirp "^0.5.1"
- object-assign "^4.0.1"
-
-babel-messages@^6.8.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-check-es2015-constants@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-istanbul@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz#266b304b9109607d60748474394676982f660df4"
- dependencies:
- find-up "^1.1.2"
- istanbul-lib-instrument "^1.1.4"
- object-assign "^4.1.0"
- test-exclude "^2.1.1"
-
-babel-plugin-jest-hoist@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-17.0.2.tgz#213488ce825990acd4c30f887dca09fffeb45235"
-
-babel-plugin-syntax-async-functions@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
-
-babel-plugin-syntax-class-properties@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
-
-babel-plugin-syntax-exponentiation-operator@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
-
-babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
-
-babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
-
-babel-plugin-syntax-object-rest-spread@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
-
-babel-plugin-syntax-trailing-function-commas@^6.13.0, babel-plugin-syntax-trailing-function-commas@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz#2b84b7d53dd744f94ff1fad7669406274b23f541"
-
-babel-plugin-transform-async-to-generator@^6.16.0, babel-plugin-transform-async-to-generator@^6.8.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999"
- dependencies:
- babel-helper-remap-async-to-generator "^6.16.0"
- babel-plugin-syntax-async-functions "^6.8.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-class-properties@6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.16.0.tgz#969bca24d34e401d214f36b8af5c1346859bc904"
- dependencies:
- babel-helper-function-name "^6.8.0"
- babel-plugin-syntax-class-properties "^6.8.0"
- babel-runtime "^6.9.1"
-
-babel-plugin-transform-es2015-arrow-functions@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-block-scoped-functions@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-block-scoping@^6.18.0, babel-plugin-transform-es2015-block-scoping@^6.6.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz#3bfdcfec318d46df22525cdea88f1978813653af"
- dependencies:
- babel-runtime "^6.9.0"
- babel-template "^6.15.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
- lodash "^4.2.0"
-
-babel-plugin-transform-es2015-classes@^6.18.0, babel-plugin-transform-es2015-classes@^6.6.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9"
- dependencies:
- babel-helper-define-map "^6.18.0"
- babel-helper-function-name "^6.18.0"
- babel-helper-optimise-call-expression "^6.18.0"
- babel-helper-replace-supers "^6.18.0"
- babel-messages "^6.8.0"
- babel-runtime "^6.9.0"
- babel-template "^6.14.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-plugin-transform-es2015-computed-properties@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870"
- dependencies:
- babel-helper-define-map "^6.8.0"
- babel-runtime "^6.0.0"
- babel-template "^6.8.0"
-
-babel-plugin-transform-es2015-destructuring@^6.18.0, babel-plugin-transform-es2015-destructuring@^6.6.0:
- version "6.19.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz#ff1d911c4b3f4cab621bd66702a869acd1900533"
- dependencies:
- babel-runtime "^6.9.0"
-
-babel-plugin-transform-es2015-duplicate-keys@^6.6.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.8.0"
-
-babel-plugin-transform-es2015-for-of@^6.18.0, babel-plugin-transform-es2015-for-of@^6.6.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-function-name@^6.3.13, babel-plugin-transform-es2015-function-name@^6.9.0:
- version "6.9.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719"
- dependencies:
- babel-helper-function-name "^6.8.0"
- babel-runtime "^6.9.0"
- babel-types "^6.9.0"
-
-babel-plugin-transform-es2015-literals@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-modules-amd@^6.18.0, babel-plugin-transform-es2015-modules-amd@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40"
- dependencies:
- babel-plugin-transform-es2015-modules-commonjs "^6.18.0"
- babel-runtime "^6.0.0"
- babel-template "^6.8.0"
-
-babel-plugin-transform-es2015-modules-commonjs@^6.18.0, babel-plugin-transform-es2015-modules-commonjs@^6.6.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc"
- dependencies:
- babel-plugin-transform-strict-mode "^6.18.0"
- babel-runtime "^6.0.0"
- babel-template "^6.16.0"
- babel-types "^6.18.0"
-
-babel-plugin-transform-es2015-modules-systemjs@^6.12.0, babel-plugin-transform-es2015-modules-systemjs@^6.18.0:
- version "6.19.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz#50438136eba74527efa00a5b0fefaf1dc4071da6"
- dependencies:
- babel-helper-hoist-variables "^6.18.0"
- babel-runtime "^6.11.6"
- babel-template "^6.14.0"
-
-babel-plugin-transform-es2015-modules-umd@^6.12.0, babel-plugin-transform-es2015-modules-umd@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50"
- dependencies:
- babel-plugin-transform-es2015-modules-amd "^6.18.0"
- babel-runtime "^6.0.0"
- babel-template "^6.8.0"
-
-babel-plugin-transform-es2015-object-super@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5"
- dependencies:
- babel-helper-replace-supers "^6.8.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-parameters@6.18.0, babel-plugin-transform-es2015-parameters@^6.18.0, babel-plugin-transform-es2015-parameters@^6.6.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz#9b2cfe238c549f1635ba27fc1daa858be70608b1"
- dependencies:
- babel-helper-call-delegate "^6.18.0"
- babel-helper-get-function-arity "^6.18.0"
- babel-runtime "^6.9.0"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-plugin-transform-es2015-shorthand-properties@^6.18.0, babel-plugin-transform-es2015-shorthand-properties@^6.3.13:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-plugin-transform-es2015-spread@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-sticky-regex@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be"
- dependencies:
- babel-helper-regex "^6.8.0"
- babel-runtime "^6.0.0"
- babel-types "^6.8.0"
-
-babel-plugin-transform-es2015-template-literals@^6.6.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-typeof-symbol@^6.18.0, babel-plugin-transform-es2015-typeof-symbol@^6.6.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-unicode-regex@^6.3.13:
- version "6.11.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c"
- dependencies:
- babel-helper-regex "^6.8.0"
- babel-runtime "^6.0.0"
- regexpu-core "^2.0.0"
-
-babel-plugin-transform-exponentiation-operator@^6.3.13, babel-plugin-transform-exponentiation-operator@^6.8.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4"
- dependencies:
- babel-helper-builder-binary-assignment-operator-visitor "^6.8.0"
- babel-plugin-syntax-exponentiation-operator "^6.8.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-flow-strip-types@^6.3.13:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.18.0.tgz#4d3e642158661e9b40db457c004a30817fa32592"
- dependencies:
- babel-plugin-syntax-flow "^6.18.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-object-rest-spread@6.19.0:
- version "6.19.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.19.0.tgz#f6ac428ee3cb4c6aa00943ed1422ce813603b34c"
- dependencies:
- babel-plugin-syntax-object-rest-spread "^6.8.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-react-constant-elements@6.9.1:
- version "6.9.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.9.1.tgz#125b86d96cb322e2139b607fd749ad5fbb17f005"
- dependencies:
- babel-runtime "^6.9.1"
-
-babel-plugin-transform-react-display-name@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.8.0.tgz#f7a084977383d728bdbdc2835bba0159577f660e"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-react-jsx-self@6.11.0, babel-plugin-transform-react-jsx-self@^6.11.0:
- version "6.11.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.11.0.tgz#605c9450c1429f97a930f7e1dfe3f0d9d0dbd0f4"
- dependencies:
- babel-plugin-syntax-jsx "^6.8.0"
- babel-runtime "^6.9.0"
-
-babel-plugin-transform-react-jsx-source@6.9.0, babel-plugin-transform-react-jsx-source@^6.3.13:
- version "6.9.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.9.0.tgz#af684a05c2067a86e0957d4f343295ccf5dccf00"
- dependencies:
- babel-plugin-syntax-jsx "^6.8.0"
- babel-runtime "^6.9.0"
-
-babel-plugin-transform-react-jsx@6.8.0, babel-plugin-transform-react-jsx@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.8.0.tgz#94759942f70af18c617189aa7f3593f1644a71ab"
- dependencies:
- babel-helper-builder-react-jsx "^6.8.0"
- babel-plugin-syntax-jsx "^6.8.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-regenerator@6.16.1, babel-plugin-transform-regenerator@^6.16.0, babel-plugin-transform-regenerator@^6.6.0:
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59"
- dependencies:
- babel-runtime "^6.9.0"
- babel-types "^6.16.0"
- private "~0.1.5"
-
-babel-plugin-transform-runtime@6.15.0:
- version "6.15.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c"
- dependencies:
- babel-runtime "^6.9.0"
-
-babel-plugin-transform-strict-mode@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-polyfill:
- version "6.20.0"
- resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7"
- dependencies:
- babel-runtime "^6.20.0"
- core-js "^2.4.0"
- regenerator-runtime "^0.10.0"
-
-babel-preset-env@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-0.0.8.tgz#a7e37e4b345263d045cd29738a0aff1ce31f5b0e"
- dependencies:
- babel-plugin-check-es2015-constants "^6.3.13"
- babel-plugin-syntax-trailing-function-commas "^6.13.0"
- babel-plugin-transform-async-to-generator "^6.8.0"
- babel-plugin-transform-es2015-arrow-functions "^6.3.13"
- babel-plugin-transform-es2015-block-scoped-functions "^6.3.13"
- babel-plugin-transform-es2015-block-scoping "^6.6.0"
- babel-plugin-transform-es2015-classes "^6.6.0"
- babel-plugin-transform-es2015-computed-properties "^6.3.13"
- babel-plugin-transform-es2015-destructuring "^6.6.0"
- babel-plugin-transform-es2015-duplicate-keys "^6.6.0"
- babel-plugin-transform-es2015-for-of "^6.6.0"
- babel-plugin-transform-es2015-function-name "^6.3.13"
- babel-plugin-transform-es2015-literals "^6.3.13"
- babel-plugin-transform-es2015-modules-amd "^6.8.0"
- babel-plugin-transform-es2015-modules-commonjs "^6.6.0"
- babel-plugin-transform-es2015-modules-systemjs "^6.12.0"
- babel-plugin-transform-es2015-modules-umd "^6.12.0"
- babel-plugin-transform-es2015-object-super "^6.3.13"
- babel-plugin-transform-es2015-parameters "^6.6.0"
- babel-plugin-transform-es2015-shorthand-properties "^6.3.13"
- babel-plugin-transform-es2015-spread "^6.3.13"
- babel-plugin-transform-es2015-sticky-regex "^6.3.13"
- babel-plugin-transform-es2015-template-literals "^6.6.0"
- babel-plugin-transform-es2015-typeof-symbol "^6.6.0"
- babel-plugin-transform-es2015-unicode-regex "^6.3.13"
- babel-plugin-transform-exponentiation-operator "^6.8.0"
- babel-plugin-transform-regenerator "^6.6.0"
- browserslist "^1.4.0"
-
-babel-preset-es2015@^6.16.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312"
- dependencies:
- babel-plugin-check-es2015-constants "^6.3.13"
- babel-plugin-transform-es2015-arrow-functions "^6.3.13"
- babel-plugin-transform-es2015-block-scoped-functions "^6.3.13"
- babel-plugin-transform-es2015-block-scoping "^6.18.0"
- babel-plugin-transform-es2015-classes "^6.18.0"
- babel-plugin-transform-es2015-computed-properties "^6.3.13"
- babel-plugin-transform-es2015-destructuring "^6.18.0"
- babel-plugin-transform-es2015-duplicate-keys "^6.6.0"
- babel-plugin-transform-es2015-for-of "^6.18.0"
- babel-plugin-transform-es2015-function-name "^6.9.0"
- babel-plugin-transform-es2015-literals "^6.3.13"
- babel-plugin-transform-es2015-modules-amd "^6.18.0"
- babel-plugin-transform-es2015-modules-commonjs "^6.18.0"
- babel-plugin-transform-es2015-modules-systemjs "^6.18.0"
- babel-plugin-transform-es2015-modules-umd "^6.18.0"
- babel-plugin-transform-es2015-object-super "^6.3.13"
- babel-plugin-transform-es2015-parameters "^6.18.0"
- babel-plugin-transform-es2015-shorthand-properties "^6.18.0"
- babel-plugin-transform-es2015-spread "^6.3.13"
- babel-plugin-transform-es2015-sticky-regex "^6.3.13"
- babel-plugin-transform-es2015-template-literals "^6.6.0"
- babel-plugin-transform-es2015-typeof-symbol "^6.18.0"
- babel-plugin-transform-es2015-unicode-regex "^6.3.13"
- babel-plugin-transform-regenerator "^6.16.0"
-
-babel-preset-es2016@^6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.16.0.tgz#c7daf5feedeee99c867813bdf0d573d94ca12812"
- dependencies:
- babel-plugin-transform-exponentiation-operator "^6.3.13"
-
-babel-preset-es2017@^6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-preset-es2017/-/babel-preset-es2017-6.16.0.tgz#536c6287778a758948ddd092b466b6ef50b786fa"
- dependencies:
- babel-plugin-syntax-trailing-function-commas "^6.8.0"
- babel-plugin-transform-async-to-generator "^6.16.0"
-
-babel-preset-jest@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-17.0.2.tgz#141e935debe164aaa0364c220d31ccb2176493b2"
- dependencies:
- babel-plugin-jest-hoist "^17.0.2"
-
-babel-preset-latest@6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.16.0.tgz#5b87e19e250bb1213f13af4ec9dc7a51d53f388d"
- dependencies:
- babel-preset-es2015 "^6.16.0"
- babel-preset-es2016 "^6.16.0"
- babel-preset-es2017 "^6.16.0"
-
-babel-preset-react-app@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-2.0.1.tgz#360efa5ef73213d0fe1b60fe35db482688ee2166"
- dependencies:
- babel-plugin-transform-class-properties "6.16.0"
- babel-plugin-transform-es2015-parameters "6.18.0"
- babel-plugin-transform-object-rest-spread "6.19.0"
- babel-plugin-transform-react-constant-elements "6.9.1"
- babel-plugin-transform-react-jsx "6.8.0"
- babel-plugin-transform-react-jsx-self "6.11.0"
- babel-plugin-transform-react-jsx-source "6.9.0"
- babel-plugin-transform-regenerator "6.16.1"
- babel-plugin-transform-runtime "6.15.0"
- babel-preset-env "0.0.8"
- babel-preset-latest "6.16.0"
- babel-preset-react "6.16.0"
- babel-runtime "6.11.6"
-
-babel-preset-react@6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.16.0.tgz#aa117d60de0928607e343c4828906e4661824316"
- dependencies:
- babel-plugin-syntax-flow "^6.3.13"
- babel-plugin-syntax-jsx "^6.3.13"
- babel-plugin-transform-flow-strip-types "^6.3.13"
- babel-plugin-transform-react-display-name "^6.3.13"
- babel-plugin-transform-react-jsx "^6.3.13"
- babel-plugin-transform-react-jsx-self "^6.11.0"
- babel-plugin-transform-react-jsx-source "^6.3.13"
-
-babel-register@^6.16.0, babel-register@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68"
- dependencies:
- babel-core "^6.18.0"
- babel-runtime "^6.11.6"
- core-js "^2.4.0"
- home-or-tmp "^2.0.0"
- lodash "^4.2.0"
- mkdirp "^0.5.1"
- source-map-support "^0.4.2"
-
-babel-runtime@6.11.6:
- version "6.11.6"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222"
- dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.9.5"
-
-babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.20.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1:
- version "6.20.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
- dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.10.0"
-
-babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.8.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
- dependencies:
- babel-runtime "^6.9.0"
- babel-traverse "^6.16.0"
- babel-types "^6.16.0"
- babylon "^6.11.0"
- lodash "^4.2.0"
-
-babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.18.0:
- version "6.19.0"
- resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.19.0.tgz#68363fb821e26247d52a519a84b2ceab8df4f55a"
- dependencies:
- babel-code-frame "^6.16.0"
- babel-messages "^6.8.0"
- babel-runtime "^6.9.0"
- babel-types "^6.19.0"
- babylon "^6.11.0"
- debug "^2.2.0"
- globals "^9.0.0"
- invariant "^2.2.0"
- lodash "^4.2.0"
-
-babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.8.0, babel-types@^6.9.0:
- version "6.19.0"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.19.0.tgz#8db2972dbed01f1192a8b602ba1e1e4c516240b9"
- dependencies:
- babel-runtime "^6.9.1"
- esutils "^2.0.2"
- lodash "^4.2.0"
- to-fast-properties "^1.0.1"
-
-babylon@^6.11.0, babylon@^6.11.2, babylon@^6.13.0:
- version "6.14.1"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
-
-balanced-match@^0.4.1, balanced-match@^0.4.2:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
-
-base64-js@^1.0.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
-
-batch@0.5.3:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464"
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
- dependencies:
- tweetnacl "^0.14.3"
-
-big.js@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
-
-binary-extensions@^1.0.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
-
-block-stream@*:
- version "0.0.9"
- resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
- dependencies:
- inherits "~2.0.0"
-
-bluebird@^3.4.6:
- version "3.4.6"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f"
-
-boolbase@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
-
-boom@2.x.x:
- version "2.10.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
- dependencies:
- hoek "2.x.x"
-
-brace-expansion@^1.0.0:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
- dependencies:
- balanced-match "^0.4.1"
- concat-map "0.0.1"
-
-braces@^1.8.2:
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
- dependencies:
- expand-range "^1.8.1"
- preserve "^0.2.0"
- repeat-element "^1.1.2"
-
-browser-resolve@^1.11.2:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
- dependencies:
- resolve "1.1.7"
-
-browserify-aes@0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
- dependencies:
- inherits "^2.0.1"
-
-browserify-zlib@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
- dependencies:
- pako "~0.2.0"
-
-browserslist@^1.4.0, browserslist@~1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.4.0.tgz#9cfdcf5384d9158f5b70da2aa00b30e8ff019049"
- dependencies:
- caniuse-db "^1.0.30000539"
-
-bser@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
- dependencies:
- node-int64 "^0.4.0"
-
-buffer-shims@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
-
-buffer@^4.9.0:
- version "4.9.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
-
-builtin-modules@^1.0.0, builtin-modules@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-
-builtin-status-codes@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-2.0.0.tgz#6f22003baacf003ccd287afe6872151fddc58579"
-
-bytes@2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070"
-
-caller-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
- dependencies:
- callsites "^0.2.0"
-
-callsites@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
-
-callsites@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
-
-camel-case@3.0.x:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
- dependencies:
- no-case "^2.2.0"
- upper-case "^1.1.1"
-
-camelcase@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-camelcase@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
-
-caniuse-db@^1.0.30000539, caniuse-db@^1.0.30000554:
- version "1.0.30000592"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000592.tgz#7b916023941df4063d9d946a1f9ad0d5edaf2bcd"
-
-cardinal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9"
- dependencies:
- ansicolors "~0.2.1"
- redeyed "~1.0.0"
-
-case-sensitive-paths-webpack-plugin@1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-1.1.4.tgz#8aaedd5699a86cac2b34cf40d9b4145758978472"
-
-caseless@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
-
-center-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
- dependencies:
- align-text "^0.1.3"
- lazy-cache "^1.0.3"
-
-chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chokidar@^1.0.0:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
- dependencies:
- anymatch "^1.3.0"
- async-each "^1.0.0"
- glob-parent "^2.0.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^2.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
-ci-info@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534"
-
-circular-json@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
-
-clap@^1.0.9:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.2.tgz#316545bf22229225a2cecaa6824cd2f56a9709ed"
- dependencies:
- chalk "^1.1.3"
-
-classnames@^2.2.3:
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
-
-clean-css@3.4.x:
- version "3.4.21"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.21.tgz#2101d5dbd19d63dbc16a75ebd570e7c33948f65b"
- dependencies:
- commander "2.8.x"
- source-map "0.4.x"
-
-cli-cursor@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
- dependencies:
- restore-cursor "^1.0.1"
-
-cli-table@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"
- dependencies:
- colors "1.0.3"
-
-cli-usage@^0.1.1:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2"
- dependencies:
- marked "^0.3.6"
- marked-terminal "^1.6.2"
-
-cli-width@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
-
-cliui@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
- dependencies:
- center-align "^0.1.1"
- right-align "^0.1.1"
- wordwrap "0.0.2"
-
-cliui@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wrap-ansi "^2.0.0"
-
-clone@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-coa@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3"
- dependencies:
- q "^1.1.2"
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-color-convert@^1.3.0:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.8.2.tgz#be868184d7c8631766d54e7078e2672d7c7e3339"
- dependencies:
- color-name "^1.1.1"
-
-color-name@^1.0.0, color-name@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
-
-color-string@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
- dependencies:
- color-name "^1.0.0"
-
-color@^0.11.0:
- version "0.11.4"
- resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
- dependencies:
- clone "^1.0.2"
- color-convert "^1.3.0"
- color-string "^0.3.0"
-
-colormin@^1.0.5:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
- dependencies:
- color "^0.11.0"
- css-color-names "0.0.4"
- has "^1.0.1"
-
-colors@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
-
-colors@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
-
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@2.8.x, commander@~2.8.1:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
- dependencies:
- graceful-readlink ">= 1.0.0"
-
-commander@2.9.x, commander@^2.9.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
- dependencies:
- graceful-readlink ">= 1.0.0"
-
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
-
-compressible@~2.0.8:
- version "2.0.9"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425"
- dependencies:
- mime-db ">= 1.24.0 < 2"
-
-compression@^1.5.2:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3"
- dependencies:
- accepts "~1.3.3"
- bytes "2.3.0"
- compressible "~2.0.8"
- debug "~2.2.0"
- on-headers "~1.0.1"
- vary "~1.1.0"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-concat-stream@^1.4.6:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266"
- dependencies:
- inherits "~2.0.1"
- readable-stream "~2.0.0"
- typedarray "~0.0.5"
-
-connect-history-api-fallback@1.3.0, connect-history-api-fallback@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169"
-
-console-browserify@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
- dependencies:
- date-now "^0.1.4"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-
-constants-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
-
-contains-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
-
-content-disposition@0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b"
-
-content-type-parser@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94"
-
-content-type@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
-
-convert-source-map@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
-
-cookie-signature@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
-
-cookie@0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
-
-core-js@^1.0.0:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
-
-core-js@^2.4.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
-
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82"
- dependencies:
- js-yaml "^3.4.3"
- minimist "^1.2.0"
- object-assign "^4.1.0"
- os-homedir "^1.0.1"
- parse-json "^2.2.0"
- require-from-string "^1.1.0"
-
-cross-spawn@4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
- dependencies:
- lru-cache "^4.0.1"
- which "^1.2.9"
-
-cryptiles@2.x.x:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
- dependencies:
- boom "2.x.x"
-
-crypto-browserify@3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
- dependencies:
- browserify-aes "0.4.0"
- pbkdf2-compat "2.0.1"
- ripemd160 "0.2.0"
- sha.js "2.2.6"
-
-css-color-names@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
-
-css-loader@0.26.0:
- version "0.26.0"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.0.tgz#160d378f5b8e0fd4ff6daf4f3580e2219b33025f"
- dependencies:
- babel-code-frame "^6.11.0"
- css-selector-tokenizer "^0.7.0"
- cssnano ">=2.6.1 <4"
- loader-utils "~0.2.2"
- lodash.camelcase "^4.3.0"
- object-assign "^4.0.1"
- postcss "^5.0.6"
- postcss-modules-extract-imports "^1.0.0"
- postcss-modules-local-by-default "^1.0.1"
- postcss-modules-scope "^1.0.0"
- postcss-modules-values "^1.1.0"
- source-list-map "^0.1.4"
-
-css-select@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
- dependencies:
- boolbase "~1.0.0"
- css-what "2.1"
- domutils "1.5.1"
- nth-check "~1.0.1"
-
-css-selector-tokenizer@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152"
- dependencies:
- cssesc "^0.1.0"
- fastparse "^1.1.1"
- regexpu-core "^1.0.0"
-
-css-selector-tokenizer@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
- dependencies:
- cssesc "^0.1.0"
- fastparse "^1.1.1"
- regexpu-core "^1.0.0"
-
-css-what@2.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
-
-cssesc@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
-
-"cssnano@>=2.6.1 <4":
- version "3.8.1"
- resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.8.1.tgz#008a482148ee948cf0af2ee6e44bd97c53f886ec"
- dependencies:
- autoprefixer "^6.3.1"
- decamelize "^1.1.2"
- defined "^1.0.0"
- has "^1.0.1"
- object-assign "^4.0.1"
- postcss "^5.0.14"
- postcss-calc "^5.2.0"
- postcss-colormin "^2.1.8"
- postcss-convert-values "^2.3.4"
- postcss-discard-comments "^2.0.4"
- postcss-discard-duplicates "^2.0.1"
- postcss-discard-empty "^2.0.1"
- postcss-discard-overridden "^0.1.1"
- postcss-discard-unused "^2.2.1"
- postcss-filter-plugins "^2.0.0"
- postcss-merge-idents "^2.1.5"
- postcss-merge-longhand "^2.0.1"
- postcss-merge-rules "^2.0.3"
- postcss-minify-font-values "^1.0.2"
- postcss-minify-gradients "^1.0.1"
- postcss-minify-params "^1.0.4"
- postcss-minify-selectors "^2.0.4"
- postcss-normalize-charset "^1.1.0"
- postcss-normalize-url "^3.0.7"
- postcss-ordered-values "^2.1.0"
- postcss-reduce-idents "^2.2.2"
- postcss-reduce-initial "^1.0.0"
- postcss-reduce-transforms "^1.0.3"
- postcss-svgo "^2.1.1"
- postcss-unique-selectors "^2.0.2"
- postcss-value-parser "^3.2.3"
- postcss-zindex "^2.0.1"
-
-csso@~2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/csso/-/csso-2.2.1.tgz#51fbb5347e50e81e6ed51668a48490ae6fe2afe2"
- dependencies:
- clap "^1.0.9"
- source-map "^0.5.3"
-
-cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0":
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.1.tgz#c9e37ef2490e64f6d1baa10fda852257082c25d3"
-
-"cssstyle@>= 0.2.36 < 0.3.0":
- version "0.2.37"
- resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
- dependencies:
- cssom "0.3.x"
-
-d@^0.1.1, d@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309"
- dependencies:
- es5-ext "~0.10.2"
-
-damerau-levenshtein@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
-date-now@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-
-debug@2.2.0, debug@~2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
- dependencies:
- ms "0.7.1"
-
-debug@^2.1.0, debug@^2.1.1, debug@^2.2.0:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c"
- dependencies:
- ms "0.7.2"
-
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-deep-extend@~0.4.0:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
-
-deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-
-defined@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-
-del@^2.0.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
- dependencies:
- globby "^5.0.0"
- is-path-cwd "^1.0.0"
- is-path-in-cwd "^1.0.0"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- rimraf "^2.2.8"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-
-depd@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
-
-destroy@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
-
-detect-indent@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
- dependencies:
- repeating "^2.0.0"
-
-detect-port@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.0.1.tgz#3e1aa6a7ff6677bb60894b291172529d880c1e85"
- dependencies:
- commander "~2.8.1"
-
-diff@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.1.0.tgz#9406c73a401e6c2b3ba901c5e2c44eb6a60c5385"
-
-doctrine@1.3.x:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.3.0.tgz#13e75682b55518424276f7c173783456ef913d26"
- dependencies:
- esutils "^2.0.2"
- isarray "^1.0.0"
-
-doctrine@^1.2.2:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
- dependencies:
- esutils "^2.0.2"
- isarray "^1.0.0"
-
-dom-converter@~0.1:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
- dependencies:
- utila "~0.3"
-
-dom-serializer@0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
- dependencies:
- domelementtype "~1.1.1"
- entities "~1.1.1"
-
-domain-browser@^1.1.1:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
-
-domelementtype@1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
-
-domelementtype@~1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
-
-domhandler@2.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
- dependencies:
- domelementtype "1"
-
-domutils@1.1:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
- dependencies:
- domelementtype "1"
-
-domutils@1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
- dependencies:
- dom-serializer "0"
- domelementtype "1"
-
-dotenv@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949"
-
-duplexer@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
-
-ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
- dependencies:
- jsbn "~0.1.0"
-
-ee-first@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-
-emojis-list@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
-
-encodeurl@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
-
-encoding@^0.1.11:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
- dependencies:
- iconv-lite "~0.4.13"
-
-enhanced-resolve@~0.9.0:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.2.0"
- tapable "^0.1.8"
-
-entities@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
-
-"errno@>=0.1.1 <0.2.0-0", errno@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
- dependencies:
- prr "~0.0.0"
-
-error-ex@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
- dependencies:
- is-arrayish "^0.2.1"
-
-es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7:
- version "0.10.12"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047"
- dependencies:
- es6-iterator "2"
- es6-symbol "~3.1"
-
-es6-iterator@2:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac"
- dependencies:
- d "^0.1.1"
- es5-ext "^0.10.7"
- es6-symbol "3"
-
-es6-map@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897"
- dependencies:
- d "~0.1.1"
- es5-ext "~0.10.11"
- es6-iterator "2"
- es6-set "~0.1.3"
- es6-symbol "~3.1.0"
- event-emitter "~0.3.4"
-
-es6-set@~0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8"
- dependencies:
- d "~0.1.1"
- es5-ext "~0.10.11"
- es6-iterator "2"
- es6-symbol "3"
- event-emitter "~0.3.4"
-
-es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
- dependencies:
- d "~0.1.1"
- es5-ext "~0.10.11"
-
-es6-weak-map@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81"
- dependencies:
- d "^0.1.1"
- es5-ext "^0.10.8"
- es6-iterator "2"
- es6-symbol "3"
-
-escape-html@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-escodegen@1.8.x, escodegen@^1.6.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
-escope@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
- dependencies:
- es6-map "^0.1.3"
- es6-weak-map "^2.0.1"
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint-config-react-app@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-0.5.0.tgz#68c6da07d1cfbce6a992bc244ba16186b942d89f"
-
-eslint-import-resolver-node@^0.2.0:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c"
- dependencies:
- debug "^2.2.0"
- object-assign "^4.0.1"
- resolve "^1.1.6"
-
-eslint-loader@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.6.0.tgz#38f9a1e6c602a4f1f3f3516289726e5d26e6e165"
- dependencies:
- find-cache-dir "^0.1.1"
- loader-utils "^0.2.7"
- object-assign "^4.0.1"
-
-eslint-module-utils@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-1.0.0.tgz#c4a57fd3a53efd8426cc2d5550aadab9bbd05fd0"
- dependencies:
- debug "2.2.0"
- pkg-dir "^1.0.0"
-
-eslint-plugin-flowtype@2.21.0:
- version "2.21.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.21.0.tgz#a47e85abcdd181d37a336054bd552149ae387d9c"
- dependencies:
- lodash "^4.15.0"
-
-eslint-plugin-import@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.0.1.tgz#dcfe96357d476b3f822570d42c29bec66f5d9c5c"
- dependencies:
- builtin-modules "^1.1.1"
- contains-path "^0.1.0"
- debug "^2.2.0"
- doctrine "1.3.x"
- eslint-import-resolver-node "^0.2.0"
- eslint-module-utils "^1.0.0"
- has "^1.0.1"
- lodash.cond "^4.3.0"
- minimatch "^3.0.3"
- pkg-up "^1.0.0"
-
-eslint-plugin-jsx-a11y@2.2.3:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz#4e35cb71b8a7db702ac415c806eb8e8d9ea6c65d"
- dependencies:
- damerau-levenshtein "^1.0.0"
- jsx-ast-utils "^1.0.0"
- object-assign "^4.0.1"
-
-eslint-plugin-react@6.4.1:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.4.1.tgz#7d1aade747db15892f71eee1fea4addf97bcfa2b"
- dependencies:
- doctrine "^1.2.2"
- jsx-ast-utils "^1.3.1"
-
-eslint@3.8.1:
- version "3.8.1"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.8.1.tgz#7d02db44cd5aaf4fa7aa489e1f083baa454342ba"
- dependencies:
- chalk "^1.1.3"
- concat-stream "^1.4.6"
- debug "^2.1.1"
- doctrine "^1.2.2"
- escope "^3.6.0"
- espree "^3.3.1"
- estraverse "^4.2.0"
- esutils "^2.0.2"
- file-entry-cache "^2.0.0"
- glob "^7.0.3"
- globals "^9.2.0"
- ignore "^3.1.5"
- imurmurhash "^0.1.4"
- inquirer "^0.12.0"
- is-my-json-valid "^2.10.0"
- is-resolvable "^1.0.0"
- js-yaml "^3.5.1"
- json-stable-stringify "^1.0.0"
- levn "^0.3.0"
- lodash "^4.0.0"
- mkdirp "^0.5.0"
- natural-compare "^1.4.0"
- optionator "^0.8.2"
- path-is-inside "^1.0.1"
- pluralize "^1.2.1"
- progress "^1.1.8"
- require-uncached "^1.0.2"
- shelljs "^0.6.0"
- strip-bom "^3.0.0"
- strip-json-comments "~1.0.1"
- table "^3.7.8"
- text-table "~0.2.0"
- user-home "^2.0.0"
-
-espree@^3.3.1:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/espree/-/espree-3.3.2.tgz#dbf3fadeb4ecb4d4778303e50103b3d36c88b89c"
- dependencies:
- acorn "^4.0.1"
- acorn-jsx "^3.0.0"
-
-esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
-
-esprima@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9"
-
-esrecurse@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
- dependencies:
- estraverse "~4.1.0"
- object-assign "^4.0.1"
-
-estraverse@^1.9.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
-
-estraverse@^4.1.1, estraverse@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-
-estraverse@~4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
-
-esutils@^2.0.0, esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-etag@~1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8"
-
-event-emitter@~0.3.4:
- version "0.3.4"
- resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5"
- dependencies:
- d "~0.1.1"
- es5-ext "~0.10.7"
-
-eventemitter3@1.x.x:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
-
-events@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
-
-eventsource@^0.1.3, eventsource@~0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
- dependencies:
- original ">=0.0.5"
-
-exec-sh@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10"
- dependencies:
- merge "^1.1.3"
-
-exit-hook@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
-
-expand-brackets@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
- dependencies:
- is-posix-bracket "^0.1.0"
-
-expand-range@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
- dependencies:
- fill-range "^2.1.0"
-
-express@^4.13.3:
- version "4.14.0"
- resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66"
- dependencies:
- accepts "~1.3.3"
- array-flatten "1.1.1"
- content-disposition "0.5.1"
- content-type "~1.0.2"
- cookie "0.3.1"
- cookie-signature "1.0.6"
- debug "~2.2.0"
- depd "~1.1.0"
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- etag "~1.7.0"
- finalhandler "0.5.0"
- fresh "0.3.0"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.1"
- path-to-regexp "0.1.7"
- proxy-addr "~1.1.2"
- qs "6.2.0"
- range-parser "~1.2.0"
- send "0.14.1"
- serve-static "~1.11.1"
- type-is "~1.6.13"
- utils-merge "1.0.0"
- vary "~1.1.0"
-
-extend@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
-
-extglob@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
- dependencies:
- is-extglob "^1.0.0"
-
-extract-text-webpack-plugin@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz#c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c"
- dependencies:
- async "^1.5.0"
- loader-utils "^0.2.3"
- webpack-sources "^0.1.0"
-
-extsprintf@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
-
-fast-levenshtein@~2.0.4:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2"
-
-fastparse@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
-
-faye-websocket@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
- dependencies:
- websocket-driver ">=0.5.1"
-
-faye-websocket@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.0.tgz#d9ccf0e789e7db725d74bc4877d23aa42972ac50"
- dependencies:
- websocket-driver ">=0.5.1"
-
-faye-websocket@~0.7.3:
- version "0.7.3"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz#cc4074c7f4a4dfd03af54dd65c354b135132ce11"
- dependencies:
- websocket-driver ">=0.3.6"
-
-fb-watchman@^1.8.0, fb-watchman@^1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.0.tgz#6f268f1f347a6b3c875d1e89da7e1ed79adfc0ec"
- dependencies:
- bser "^1.0.2"
-
-fbjs@^0.8.1, fbjs@^0.8.4:
- version "0.8.6"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.6.tgz#7eb67d6986b2d5007a9b6e92e0e7cb6f75cad290"
- dependencies:
- core-js "^1.0.0"
- isomorphic-fetch "^2.1.1"
- loose-envify "^1.0.0"
- object-assign "^4.1.0"
- promise "^7.1.1"
- ua-parser-js "^0.7.9"
-
-figures@^1.3.5:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
- dependencies:
- escape-string-regexp "^1.0.5"
- object-assign "^4.1.0"
-
-file-entry-cache@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
- dependencies:
- flat-cache "^1.2.1"
- object-assign "^4.0.1"
-
-file-loader@0.9.0:
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.9.0.tgz#1d2daddd424ce6d1b07cfe3f79731bed3617ab42"
- dependencies:
- loader-utils "~0.2.5"
-
-filename-regex@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
-
-fileset@0.2.x:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067"
- dependencies:
- glob "5.x"
- minimatch "2.x"
-
-filesize@3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.3.0.tgz#53149ea3460e3b2e024962a51648aa572cf98122"
-
-fill-range@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
- dependencies:
- is-number "^2.1.0"
- isobject "^2.0.0"
- randomatic "^1.1.3"
- repeat-element "^1.1.2"
- repeat-string "^1.5.2"
-
-finalhandler@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7"
- dependencies:
- debug "~2.2.0"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- statuses "~1.3.0"
- unpipe "~1.0.0"
-
-find-cache-dir@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
- dependencies:
- commondir "^1.0.1"
- mkdirp "^0.5.1"
- pkg-dir "^1.0.0"
-
-find-up@^1.0.0, find-up@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
- dependencies:
- path-exists "^2.0.0"
- pinkie-promise "^2.0.0"
-
-flat-cache@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.1.tgz#6c837d6225a7de5659323740b36d5361f71691ff"
- dependencies:
- circular-json "^0.3.0"
- del "^2.0.2"
- graceful-fs "^4.1.2"
- write "^0.2.1"
-
-flatten@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
-
-for-in@^0.1.5:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
-
-for-own@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
- dependencies:
- for-in "^0.1.5"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-forwarded@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
-
-fresh@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f"
-
-fs-extra@0.30.0, fs-extra@^0.30.0:
- version "0.30.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
- klaw "^1.0.0"
- path-is-absolute "^1.0.0"
- rimraf "^2.2.8"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fsevents@1.0.14, fsevents@^1.0.0:
- version "1.0.14"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.14.tgz#558e8cc38643d8ef40fe45158486d0d25758eee4"
- dependencies:
- nan "^2.3.0"
- node-pre-gyp "^0.6.29"
-
-fstream-ignore@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
- dependencies:
- fstream "^1.0.0"
- inherits "2"
- minimatch "^3.0.0"
-
-fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
-function-bind@^1.0.2:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
-
-gauge@~2.7.1:
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- supports-color "^0.2.0"
- wide-align "^1.1.0"
-
-generate-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- dependencies:
- is-property "^1.0.0"
-
-get-caller-file@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
-
-getpass@^0.1.1:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
- dependencies:
- assert-plus "^1.0.0"
-
-glob-base@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
- dependencies:
- glob-parent "^2.0.0"
- is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
- dependencies:
- is-glob "^2.0.0"
-
-glob@5.x, glob@^5.0.15:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.0.3, glob@^7.0.5:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.2"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-globals@^9.0.0, globals@^9.2.0:
- version "9.14.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
-
-globby@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
- dependencies:
- array-union "^1.0.1"
- arrify "^1.0.0"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-"graceful-readlink@>= 1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
-
-growly@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
-
-gzip-size@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
- dependencies:
- duplexer "^0.1.1"
-
-handlebars@^4.0.1, handlebars@^4.0.3:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
- dependencies:
- async "^1.4.0"
- optimist "^0.6.1"
- source-map "^0.4.4"
- optionalDependencies:
- uglify-js "^2.6"
-
-har-validator@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
- dependencies:
- chalk "^1.1.1"
- commander "^2.9.0"
- is-my-json-valid "^2.12.4"
- pinkie-promise "^2.0.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-
-has@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
- dependencies:
- function-bind "^1.0.2"
-
-hawk@~3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
- dependencies:
- boom "2.x.x"
- cryptiles "2.x.x"
- hoek "2.x.x"
- sntp "1.x.x"
-
-he@1.1.x:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/he/-/he-1.1.0.tgz#29319d49beec13a9b1f3c4f9b2a6dde4859bb2a7"
-
-history@^3.0.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/history/-/history-3.2.1.tgz#71c7497f4e6090363d19a6713bb52a1bfcdd99aa"
- dependencies:
- invariant "^2.2.1"
- loose-envify "^1.2.0"
- query-string "^4.2.2"
- warning "^3.0.0"
-
-hoek@2.x.x:
- version "2.16.3"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-
-hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
-
-home-or-tmp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.1"
-
-hosted-git-info@^2.1.4:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
-
-html-comment-regex@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
-
-html-encoding-sniffer@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da"
- dependencies:
- whatwg-encoding "^1.0.1"
-
-html-entities@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2"
-
-html-minifier@^3.1.0:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.2.3.tgz#d2ff536e24d95726c332493d8f77d84dbed85372"
- dependencies:
- camel-case "3.0.x"
- clean-css "3.4.x"
- commander "2.9.x"
- he "1.1.x"
- ncname "1.0.x"
- param-case "2.1.x"
- relateurl "0.2.x"
- uglify-js "2.7.x"
-
-html-webpack-plugin@2.24.0:
- version "2.24.0"
- resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.24.0.tgz#53697cea79a9f3cd1f8c239ac71f949d5673cacb"
- dependencies:
- bluebird "^3.4.6"
- html-minifier "^3.1.0"
- loader-utils "^0.2.16"
- lodash "^4.16.4"
- pretty-error "^2.0.2"
- toposort "^1.0.0"
-
-htmlparser2@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
- dependencies:
- domelementtype "1"
- domhandler "2.1"
- domutils "1.1"
- readable-stream "1.0"
-
-http-errors@~1.5.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750"
- dependencies:
- inherits "2.0.3"
- setprototypeof "1.0.2"
- statuses ">= 1.3.1 < 2"
-
-http-proxy-middleware@0.17.2, http-proxy-middleware@~0.17.1:
- version "0.17.2"
- resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.2.tgz#572d517a6d2fb1063a469de294eed96066352007"
- dependencies:
- http-proxy "^1.15.1"
- is-glob "^3.0.0"
- lodash "^4.16.2"
- micromatch "^2.3.11"
-
-http-proxy@^1.15.1:
- version "1.16.2"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
- dependencies:
- eventemitter3 "1.x.x"
- requires-port "1.x.x"
-
-http-signature@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
- dependencies:
- assert-plus "^0.2.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-https-browserify@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
-
-iconv-lite@0.4.13:
- version "0.4.13"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
-
-iconv-lite@^0.4.13, iconv-lite@~0.4.13:
- version "0.4.15"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
-
-icss-replace-symbols@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5"
-
-ieee754@^1.1.4:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
-
-ignore@^3.1.5:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435"
-
-immutable@^3.8.1:
- version "3.8.1"
- resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-
-indexes-of@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
-
-indexof@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
-
-ini@~1.3.0:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
-
-inquirer@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
- dependencies:
- ansi-escapes "^1.1.0"
- ansi-regex "^2.0.0"
- chalk "^1.0.0"
- cli-cursor "^1.0.1"
- cli-width "^2.0.0"
- figures "^1.3.5"
- lodash "^4.3.0"
- readline2 "^1.0.1"
- run-async "^0.1.0"
- rx-lite "^3.1.2"
- string-width "^1.0.1"
- strip-ansi "^3.0.0"
- through "^2.3.6"
-
-interpret@^0.6.4:
- version "0.6.6"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
-
-invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
- dependencies:
- loose-envify "^1.0.0"
-
-invert-kv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-
-ipaddr.js@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230"
-
-is-absolute-url@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.0.0.tgz#9c4b20b0e5c0cbef9a479a367ede6f991679f359"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- dependencies:
- binary-extensions "^1.0.0"
-
-is-buffer@^1.0.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
-
-is-builtin-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
- dependencies:
- builtin-modules "^1.0.0"
-
-is-ci@^1.0.9:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
- dependencies:
- ci-info "^1.0.0"
-
-is-dotfile@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
-
-is-equal-shallow@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
- dependencies:
- is-primitive "^2.0.0"
-
-is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-
-is-extglob@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-
-is-extglob@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.0.tgz#33411a482b046bf95e6b0cb27ee2711af4cf15ad"
-
-is-finite@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-
-is-glob@^2.0.0, is-glob@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
- dependencies:
- is-extglob "^1.0.0"
-
-is-glob@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
- dependencies:
- is-extglob "^2.1.0"
-
-is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
- version "2.15.0"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
- dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
-
-is-number@^2.0.2, is-number@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
- dependencies:
- kind-of "^3.0.2"
-
-is-path-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
-
-is-path-in-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
- dependencies:
- is-path-inside "^1.0.0"
-
-is-path-inside@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
- dependencies:
- path-is-inside "^1.0.1"
-
-is-plain-obj@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-
-is-posix-bracket@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-
-is-primitive@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-
-is-property@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
-
-is-resolvable@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
- dependencies:
- tryit "^1.0.1"
-
-is-stream@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-
-is-svg@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
- dependencies:
- html-comment-regex "^1.1.0"
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-
-is-utf8@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isexe@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- dependencies:
- isarray "1.0.0"
-
-isomorphic-fetch@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
- dependencies:
- node-fetch "^1.0.1"
- whatwg-fetch ">=0.10.0"
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
-istanbul-api@^1.0.0-aplha.10:
- version "1.0.0-aplha.10"
- resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.0.0-aplha.10.tgz#902edf5cf5404e0eba7e00ef46408488a0d3e337"
- dependencies:
- async "1.x"
- clone "^1.0.2"
- fileset "0.2.x"
- istanbul-lib-coverage "^1.0.0-alpha"
- istanbul-lib-hook "^1.0.0-alpha"
- istanbul-lib-instrument "^1.0.0-alpha"
- istanbul-lib-report "^1.0.0-alpha"
- istanbul-lib-source-maps "^1.0.0-alpha"
- istanbul-reports "^1.0.0-alpha"
- js-yaml "3.x"
- mkdirp "0.5.x"
- once "1.x"
-
-istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2"
-
-istanbul-lib-hook@^1.0.0-alpha:
- version "1.0.0-alpha.4"
- resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0-alpha.4.tgz#8c5bb9f6fbd8526e0ae6cf639af28266906b938f"
- dependencies:
- append-transform "^0.3.0"
-
-istanbul-lib-instrument@^1.0.0-alpha, istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.1.4:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.0.tgz#19f0a973397454989b98330333063a5b56df0e58"
- dependencies:
- babel-generator "^6.18.0"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
- babylon "^6.13.0"
- istanbul-lib-coverage "^1.0.0"
- semver "^5.3.0"
-
-istanbul-lib-report@^1.0.0-alpha:
- version "1.0.0-alpha.3"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af"
- dependencies:
- async "^1.4.2"
- istanbul-lib-coverage "^1.0.0-alpha"
- mkdirp "^0.5.1"
- path-parse "^1.0.5"
- rimraf "^2.4.3"
- supports-color "^3.1.2"
-
-istanbul-lib-source-maps@^1.0.0-alpha:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f"
- dependencies:
- istanbul-lib-coverage "^1.0.0-alpha.0"
- mkdirp "^0.5.1"
- rimraf "^2.4.4"
- source-map "^0.5.3"
-
-istanbul-reports@^1.0.0-alpha:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.0.tgz#24b4eb2b1d29d50f103b369bd422f6e640aa0777"
- dependencies:
- handlebars "^4.0.3"
-
-istanbul@^0.4.5:
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
- dependencies:
- abbrev "1.0.x"
- async "1.x"
- escodegen "1.8.x"
- esprima "2.7.x"
- glob "^5.0.15"
- handlebars "^4.0.1"
- js-yaml "3.x"
- mkdirp "0.5.x"
- nopt "3.x"
- once "1.x"
- resolve "1.1.x"
- supports-color "^3.1.0"
- which "^1.1.1"
- wordwrap "^1.0.0"
-
-jest-changed-files@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-17.0.2.tgz#f5657758736996f590a51b87e5c9369d904ba7b7"
-
-jest-cli@^17.0.2:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-17.0.3.tgz#700b8c02a9ea0ec9eab0cd5a9fd42d8a858ce146"
- dependencies:
- ansi-escapes "^1.4.0"
- callsites "^2.0.0"
- chalk "^1.1.1"
- graceful-fs "^4.1.6"
- is-ci "^1.0.9"
- istanbul-api "^1.0.0-aplha.10"
- istanbul-lib-coverage "^1.0.0"
- istanbul-lib-instrument "^1.1.1"
- jest-changed-files "^17.0.2"
- jest-config "^17.0.3"
- jest-environment-jsdom "^17.0.2"
- jest-file-exists "^17.0.0"
- jest-haste-map "^17.0.3"
- jest-jasmine2 "^17.0.3"
- jest-mock "^17.0.2"
- jest-resolve "^17.0.3"
- jest-resolve-dependencies "^17.0.3"
- jest-runtime "^17.0.3"
- jest-snapshot "^17.0.3"
- jest-util "^17.0.2"
- json-stable-stringify "^1.0.0"
- node-notifier "^4.6.1"
- sane "~1.4.1"
- strip-ansi "^3.0.1"
- throat "^3.0.0"
- which "^1.1.1"
- worker-farm "^1.3.1"
- yargs "^6.3.0"
-
-jest-config@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-17.0.3.tgz#b6ed75d90d090b731fd894231904cadb7d5a5df2"
- dependencies:
- chalk "^1.1.1"
- istanbul "^0.4.5"
- jest-environment-jsdom "^17.0.2"
- jest-environment-node "^17.0.2"
- jest-jasmine2 "^17.0.3"
- jest-mock "^17.0.2"
- jest-resolve "^17.0.3"
- jest-util "^17.0.2"
- json-stable-stringify "^1.0.0"
-
-jest-diff@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-17.0.3.tgz#8fb31efab3b314d7b61b7b66b0bdea617ef1c02f"
- dependencies:
- chalk "^1.1.3"
- diff "^3.0.0"
- jest-matcher-utils "^17.0.3"
- pretty-format "~4.2.1"
-
-jest-environment-jsdom@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-17.0.2.tgz#a3098dc29806d40802c52b62b848ab6aa00fdba0"
- dependencies:
- jest-mock "^17.0.2"
- jest-util "^17.0.2"
- jsdom "^9.8.1"
-
-jest-environment-node@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-17.0.2.tgz#aff6133f4ca2faddcc5b0ce7d25cec83e16d8463"
- dependencies:
- jest-mock "^17.0.2"
- jest-util "^17.0.2"
-
-jest-file-exists@^17.0.0:
- version "17.0.0"
- resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-17.0.0.tgz#7f63eb73a1c43a13f461be261768b45af2cdd169"
-
-jest-haste-map@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-17.0.3.tgz#5232783e70577217b6b17d2a1c1766637a1d2fbd"
- dependencies:
- fb-watchman "^1.9.0"
- graceful-fs "^4.1.6"
- multimatch "^2.1.0"
- sane "~1.4.1"
- worker-farm "^1.3.1"
-
-jest-jasmine2@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-17.0.3.tgz#d4336b89f3ad288269a1c8e2bfc180dcf89c6ad1"
- dependencies:
- graceful-fs "^4.1.6"
- jest-matchers "^17.0.3"
- jest-snapshot "^17.0.3"
- jest-util "^17.0.2"
-
-jest-matcher-utils@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-17.0.3.tgz#f108e49b956e152c6626dcc0aba864f59ab7b0d3"
- dependencies:
- chalk "^1.1.3"
- pretty-format "~4.2.1"
-
-jest-matchers@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-17.0.3.tgz#88b95348c919343db86d08f12354a8650ae7eddf"
- dependencies:
- jest-diff "^17.0.3"
- jest-matcher-utils "^17.0.3"
- jest-util "^17.0.2"
-
-jest-mock@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-17.0.2.tgz#3dfe9221afd9aa61b3d9992840813a358bb2f429"
-
-jest-resolve-dependencies@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-17.0.3.tgz#bbd37f4643704b97a980927212f3ab12b06e8894"
- dependencies:
- jest-file-exists "^17.0.0"
- jest-resolve "^17.0.3"
-
-jest-resolve@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-17.0.3.tgz#7692a79de2831874375e9d664bc782c29e4da262"
- dependencies:
- browser-resolve "^1.11.2"
- jest-file-exists "^17.0.0"
- jest-haste-map "^17.0.3"
- resolve "^1.1.6"
-
-jest-runtime@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-17.0.3.tgz#eff4055fe8c3e17c95ed1aaaf5f719c420b86b1f"
- dependencies:
- babel-core "^6.0.0"
- babel-jest "^17.0.2"
- babel-plugin-istanbul "^2.0.0"
- chalk "^1.1.3"
- graceful-fs "^4.1.6"
- jest-config "^17.0.3"
- jest-file-exists "^17.0.0"
- jest-haste-map "^17.0.3"
- jest-mock "^17.0.2"
- jest-resolve "^17.0.3"
- jest-snapshot "^17.0.3"
- jest-util "^17.0.2"
- json-stable-stringify "^1.0.0"
- multimatch "^2.1.0"
- yargs "^6.3.0"
-
-jest-snapshot@^17.0.3:
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-17.0.3.tgz#c8199db4ccbd5515cfecc8e800ab076bdda7abc0"
- dependencies:
- jest-diff "^17.0.3"
- jest-file-exists "^17.0.0"
- jest-matcher-utils "^17.0.3"
- jest-util "^17.0.2"
- natural-compare "^1.4.0"
- pretty-format "~4.2.1"
-
-jest-util@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-17.0.2.tgz#9fd9da8091e9904fb976da7e4d8912ca26968638"
- dependencies:
- chalk "^1.1.1"
- diff "^3.0.0"
- graceful-fs "^4.1.6"
- jest-file-exists "^17.0.0"
- jest-mock "^17.0.2"
- mkdirp "^0.5.1"
-
-jest@17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/jest/-/jest-17.0.2.tgz#a095e19f0b28f3f9925ec16b5bd67d5276d2756b"
- dependencies:
- jest-cli "^17.0.2"
-
-jodid25519@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
- dependencies:
- jsbn "~0.1.0"
-
-js-base64@^2.1.9:
- version "2.1.9"
- resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
-
-js-tokens@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
-
-js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.5.1:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
- dependencies:
- argparse "^1.0.7"
- esprima "^2.6.0"
-
-js-yaml@~3.6.1:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30"
- dependencies:
- argparse "^1.0.7"
- esprima "^2.6.0"
-
-jsbn@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
-
-jsdom@^9.8.1:
- version "9.8.3"
- resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.8.3.tgz#fde29c109c32a1131e0b6c65914e64198f97c370"
- dependencies:
- abab "^1.0.0"
- acorn "^2.4.0"
- acorn-globals "^1.0.4"
- array-equal "^1.0.0"
- content-type-parser "^1.0.1"
- cssom ">= 0.3.0 < 0.4.0"
- cssstyle ">= 0.2.36 < 0.3.0"
- escodegen "^1.6.1"
- html-encoding-sniffer "^1.0.1"
- iconv-lite "^0.4.13"
- nwmatcher ">= 1.3.7 < 2.0.0"
- parse5 "^1.5.1"
- request "^2.55.0"
- sax "^1.1.4"
- symbol-tree ">= 3.1.0 < 4.0.0"
- tough-cookie "^2.3.1"
- webidl-conversions "^3.0.1"
- whatwg-encoding "^1.0.1"
- whatwg-url "^3.0.0"
- xml-name-validator ">= 2.0.1 < 3.0.0"
-
-jsesc@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
-
-jsesc@~0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
-
-json-loader@0.5.4:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
-json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-json3@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
-
-json5@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d"
-
-json5@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
-
-jsonfile@^2.1.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsonpointer@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5"
-
-jsprim@^1.2.2:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
- dependencies:
- extsprintf "1.0.2"
- json-schema "0.2.3"
- verror "1.3.6"
-
-jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.1:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.4.tgz#0257ed1cc4b1e65b39d7d9940f9fb4f20f7ba0a9"
- dependencies:
- acorn-jsx "^3.0.1"
- object-assign "^4.1.0"
-
-kind-of@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
- dependencies:
- is-buffer "^1.0.2"
-
-klaw@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
- optionalDependencies:
- graceful-fs "^4.1.9"
-
-lazy-cache@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-lcid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
- dependencies:
- invert-kv "^1.0.0"
-
-levn@^0.3.0, levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
-load-json-file@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- strip-bom "^2.0.0"
-
-loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5:
- version "0.2.16"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
- dependencies:
- big.js "^3.1.3"
- emojis-list "^2.0.0"
- json5 "^0.5.0"
- object-assign "^4.0.1"
-
-lodash-es@^4.2.0, lodash-es@^4.2.1:
- version "4.17.2"
- resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.2.tgz#59011b585166e613eb9dd5fc256b2cd1a30f3712"
-
-lodash._arraycopy@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
-
-lodash._arrayeach@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
-
-lodash._baseassign@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
- dependencies:
- lodash._basecopy "^3.0.0"
- lodash.keys "^3.0.0"
-
-lodash._baseclone@^3.0.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7"
- dependencies:
- lodash._arraycopy "^3.0.0"
- lodash._arrayeach "^3.0.0"
- lodash._baseassign "^3.0.0"
- lodash._basefor "^3.0.0"
- lodash.isarray "^3.0.0"
- lodash.keys "^3.0.0"
-
-lodash._basecopy@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
-
-lodash._basefor@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
-
-lodash._bindcallback@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
-
-lodash._getnative@^3.0.0:
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
-
-lodash.assign@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
-
-lodash.camelcase@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
-
-lodash.clonedeep@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db"
- dependencies:
- lodash._baseclone "^3.0.0"
- lodash._bindcallback "^3.0.0"
-
-lodash.cond@^4.3.0:
- version "4.5.2"
- resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
-
-lodash.indexof@^4.0.5:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/lodash.indexof/-/lodash.indexof-4.0.5.tgz#53714adc2cddd6ed87638f893aa9b6c24e31ef3c"
-
-lodash.isarguments@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
-
-lodash.isarray@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-
-lodash.keys@^3.0.0:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
- dependencies:
- lodash._getnative "^3.0.0"
- lodash.isarguments "^3.0.0"
- lodash.isarray "^3.0.0"
-
-lodash.pickby@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff"
-
-"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.15.0, lodash@^4.16.2, lodash@^4.16.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0:
- version "4.17.2"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42"
-
-longest@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
- dependencies:
- js-tokens "^2.0.0"
-
-lower-case@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.3.tgz#c92393d976793eee5ba4edb583cf8eae35bd9bfb"
-
-lru-cache@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
- dependencies:
- pseudomap "^1.0.1"
- yallist "^2.0.0"
-
-macaddress@^0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
-
-makeerror@1.0.x:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
- dependencies:
- tmpl "1.0.x"
-
-marked-terminal@^1.6.2:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904"
- dependencies:
- cardinal "^1.0.0"
- chalk "^1.1.3"
- cli-table "^0.3.1"
- lodash.assign "^4.2.0"
- node-emoji "^1.4.1"
-
-marked@^0.3.6:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7"
-
-math-expression-evaluator@^1.2.14:
- version "1.2.14"
- resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.14.tgz#39511771ed9602405fba9affff17eb4d2a3843ab"
- dependencies:
- lodash.indexof "^4.0.5"
-
-media-typer@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-
-memory-fs@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
-
-memory-fs@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-merge-descriptors@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
-
-merge@^1.1.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
-
-methods@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
-
-micromatch@^2.1.5, micromatch@^2.3.11:
- version "2.3.11"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
- dependencies:
- arr-diff "^2.0.0"
- array-unique "^0.2.1"
- braces "^1.8.2"
- expand-brackets "^0.1.4"
- extglob "^0.3.1"
- filename-regex "^2.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.1"
- kind-of "^3.0.2"
- normalize-path "^2.0.1"
- object.omit "^2.0.0"
- parse-glob "^3.0.4"
- regex-cache "^0.4.2"
-
-"mime-db@>= 1.24.0 < 2", mime-db@~1.25.0:
- version "1.25.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
-
-mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7:
- version "2.1.13"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
- dependencies:
- mime-db "~1.25.0"
-
-mime@1.2.x:
- version "1.2.11"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"
-
-mime@1.3.4, mime@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
-
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
- dependencies:
- brace-expansion "^1.0.0"
-
-minimatch@2.x:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
- dependencies:
- brace-expansion "^1.0.0"
-
-minimatch@3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.2.tgz#0f398a7300ea441e9c348c83d98ab8c9dbf9c40a"
- dependencies:
- brace-expansion "^1.0.0"
-
-minimist@0.0.8, minimist@~0.0.1:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@^1.1.1, minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- dependencies:
- minimist "0.0.8"
-
-ms@0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
-
-ms@0.7.2:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
-
-multimatch@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
- dependencies:
- array-differ "^1.0.0"
- array-union "^1.0.1"
- arrify "^1.0.0"
- minimatch "^3.0.0"
-
-mute-stream@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
-
-nan@^2.3.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-
-ncname@1.0.x:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
- dependencies:
- xml-char-classes "^1.0.0"
-
-negotiator@0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
-
-no-case@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.0.tgz#ca2825ccb76b18e6f79d573dcfbf1eace33dd164"
- dependencies:
- lower-case "^1.1.1"
-
-node-emoji@^1.4.1:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.4.3.tgz#5272f70b823c4df6d7c39f84fd8203f35b3e5d36"
- dependencies:
- string.prototype.codepointat "^0.2.0"
-
-node-fetch@^1.0.1:
- version "1.6.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
-node-int64@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
-
-node-libs-browser@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
- dependencies:
- assert "^1.1.1"
- browserify-zlib "^0.1.4"
- buffer "^4.9.0"
- console-browserify "^1.1.0"
- constants-browserify "^1.0.0"
- crypto-browserify "3.3.0"
- domain-browser "^1.1.1"
- events "^1.0.0"
- https-browserify "0.0.1"
- os-browserify "^0.2.0"
- path-browserify "0.0.0"
- process "^0.11.0"
- punycode "^1.2.4"
- querystring-es3 "^0.2.0"
- readable-stream "^2.0.5"
- stream-browserify "^2.0.1"
- stream-http "^2.3.1"
- string_decoder "^0.10.25"
- timers-browserify "^2.0.2"
- tty-browserify "0.0.0"
- url "^0.11.0"
- util "^0.10.3"
- vm-browserify "0.0.4"
-
-node-notifier@^4.6.1:
- version "4.6.1"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3"
- dependencies:
- cli-usage "^0.1.1"
- growly "^1.2.0"
- lodash.clonedeep "^3.0.0"
- minimist "^1.1.1"
- semver "^5.1.0"
- shellwords "^0.1.0"
- which "^1.0.5"
-
-node-pre-gyp@^0.6.29:
- version "0.6.32"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
- dependencies:
- mkdirp "~0.5.1"
- nopt "~3.0.6"
- npmlog "^4.0.1"
- rc "~1.1.6"
- request "^2.79.0"
- rimraf "~2.5.4"
- semver "~5.3.0"
- tar "~2.2.1"
- tar-pack "~3.3.0"
-
-nopt@3.x, nopt@~3.0.6:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
- dependencies:
- abbrev "1"
-
-normalize-package-data@^2.3.2:
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
- dependencies:
- hosted-git-info "^2.1.4"
- is-builtin-module "^1.0.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
-
-normalize-range@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
-
-normalize-url@^1.4.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.8.0.tgz#a9550b079aa3523c85d78df24eef1959fce359ab"
- dependencies:
- object-assign "^4.0.1"
- prepend-http "^1.0.0"
- query-string "^4.1.0"
- sort-keys "^1.0.0"
-
-npmlog@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.1.tgz#d14f503b4cd79710375553004ba96e6662fbc0b8"
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.1"
- set-blocking "~2.0.0"
-
-nth-check@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
- dependencies:
- boolbase "~1.0.0"
-
-num2fraction@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-"nwmatcher@>= 1.3.7 < 2.0.0":
- version "1.3.9"
- resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
-
-oauth-sign@~0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
-object-assign@4.1.0, object-assign@^4.0.1, object-assign@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
-
-object.omit@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
- dependencies:
- for-own "^0.1.4"
- is-extendable "^0.1.1"
-
-on-finished@~2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
- dependencies:
- ee-first "1.1.1"
-
-on-headers@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
-
-once@1.x, once@^1.3.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- dependencies:
- wrappy "1"
-
-once@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
- dependencies:
- wrappy "1"
-
-onetime@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
-
-open@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc"
-
-opn@4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
- dependencies:
- object-assign "^4.0.1"
- pinkie-promise "^2.0.0"
-
-optimist@^0.6.1, optimist@~0.6.0, optimist@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
-optionator@^0.8.1, optionator@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- wordwrap "~1.0.0"
-
-original@>=0.0.5:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b"
- dependencies:
- url-parse "1.0.x"
-
-os-browserify@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
-
-os-homedir@^1.0.0, os-homedir@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-locale@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
- dependencies:
- lcid "^1.0.0"
-
-os-tmpdir@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-pako@~0.2.0:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
-
-param-case@2.1.x:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.0.tgz#2619f90fd6c829ed0b958f1c84ed03a745a6d70a"
- dependencies:
- no-case "^2.2.0"
-
-parse-glob@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
- dependencies:
- glob-base "^0.3.0"
- is-dotfile "^1.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.0"
-
-parse-json@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
- dependencies:
- error-ex "^1.2.0"
-
-parse5@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
-
-parseurl@~1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
-
-path-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
-
-path-exists@2.1.0, path-exists@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
- dependencies:
- pinkie-promise "^2.0.0"
-
-path-exists@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-path-is-inside@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-
-path-parse@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
-
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
-
-path-type@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
- dependencies:
- graceful-fs "^4.1.2"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-pbkdf2-compat@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
-
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-
-pkg-dir@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
- dependencies:
- find-up "^1.0.0"
-
-pkg-up@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26"
- dependencies:
- find-up "^1.0.0"
-
-pluralize@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
-
-postcss-calc@^5.2.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
- dependencies:
- postcss "^5.0.2"
- postcss-message-helpers "^2.0.0"
- reduce-css-calc "^1.2.6"
-
-postcss-colormin@^2.1.8:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.1.tgz#dc5421b6ae6f779ef6bfd47352b94abe59d0316b"
- dependencies:
- colormin "^1.0.5"
- postcss "^5.0.13"
- postcss-value-parser "^3.2.3"
-
-postcss-convert-values@^2.3.4:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.5.0.tgz#570aceb04b3061fb25f6f46bd0329e7ab6263c0b"
- dependencies:
- postcss "^5.0.11"
- postcss-value-parser "^3.1.2"
-
-postcss-discard-comments@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
- dependencies:
- postcss "^5.0.14"
-
-postcss-discard-duplicates@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.0.2.tgz#02be520e91571ffb10738766a981d5770989bb32"
- dependencies:
- postcss "^5.0.4"
-
-postcss-discard-empty@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
- dependencies:
- postcss "^5.0.14"
-
-postcss-discard-overridden@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
- dependencies:
- postcss "^5.0.16"
-
-postcss-discard-unused@^2.2.1:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
- dependencies:
- postcss "^5.0.14"
- uniqs "^2.0.0"
-
-postcss-filter-plugins@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
- dependencies:
- postcss "^5.0.4"
- uniqid "^4.0.0"
-
-postcss-load-config@^1.0.0-rc:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.0.0.tgz#1399f60dcd6bd9c3124b2eb22960f77f9dc08b3d"
- dependencies:
- cosmiconfig "^2.1.0"
- object-assign "^4.1.0"
- postcss-load-options "^1.0.2"
- postcss-load-plugins "^2.0.0"
-
-postcss-load-options@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.0.2.tgz#b99eb5759a588f4b2dd8b6471c6985f72060e7b0"
- dependencies:
- cosmiconfig "^2.1.0"
- object-assign "^4.1.0"
-
-postcss-load-plugins@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.1.0.tgz#dbb6f46271df8d16e19b5d691ebda5175ce424a0"
- dependencies:
- cosmiconfig "^2.1.1"
- object-assign "^4.1.0"
-
-postcss-loader@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.0.0.tgz#e3b65d0c8596c1658f79d7db2d291310748d5d2a"
- dependencies:
- loader-utils "^0.2.16"
- object-assign "^4.1.0"
- postcss "^5.2.4"
- postcss-load-config "^1.0.0-rc"
-
-postcss-merge-idents@^2.1.5:
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.10"
- postcss-value-parser "^3.1.1"
-
-postcss-merge-longhand@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.1.tgz#ff59b5dec6d586ce2cea183138f55c5876fa9cdc"
- dependencies:
- postcss "^5.0.4"
-
-postcss-merge-rules@^2.0.3:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.0.10.tgz#54b360be804e7e69a5c7222635247b92a3569e9b"
- dependencies:
- postcss "^5.0.4"
- vendors "^1.0.0"
-
-postcss-message-helpers@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
-
-postcss-minify-font-values@^1.0.2:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
- dependencies:
- object-assign "^4.0.1"
- postcss "^5.0.4"
- postcss-value-parser "^3.0.2"
-
-postcss-minify-gradients@^1.0.1:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
- dependencies:
- postcss "^5.0.12"
- postcss-value-parser "^3.3.0"
-
-postcss-minify-params@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.0.5.tgz#82d602643b8616a61fb3634d7ede0289836d67f9"
- dependencies:
- alphanum-sort "^1.0.1"
- postcss "^5.0.2"
- postcss-value-parser "^3.0.2"
- uniqs "^2.0.0"
-
-postcss-minify-selectors@^2.0.4:
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.0.7.tgz#bfb9248fe14db33770f036572de6b4897c48d81c"
- dependencies:
- alphanum-sort "^1.0.2"
- has "^1.0.1"
- postcss "^5.0.14"
- postcss-selector-parser "^2.0.0"
-
-postcss-modules-extract-imports@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341"
- dependencies:
- postcss "^5.0.4"
-
-postcss-modules-local-by-default@^1.0.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce"
- dependencies:
- css-selector-tokenizer "^0.6.0"
- postcss "^5.0.4"
-
-postcss-modules-scope@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29"
- dependencies:
- css-selector-tokenizer "^0.6.0"
- postcss "^5.0.4"
-
-postcss-modules-values@^1.1.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1"
- dependencies:
- icss-replace-symbols "^1.0.2"
- postcss "^5.0.14"
-
-postcss-normalize-charset@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
- dependencies:
- postcss "^5.0.5"
-
-postcss-normalize-url@^3.0.7:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.7.tgz#6bd90d0a4bc5a1df22c26ea65c53257dc3829f4e"
- dependencies:
- is-absolute-url "^2.0.0"
- normalize-url "^1.4.0"
- postcss "^5.0.14"
- postcss-value-parser "^3.2.3"
-
-postcss-ordered-values@^2.1.0:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.2.tgz#be8b511741fab2dac8e614a2302e9d10267b0771"
- dependencies:
- postcss "^5.0.4"
- postcss-value-parser "^3.0.1"
-
-postcss-reduce-idents@^2.2.2:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.3.1.tgz#024e8e219f52773313408573db9645ba62d2d2fe"
- dependencies:
- postcss "^5.0.4"
- postcss-value-parser "^3.0.2"
-
-postcss-reduce-initial@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.0.tgz#8f739b938289ef2e48936d7101783e4741ca9bbb"
- dependencies:
- postcss "^5.0.4"
-
-postcss-reduce-transforms@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.8"
- postcss-value-parser "^3.0.1"
-
-postcss-selector-parser@^2.0.0:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.2.tgz#3d70f5adda130da51c7c0c2fc023f56b1374fe08"
- dependencies:
- flatten "^1.0.2"
- indexes-of "^1.0.1"
- uniq "^1.0.1"
-
-postcss-svgo@^2.1.1:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.5.tgz#46fc0363f01bab6a36a9abb01c229fcc45363094"
- dependencies:
- is-svg "^2.0.0"
- postcss "^5.0.14"
- postcss-value-parser "^3.2.3"
- svgo "^0.7.0"
-
-postcss-unique-selectors@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
- dependencies:
- alphanum-sort "^1.0.1"
- postcss "^5.0.4"
- uniqs "^2.0.0"
-
-postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
-
-postcss-zindex@^2.0.1:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.4"
- uniqs "^2.0.0"
-
-postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.4:
- version "5.2.6"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.6.tgz#a252cd67cd52585035f17e9ad12b35137a7bdd9e"
- dependencies:
- chalk "^1.1.3"
- js-base64 "^2.1.9"
- source-map "^0.5.6"
- supports-color "^3.1.2"
-
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-
-prepend-http@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
-
-preserve@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-
-pretty-error@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.0.2.tgz#a7db19cbb529ca9f0af3d3a2f77d5caf8e5dec23"
- dependencies:
- renderkid "~2.0.0"
- utila "~0.4"
-
-pretty-format@~4.2.1:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.2.3.tgz#8894c2ac81419cf801629d8f66320a25380d8b05"
-
-private@^0.1.6, private@~0.1.5:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1"
-
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-
-process@^0.11.0:
- version "0.11.9"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
-
-progress@^1.1.8:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
-
-promise@7.1.1, promise@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
- dependencies:
- asap "~2.0.3"
-
-proxy-addr@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37"
- dependencies:
- forwarded "~0.1.0"
- ipaddr.js "1.1.1"
-
-prr@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
-
-pseudomap@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
-
-punycode@^1.2.4, punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-q@^1.1.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
-
-qs@6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
-
-qs@~6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
-
-query-string@^4.1.0, query-string@^4.2.2:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.2.3.tgz#9f27273d207a25a8ee4c7b8c74dcd45d556db822"
- dependencies:
- object-assign "^4.1.0"
- strict-uri-encode "^1.0.0"
-
-querystring-es3@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
-
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
-
-querystringify@0.0.x:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c"
-
-randomatic@^1.1.3:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
- dependencies:
- is-number "^2.0.2"
- kind-of "^3.0.2"
-
-range-parser@^1.0.3, range-parser@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
-
-rc@~1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
- dependencies:
- deep-extend "~0.4.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~1.0.4"
-
-react-addons-pure-render-mixin@^15.3.1:
- version "15.4.1"
- resolved "https://registry.yarnpkg.com/react-addons-pure-render-mixin/-/react-addons-pure-render-mixin-15.4.1.tgz#8a1f48f9fd3f24ed12af63c4d2dc0c7529fa7e02"
-
-react-dev-utils@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-0.4.1.tgz#06385e3c15014d4dfa0a6134bfeeeb0700cc04dd"
- dependencies:
- ansi-html "0.0.5"
- chalk "1.1.3"
- escape-string-regexp "1.0.5"
- html-entities "1.2.0"
- opn "4.0.2"
- sockjs-client "1.0.3"
- strip-ansi "3.0.1"
-
-react-dom@^15.4.1:
- version "15.4.1"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.1.tgz#d54c913261aaedb17adc20410d029dcc18a1344a"
- dependencies:
- fbjs "^0.8.1"
- loose-envify "^1.1.0"
- object-assign "^4.1.0"
-
-react-redux:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.1.tgz#84a41bd4cdd180452bb6922bc79ad25bd5abb7c4"
- dependencies:
- hoist-non-react-statics "^1.0.3"
- invariant "^2.0.0"
- lodash "^4.2.0"
- lodash-es "^4.2.0"
- loose-envify "^1.1.0"
-
-react-router-redux@^4.0.7:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-4.0.7.tgz#9b1fde4e70106c50f47214e12bdd888cfb96e2a6"
-
-react-router@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.0.tgz#3f313e4dbaf57048c48dd0a8c3cac24d93667dff"
- dependencies:
- history "^3.0.0"
- hoist-non-react-statics "^1.2.0"
- invariant "^2.2.1"
- loose-envify "^1.2.0"
- warning "^3.0.0"
-
-react-scripts@0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-0.8.3.tgz#96c7d45f57eca5f00415c53fda27ef9a36566580"
- dependencies:
- autoprefixer "6.5.1"
- babel-core "6.17.0"
- babel-eslint "7.0.0"
- babel-jest "17.0.2"
- babel-loader "6.2.7"
- babel-preset-react-app "^2.0.1"
- case-sensitive-paths-webpack-plugin "1.1.4"
- chalk "1.1.3"
- connect-history-api-fallback "1.3.0"
- cross-spawn "4.0.2"
- css-loader "0.26.0"
- detect-port "1.0.1"
- dotenv "2.0.0"
- eslint "3.8.1"
- eslint-config-react-app "^0.5.0"
- eslint-loader "1.6.0"
- eslint-plugin-flowtype "2.21.0"
- eslint-plugin-import "2.0.1"
- eslint-plugin-jsx-a11y "2.2.3"
- eslint-plugin-react "6.4.1"
- extract-text-webpack-plugin "1.0.1"
- file-loader "0.9.0"
- filesize "3.3.0"
- fs-extra "0.30.0"
- gzip-size "3.0.0"
- html-webpack-plugin "2.24.0"
- http-proxy-middleware "0.17.2"
- jest "17.0.2"
- json-loader "0.5.4"
- object-assign "4.1.0"
- path-exists "2.1.0"
- postcss-loader "1.0.0"
- promise "7.1.1"
- react-dev-utils "^0.4.1"
- recursive-readdir "2.1.0"
- strip-ansi "3.0.1"
- style-loader "0.13.1"
- url-loader "0.5.7"
- webpack "1.14.0"
- webpack-dev-server "1.16.2"
- webpack-manifest-plugin "1.1.0"
- webpack-subresource-integrity "0.8.1"
- whatwg-fetch "1.0.0"
- optionalDependencies:
- fsevents "1.0.14"
-
-react@^15.4.1:
- version "15.4.1"
- resolved "https://registry.yarnpkg.com/react/-/react-15.4.1.tgz#498e918602677a3983cd0fd206dfe700389a0dd6"
- dependencies:
- fbjs "^0.8.4"
- loose-envify "^1.1.0"
- object-assign "^4.1.0"
-
-read-pkg-up@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
- dependencies:
- find-up "^1.0.0"
- read-pkg "^1.0.0"
-
-read-pkg@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
- dependencies:
- load-json-file "^1.0.0"
- normalize-package-data "^2.3.2"
- path-type "^1.0.0"
-
-readable-stream@1.0:
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.1.0, readable-stream@~2.1.4:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
- dependencies:
- buffer-shims "^1.0.0"
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
-readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.0.0:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
-readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
- dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
- readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
-
-readline2@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- mute-stream "0.0.5"
-
-rebass:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/rebass/-/rebass-0.3.3.tgz#bfffddf219107b07be2133173bab9b9887098173"
- dependencies:
- classnames "^2.2.3"
- object-assign "^4.0.1"
- react-addons-pure-render-mixin "^15.3.1"
-
-recursive-readdir@2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.1.0.tgz#78b7bfd79582d3d7596b8ff1bd29fbd50229f6aa"
- dependencies:
- minimatch "3.0.2"
-
-redeyed@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a"
- dependencies:
- esprima "~3.0.0"
-
-reduce-css-calc@^1.2.6:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
- dependencies:
- balanced-match "^0.4.2"
- math-expression-evaluator "^1.2.14"
- reduce-function-call "^1.0.1"
-
-reduce-function-call@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
- dependencies:
- balanced-match "^0.4.2"
-
-redux:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d"
- dependencies:
- lodash "^4.2.1"
- lodash-es "^4.2.1"
- loose-envify "^1.1.0"
- symbol-observable "^1.0.2"
-
-redux-saga:
- version "0.13.0"
- resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-0.13.0.tgz#9294386550deb0d56bc9a1b3c90a613e7ddb6593"
-
-reflexbox:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/reflexbox/-/reflexbox-2.2.3.tgz#9b9ce983dbe677cebf3a94cf2c50b8157f50c0d1"
- dependencies:
- robox "^1.0.0-beta.8"
- ruled "^1.0.1"
-
-regenerate@^1.2.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
-
-regenerator-runtime@^0.10.0:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
-
-regenerator-runtime@^0.9.5:
- version "0.9.6"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029"
-
-regex-cache@^0.4.2:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
- dependencies:
- is-equal-shallow "^0.1.3"
- is-primitive "^2.0.0"
-
-regexpu-core@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
- dependencies:
- regenerate "^1.2.1"
- regjsgen "^0.2.0"
- regjsparser "^0.1.4"
-
-regexpu-core@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
- dependencies:
- regenerate "^1.2.1"
- regjsgen "^0.2.0"
- regjsparser "^0.1.4"
-
-regjsgen@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
-
-regjsparser@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
- dependencies:
- jsesc "~0.5.0"
-
-relateurl@0.2.x:
- version "0.2.7"
- resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
-
-renderkid@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.0.tgz#1859753e7a5adbf35443aba0d4e4579e78abee85"
- dependencies:
- css-select "^1.1.0"
- dom-converter "~0.1"
- htmlparser2 "~3.3.0"
- strip-ansi "^3.0.0"
- utila "~0.3"
-
-repeat-element@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
-
-repeat-string@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-repeating@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
- dependencies:
- is-finite "^1.0.0"
-
-request@^2.55.0, request@^2.79.0:
- version "2.79.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
- dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- caseless "~0.11.0"
- combined-stream "~1.0.5"
- extend "~3.0.0"
- forever-agent "~0.6.1"
- form-data "~2.1.1"
- har-validator "~2.0.6"
- hawk "~3.1.3"
- http-signature "~1.1.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- oauth-sign "~0.8.1"
- qs "~6.3.0"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "~0.4.1"
- uuid "^3.0.0"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-
-require-from-string@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
-
-require-main-filename@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
-
-require-uncached@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
- dependencies:
- caller-path "^0.1.0"
- resolve-from "^1.0.0"
-
-requires-port@1.0.x, requires-port@1.x.x:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
-
-resolve-from@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
-
-resolve@1.1.7, resolve@1.1.x, resolve@^1.1.6:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-
-restore-cursor@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
- dependencies:
- exit-hook "^1.0.0"
- onetime "^1.0.0"
-
-right-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
- dependencies:
- align-text "^0.1.1"
-
-rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4:
- version "2.5.4"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
- dependencies:
- glob "^7.0.5"
-
-ripemd160@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
-
-robox@^1.0.0-beta.8:
- version "1.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/robox/-/robox-1.0.0-beta.8.tgz#9aaee1dacf38a8c4ca4584a80012aebab5711c73"
- dependencies:
- understyle "^1.2.0"
-
-ruled@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/ruled/-/ruled-1.0.1.tgz#8301a1accc9d2e14b6502fca7033582335c2c0f4"
-
-run-async@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
- dependencies:
- once "^1.3.0"
-
-rx-lite@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
-
-sane@~1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715"
- dependencies:
- exec-sh "^0.2.0"
- fb-watchman "^1.8.0"
- minimatch "^3.0.2"
- minimist "^1.1.1"
- walker "~1.0.5"
- watch "~0.10.0"
-
-sax@^1.1.4, sax@~1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
-
-"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@~5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-
-send@0.14.1:
- version "0.14.1"
- resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a"
- dependencies:
- debug "~2.2.0"
- depd "~1.1.0"
- destroy "~1.0.4"
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- etag "~1.7.0"
- fresh "0.3.0"
- http-errors "~1.5.0"
- mime "1.3.4"
- ms "0.7.1"
- on-finished "~2.3.0"
- range-parser "~1.2.0"
- statuses "~1.3.0"
-
-serve-index@^1.7.2:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b"
- dependencies:
- accepts "~1.3.3"
- batch "0.5.3"
- debug "~2.2.0"
- escape-html "~1.0.3"
- http-errors "~1.5.0"
- mime-types "~2.1.11"
- parseurl "~1.3.1"
-
-serve-static@~1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805"
- dependencies:
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- parseurl "~1.3.1"
- send "0.14.1"
-
-set-blocking@^2.0.0, set-blocking@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
-
-setimmediate@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
-
-setprototypeof@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08"
-
-sha.js@2.2.6:
- version "2.2.6"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-
-shelljs@^0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8"
-
-shellwords@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14"
-
-signal-exit@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-
-slash@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-
-slice-ansi@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
-
-sntp@1.x.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
- dependencies:
- hoek "2.x.x"
-
-sockjs-client@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.0.3.tgz#b0d8280998460eb2564c5d79d7e3d7cfd8a353ad"
- dependencies:
- debug "^2.1.0"
- eventsource "^0.1.3"
- faye-websocket "~0.7.3"
- inherits "^2.0.1"
- json3 "^3.3.2"
- url-parse "^1.0.1"
-
-sockjs-client@^1.0.3, sockjs-client@latest:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.1.tgz#284843e9a9784d7c474b1571b3240fca9dda4bb0"
- dependencies:
- debug "^2.2.0"
- eventsource "~0.1.6"
- faye-websocket "~0.11.0"
- inherits "^2.0.1"
- json3 "^3.3.2"
- url-parse "^1.1.1"
-
-sockjs@^0.3.15:
- version "0.3.18"
- resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207"
- dependencies:
- faye-websocket "^0.10.0"
- uuid "^2.0.2"
-
-sort-keys@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
- dependencies:
- is-plain-obj "^1.0.0"
-
-source-list-map@^0.1.4, source-list-map@~0.1.0, source-list-map@~0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e"
-
-source-map-support@^0.4.2:
- version "0.4.6"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.6.tgz#32552aa64b458392a85eab3b0b5ee61527167aeb"
- dependencies:
- source-map "^0.5.3"
-
-source-map@0.4.x, source-map@^0.4.4, source-map@~0.4.1:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
-
-source-map@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
- dependencies:
- amdefine ">=0.0.4"
-
-spdx-correct@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
- dependencies:
- spdx-license-ids "^1.0.2"
-
-spdx-expression-parse@~1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
-
-spdx-license-ids@^1.0.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-
-sshpk@^1.7.0:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
- bcrypt-pbkdf "^1.0.0"
- ecc-jsbn "~0.1.1"
- jodid25519 "^1.0.0"
- jsbn "~0.1.0"
- tweetnacl "~0.14.0"
-
-"statuses@>= 1.3.1 < 2", statuses@~1.3.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
-
-stream-browserify@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
- dependencies:
- inherits "~2.0.1"
- readable-stream "^2.0.2"
-
-stream-cache@~0.0.1:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f"
-
-stream-http@^2.3.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.5.0.tgz#585eee513217ed98fe199817e7313b6f772a6802"
- dependencies:
- builtin-status-codes "^2.0.0"
- inherits "^2.0.1"
- readable-stream "^2.1.0"
- to-arraybuffer "^1.0.0"
- xtend "^4.0.0"
-
-strict-uri-encode@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
-
-string-width@^1.0.1, string-width@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string-width@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^3.0.0"
-
-string.prototype.codepointat@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz#6b26e9bd3afcaa7be3b4269b526de1b82000ac78"
-
-string_decoder@^0.10.25, string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
-stringstream@~0.0.4:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-
-strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-bom@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
- dependencies:
- is-utf8 "^0.2.0"
-
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-
-strip-json-comments@~1.0.1, strip-json-comments@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
-
-style-loader@0.13.1:
- version "0.13.1"
- resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.1.tgz#468280efbc0473023cd3a6cd56e33b5a1d7fc3a9"
- dependencies:
- loader-utils "^0.2.7"
-
-supports-color@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-
-supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
- dependencies:
- has-flag "^1.0.0"
-
-svgo@^0.7.0:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.1.tgz#287320fed972cb097e72c2bb1685f96fe08f8034"
- dependencies:
- coa "~1.0.1"
- colors "~1.1.2"
- csso "~2.2.1"
- js-yaml "~3.6.1"
- mkdirp "~0.5.1"
- sax "~1.2.1"
- whet.extend "~0.9.9"
-
-symbol-observable@^1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
-
-"symbol-tree@>= 3.1.0 < 4.0.0":
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.1.4.tgz#02b279348d337debc39694c5c95f882d448a312a"
-
-table@^3.7.8:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
- dependencies:
- ajv "^4.7.0"
- ajv-keywords "^1.0.0"
- chalk "^1.1.1"
- lodash "^4.0.0"
- slice-ansi "0.0.4"
- string-width "^2.0.0"
-
-tapable@^0.1.8, tapable@~0.1.8:
- version "0.1.10"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
-
-tar-pack@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
- dependencies:
- debug "~2.2.0"
- fstream "~1.0.10"
- fstream-ignore "~1.0.5"
- once "~1.3.3"
- readable-stream "~2.1.4"
- rimraf "~2.5.1"
- tar "~2.2.1"
- uid-number "~0.0.6"
-
-tar@~2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
- dependencies:
- block-stream "*"
- fstream "^1.0.2"
- inherits "2"
-
-test-exclude@^2.1.1:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-2.1.3.tgz#a8d8968e1da83266f9864f2852c55e220f06434a"
- dependencies:
- arrify "^1.0.1"
- micromatch "^2.3.11"
- object-assign "^4.1.0"
- read-pkg-up "^1.0.1"
- require-main-filename "^1.0.1"
-
-text-table@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-
-throat@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6"
-
-through@^2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-
-timers-browserify@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
- dependencies:
- setimmediate "^1.0.4"
-
-tmpl@1.0.x:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
-
-to-arraybuffer@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
-
-to-fast-properties@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
-
-toposort@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.0.tgz#b66cf385a1a8a8e68e45b8259e7f55875e8b06ef"
-
-tough-cookie@^2.3.1, tough-cookie@~2.3.0:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
- dependencies:
- punycode "^1.4.1"
-
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
-
-tryit@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
-
-tty-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
-
-tunnel-agent@~0.4.1:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.4"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.4.tgz#8c9dbfb52795686f166cd2023794bcf103d13c2b"
-
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- dependencies:
- prelude-ls "~1.1.2"
-
-type-is@~1.6.13:
- version "1.6.14"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2"
- dependencies:
- media-typer "0.3.0"
- mime-types "~2.1.13"
-
-typedarray@~0.0.5:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-
-ua-parser-js@^0.7.9:
- version "0.7.12"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb"
-
-uglify-js@2.7.x, uglify-js@^2.6, uglify-js@~2.7.3:
- version "2.7.5"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
- dependencies:
- async "~0.2.6"
- source-map "~0.5.1"
- uglify-to-browserify "~1.0.0"
- yargs "~3.10.0"
-
-uglify-to-browserify@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-uid-number@~0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
-
-understyle@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/understyle/-/understyle-1.3.0.tgz#df3f9a9be96779d718c3da9598fad1c2f90f24ee"
- dependencies:
- object-assign "^4.1.0"
-
-uniq@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
-
-uniqid@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.0.tgz#33d9679f65022f48988a03fd24e7dcaf8f109eca"
- dependencies:
- macaddress "^0.2.8"
-
-uniqs@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
-
-unpipe@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-
-upper-case@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
-
-url-loader@0.5.7:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.7.tgz#67e8779759f8000da74994906680c943a9b0925d"
- dependencies:
- loader-utils "0.2.x"
- mime "1.2.x"
-
-url-parse@1.0.x:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b"
- dependencies:
- querystringify "0.0.x"
- requires-port "1.0.x"
-
-url-parse@^1.0.1, url-parse@^1.1.1:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.7.tgz#025cff999653a459ab34232147d89514cc87d74a"
- dependencies:
- querystringify "0.0.x"
- requires-port "1.0.x"
-
-url@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
-
-user-home@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
- dependencies:
- os-homedir "^1.0.0"
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-util@0.10.3, util@^0.10.3:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- dependencies:
- inherits "2.0.1"
-
-utila@~0.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
-
-utila@~0.4:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
-
-utils-merge@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
-
-uuid@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
-
-uuid@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
-
-validate-npm-package-license@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
- dependencies:
- spdx-correct "~1.0.0"
- spdx-expression-parse "~1.0.0"
-
-vary@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140"
-
-vendors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
-
-verror@1.3.6:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
- dependencies:
- extsprintf "1.0.2"
-
-vm-browserify@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
- dependencies:
- indexof "0.0.1"
-
-walker@~1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
- dependencies:
- makeerror "1.0.x"
-
-warning@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
- dependencies:
- loose-envify "^1.0.0"
-
-watch@~0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
-
-watchpack@^0.2.1:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
- dependencies:
- async "^0.9.0"
- chokidar "^1.0.0"
- graceful-fs "^4.1.2"
-
-webidl-conversions@^3.0.0, webidl-conversions@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
-
-webpack-core@^0.6.8, webpack-core@~0.6.9:
- version "0.6.9"
- resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
- dependencies:
- source-list-map "~0.1.7"
- source-map "~0.4.1"
-
-webpack-dev-middleware@^1.4.0:
- version "1.8.4"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.8.4.tgz#e8765c9122887ce9e3abd4cc9c3eb31b61e0948d"
- dependencies:
- memory-fs "~0.3.0"
- mime "^1.3.4"
- path-is-absolute "^1.0.0"
- range-parser "^1.0.3"
-
-webpack-dev-server@1.16.2:
- version "1.16.2"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-1.16.2.tgz#8bebc2c4ce1c45a15c72dd769d9ba08db306a793"
- dependencies:
- compression "^1.5.2"
- connect-history-api-fallback "^1.3.0"
- express "^4.13.3"
- http-proxy-middleware "~0.17.1"
- open "0.0.5"
- optimist "~0.6.1"
- serve-index "^1.7.2"
- sockjs "^0.3.15"
- sockjs-client "^1.0.3"
- stream-cache "~0.0.1"
- strip-ansi "^3.0.0"
- supports-color "^3.1.1"
- webpack-dev-middleware "^1.4.0"
-
-webpack-manifest-plugin@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-1.1.0.tgz#6b6c718aade8a2537995784b46bd2e9836057caa"
- dependencies:
- fs-extra "^0.30.0"
- lodash ">=3.5 <5"
-
-webpack-sources@^0.1.0:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.3.tgz#15ce2fb79d0a1da727444ba7c757bf164294f310"
- dependencies:
- source-list-map "~0.1.0"
- source-map "~0.5.3"
-
-webpack-subresource-integrity@0.8.1:
- version "0.8.1"
- resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-0.8.1.tgz#51f290f5996ee94cd1f518198a9b421a17d2191e"
- dependencies:
- webpack-core "^0.6.8"
-
-webpack@1.14.0:
- version "1.14.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823"
- dependencies:
- acorn "^3.0.0"
- async "^1.3.0"
- clone "^1.0.2"
- enhanced-resolve "~0.9.0"
- interpret "^0.6.4"
- loader-utils "^0.2.11"
- memory-fs "~0.3.0"
- mkdirp "~0.5.0"
- node-libs-browser "^0.7.0"
- optimist "~0.6.0"
- supports-color "^3.1.0"
- tapable "~0.1.8"
- uglify-js "~2.7.3"
- watchpack "^0.2.1"
- webpack-core "~0.6.9"
-
-websocket-driver@>=0.3.6, websocket-driver@>=0.5.1:
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36"
- dependencies:
- websocket-extensions ">=0.1.1"
-
-websocket-extensions@>=0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7"
-
-webstomp-client@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/webstomp-client/-/webstomp-client-1.0.3.tgz#821f98527d4b30a31f93df76f8f31fbc0bac30a4"
-
-whatwg-encoding@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4"
- dependencies:
- iconv-lite "0.4.13"
-
-whatwg-fetch@1.0.0, whatwg-fetch@>=0.10.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz#01c2ac4df40e236aaa18480e3be74bd5c8eb798e"
-
-whatwg-url@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-3.1.0.tgz#7bdcae490f921aef6451fb6739ec6bbd8e907bf6"
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
-whet.extend@~0.9.9:
- version "0.9.9"
- resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
-
-which-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
-
-which@^1.0.5, which@^1.1.1, which@^1.2.9:
- version "1.2.12"
- resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
- dependencies:
- isexe "^1.1.1"
-
-wide-align@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
- dependencies:
- string-width "^1.0.1"
-
-window-size@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-window-size@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
-
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wordwrap@^1.0.0, wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
-worker-farm@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff"
- dependencies:
- errno ">=0.1.1 <0.2.0-0"
- xtend ">=4.0.0 <4.1.0-0"
-
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-write@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
- dependencies:
- mkdirp "^0.5.1"
-
-xml-char-classes@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
-
-"xml-name-validator@>= 2.0.1 < 3.0.0":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
-
-"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-
-y18n@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-
-yallist@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
-
-yargs-parser@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.0.tgz#6ced869cd05a3dca6a1eaee38b68aeed4b0b4101"
- dependencies:
- camelcase "^3.0.0"
-
-yargs@^6.3.0:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.5.0.tgz#a902e23a1f0fe912b2a03f6131b7ed740c9718ff"
- dependencies:
- camelcase "^3.0.0"
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- os-locale "^1.4.0"
- read-pkg-up "^1.0.1"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^1.0.2"
- which-module "^1.0.0"
- window-size "^0.2.0"
- y18n "^3.2.1"
- yargs-parser "^4.2.0"
-
-yargs@~3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
- dependencies:
- camelcase "^1.0.2"
- cliui "^2.1.0"
- decamelize "^1.0.0"
- window-size "0.1.0"
diff --git a/src/main/resources/org/luxons/sevenwonders/game/data/cards.json b/src/main/resources/org/luxons/sevenwonders/game/data/cards.json
deleted file mode 100644
index bf48e95a..00000000
--- a/src/main/resources/org/luxons/sevenwonders/game/data/cards.json
+++ /dev/null
@@ -1,1719 +0,0 @@
-{
- "age1Back": "age1.png",
- "age2Back": "age2.png",
- "age3Back": "age3.png",
- "age1": [
- {
- "name": "Clay Pit",
- "color": "BROWN",
- "effect": {
- "production": "O/C"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 1
- },
- "image": "claypit.png"
- },
- {
- "name": "Clay Pool",
- "color": "BROWN",
- "effect": {
- "production": "C"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "claypool.png"
- },
- {
- "name": "Excavation",
- "color": "BROWN",
- "effect": {
- "production": "S/C"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 1
- },
- "image": "excavation.png"
- },
- {
- "name": "Forest Cave",
- "color": "BROWN",
- "effect": {
- "production": "W/O"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 0,
- "5": 1,
- "6": 1,
- "7": 1
- },
- "image": "forestcave.png"
- },
- {
- "name": "Lumber Yard",
- "color": "BROWN",
- "effect": {
- "production": "W"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "lumberyard.png"
- },
- {
- "name": "Mine",
- "color": "BROWN",
- "effect": {
- "production": "S/O"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 0,
- "5": 0,
- "6": 1,
- "7": 1
- },
- "image": "mine.png"
- },
- {
- "name": "Ore Vein",
- "color": "BROWN",
- "effect": {
- "production": "O"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "orevein.png"
- },
- {
- "name": "Stone Pit",
- "color": "BROWN",
- "effect": {
- "production": "S"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "stonepit.png"
- },
- {
- "name": "Timber Yard",
- "color": "BROWN",
- "effect": {
- "production": "W/S"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 1
- },
- "image": "timberyard.png"
- },
- {
- "name": "Tree Farm",
- "color": "BROWN",
- "effect": {
- "production": "W/C"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 0,
- "5": 0,
- "6": 1,
- "7": 1
- },
- "image": "treefarm.png"
- },
- {
- "name": "Glassworks",
- "color": "GREY",
- "effect": {
- "production": "G"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "glassworks.png"
- },
- {
- "name": "Loom",
- "color": "GREY",
- "effect": {
- "production": "L"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "loom.png"
- },
- {
- "name": "Press",
- "color": "GREY",
- "effect": {
- "production": "P"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "press.png"
- },
- {
- "name": "East Trading Post",
- "color": "YELLOW",
- "effect": {
- "discount": {
- "resourceTypes": "CSOW",
- "providers": [
- "RIGHT_PLAYER"
- ],
- "discountedPrice": 1
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Forum"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "easttradingpost.png"
- },
- {
- "name": "Marketplace",
- "color": "YELLOW",
- "effect": {
- "discount": {
- "resourceTypes": "LGP",
- "providers": [
- "LEFT_PLAYER",
- "RIGHT_PLAYER"
- ],
- "discountedPrice": 1
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Caravansery"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "marketplace.png"
- },
- {
- "name": "Tavern",
- "color": "YELLOW",
- "effect": {
- "gold": 5
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 3
- },
- "image": "tavern.png"
- },
- {
- "name": "West Trading Post",
- "color": "YELLOW",
- "effect": {
- "discount": {
- "resourceTypes": "CSOW",
- "providers": [
- "LEFT_PLAYER"
- ],
- "discountedPrice": 1
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Forum"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "westtradingpost.png"
- },
- {
- "name": "Altar",
- "color": "BLUE",
- "effect": {
- "points": 2
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Temple"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "altar.png"
- },
- {
- "name": "Baths",
- "color": "BLUE",
- "effect": {
- "points": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "S"
- },
- "chainChildren": [
- "Aquaduct"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "baths.png"
- },
- {
- "name": "Pawnshop",
- "color": "BLUE",
- "effect": {
- "points": 3
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "pawnshop.png"
- },
- {
- "name": "Theater",
- "color": "BLUE",
- "effect": {
- "points": 2
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Statue"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "theater.png"
- },
- {
- "name": "Apothecary",
- "color": "GREEN",
- "effect": {
- "science": "COMPASS"
- },
- "requirements": {
- "gold": 0,
- "resources": "L"
- },
- "chainChildren": [
- "Stables",
- "Dispensary"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "apothecary.png"
- },
- {
- "name": "Scriptorium",
- "color": "GREEN",
- "effect": {
- "science": "TABLET"
- },
- "requirements": {
- "gold": 0,
- "resources": "P"
- },
- "chainChildren": [
- "Courthouse",
- "Library"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "scriptorium.png"
- },
- {
- "name": "Workshop",
- "color": "GREEN",
- "effect": {
- "science": "WHEEL"
- },
- "requirements": {
- "gold": 0,
- "resources": "G"
- },
- "chainChildren": [
- "Archery Range",
- "Laboratory"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "workshop.png"
- },
- {
- "name": "Barracks",
- "color": "RED",
- "effect": {
- "military": 1
- },
- "requirements": {
- "gold": 0,
- "resources": "O"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "barracks.png"
- },
- {
- "name": "Guard Tower",
- "color": "RED",
- "effect": {
- "military": 1
- },
- "requirements": {
- "gold": 0,
- "resources": "C"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "guardtower.png"
- },
- {
- "name": "Stockade",
- "color": "RED",
- "effect": {
- "military": 1
- },
- "requirements": {
- "gold": 0,
- "resources": "W"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "stockade.png"
- }
- ],
- "age2": [
- {
- "name": "Brickyard",
- "color": "BROWN",
- "effect": {
- "production": "CC"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "brickyard.png"
- },
- {
- "name": "Foundry",
- "color": "BROWN",
- "effect": {
- "production": "OO"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "foundry.png"
- },
- {
- "name": "Quarry",
- "color": "BROWN",
- "effect": {
- "production": "SS"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "quarry.png"
- },
- {
- "name": "Sawmill",
- "color": "BROWN",
- "effect": {
- "production": "WW"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "sawmill.png"
- },
- {
- "name": "Glassworks",
- "color": "GREY",
- "effect": {
- "production": "G"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "glassworks.png"
- },
- {
- "name": "Loom",
- "color": "GREY",
- "effect": {
- "production": "L"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "loom.png"
- },
- {
- "name": "Press",
- "color": "GREY",
- "effect": {
- "production": "P"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "press.png"
- },
- {
- "name": "Bazar",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF",
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 2,
- "type": "CARD",
- "colors": [
- "GREY"
- ]
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "bazar.png"
- },
- {
- "name": "Caravansery",
- "color": "YELLOW",
- "effect": {
- "production": "W/S/O/C"
- },
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "chainParent": "Marketplace",
- "chainChildren": [
- "Lighthouse"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 3,
- "7": 3
- },
- "image": "caravansery.png"
- },
- {
- "name": "Forum",
- "color": "YELLOW",
- "effect": {
- "production": "G/P/L"
- },
- "requirements": {
- "gold": 0,
- "resources": "CC"
- },
- "chainParent": "East Trading Post",
- "chainChildren": [
- "Haven"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 3
- },
- "image": "forum.png"
- },
- {
- "name": "Vineyard",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF",
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BROWN"
- ]
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "vineyard.png"
- },
- {
- "name": "Aqueduct",
- "color": "BLUE",
- "effect": {
- "points": 5
- },
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "chainParent": "Baths",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "aqueduct.png"
- },
- {
- "name": "Courthouse",
- "color": "BLUE",
- "effect": {
- "points": 4
- },
- "requirements": {
- "gold": 0,
- "resources": "CCL"
- },
- "chainParent": "Scriptorium",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "courthouse.png"
- },
- {
- "name": "Statue",
- "color": "BLUE",
- "effect": {
- "points": 4
- },
- "requirements": {
- "gold": 0,
- "resources": "WOO"
- },
- "chainParent": "Theater",
- "chainChildren": [
- "Gardens"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "statue.png"
- },
- {
- "name": "Temple",
- "color": "BLUE",
- "effect": {
- "points": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "WCG"
- },
- "chainParent": "Altar",
- "chainChildren": [
- "Pantheon"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "temple.png"
- },
- {
- "name": "Dispensary",
- "color": "GREEN",
- "effect": {
- "science": "COMPASS"
- },
- "requirements": {
- "gold": 0,
- "resources": "OOG"
- },
- "chainParent": "Apothecary",
- "chainChildren": [
- "Arena",
- "Lodge"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "dispensary.png"
- },
- {
- "name": "Laboratory",
- "color": "GREEN",
- "effect": {
- "science": "WHEEL"
- },
- "requirements": {
- "gold": 0,
- "resources": "CCP"
- },
- "chainParent": "Workshop",
- "chainChildren": [
- "Siege Workshop",
- "Observatory"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "laboratory.png"
- },
- {
- "name": "Library",
- "color": "GREEN",
- "effect": {
- "science": "TABLET"
- },
- "requirements": {
- "gold": 0,
- "resources": "SSL"
- },
- "chainParent": "Scriptorium",
- "chainChildren": [
- "Senate",
- "University"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "library.png"
- },
- {
- "name": "School",
- "color": "GREEN",
- "effect": {
- "science": "TABLET"
- },
- "requirements": {
- "gold": 0,
- "resources": "WP"
- },
- "chainChildren": [
- "Academy",
- "Study"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "school.png"
- },
- {
- "name": "Archery Range",
- "color": "RED",
- "effect": {
- "military": 2
- },
- "requirements": {
- "gold": 0,
- "resources": "WWO"
- },
- "chainParent": "Workshop",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "archeryrange.png"
- },
- {
- "name": "Stables",
- "color": "RED",
- "effect": {
- "military": 2
- },
- "requirements": {
- "gold": 0,
- "resources": "WOC"
- },
- "chainParent": "Apothecary",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "stables.png"
- },
- {
- "name": "Training Ground",
- "color": "RED",
- "effect": {
- "military": 2
- },
- "requirements": {
- "gold": 0,
- "resources": "WOO"
- },
- "chainChildren": [
- "Circus"
- ],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 3
- },
- "image": "trainingground.png"
- },
- {
- "name": "Walls",
- "color": "RED",
- "effect": {
- "military": 2
- },
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "chainChildren": [
- "Fortifications"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "walls.png"
- }
- ],
- "age3": [
- {
- "name": "Arena",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 3,
- "points": 1,
- "type": "WONDER_LEVEL"
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SSO"
- },
- "chainParent": "Dispensary",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 3
- },
- "image": "arena.png"
- },
- {
- "name": "Chamber of Commerce",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 2,
- "points": 2,
- "type": "CARD",
- "colors": [
- "GREY"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "CCP"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "chamberofcommerce.png"
- },
- {
- "name": "Haven",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 1,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BROWN"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "WOL"
- },
- "chainParent": "Forum",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "haven.png"
- },
- {
- "name": "Lighthouse",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 1,
- "points": 1,
- "type": "CARD",
- "colors": [
- "GREY"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SG"
- },
- "chainParent": "Caravansery",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "lighthouse.png"
- },
- {
- "name": "Gardens",
- "color": "BLUE",
- "effect": {
- "points": 5
- },
- "requirements": {
- "gold": 0,
- "resources": "WCC"
- },
- "chainParent": "Statue",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "gardens.png"
- },
- {
- "name": "Palace",
- "color": "BLUE",
- "effect": {
- "points": 8
- },
- "requirements": {
- "gold": 0,
- "resources": "WSOCGPL"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "palace.png"
- },
- {
- "name": "Pantheon",
- "color": "BLUE",
- "effect": {
- "points": 7
- },
- "requirements": {
- "gold": 0,
- "resources": "OCCGPL"
- },
- "chainParent": "Temple",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "pantheon.png"
- },
- {
- "name": "Senate",
- "color": "BLUE",
- "effect": {
- "points": 6
- },
- "requirements": {
- "gold": 0,
- "resources": "WWSO"
- },
- "chainParent": "Library",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "senate.png"
- },
- {
- "name": "Town Hall",
- "color": "BLUE",
- "effect": {
- "points": 6
- },
- "requirements": {
- "gold": 0,
- "resources": "SSOG"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 3,
- "7": 3
- },
- "image": "townhall.png"
- },
- {
- "name": "Academy",
- "color": "GREEN",
- "effect": {
- "science": "COMPASS"
- },
- "requirements": {
- "gold": 0,
- "resources": "SSSG"
- },
- "chainParent": "School",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "academy.png"
- },
- {
- "name": "Lodge",
- "color": "GREEN",
- "effect": {
- "science": "COMPASS"
- },
- "requirements": {
- "gold": 0,
- "resources": "CCPL"
- },
- "chainParent": "Dispensary",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "lodge.png"
- },
- {
- "name": "Observatory",
- "color": "GREEN",
- "effect": {
- "science": "WHEEL"
- },
- "requirements": {
- "gold": 0,
- "resources": "OOGL"
- },
- "chainParent": "Laboratory",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "observatory.png"
- },
- {
- "name": "Study",
- "color": "GREEN",
- "effect": {
- "science": "WHEEL"
- },
- "requirements": {
- "gold": 0,
- "resources": "WPL"
- },
- "chainParent": "School",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "study.png"
- },
- {
- "name": "University",
- "color": "GREEN",
- "effect": {
- "science": "TABLET"
- },
- "requirements": {
- "gold": 0,
- "resources": "WWGP"
- },
- "chainParent": "Library",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "university.png"
- },
- {
- "name": "Arsenal",
- "color": "RED",
- "effect": {
- "military": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "WWOL"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 3
- },
- "image": "arsenal.png"
- },
- {
- "name": "Circus",
- "color": "RED",
- "effect": {
- "military": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "SSSO"
- },
- "chainParent": "Training Ground",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 2,
- "6": 3,
- "7": 3
- },
- "image": "circus.png"
- },
- {
- "name": "Fortifications",
- "color": "RED",
- "effect": {
- "military": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "SOOO"
- },
- "chainParent": "Walls",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "fortifications.png"
- },
- {
- "name": "Siege Workshop",
- "color": "RED",
- "effect": {
- "military": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "WCCC"
- },
- "chainParent": "Laboratory",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "siegeworkshop.png"
- }
- ],
- "guildCards": [
- {
- "name": "Builders Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "SELF",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "WONDER_LEVEL"
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SSCCG"
- },
- "chainChildren": [],
- "image": "buildersguild.png"
- },
- {
- "name": "Craftsmens Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 2,
- "type": "CARD",
- "colors": [
- "GREY"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SSOO"
- },
- "chainChildren": [],
- "image": "craftsmensguild.png"
- },
- {
- "name": "Magistrates Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BLUE"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "WWWSL"
- },
- "chainChildren": [],
- "image": "magistratesguild.png"
- },
- {
- "name": "Philosophers Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "GREEN"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "CCCPL"
- },
- "chainChildren": [],
- "image": "philosophersguild.png"
- },
- {
- "name": "Scientists Guild",
- "color": "PURPLE",
- "effect": {
- "science": "any"
- },
- "requirements": {
- "gold": 0,
- "resources": "WWOOP"
- },
- "chainChildren": [],
- "image": "scientistsguild.png"
- },
- {
- "name": "Shipowners Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BROWN",
- "GREY",
- "PURPLE"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "WWWGP"
- },
- "chainChildren": [],
- "image": "shipownersguild.png"
- },
- {
- "name": "Spies Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "RED"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "CCCG"
- },
- "chainChildren": [],
- "image": "spiesguild.png"
- },
- {
- "name": "Strategists Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "DEFEAT_TOKEN"
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SOOL"
- },
- "chainChildren": [],
- "image": "strategistsguild.png"
- },
- {
- "name": "Traders Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "YELLOW"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "GPL"
- },
- "chainChildren": [],
- "image": "tradersguild.png"
- },
- {
- "name": "Workers Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BROWN"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "WSOOC"
- },
- "chainChildren": [],
- "image": "workersguild.png"
- }
- ]
-} \ No newline at end of file
diff --git a/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json b/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json
deleted file mode 100644
index 9b4d0587..00000000
--- a/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json
+++ /dev/null
@@ -1,515 +0,0 @@
-[
- {
- "name": "alexandria",
- "sides": {
- "A": {
- "initialResource": "G",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OO"
- },
- "effects": {
- "production": "W/S/O/C"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "GG"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "alexandriaA.png"
- },
- "B": {
- "initialResource": "G",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "CC"
- },
- "effects": {
- "production": "W/S/O/C"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "production": "G/P/L"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "alexandriaB.png"
- }
- }
- },
- {
- "name": "babylon",
- "sides": {
- "A": {
- "initialResource": "C",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "CC"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WWW"
- },
- "effects": {
- "science": "any"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCCC"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "babylonA.png"
- },
- "B": {
- "initialResource": "C",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "CL"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WWG"
- },
- "effects": {
- "action": "PLAY_LAST_CARD"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCCP"
- },
- "effects": {
- "science": "any"
- }
- }
- ],
- "image": "babylonB.png"
- }
- }
- },
- {
- "name": "ephesos",
- "sides": {
- "A": {
- "initialResource": "P",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "gold": 9
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "PP"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "ephesosA.png"
- },
- "B": {
- "initialResource": "P",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "gold": 4,
- "points": 2
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "gold": 4,
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "GPL"
- },
- "effects": {
- "gold": 4,
- "points": 5
- }
- }
- ],
- "image": "ephesosB.png"
- }
- }
- },
- {
- "name": "gizah",
- "sides": {
- "A": {
- "initialResource": "S",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WWW"
- },
- "effects": {
- "points": 5
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SSSS"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "gizahA.png"
- },
- "B": {
- "initialResource": "S",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "effects": {
- "points": 5
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCC"
- },
- "effects": {
- "points": 5
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SSSSP"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "gizahB.png"
- }
- }
- },
- {
- "name": "halikarnassus",
- "sides": {
- "A": {
- "initialResource": "L",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "CC"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OOO"
- },
- "effects": {
- "action": "PLAY_DISCARDED"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "LL"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "halikarnassusA.png"
- },
- "B": {
- "initialResource": "L",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "OO"
- },
- "effects": {
- "points": 2,
- "action": "PLAY_DISCARDED"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCC"
- },
- "effects": {
- "points": 1,
- "action": "PLAY_DISCARDED"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "GPL"
- },
- "effects": {
- "action": "PLAY_DISCARDED"
- }
- }
- ],
- "image": "halikarnassusB.png"
- }
- }
- },
- {
- "name": "olympia",
- "sides": {
- "A": {
- "initialResource": "W",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "action": "ONE_FREE"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OO"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "olympiaA.png"
- },
- "B": {
- "initialResource": "W",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "discount": {
- "resourceTypes": "WSOC",
- "providers": [
- "LEFT_PLAYER",
- "RIGHT_PLAYER"
- ],
- "discountedPrice": 1
- }
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "points": 5
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OOL"
- },
- "effects": {
- "action": "COPY_GUILD"
- }
- }
- ],
- "image": "olympiaB.png"
- }
- }
- },
- {
- "name": "rhodos",
- "sides": {
- "A": {
- "initialResource": "O",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCC"
- },
- "effects": {
- "military": 2
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OOOO"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "rhodosA.png"
- },
- "B": {
- "initialResource": "O",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "effects": {
- "gold": 3,
- "military": 1,
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OOOO"
- },
- "effects": {
- "gold": 4,
- "military": 1,
- "points": 4
- }
- }
- ],
- "image": "rhodosB.png"
- }
- }
- }
-] \ No newline at end of file
diff --git a/src/main/resources/static/app.js b/src/main/resources/static/app.js
deleted file mode 100644
index 0d68d2ef..00000000
--- a/src/main/resources/static/app.js
+++ /dev/null
@@ -1,90 +0,0 @@
-var stompClient = null;
-
-function setConnected(connected) {
- $("#connect").prop("disabled", connected);
- $("#disconnect").prop("disabled", !connected);
- if (connected) {
- $("#game-list").show();
- } else {
- $("#game-list").hide();
- }
- $("#greetings").html("");
-}
-
-function connect() {
- var socket = new SockJS('/seven-wonders-websocket');
- stompClient = Stomp.over(socket);
- stompClient.connect({}, function (frame) {
- setConnected(true);
- console.log('Connected: ' + frame);
-
- stompClient.subscribe('/user/queue/errors', function (msg) {
- var error = JSON.parse(msg.body);
- console.error(error);
- });
-
- stompClient.subscribe('/topic/games', function (msg) {
- var games = JSON.parse(msg.body);
- console.log("Received new games: " + games);
- for (var i = 0; i < games.length; i++) {
- addNewGame(games[i]);
- }
- });
-
- stompClient.subscribe('/user/queue/join-game', function (msg) {
- var game = JSON.parse(msg.body);
- console.log("Joined game: " + game);
- addNewPlayer(game);
- });
- });
-}
-
-function disconnect() {
- if (stompClient !== null) {
- stompClient.disconnect();
- }
- setConnected(false);
- console.log("Disconnected");
-}
-
-function sendCreateGame(gameName, playerName) {
- stompClient.send("/app/lobby/create-game", {}, JSON.stringify({
- 'gameName': gameName,
- 'playerName': playerName
- }));
-}
-
-function sendJoinGame(gameName, playerName) {
- stompClient.send("/app/lobby/join-game", {}, JSON.stringify({
- 'gameName': gameName,
- 'playerName': playerName
- }));
-}
-
-function addNewGame(game) {
- console.log(game);
- $("#game-list-content").append('<tr><td>' + game.name + '</td><td><button id="join-' + game.id +
- '" type="submit">Join</button></td></tr>');
- $("#join-" + game.id).click(function () {
- sendJoinGame(game.name, $("#player-name-field").val());
- });
-}
-
-function addNewPlayer(player) {
- console.log(player);
-}
-
-$(function () {
- $("form").on('submit', function (e) {
- e.preventDefault();
- });
- $("#connect").click(function () {
- connect();
- });
- $("#disconnect").click(function () {
- disconnect();
- });
- $("#create-game").click(function () {
- sendCreateGame($("#game-name-field").val(), $("#player-name-field").val());
- });
-}); \ No newline at end of file
diff --git a/src/main/resources/static/images/background.jpg b/src/main/resources/static/images/background.jpg
deleted file mode 100644
index 57bdffcf..00000000
--- a/src/main/resources/static/images/background.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/academy.png b/src/main/resources/static/images/cards/academy.png
deleted file mode 100644
index d2a75075..00000000
--- a/src/main/resources/static/images/cards/academy.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/age1.png b/src/main/resources/static/images/cards/age1.png
deleted file mode 100644
index a06332d7..00000000
--- a/src/main/resources/static/images/cards/age1.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/age2.png b/src/main/resources/static/images/cards/age2.png
deleted file mode 100644
index 9b52aa4e..00000000
--- a/src/main/resources/static/images/cards/age2.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/age3.png b/src/main/resources/static/images/cards/age3.png
deleted file mode 100644
index 86c983ee..00000000
--- a/src/main/resources/static/images/cards/age3.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/altar.png b/src/main/resources/static/images/cards/altar.png
deleted file mode 100644
index bbde8f2f..00000000
--- a/src/main/resources/static/images/cards/altar.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/apothecary.png b/src/main/resources/static/images/cards/apothecary.png
deleted file mode 100644
index 01804c0a..00000000
--- a/src/main/resources/static/images/cards/apothecary.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/aqueduct.png b/src/main/resources/static/images/cards/aqueduct.png
deleted file mode 100644
index c29d9566..00000000
--- a/src/main/resources/static/images/cards/aqueduct.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/archeryrange.png b/src/main/resources/static/images/cards/archeryrange.png
deleted file mode 100644
index 15c6edda..00000000
--- a/src/main/resources/static/images/cards/archeryrange.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/arena.png b/src/main/resources/static/images/cards/arena.png
deleted file mode 100644
index 7dc76961..00000000
--- a/src/main/resources/static/images/cards/arena.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/arsenal.png b/src/main/resources/static/images/cards/arsenal.png
deleted file mode 100644
index fc3f4a27..00000000
--- a/src/main/resources/static/images/cards/arsenal.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/barracks.png b/src/main/resources/static/images/cards/barracks.png
deleted file mode 100644
index f5a68c17..00000000
--- a/src/main/resources/static/images/cards/barracks.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/baths.png b/src/main/resources/static/images/cards/baths.png
deleted file mode 100644
index 3d99d59d..00000000
--- a/src/main/resources/static/images/cards/baths.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/bazar.png b/src/main/resources/static/images/cards/bazar.png
deleted file mode 100644
index f36e25c2..00000000
--- a/src/main/resources/static/images/cards/bazar.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/brickyard.png b/src/main/resources/static/images/cards/brickyard.png
deleted file mode 100644
index ae0b7e9b..00000000
--- a/src/main/resources/static/images/cards/brickyard.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/buildersguild.png b/src/main/resources/static/images/cards/buildersguild.png
deleted file mode 100644
index f5402611..00000000
--- a/src/main/resources/static/images/cards/buildersguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/caravansery.png b/src/main/resources/static/images/cards/caravansery.png
deleted file mode 100644
index 997bb102..00000000
--- a/src/main/resources/static/images/cards/caravansery.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/chamberofcommerce.png b/src/main/resources/static/images/cards/chamberofcommerce.png
deleted file mode 100644
index 44b5af28..00000000
--- a/src/main/resources/static/images/cards/chamberofcommerce.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/circus.png b/src/main/resources/static/images/cards/circus.png
deleted file mode 100644
index b1ec4d8b..00000000
--- a/src/main/resources/static/images/cards/circus.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/claypit.png b/src/main/resources/static/images/cards/claypit.png
deleted file mode 100644
index 5442248e..00000000
--- a/src/main/resources/static/images/cards/claypit.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/claypool.png b/src/main/resources/static/images/cards/claypool.png
deleted file mode 100644
index 873cad47..00000000
--- a/src/main/resources/static/images/cards/claypool.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/courthouse.png b/src/main/resources/static/images/cards/courthouse.png
deleted file mode 100644
index 394901f2..00000000
--- a/src/main/resources/static/images/cards/courthouse.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/craftsmensguild.png b/src/main/resources/static/images/cards/craftsmensguild.png
deleted file mode 100644
index 09bff60e..00000000
--- a/src/main/resources/static/images/cards/craftsmensguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/dispensary.png b/src/main/resources/static/images/cards/dispensary.png
deleted file mode 100644
index 4917166b..00000000
--- a/src/main/resources/static/images/cards/dispensary.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/easttradingpost.png b/src/main/resources/static/images/cards/easttradingpost.png
deleted file mode 100644
index 0c67cc78..00000000
--- a/src/main/resources/static/images/cards/easttradingpost.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/excavation.png b/src/main/resources/static/images/cards/excavation.png
deleted file mode 100644
index 0fe1b01f..00000000
--- a/src/main/resources/static/images/cards/excavation.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/forestcave.png b/src/main/resources/static/images/cards/forestcave.png
deleted file mode 100644
index 262fffc6..00000000
--- a/src/main/resources/static/images/cards/forestcave.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/fortifications.png b/src/main/resources/static/images/cards/fortifications.png
deleted file mode 100644
index 3e113473..00000000
--- a/src/main/resources/static/images/cards/fortifications.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/forum.png b/src/main/resources/static/images/cards/forum.png
deleted file mode 100644
index d6262158..00000000
--- a/src/main/resources/static/images/cards/forum.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/foundry.png b/src/main/resources/static/images/cards/foundry.png
deleted file mode 100644
index da95a48e..00000000
--- a/src/main/resources/static/images/cards/foundry.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/gardens.png b/src/main/resources/static/images/cards/gardens.png
deleted file mode 100644
index 9a49a0ad..00000000
--- a/src/main/resources/static/images/cards/gardens.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/glassworks.png b/src/main/resources/static/images/cards/glassworks.png
deleted file mode 100644
index 285d7d54..00000000
--- a/src/main/resources/static/images/cards/glassworks.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/guardtower.png b/src/main/resources/static/images/cards/guardtower.png
deleted file mode 100644
index 524b06f3..00000000
--- a/src/main/resources/static/images/cards/guardtower.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/haven.png b/src/main/resources/static/images/cards/haven.png
deleted file mode 100644
index e0b345b2..00000000
--- a/src/main/resources/static/images/cards/haven.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/laboratory.png b/src/main/resources/static/images/cards/laboratory.png
deleted file mode 100644
index 4c29e81f..00000000
--- a/src/main/resources/static/images/cards/laboratory.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/library.png b/src/main/resources/static/images/cards/library.png
deleted file mode 100644
index 7495a2ca..00000000
--- a/src/main/resources/static/images/cards/library.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/lighthouse.png b/src/main/resources/static/images/cards/lighthouse.png
deleted file mode 100644
index 2124811b..00000000
--- a/src/main/resources/static/images/cards/lighthouse.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/lodge.png b/src/main/resources/static/images/cards/lodge.png
deleted file mode 100644
index 22758688..00000000
--- a/src/main/resources/static/images/cards/lodge.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/loom.png b/src/main/resources/static/images/cards/loom.png
deleted file mode 100644
index 70bdf375..00000000
--- a/src/main/resources/static/images/cards/loom.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/lumberyard.png b/src/main/resources/static/images/cards/lumberyard.png
deleted file mode 100644
index 8558af1a..00000000
--- a/src/main/resources/static/images/cards/lumberyard.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/magistratesguild.png b/src/main/resources/static/images/cards/magistratesguild.png
deleted file mode 100644
index d7deabb3..00000000
--- a/src/main/resources/static/images/cards/magistratesguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/marketplace.png b/src/main/resources/static/images/cards/marketplace.png
deleted file mode 100644
index cd3676d4..00000000
--- a/src/main/resources/static/images/cards/marketplace.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/mine.png b/src/main/resources/static/images/cards/mine.png
deleted file mode 100644
index 4062775c..00000000
--- a/src/main/resources/static/images/cards/mine.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/observatory.png b/src/main/resources/static/images/cards/observatory.png
deleted file mode 100644
index 1da3d7b4..00000000
--- a/src/main/resources/static/images/cards/observatory.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/orevein.png b/src/main/resources/static/images/cards/orevein.png
deleted file mode 100644
index fabea674..00000000
--- a/src/main/resources/static/images/cards/orevein.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/palace.png b/src/main/resources/static/images/cards/palace.png
deleted file mode 100644
index 1a24890e..00000000
--- a/src/main/resources/static/images/cards/palace.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/pantheon.png b/src/main/resources/static/images/cards/pantheon.png
deleted file mode 100644
index 264bae02..00000000
--- a/src/main/resources/static/images/cards/pantheon.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/pawnshop.png b/src/main/resources/static/images/cards/pawnshop.png
deleted file mode 100644
index 30bb3807..00000000
--- a/src/main/resources/static/images/cards/pawnshop.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/philosophersguild.png b/src/main/resources/static/images/cards/philosophersguild.png
deleted file mode 100644
index f72590f6..00000000
--- a/src/main/resources/static/images/cards/philosophersguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/press.png b/src/main/resources/static/images/cards/press.png
deleted file mode 100644
index c932df06..00000000
--- a/src/main/resources/static/images/cards/press.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/quarry.png b/src/main/resources/static/images/cards/quarry.png
deleted file mode 100644
index 8cdbdb22..00000000
--- a/src/main/resources/static/images/cards/quarry.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/sawmill.png b/src/main/resources/static/images/cards/sawmill.png
deleted file mode 100644
index 5abff473..00000000
--- a/src/main/resources/static/images/cards/sawmill.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/school.png b/src/main/resources/static/images/cards/school.png
deleted file mode 100644
index ab2218d0..00000000
--- a/src/main/resources/static/images/cards/school.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/scientistsguild.png b/src/main/resources/static/images/cards/scientistsguild.png
deleted file mode 100644
index 7ee639e3..00000000
--- a/src/main/resources/static/images/cards/scientistsguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/scriptorium.png b/src/main/resources/static/images/cards/scriptorium.png
deleted file mode 100644
index 36dca27a..00000000
--- a/src/main/resources/static/images/cards/scriptorium.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/senate.png b/src/main/resources/static/images/cards/senate.png
deleted file mode 100644
index ee878ea6..00000000
--- a/src/main/resources/static/images/cards/senate.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/shipownersguild.png b/src/main/resources/static/images/cards/shipownersguild.png
deleted file mode 100644
index 3eecd2da..00000000
--- a/src/main/resources/static/images/cards/shipownersguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/siegeworkshop.png b/src/main/resources/static/images/cards/siegeworkshop.png
deleted file mode 100644
index bacf8309..00000000
--- a/src/main/resources/static/images/cards/siegeworkshop.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/spiesguild.png b/src/main/resources/static/images/cards/spiesguild.png
deleted file mode 100644
index 85e28d9e..00000000
--- a/src/main/resources/static/images/cards/spiesguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/stables.png b/src/main/resources/static/images/cards/stables.png
deleted file mode 100644
index 48c963f0..00000000
--- a/src/main/resources/static/images/cards/stables.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/statue.png b/src/main/resources/static/images/cards/statue.png
deleted file mode 100644
index 55aaa5cb..00000000
--- a/src/main/resources/static/images/cards/statue.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/stockade.png b/src/main/resources/static/images/cards/stockade.png
deleted file mode 100644
index 37741429..00000000
--- a/src/main/resources/static/images/cards/stockade.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/stonepit.png b/src/main/resources/static/images/cards/stonepit.png
deleted file mode 100644
index 724900c7..00000000
--- a/src/main/resources/static/images/cards/stonepit.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/strategistsguild.png b/src/main/resources/static/images/cards/strategistsguild.png
deleted file mode 100644
index ae186a4b..00000000
--- a/src/main/resources/static/images/cards/strategistsguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/study.png b/src/main/resources/static/images/cards/study.png
deleted file mode 100644
index d8b9ebf9..00000000
--- a/src/main/resources/static/images/cards/study.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/tavern.png b/src/main/resources/static/images/cards/tavern.png
deleted file mode 100644
index 418b0fb2..00000000
--- a/src/main/resources/static/images/cards/tavern.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/temple.png b/src/main/resources/static/images/cards/temple.png
deleted file mode 100644
index 9a8d89dc..00000000
--- a/src/main/resources/static/images/cards/temple.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/theater.png b/src/main/resources/static/images/cards/theater.png
deleted file mode 100644
index 0d5b2b01..00000000
--- a/src/main/resources/static/images/cards/theater.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/timberyard.png b/src/main/resources/static/images/cards/timberyard.png
deleted file mode 100644
index 0f20547f..00000000
--- a/src/main/resources/static/images/cards/timberyard.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/townhall.png b/src/main/resources/static/images/cards/townhall.png
deleted file mode 100644
index d0638739..00000000
--- a/src/main/resources/static/images/cards/townhall.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/tradersguild.png b/src/main/resources/static/images/cards/tradersguild.png
deleted file mode 100644
index 15777e77..00000000
--- a/src/main/resources/static/images/cards/tradersguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/trainingground.png b/src/main/resources/static/images/cards/trainingground.png
deleted file mode 100644
index d59ef4f8..00000000
--- a/src/main/resources/static/images/cards/trainingground.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/treefarm.png b/src/main/resources/static/images/cards/treefarm.png
deleted file mode 100644
index 18cf228f..00000000
--- a/src/main/resources/static/images/cards/treefarm.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/university.png b/src/main/resources/static/images/cards/university.png
deleted file mode 100644
index c9ca8a80..00000000
--- a/src/main/resources/static/images/cards/university.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/vineyard.png b/src/main/resources/static/images/cards/vineyard.png
deleted file mode 100644
index 58fa8ee1..00000000
--- a/src/main/resources/static/images/cards/vineyard.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/walls.png b/src/main/resources/static/images/cards/walls.png
deleted file mode 100644
index 3823c62f..00000000
--- a/src/main/resources/static/images/cards/walls.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/westtradingpost.png b/src/main/resources/static/images/cards/westtradingpost.png
deleted file mode 100644
index b536269f..00000000
--- a/src/main/resources/static/images/cards/westtradingpost.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/workersguild.png b/src/main/resources/static/images/cards/workersguild.png
deleted file mode 100644
index de4f452f..00000000
--- a/src/main/resources/static/images/cards/workersguild.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/cards/workshop.png b/src/main/resources/static/images/cards/workshop.png
deleted file mode 100644
index 8f585d61..00000000
--- a/src/main/resources/static/images/cards/workshop.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/buy.png b/src/main/resources/static/images/tokens/buy.png
deleted file mode 100644
index 07af65a3..00000000
--- a/src/main/resources/static/images/tokens/buy.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/card.png b/src/main/resources/static/images/tokens/card.png
deleted file mode 100644
index fcdbc068..00000000
--- a/src/main/resources/static/images/tokens/card.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/check.png b/src/main/resources/static/images/tokens/check.png
deleted file mode 100644
index 98db5be0..00000000
--- a/src/main/resources/static/images/tokens/check.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/clay.png b/src/main/resources/static/images/tokens/clay.png
deleted file mode 100644
index 72fc0b0e..00000000
--- a/src/main/resources/static/images/tokens/clay.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/coin.png b/src/main/resources/static/images/tokens/coin.png
deleted file mode 100644
index f4813042..00000000
--- a/src/main/resources/static/images/tokens/coin.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/coin1.png b/src/main/resources/static/images/tokens/coin1.png
deleted file mode 100644
index dd57e5f0..00000000
--- a/src/main/resources/static/images/tokens/coin1.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/coin3.png b/src/main/resources/static/images/tokens/coin3.png
deleted file mode 100644
index 546d41b6..00000000
--- a/src/main/resources/static/images/tokens/coin3.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/free.png b/src/main/resources/static/images/tokens/free.png
deleted file mode 100644
index 1c8d0782..00000000
--- a/src/main/resources/static/images/tokens/free.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/glass.png b/src/main/resources/static/images/tokens/glass.png
deleted file mode 100644
index 61fd2be5..00000000
--- a/src/main/resources/static/images/tokens/glass.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/linen.png b/src/main/resources/static/images/tokens/linen.png
deleted file mode 100644
index 294adcb2..00000000
--- a/src/main/resources/static/images/tokens/linen.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/no.png b/src/main/resources/static/images/tokens/no.png
deleted file mode 100644
index 78d09fea..00000000
--- a/src/main/resources/static/images/tokens/no.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/ore.png b/src/main/resources/static/images/tokens/ore.png
deleted file mode 100644
index c2149daa..00000000
--- a/src/main/resources/static/images/tokens/ore.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/paper.png b/src/main/resources/static/images/tokens/paper.png
deleted file mode 100644
index 91a59221..00000000
--- a/src/main/resources/static/images/tokens/paper.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/pyramid-stage0.png b/src/main/resources/static/images/tokens/pyramid-stage0.png
deleted file mode 100644
index b6a3977f..00000000
--- a/src/main/resources/static/images/tokens/pyramid-stage0.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/pyramid-stage1.png b/src/main/resources/static/images/tokens/pyramid-stage1.png
deleted file mode 100644
index ead4a34e..00000000
--- a/src/main/resources/static/images/tokens/pyramid-stage1.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/pyramid-stage2.png b/src/main/resources/static/images/tokens/pyramid-stage2.png
deleted file mode 100644
index 7239a3a4..00000000
--- a/src/main/resources/static/images/tokens/pyramid-stage2.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/pyramid-stage3.png b/src/main/resources/static/images/tokens/pyramid-stage3.png
deleted file mode 100644
index cab9912b..00000000
--- a/src/main/resources/static/images/tokens/pyramid-stage3.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/pyramid.png b/src/main/resources/static/images/tokens/pyramid.png
deleted file mode 100644
index 074247da..00000000
--- a/src/main/resources/static/images/tokens/pyramid.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/stone.png b/src/main/resources/static/images/tokens/stone.png
deleted file mode 100644
index 674c40db..00000000
--- a/src/main/resources/static/images/tokens/stone.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/trash.png b/src/main/resources/static/images/tokens/trash.png
deleted file mode 100644
index 086df817..00000000
--- a/src/main/resources/static/images/tokens/trash.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/victory1.png b/src/main/resources/static/images/tokens/victory1.png
deleted file mode 100644
index 6b9aff29..00000000
--- a/src/main/resources/static/images/tokens/victory1.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/victory3.png b/src/main/resources/static/images/tokens/victory3.png
deleted file mode 100644
index 474cb30c..00000000
--- a/src/main/resources/static/images/tokens/victory3.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/victory5.png b/src/main/resources/static/images/tokens/victory5.png
deleted file mode 100644
index ad042119..00000000
--- a/src/main/resources/static/images/tokens/victory5.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/victoryminus1.png b/src/main/resources/static/images/tokens/victoryminus1.png
deleted file mode 100644
index 00a615c7..00000000
--- a/src/main/resources/static/images/tokens/victoryminus1.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/tokens/wood.png b/src/main/resources/static/images/tokens/wood.png
deleted file mode 100644
index 09a4ede8..00000000
--- a/src/main/resources/static/images/tokens/wood.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/alexandriaA.png b/src/main/resources/static/images/wonders/alexandriaA.png
deleted file mode 100644
index 416d534e..00000000
--- a/src/main/resources/static/images/wonders/alexandriaA.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/alexandriaB.png b/src/main/resources/static/images/wonders/alexandriaB.png
deleted file mode 100644
index 205a5256..00000000
--- a/src/main/resources/static/images/wonders/alexandriaB.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/babylonA.png b/src/main/resources/static/images/wonders/babylonA.png
deleted file mode 100644
index f8e3725e..00000000
--- a/src/main/resources/static/images/wonders/babylonA.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/babylonB.png b/src/main/resources/static/images/wonders/babylonB.png
deleted file mode 100644
index 53f6f045..00000000
--- a/src/main/resources/static/images/wonders/babylonB.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/ephesosA.png b/src/main/resources/static/images/wonders/ephesosA.png
deleted file mode 100644
index 285c8edf..00000000
--- a/src/main/resources/static/images/wonders/ephesosA.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/ephesosB.png b/src/main/resources/static/images/wonders/ephesosB.png
deleted file mode 100644
index 1e0e2541..00000000
--- a/src/main/resources/static/images/wonders/ephesosB.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/agrigentoA.jpg b/src/main/resources/static/images/wonders/extra/agrigentoA.jpg
deleted file mode 100644
index 76ba8195..00000000
--- a/src/main/resources/static/images/wonders/extra/agrigentoA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/angkorwatA.jpg b/src/main/resources/static/images/wonders/extra/angkorwatA.jpg
deleted file mode 100644
index 32f52514..00000000
--- a/src/main/resources/static/images/wonders/extra/angkorwatA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/angkorwatB.jpg b/src/main/resources/static/images/wonders/extra/angkorwatB.jpg
deleted file mode 100644
index c3f4304e..00000000
--- a/src/main/resources/static/images/wonders/extra/angkorwatB.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/avalonA.jpg b/src/main/resources/static/images/wonders/extra/avalonA.jpg
deleted file mode 100644
index 7f7f0678..00000000
--- a/src/main/resources/static/images/wonders/extra/avalonA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/ctesiphonB.jpg b/src/main/resources/static/images/wonders/extra/ctesiphonB.jpg
deleted file mode 100644
index c00b40ac..00000000
--- a/src/main/resources/static/images/wonders/extra/ctesiphonB.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/iramA.jpg b/src/main/resources/static/images/wonders/extra/iramA.jpg
deleted file mode 100644
index d2c24e95..00000000
--- a/src/main/resources/static/images/wonders/extra/iramA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/persepolisA.jpg b/src/main/resources/static/images/wonders/extra/persepolisA.jpg
deleted file mode 100644
index 2caa4f89..00000000
--- a/src/main/resources/static/images/wonders/extra/persepolisA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/romaA.jpg b/src/main/resources/static/images/wonders/extra/romaA.jpg
deleted file mode 100644
index c54bc820..00000000
--- a/src/main/resources/static/images/wonders/extra/romaA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/sangri-laA.jpg b/src/main/resources/static/images/wonders/extra/sangri-laA.jpg
deleted file mode 100644
index 1c5dad97..00000000
--- a/src/main/resources/static/images/wonders/extra/sangri-laA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/spahanA.jpg b/src/main/resources/static/images/wonders/extra/spahanA.jpg
deleted file mode 100644
index ab2cfc84..00000000
--- a/src/main/resources/static/images/wonders/extra/spahanA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/the-great-wallA.jpg b/src/main/resources/static/images/wonders/extra/the-great-wallA.jpg
deleted file mode 100644
index 4aacd39b..00000000
--- a/src/main/resources/static/images/wonders/extra/the-great-wallA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/veniseA.jpg b/src/main/resources/static/images/wonders/extra/veniseA.jpg
deleted file mode 100644
index 55ec00b5..00000000
--- a/src/main/resources/static/images/wonders/extra/veniseA.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/extra/veniseB.jpg b/src/main/resources/static/images/wonders/extra/veniseB.jpg
deleted file mode 100644
index e18f3a12..00000000
--- a/src/main/resources/static/images/wonders/extra/veniseB.jpg
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/gizahA.png b/src/main/resources/static/images/wonders/gizahA.png
deleted file mode 100644
index 5e755594..00000000
--- a/src/main/resources/static/images/wonders/gizahA.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/gizahB.png b/src/main/resources/static/images/wonders/gizahB.png
deleted file mode 100644
index 60b90fed..00000000
--- a/src/main/resources/static/images/wonders/gizahB.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/halikarnassusA.png b/src/main/resources/static/images/wonders/halikarnassusA.png
deleted file mode 100644
index 5e6acc36..00000000
--- a/src/main/resources/static/images/wonders/halikarnassusA.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/halikarnassusB.png b/src/main/resources/static/images/wonders/halikarnassusB.png
deleted file mode 100644
index 42d67786..00000000
--- a/src/main/resources/static/images/wonders/halikarnassusB.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/olympiaA.png b/src/main/resources/static/images/wonders/olympiaA.png
deleted file mode 100644
index 315c090b..00000000
--- a/src/main/resources/static/images/wonders/olympiaA.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/olympiaB.png b/src/main/resources/static/images/wonders/olympiaB.png
deleted file mode 100644
index a6c81af6..00000000
--- a/src/main/resources/static/images/wonders/olympiaB.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/rhodosA.png b/src/main/resources/static/images/wonders/rhodosA.png
deleted file mode 100644
index 13ea69e1..00000000
--- a/src/main/resources/static/images/wonders/rhodosA.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/images/wonders/rhodosB.png b/src/main/resources/static/images/wonders/rhodosB.png
deleted file mode 100644
index 2cfa4e18..00000000
--- a/src/main/resources/static/images/wonders/rhodosB.png
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html
deleted file mode 100644
index d5ec178d..00000000
--- a/src/main/resources/static/index.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Seven Wonders</title>
- <link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet">
- <link href="/main.css" rel="stylesheet">
- <script src="/webjars/jquery/jquery.min.js"></script>
- <script src="/webjars/sockjs-client/sockjs.min.js"></script>
- <script src="/webjars/stomp-websocket/stomp.min.js"></script>
- <script src="app.js"></script>
-</head>
-<body>
-<noscript>
- <h2 style="color: #ff0000">Seems your browser doesn't support Javascript! Websocket relies on Javascript being
- enabled. Please enable Javascript and reload this page!</h2>
-</noscript>
-
-<h1>Seven Wonders</h1>
-
-<p>This is a stub index page for the project, for the sake of vertical completeness. We will soon get to work on it!</p>
-
-<a href="test.html">Go to WS test page</a>
-
-
-<h2>Connection</h2>
-
-<form class="form-inline">
- <div class="form-group">
- <label for="connect">WebSocket connection:</label>
- <button id="connect" class="btn btn-default" type="submit">Connect</button>
- <button id="disconnect" class="btn btn-default" type="submit" disabled="disabled">Disconnect</button>
- </div>
-</form>
-
-<h2>Games</h2>
-
-<form class="form-inline">
- <div class="form-group">
- <label for="player-name-field">Player name</label>
- <input id="player-name-field">
- </div>
-</form>
-
-<table id="game-list" class="table table-striped">
- <thead>
- <tr>
- <th>Id</th>
- <th></th>
- </tr>
- </thead>
- <tbody id="game-list-content">
- </tbody>
-</table>
-
-<form class="form-inline">
- <div class="form-group">
- <label for="game-name-field">Game name</label>
- <input id="game-name-field">
- <button id="create-game" class="btn btn-default" type="submit">Create</button>
- </div>
-</form>
-
-</body>
-</html> \ No newline at end of file
diff --git a/src/main/resources/static/test-ws.js b/src/main/resources/static/test-ws.js
deleted file mode 100644
index 1c64349e..00000000
--- a/src/main/resources/static/test-ws.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var stompClient = null;
-
-function connect() {
- console.log('Connecting...');
- var socket = new SockJS('/seven-wonders-websocket');
- stompClient = Stomp.over(socket);
- stompClient.connect({}, function (frame) {
- console.log('Connected: ' + frame);
- subscribeTo('/user/queue/errors');
- });
-}
-
-function send(endpoint, payload) {
- stompClient.send(endpoint, {}, payload);
-}
-
-function subscribeTo(endpoint) {
- $("#test-feeds").prepend('<tr><td>' + endpoint + '</td><td>Subscribed</td></tr>');
- stompClient.subscribe(endpoint, function (data) {
- $("#test-feeds").prepend('<tr><td>' + endpoint + '</td><td>Received: <pre>' + data.body + '</pre></td></tr>');
- });
-}
-
-$(function () {
- $("form").on('submit', function (e) {
- e.preventDefault();
- });
- $("#send-btn").click(function () {
- var endpoint = $("#path-field").val();
- var payload = $("#payload-field").val();
- send(endpoint, payload);
- });
- $("#subscribe-btn").click(function () {
- var endpoint = $("#subscribe-path-field").val();
- subscribeTo(endpoint);
- });
-});
-
-// auto-connect
-connect(); \ No newline at end of file
diff --git a/src/main/resources/static/test.html b/src/main/resources/static/test.html
deleted file mode 100644
index e19f9eb3..00000000
--- a/src/main/resources/static/test.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Seven Wonders</title>
- <link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet">
- <link href="/main.css" rel="stylesheet">
- <script src="/webjars/jquery/jquery.min.js"></script>
- <script src="/webjars/sockjs-client/sockjs.min.js"></script>
- <script src="/webjars/stomp-websocket/stomp.min.js"></script>
- <script src="test-ws.js"></script>
-</head>
-<body>
-<noscript>
- <h2 style="color: #ff0000">Seems your browser doesn't support Javascript! Websocket relies on Javascript being
- enabled. Please enable Javascript and reload this page!</h2>
-</noscript>
-
-<h1>Seven Wonders Test Page</h1>
-
-<h2>WS messages tests</h2>
-
-<form class="form-inline">
- <div class="form-group">
- <label for="subscribe-path-field">Path:</label>
- <input id="subscribe-path-field" placeholder="path">
- <button id="subscribe-btn" class="btn btn-default" type="submit">Subscribe</button>
- </div>
-</form>
-
-<form class="form-inline">
- <div class="form-group">
- <label for="path-field">Path:</label>
- <input id="path-field" placeholder="path">
- <label for="payload-field">Payload:</label>
- <input id="payload-field" placeholder="JSON payload">
- <button id="send-btn" class="btn btn-default" type="submit">Send</button>
- </div>
-</form>
-
-<h2>Subscribed feeds</h2>
-
-<table class="table table-striped">
- <thead>
- <tr>
- <th>Endpoint</th>
- <th>Data received</th>
- </tr>
- </thead>
- <tbody id="test-feeds">
- </tbody>
-</table>
-
-
-</body>
-</html> \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/LobbyTest.java b/src/test/java/org/luxons/sevenwonders/game/LobbyTest.java
deleted file mode 100644
index 4a12592e..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/LobbyTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-import java.util.Arrays;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.Lobby.GameAlreadyStartedException;
-import org.luxons.sevenwonders.game.Lobby.PlayerNameAlreadyUsedException;
-import org.luxons.sevenwonders.game.Lobby.PlayerOverflowException;
-import org.luxons.sevenwonders.game.Lobby.PlayerUnderflowException;
-import org.luxons.sevenwonders.game.Lobby.UnknownPlayerException;
-import org.luxons.sevenwonders.game.data.GameDefinition;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
-
-import static org.junit.Assert.*;
-import static org.junit.Assume.*;
-
-@RunWith(Theories.class)
-public class LobbyTest {
-
- @DataPoints
- public static int[] nbPlayers() {
- return new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
- }
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private static GameDefinition gameDefinition;
-
- private Player gameOwner;
-
- private Lobby lobby;
-
- @BeforeClass
- public static void loadDefinition() {
- gameDefinition = new GameDefinitionLoader().getGameDefinition();
- }
-
- @Before
- public void setUp() {
- gameOwner = new Player("gameowner", "Game owner");
- lobby = new Lobby(0, "Test Game", gameOwner, gameDefinition);
- }
-
- @Test
- public void testId() {
- Lobby l = new Lobby(5, "Test Game", gameOwner, gameDefinition);
- assertEquals(5, l.getId());
- }
-
- @Test
- public void testName() {
- Lobby l = new Lobby(5, "Test Game", gameOwner, gameDefinition);
- assertEquals("Test Game", l.getName());
- }
-
- @Test
- public void isOwner_falseWhenNull() {
- assertFalse(lobby.isOwner(null));
- }
-
- @Test
- public void isOwner_falseWhenEmptyString() {
- assertFalse(lobby.isOwner(""));
- }
-
- @Test
- public void isOwner_falseWhenGarbageString() {
- assertFalse(lobby.isOwner("this is garbage"));
- }
-
- @Test
- public void isOwner_trueWhenOwnerUsername() {
- assertTrue(lobby.isOwner(gameOwner.getUsername()));
- }
-
- @Test
- public void isOwner_falseWhenOtherPlayerName() {
- Player player = new Player("testuser", "Test User");
- lobby.addPlayer(player);
- assertFalse(lobby.isOwner(player.getUsername()));
- }
-
- @Test
- public void addPlayer_success() {
- Player player = new Player("testuser", "Test User");
- lobby.addPlayer(player);
- assertTrue(lobby.containsUser("testuser"));
- }
-
- @Test(expected = PlayerNameAlreadyUsedException.class)
- public void addPlayer_failsOnSameName() {
- Player player = new Player("testuser", "Test User");
- Player player2 = new Player("testuser2", "Test User");
- lobby.addPlayer(player);
- lobby.addPlayer(player2);
- }
-
- @Test(expected = PlayerOverflowException.class)
- public void addPlayer_playerOverflowWhenTooMany() {
- // the owner + the max number gives an overflow
- addPlayers(gameDefinition.getMaxPlayers());
- }
-
- @Test(expected = GameAlreadyStartedException.class)
- public void addPlayer_failWhenGameStarted() {
- // total with owner is the minimum
- addPlayers(gameDefinition.getMinPlayers() - 1);
- lobby.startGame();
- lobby.addPlayer(new Player("soonerNextTime", "The Late Guy"));
- }
-
- private void addPlayers(int nbPlayers) {
- for (int i = 0; i < nbPlayers; i++) {
- Player player = new Player("testuser" + i, "Test User " + i);
- lobby.addPlayer(player);
- }
- }
-
- @Test
- public void reorderPlayers_failsOnSameName() {
- Player player1 = new Player("testuser1", "Test User 1");
- Player player2 = new Player("testuser2", "Test User 2");
- Player player3 = new Player("testuser3", "Test User 3");
- lobby.addPlayer(player1);
- lobby.addPlayer(player2);
- lobby.addPlayer(player3);
- lobby.reorderPlayers(Arrays.asList("testuser3", "testuser1", "testuser2"));
- assertEquals("testuser3", lobby.getPlayers().get(0).getUsername());
- assertEquals("testuser1", lobby.getPlayers().get(1).getUsername());
- assertEquals("testuser2", lobby.getPlayers().get(2).getUsername());
- }
-
- @Test(expected = UnknownPlayerException.class)
- public void reorderPlayers_failsOnUnknownPlayer() {
- Player player1 = new Player("testuser1", "Test User 1");
- Player player2 = new Player("testuser2", "Test User 2");
- Player player3 = new Player("testuser3", "Test User 3");
- lobby.addPlayer(player1);
- lobby.addPlayer(player2);
- lobby.addPlayer(player3);
- lobby.reorderPlayers(Arrays.asList("testuser4", "testuser1", "testuser2"));
- }
-
- @Theory
- public void startGame_failsBelowMinPlayers(int nbPlayers) {
- assumeTrue(nbPlayers < gameDefinition.getMinPlayers());
- thrown.expect(PlayerUnderflowException.class);
- // there is already the owner
- addPlayers(nbPlayers - 1);
- lobby.startGame();
- }
-
- @Theory
- public void startGame_succeedsAboveMinPlayers(int nbPlayers) {
- assumeTrue(nbPlayers >= gameDefinition.getMinPlayers());
- assumeTrue(nbPlayers < gameDefinition.getMaxPlayers());
- // there is already the owner
- addPlayers(nbPlayers - 1);
- lobby.startGame();
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java b/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java
deleted file mode 100644
index 9ed0af02..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assume.assumeTrue;
-
-@RunWith(Theories.class)
-public class TableTest {
-
- @DataPoints
- public static int[] nbPlayers() {
- return new int[] {2, 3, 4, 5, 6, 7, 8};
- }
-
- @Theory
- public void getBoard_wrapLeft(int nbPlayers) {
- assumeTrue(nbPlayers >= 2);
- Table table = TestUtils.createTable(nbPlayers);
- int last = nbPlayers - 1;
- assertEquals(table.getBoard(last), table.getBoard(0, RelativeBoardPosition.LEFT));
- assertEquals(table.getBoard(0), table.getBoard(0, RelativeBoardPosition.SELF));
- assertEquals(table.getBoard(1), table.getBoard(0, RelativeBoardPosition.RIGHT));
- }
-
- @Theory
- public void getBoard_wrapRight(int nbPlayers) {
- assumeTrue(nbPlayers >= 2);
- Table table = TestUtils.createTable(nbPlayers);
- int last = nbPlayers - 1;
- assertEquals(table.getBoard(last - 1), table.getBoard(last, RelativeBoardPosition.LEFT));
- assertEquals(table.getBoard(last), table.getBoard(last, RelativeBoardPosition.SELF));
- assertEquals(table.getBoard(0), table.getBoard(last, RelativeBoardPosition.RIGHT));
- }
-
- @Theory
- public void getBoard_noWrap(int nbPlayers) {
- assumeTrue(nbPlayers >= 3);
- Table table = TestUtils.createTable(nbPlayers);
- assertEquals(table.getBoard(0), table.getBoard(1, RelativeBoardPosition.LEFT));
- assertEquals(table.getBoard(1), table.getBoard(1, RelativeBoardPosition.SELF));
- assertEquals(table.getBoard(2), table.getBoard(1, RelativeBoardPosition.RIGHT));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java b/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java
deleted file mode 100644
index f9117146..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.junit.Rule;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.FromDataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.boards.Board.InsufficientFundsException;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.*;
-
-@RunWith(Theories.class)
-public class BoardTest {
-
- @DataPoints("gold")
- public static int[] goldAmounts() {
- return new int[]{-3, -1, 0, 1, 2, 3};
- }
-
- @DataPoints("nbCards")
- public static int[] nbCards() {
- return new int[] {0, 1, 2};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @DataPoints
- public static Color[] colors() {
- return Color.values();
- }
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @Theory
- public void initialGold_respectsSettings(@FromDataPoints("gold") int goldAmountInSettings) {
- CustomizableSettings customSettings = new CustomizableSettings();
- customSettings.setInitialGold(goldAmountInSettings);
- Settings settings = new Settings(5, customSettings);
- Board board = new Board(TestUtils.createWonder(), null, settings);
- assertEquals(goldAmountInSettings, board.getGold());
- }
-
- @Theory
- public void initialProduction_containsInitialResource(ResourceType type) {
- Board board = new Board(TestUtils.createWonder(type), null, new Settings(5));
- Resources resources = TestUtils.createResources(type);
- assertTrue(board.getProduction().contains(resources));
- }
-
- @Theory
- public void removeGold_successfulWhenNotTooMuch(@FromDataPoints("gold") int initialGold,
- @FromDataPoints("gold") int goldRemoved) {
- assumeTrue(goldRemoved >= 0);
- assumeTrue(initialGold >= goldRemoved);
- Board board = new Board(TestUtils.createWonder(), null, new Settings(5));
- board.setGold(initialGold);
- board.removeGold(goldRemoved);
- assertEquals(initialGold - goldRemoved, board.getGold());
- }
-
- @Theory
- public void removeGold_failsWhenTooMuch(@FromDataPoints("gold") int initialGold,
- @FromDataPoints("gold") int goldRemoved) {
- assumeTrue(goldRemoved >= 0);
- assumeTrue(initialGold < goldRemoved);
- thrown.expect(InsufficientFundsException.class);
- Board board = new Board(TestUtils.createWonder(), null, new Settings(5));
- board.setGold(initialGold);
- board.removeGold(goldRemoved);
- }
-
- @Theory
- public void getNbCardsOfColor_properCount_singleColor(ResourceType type, @FromDataPoints("nbCards") int nbCards,
- @FromDataPoints("nbCards") int nbOtherCards, Color color) {
- Board board = new Board(TestUtils.createWonder(type), null, new Settings(5));
- TestUtils.addCards(board, nbCards, nbOtherCards, color);
- assertEquals(nbCards, board.getNbCardsOfColor(Collections.singletonList(color)));
- }
-
- @Theory
- public void getNbCardsOfColor_properCount_multiColors(ResourceType type, @FromDataPoints("nbCards") int nbCards1,
- @FromDataPoints("nbCards") int nbCards2, @FromDataPoints("nbCards") int nbOtherCards, Color color1,
- Color color2) {
- Board board = new Board(TestUtils.createWonder(type), null, new Settings(5));
- TestUtils.addCards(board, nbCards1, color1);
- TestUtils.addCards(board, nbCards2, color2);
- TestUtils.addCards(board, nbOtherCards, TestUtils.getDifferentColorFrom(color1, color2));
- assertEquals(nbCards1 + nbCards2, board.getNbCardsOfColor(Arrays.asList(color1, color2)));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java b/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java
deleted file mode 100644
index 7ef253db..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.junit.Rule;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.FromDataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.boards.Military.UnknownAgeException;
-
-import static org.junit.Assert.*;
-
-@RunWith(Theories.class)
-public class MilitaryTest {
-
- @DataPoints("points")
- public static int[] points() {
- return new int[] {0, 1, 3, 5};
- }
-
- @DataPoints("ages")
- public static int[] ages() {
- return new int[] {1, 2, 3};
- }
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private static Military createMilitary(int age, int nbPointsPerVictory, int nbPointsPerDefeat) {
- Map<Integer, Integer> wonPointsPerAge = new HashMap<>();
- wonPointsPerAge.put(age, nbPointsPerVictory);
-
- CustomizableSettings customSettings = new CustomizableSettings();
- customSettings.setWonPointsPerVictoryPerAge(wonPointsPerAge);
- customSettings.setLostPointsPerDefeat(nbPointsPerDefeat);
-
- Settings settings = new Settings(5, customSettings);
- return new Military(settings);
- }
-
- @Theory
- public void victory_addsCorrectPoints(@FromDataPoints("ages") int age, @FromDataPoints("points") int
- nbPointsPerVictory) {
- Military military = createMilitary(age, nbPointsPerVictory, 0);
- int initialPoints = military.getTotalPoints();
-
- military.victory(age);
- assertEquals(initialPoints + nbPointsPerVictory, military.getTotalPoints());
- }
-
- @Theory
- public void victory_failsIfUnknownAge(@FromDataPoints("points") int nbPointsPerVictory) {
- Military military = createMilitary(0, nbPointsPerVictory, 0);
- thrown.expect(UnknownAgeException.class);
- military.victory(1);
- }
-
- @Theory
- public void defeat_removesCorrectPoints(@FromDataPoints("points") int nbPointsLostPerDefeat) {
- Military military = createMilitary(0, 0, nbPointsLostPerDefeat);
- int initialPoints = military.getTotalPoints();
-
- military.defeat();
- assertEquals(initialPoints - nbPointsLostPerDefeat, military.getTotalPoints());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java b/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java
deleted file mode 100644
index e95a1e37..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-import static org.junit.Assume.*;
-
-@RunWith(Theories.class)
-public class RelativeBoardPositionTest {
-
- @DataPoints
- public static int[] nbPlayers() {
- return new int[] {1, 2, 3, 5, 7, 9};
- }
-
- @Theory
- public void getIndexFrom_wrapLeft(int nbPlayers) {
- assumeTrue(nbPlayers >= 2);
- int last = nbPlayers - 1;
- assertEquals(last, RelativeBoardPosition.LEFT.getIndexFrom(0, nbPlayers));
- assertEquals(0, RelativeBoardPosition.SELF.getIndexFrom(0, nbPlayers));
- assertEquals(1, RelativeBoardPosition.RIGHT.getIndexFrom(0, nbPlayers));
- }
-
- @Theory
- public void getIndexFrom_wrapRight(int nbPlayers) {
- assumeTrue(nbPlayers >= 2);
- int last = nbPlayers - 1;
- assertEquals(last - 1, RelativeBoardPosition.LEFT.getIndexFrom(last, nbPlayers));
- assertEquals(last, RelativeBoardPosition.SELF.getIndexFrom(last, nbPlayers));
- assertEquals(0, RelativeBoardPosition.RIGHT.getIndexFrom(last, nbPlayers));
- }
-
- @Theory
- public void getIndexFrom_noWrap(int nbPlayers) {
- assumeTrue(nbPlayers >= 3);
- assertEquals(0, RelativeBoardPosition.LEFT.getIndexFrom(1, nbPlayers));
- assertEquals(1, RelativeBoardPosition.SELF.getIndexFrom(1, nbPlayers));
- assertEquals(2, RelativeBoardPosition.RIGHT.getIndexFrom(1, nbPlayers));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java b/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java
deleted file mode 100644
index 067a7eff..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class ScienceTest {
-
- @DataPoints
- public static int[][] quantitiesWithExpectedPoints() {
- // compasses, wheels, tablets, jokers, expected points
- return new int[][]{
- {0, 0, 0, 1, 1},
- {0, 0, 1, 0, 1},
- {0, 0, 0, 2, 4},
- {0, 0, 1, 1, 4},
- {0, 0, 2, 0, 4},
- {0, 0, 0, 3, 10},
- {0, 0, 1, 2, 10},
- {0, 1, 1, 1, 10},
- {1, 1, 1, 0, 10},
- {0, 0, 0, 4, 16},
- {0, 0, 1, 3, 16},
- {0, 0, 2, 2, 16},
- {0, 0, 3, 1, 16},
- {0, 0, 4, 0, 16}};
- }
-
- @DataPoints
- public static int[] quantitiesDataPoints() {
- return new int[] {0, 1, 3, 5, 8};
- }
-
- @Test
- public void addAll_empty() {
- Science initial = TestUtils.createScience(3, 4, 5, 1);
- Science empty = new Science();
- initial.addAll(empty);
- assertEquals(3, initial.getQuantity(ScienceType.COMPASS));
- assertEquals(4, initial.getQuantity(ScienceType.WHEEL));
- assertEquals(5, initial.getQuantity(ScienceType.TABLET));
- assertEquals(1, initial.getJokers());
- }
-
- @Test
- public void addAll_noJoker() {
- Science initial = TestUtils.createScience(3, 4, 5, 1);
- Science other = TestUtils.createScience(1, 2, 3, 0);
- initial.addAll(other);
- assertEquals(4, initial.getQuantity(ScienceType.COMPASS));
- assertEquals(6, initial.getQuantity(ScienceType.WHEEL));
- assertEquals(8, initial.getQuantity(ScienceType.TABLET));
- assertEquals(1, initial.getJokers());
- }
-
- @Test
- public void addAll_withJokers() {
- Science initial = TestUtils.createScience(3, 4, 5, 1);
- Science other = TestUtils.createScience(0, 0, 0, 3);
- initial.addAll(other);
- assertEquals(3, initial.getQuantity(ScienceType.COMPASS));
- assertEquals(4, initial.getQuantity(ScienceType.WHEEL));
- assertEquals(5, initial.getQuantity(ScienceType.TABLET));
- assertEquals(4, initial.getJokers());
- }
-
- @Test
- public void addAll_mixed() {
- Science initial = TestUtils.createScience(3, 4, 5, 1);
- Science other = TestUtils.createScience(1, 2, 3, 4);
- initial.addAll(other);
- assertEquals(4, initial.getQuantity(ScienceType.COMPASS));
- assertEquals(6, initial.getQuantity(ScienceType.WHEEL));
- assertEquals(8, initial.getQuantity(ScienceType.TABLET));
- assertEquals(5, initial.getJokers());
- }
-
- @Theory
- public void computePoints_compassesOnly_noJoker(int compasses) {
- Science science = TestUtils.createScience(compasses, 0, 0, 0);
- assertEquals(compasses * compasses, science.computePoints());
- }
-
- @Theory
- public void computePoints_wheelsOnly_noJoker(int wheels) {
- Science science = TestUtils.createScience(0, wheels, 0, 0);
- assertEquals(wheels * wheels, science.computePoints());
- }
-
- @Theory
- public void computePoints_tabletsOnly_noJoker(int tablets) {
- Science science = TestUtils.createScience(0, 0, tablets, 0);
- assertEquals(tablets * tablets, science.computePoints());
- }
-
- @Theory
- public void computePoints_allSameNoJoker(int eachSymbol) {
- Science science = TestUtils.createScience(eachSymbol, eachSymbol, eachSymbol, 0);
- assertEquals(3 * eachSymbol * eachSymbol + 7 * eachSymbol, science.computePoints());
- }
-
- @Theory
- public void computePoints_expectation(int[] expectation) {
- Science science = TestUtils.createScience(expectation[0], expectation[1], expectation[2], expectation[3]);
- assertEquals(expectation[4], science.computePoints());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java b/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java
deleted file mode 100644
index d105c33f..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class CardBackTest {
-
- @Test
- public void initializedWithImage() throws Exception {
- String imagePath = "whateverimage.png";
- CardBack back = new CardBack(imagePath);
- assertEquals(imagePath, back.getImage());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java b/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java
deleted file mode 100644
index 4a481442..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-import static org.junit.Assert.*;
-import static org.luxons.sevenwonders.game.test.TestUtils.*;
-
-public class CardTest {
-
- private Table table;
-
- private Card treeFarmCard;
-
- @Before
- public void initBoard() {
- Settings settings = new Settings(5);
-
- List<Board> boards = new ArrayList<>(3);
- boards.add(new Board(new Wonder("TestWonder", ResourceType.WOOD), null, settings));
- boards.add(new Board(new Wonder("TestWonder", ResourceType.STONE), null, settings));
- boards.add(new Board(new Wonder("TestWonder", ResourceType.PAPYRUS), null, settings));
- table = new Table(boards);
-
- Requirements treeFarmRequirements = new Requirements();
- treeFarmRequirements.setGold(1);
-
- ProductionIncrease treeFarmEffect = new ProductionIncrease();
- treeFarmEffect.getProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY);
-
- List<Effect> effects = Collections.singletonList(treeFarmEffect);
-
- treeFarmCard = new Card("Tree Farm", Color.BROWN, treeFarmRequirements, effects, "", null, null);
- }
-
- @Test
- public void playCardCostingMoney() {
- table.getBoard(0).setGold(3);
- table.getBoard(1).setGold(3);
- table.getBoard(2).setGold(3);
- treeFarmCard.applyTo(table, 0, new ArrayList<>());
- assertEquals(2, table.getBoard(0).getGold());
- assertEquals(3, table.getBoard(1).getGold());
- assertEquals(3, table.getBoard(2).getGold());
- }
-
- @Test
- public void equals_falseWhenNull() {
- Card card = createCard("TestCard");
- //noinspection ObjectEqualsNull
- assertFalse(card.equals(null));
- }
-
- @Test
- public void equals_falseWhenDifferentClass() {
- Card card = createCard("TestCard");
- Object object = new Object();
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(card.equals(object));
- }
-
- @Test
- public void equals_trueWhenSame() {
- Card card = createCard("TestCard");
- assertEquals(card, card);
- }
-
- @Test
- public void equals_trueWhenSameContent() {
- Card card1 = createCard("TestCard");
- Card card2 = createCard("TestCard");
- assertTrue(card1.equals(card2));
- }
-
- @Test
- public void equals_falseWhenDifferentName() {
- Card card1 = createCard("TestCard1");
- Card card2 = createCard("TestCard2");
- assertFalse(card1.equals(card2));
- }
-
- @Test
- public void hashCode_sameWhenSameContent() {
- Card card1 = createCard("TestCard");
- Card card2 = createCard("TestCard");
- assertEquals(card1.hashCode(), card2.hashCode());
- }
-
- @Test
- public void hashCode_differentWhenDifferentName() {
- Card card1 = createCard("TestCard1");
- Card card2 = createCard("TestCard2");
- assertNotEquals(card1.hashCode(), card2.hashCode());
- }
-}
diff --git a/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java b/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java
deleted file mode 100644
index 06060f16..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.cards.Decks.CardNotFoundException;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-import static org.junit.Assume.*;
-
-@RunWith(Theories.class)
-public class DecksTest {
-
- @DataPoints
- public static int[] dataPoints() {
- return new int[] {1, 2, 3, 5, 10};
- }
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private static Decks createDecks(int nbAges, int nbCardsPerAge) {
- Map<Integer, List<Card>> cardsPerAge = new HashMap<>();
- for (int age = 1; age <= nbAges; age++) {
- int firstCardNumber = (age - 1) * nbCardsPerAge;
- cardsPerAge.put(age, TestUtils.createSampleCards(firstCardNumber, nbCardsPerAge));
- }
- return new Decks(cardsPerAge);
- }
-
- @Test(expected = CardNotFoundException.class)
- public void getCard_failsOnNullNameWhenDeckIsEmpty() {
- Decks decks = createDecks(0, 0);
- decks.getCard(null);
- }
-
- @Test(expected = CardNotFoundException.class)
- public void getCard_failsOnEmptyNameWhenDeckIsEmpty() {
- Decks decks = createDecks(0, 0);
- decks.getCard("");
- }
-
- @Test(expected = CardNotFoundException.class)
- public void getCard_failsWhenDeckIsEmpty() {
- Decks decks = createDecks(0, 0);
- decks.getCard("Any name");
- }
-
- @Test(expected = CardNotFoundException.class)
- public void getCard_failsWhenCardIsNotFound() {
- Decks decks = createDecks(3, 20);
- decks.getCard("Unknown name");
- }
-
- @Test
- public void getCard_succeedsWhenCardIsFound() {
- Decks decks = createDecks(3, 20);
- Card card = decks.getCard("Test Card 3");
- assertEquals("Test Card 3", card.getName());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deal_failsOnZeroPlayers() {
- Decks decks = createDecks(3, 20);
- decks.deal(1, 0);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deal_failsOnMissingAge() {
- Decks decks = createDecks(2, 0);
- decks.deal(4, 10);
- }
-
- @Theory
- public void deal_failsWhenTooFewPlayers(int nbPlayers, int nbCards) {
- assumeTrue(nbCards % nbPlayers != 0);
- thrown.expect(IllegalArgumentException.class);
- Decks decks = createDecks(1, nbCards);
- decks.deal(1, nbPlayers);
- }
-
- @Theory
- public void deal_succeedsOnZeroCards(int nbPlayers) {
- Decks decks = createDecks(1, 0);
- Hands hands = decks.deal(1, nbPlayers);
- for (int i = 0; i < nbPlayers; i++) {
- assertNotNull(hands.get(i));
- assertTrue(hands.get(i).isEmpty());
- }
- }
-
- @Theory
- public void deal_evenDistribution(int nbPlayers, int nbCardsPerPlayer) {
- int nbCardsPerAge = nbPlayers * nbCardsPerPlayer;
- Decks decks = createDecks(1, nbCardsPerAge);
- Hands hands = decks.deal(1, nbPlayers);
- for (int i = 0; i < nbPlayers; i++) {
- assertEquals(nbCardsPerPlayer, hands.get(i).size());
- }
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java b/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java
deleted file mode 100644
index 6165d158..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class HandRotationDirectionTest {
-
- @Test
- public void testAgesDirections() throws Exception {
- assertEquals(HandRotationDirection.LEFT, HandRotationDirection.forAge(1));
- assertEquals(HandRotationDirection.RIGHT, HandRotationDirection.forAge(2));
- assertEquals(HandRotationDirection.LEFT, HandRotationDirection.forAge(3));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java b/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java
deleted file mode 100644
index 494b9e4c..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.FromDataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.HandCard;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Hands.PlayerIndexOutOfBoundsException;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-import static org.junit.Assume.*;
-
-@RunWith(Theories.class)
-public class HandsTest {
-
- @DataPoints("nbCardsPerPlayer")
- public static int[] nbCardsPerPlayer() {
- return new int[] {0, 1, 2, 3, 4, 5, 6, 7};
- }
-
- @DataPoints("nbPlayers")
- public static int[] nbPlayers() {
- return new int[] {3, 4, 5, 6, 7};
- }
-
- private static Hands createHands(int nbPlayers, int nbCardsPerPlayer) {
- Map<Integer, List<Card>> hands = new HashMap<>();
- for (int p = 0; p < nbPlayers; p++) {
- int firstCardNumber = (p - 1) * nbCardsPerPlayer;
- hands.put(p, TestUtils.createSampleCards(firstCardNumber, nbCardsPerPlayer));
- }
- return new Hands(hands, nbPlayers);
- }
-
- @Test(expected = PlayerIndexOutOfBoundsException.class)
- public void get_failsOnMissingPlayer() {
- Hands hands = createHands(4, 7);
- hands.get(5);
- }
-
- @Test
- public void get_retrievesCorrectCards() {
- List<Card> hand0 = TestUtils.createSampleCards(0, 5);
- List<Card> hand1 = TestUtils.createSampleCards(5, 10);
- Map<Integer, List<Card>> handsMap = new HashMap<>();
- handsMap.put(0, hand0);
- handsMap.put(1, hand1);
- Hands hands = new Hands(handsMap, 2);
- assertEquals(hand0, hands.get(0));
- assertEquals(hand1, hands.get(1));
- }
-
- @Theory
- public void isEmpty_falseWhenAtLeast1_allSame(@FromDataPoints("nbPlayers") int nbPlayers,
- @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) {
- assumeTrue(nbCardsPerPlayer >= 1);
- Hands hands = createHands(nbPlayers, nbCardsPerPlayer);
- assertFalse(hands.isEmpty());
- }
-
- @Theory
- public void isEmpty_trueWhenAllEmpty(@FromDataPoints("nbPlayers") int nbPlayers) {
- Hands hands = createHands(nbPlayers, 0);
- assertTrue(hands.isEmpty());
- }
-
- @Theory
- public void maxOneCardRemains_falseWhenAtLeast2_allSame(@FromDataPoints("nbPlayers") int nbPlayers,
- @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) {
- assumeTrue(nbCardsPerPlayer >= 2);
- Hands hands = createHands(nbPlayers, nbCardsPerPlayer);
- assertFalse(hands.maxOneCardRemains());
- }
-
- @Theory
- public void maxOneCardRemains_trueWhenAtMost1_allSame(@FromDataPoints("nbPlayers") int nbPlayers,
- @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) {
- assumeTrue(nbCardsPerPlayer <= 1);
- Hands hands = createHands(nbPlayers, nbCardsPerPlayer);
- assertTrue(hands.maxOneCardRemains());
- }
-
- @Theory
- public void maxOneCardRemains_trueWhenAtMost1_someZero(@FromDataPoints("nbPlayers") int nbPlayers) {
- Hands hands = createHands(nbPlayers, 1);
- hands.get(0).remove(0);
- assertTrue(hands.maxOneCardRemains());
- }
-
- @Theory
- public void gatherAndClear(@FromDataPoints("nbPlayers") int nbPlayers,
- @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) {
- Hands hands = createHands(nbPlayers, nbCardsPerPlayer);
- List<Card> remainingCards = hands.gatherAndClear();
- assertEquals(nbPlayers * nbCardsPerPlayer, remainingCards.size());
- assertTrue(hands.isEmpty());
- }
-
- @Test
- public void rotate_movesOfCorrectOffset_right() {
- Hands hands = createHands(3, 7);
- Hands rotated = hands.rotate(HandRotationDirection.RIGHT);
- assertEquals(rotated.get(1), hands.get(0));
- assertEquals(rotated.get(2), hands.get(1));
- assertEquals(rotated.get(0), hands.get(2));
- }
-
- @Test
- public void rotate_movesOfCorrectOffset_left() {
- Hands hands = createHands(3, 7);
- Hands rotated = hands.rotate(HandRotationDirection.LEFT);
- assertEquals(rotated.get(2), hands.get(0));
- assertEquals(rotated.get(0), hands.get(1));
- assertEquals(rotated.get(1), hands.get(2));
- }
-
- @Test
- public void createHand_containsAllCards() {
- List<Card> hand0 = TestUtils.createSampleCards(0, 5);
- List<Card> hand1 = TestUtils.createSampleCards(5, 10);
- Map<Integer, List<Card>> handsMap = new HashMap<>();
- handsMap.put(0, hand0);
- handsMap.put(1, hand1);
- Hands hands = new Hands(handsMap, 2);
-
- Table table = TestUtils.createTable(2);
- List<HandCard> hand = hands.createHand(table, 0);
-
- for (HandCard handCard : hand) {
- assertTrue(hand0.contains(handCard.getCard()));
- }
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java b/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java
deleted file mode 100644
index b38afd49..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class GameDefinitionLoaderTest {
-
- @Test
- public void successfulLoad() throws Exception {
- GameDefinitionLoader loader = new GameDefinitionLoader();
- GameDefinition gameDefinition = loader.getGameDefinition();
- assertNotNull(gameDefinition);
- }
-
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java b/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java
deleted file mode 100644
index 5acc09df..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import java.util.List;
-
-import org.junit.Test;
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-
-public class GameDefinitionTest {
-
- @Test
- public void successfulGameInit() throws Exception {
- GameDefinition gameDefinition = new GameDefinitionLoader().getGameDefinition();
- assertNotNull(gameDefinition);
-
- List<Player> players = TestUtils.createPlayers(7);
- Game game = gameDefinition.initGame(0, new CustomizableSettings(), players);
- assertNotNull(game);
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java b/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java
deleted file mode 100644
index 2544ca64..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.Random;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class WonderSidePickMethodTest {
-
- @DataPoints
- public static WonderSide[] sides() {
- return WonderSide.values();
- }
-
- private Random random;
-
- private Random random2;
-
- @Before
- public void setUp() {
- random = new Random(123); // starts with TRUE
- random2 = new Random(123456); // starts with FALSE
- }
-
- @Test
- public void pick_allA() {
- WonderSide side = null;
- for (int i = 0; i < 10; i++) {
- side = WonderSidePickMethod.ALL_A.pickSide(random, side);
- assertEquals(WonderSide.A, side);
- }
- }
-
- @Test
- public void pick_allB() {
- WonderSide side = null;
- for (int i = 0; i < 10; i++) {
- side = WonderSidePickMethod.ALL_B.pickSide(random, side);
- assertEquals(WonderSide.B, side);
- }
- }
-
- @Test
- public void pick_eachRandom() {
- WonderSide side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, null);
- assertEquals(WonderSide.A, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.A, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.A, side);
- }
-
- @Test
- public void pick_eachRandom2() {
- WonderSide side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, null);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.A, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.A, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.B, side);
- }
-
- @Theory
- public void pick_allSameRandom_sameAsFirst(WonderSide firstSide) {
- WonderSide side = firstSide;
- for (int i = 0; i < 10; i++) {
- side = WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random, side);
- assertEquals(firstSide, side);
- }
- }
-
- @Test
- public void pick_allSameRandom_firstIsRandom() {
- assertEquals(WonderSide.A, WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random, null));
- assertEquals(WonderSide.B, WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random2, null));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java b/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java
deleted file mode 100644
index 753a26cf..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import static org.junit.Assert.*;
-
-@RunWith(Theories.class)
-public class NumericEffectSerializerTest {
-
- @DataPoints
- public static int[] dataPoints() {
- return new int[] {-2, -1, 0, 1, 2, 5};
- }
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(MilitaryReinforcements.class, new NumericEffectSerializer())
- .registerTypeAdapter(RawPointsIncrease.class, new NumericEffectSerializer())
- .registerTypeAdapter(GoldIncrease.class, new NumericEffectSerializer())
- // ProductionIncrease is not a numeric effect, it is here for negative testing purpose
- .registerTypeAdapter(ProductionIncrease.class, new NumericEffectSerializer())
- .create();
- }
-
- @Test
- public void serialize_militaryReinforcements_null() {
- assertEquals("null", gson.toJson(null, MilitaryReinforcements.class));
- }
-
- @Test
- public void serialize_rawPointsIncrease_null() {
- assertEquals("null", gson.toJson(null, RawPointsIncrease.class));
- }
-
- @Test
- public void serialize_goldIncrease_null() {
- assertEquals("null", gson.toJson(null, GoldIncrease.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void serialize_failOnUnknownType() {
- gson.toJson(new ProductionIncrease());
- }
-
- @Theory
- public void serialize_militaryReinforcements(int count) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(count);
- assertEquals(String.valueOf(count), gson.toJson(reinforcements));
- }
-
- @Theory
- public void serialize_rawPointsIncrease(int count) {
- RawPointsIncrease points = new RawPointsIncrease(count);
- assertEquals(String.valueOf(count), gson.toJson(points));
- }
-
- @Theory
- public void serialize_goldIncrease(int count) {
- GoldIncrease goldIncrease = new GoldIncrease(count);
- assertEquals(String.valueOf(count), gson.toJson(goldIncrease));
- }
-
- @Theory
- public void deserialize_militaryReinforcements(int count) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(count);
- assertEquals(reinforcements, gson.fromJson(String.valueOf(count), MilitaryReinforcements.class));
- }
-
- @Theory
- public void deserialize_rawPointsIncrease(int count) {
- RawPointsIncrease points = new RawPointsIncrease(count);
- assertEquals(points, gson.fromJson(String.valueOf(count), RawPointsIncrease.class));
- }
-
- @Theory
- public void deserialize_goldIncrease(int count) {
- GoldIncrease goldIncrease = new GoldIncrease(count);
- assertEquals(goldIncrease, gson.fromJson(String.valueOf(count), GoldIncrease.class));
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_militaryReinforcements_failOnEmptyString() {
- gson.fromJson("\"\"", MilitaryReinforcements.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_rawPointsIncrease_failOnEmptyString() {
- gson.fromJson("\"\"", RawPointsIncrease.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_goldIncrease_failOnEmptyString() {
- gson.fromJson("\"\"", GoldIncrease.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_militaryReinforcements_failOnNonNumericString() {
- gson.fromJson("\"abc\"", MilitaryReinforcements.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_rawPointsIncrease_failOnNonNumericString() {
- gson.fromJson("\"abc\"", RawPointsIncrease.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_goldIncrease_failOnNonNumericString() {
- gson.fromJson("\"abc\"", GoldIncrease.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnUnknownType() {
- gson.fromJson("\"2\"", ProductionIncrease.class);
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java b/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java
deleted file mode 100644
index 17940361..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-import static org.junit.Assert.*;
-
-public class ProductionIncreaseSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- Type resourceTypeList = new TypeToken<List<ResourceType>>() {
- }.getType();
- gson = new GsonBuilder().registerTypeAdapter(Resources.class, new ResourcesSerializer())
- .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer())
- .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer())
- .registerTypeAdapter(ProductionIncrease.class, new ProductionIncreaseSerializer())
- .create();
- }
-
- private static ProductionIncrease create(int wood, int stone, int clay) {
- Production production = new Production();
- if (wood > 0) {
- production.addFixedResource(ResourceType.WOOD, wood);
- }
- if (stone > 0) {
- production.addFixedResource(ResourceType.STONE, stone);
- }
- if (clay > 0) {
- production.addFixedResource(ResourceType.CLAY, clay);
- }
- ProductionIncrease prodIncrease = new ProductionIncrease();
- prodIncrease.setProduction(production);
- return prodIncrease;
- }
-
- private static ProductionIncrease createChoice(ResourceType... types) {
- Production production = new Production();
- production.addChoice(types);
- ProductionIncrease prodIncrease = new ProductionIncrease();
- prodIncrease.setProduction(production);
- return prodIncrease;
- }
-
- @Test
- public void serialize_nullAsNull() {
- assertEquals("null", gson.toJson(null, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_emptyProdIncreaseAsNull() {
- ProductionIncrease prodIncrease = new ProductionIncrease();
- assertEquals("null", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_singleType() {
- ProductionIncrease prodIncrease = create(1, 0, 0);
- assertEquals("\"W\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_multipleTimesSameType() {
- ProductionIncrease prodIncrease = create(3, 0, 0);
- assertEquals("\"WWW\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_mixedTypes() {
- ProductionIncrease prodIncrease = create(1, 1, 1);
- assertEquals("\"WSC\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_mixedTypesMultiple() {
- ProductionIncrease prodIncrease = create(2, 1, 2);
- assertEquals("\"WWSCC\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice2() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY);
- assertEquals("\"W/C\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice3() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY);
- assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice2_unordered() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.CLAY, ResourceType.WOOD);
- assertEquals("\"W/C\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice3_unordered() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY, ResourceType.ORE);
- assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void serialize_failIfMultipleChoices() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY);
- prodIncrease.getProduction().addChoice(ResourceType.ORE, ResourceType.GLASS);
- gson.toJson(prodIncrease, ProductionIncrease.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void serialize_failIfMixedFixedAndChoices() {
- ProductionIncrease prodIncrease = create(1, 0, 0);
- prodIncrease.getProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY);
- gson.toJson(prodIncrease, ProductionIncrease.class);
- }
-
- @Test
- public void deserialize_nullFromNull() {
- assertNull(gson.fromJson("null", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_emptyList() {
- ProductionIncrease prodIncrease = new ProductionIncrease();
- assertEquals(prodIncrease, gson.fromJson("\"\"", ProductionIncrease.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnGarbageString() {
- gson.fromJson("\"this is garbage\"", ProductionIncrease.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnGarbageStringWithSlashes() {
- gson.fromJson("\"this/is/garbage\"", ProductionIncrease.class);
- }
-
- @Test
- public void deserialize_singleType() {
- ProductionIncrease prodIncrease = create(1, 0, 0);
- assertEquals(prodIncrease, gson.fromJson("\"W\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_multipleTimesSameType() {
- ProductionIncrease prodIncrease = create(3, 0, 0);
- assertEquals(prodIncrease, gson.fromJson("\"WWW\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_mixedTypes() {
- ProductionIncrease prodIncrease = create(1, 1, 1);
- assertEquals(prodIncrease, gson.fromJson("\"WCS\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_mixedTypes_unordered() {
- ProductionIncrease prodIncrease = create(1, 3, 2);
- assertEquals(prodIncrease, gson.fromJson("\"SCWCSS\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_choice2() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY);
- assertEquals(prodIncrease, gson.fromJson("\"W/C\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_choice3() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY);
- assertEquals(prodIncrease, gson.fromJson("\"W/O/C\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_choice2_unordered() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.CLAY, ResourceType.WOOD);
- assertEquals(prodIncrease, gson.fromJson("\"W/C\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_choice3_unordered() {
- ProductionIncrease prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY, ResourceType.ORE);
- assertEquals(prodIncrease, gson.fromJson("\"W/O/C\"", ProductionIncrease.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnMultipleResourcesInChoice() {
- gson.fromJson("\"W/SS/C\"", ProductionIncrease.class);
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java b/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java
deleted file mode 100644
index 86f3f5ab..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import static org.junit.Assert.*;
-
-public class ResourceTypeSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer()).create();
- }
-
- @Test
- public void serialize_useSymbolForEachType() {
- for (ResourceType type : ResourceType.values()) {
- String expectedJson = "\"" + type.getSymbol() + "\"";
- assertEquals(expectedJson, gson.toJson(type));
- }
- }
-
- @Test
- public void deserialize_useSymbolForEachType() {
- for (ResourceType type : ResourceType.values()) {
- String typeInJson = "\"" + type.getSymbol() + "\"";
- assertEquals(type, gson.fromJson(typeInJson, ResourceType.class));
- }
- }
-
- @Test
- public void deserialize_nullFromNull() {
- assertNull(gson.fromJson("null", ResourceType.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failsOnEmptyString() {
- gson.fromJson("\"\"", ResourceType.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failsOnGarbageString() {
- gson.fromJson("\"thisisgarbage\"", ResourceType.class);
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java b/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java
deleted file mode 100644
index 4ebbc33f..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-import static org.junit.Assert.*;
-
-public class ResourceTypesSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(createListTypeToken(), new ResourceTypesSerializer()).create();
- }
-
- private static Type createListTypeToken() {
- return new TypeToken<List<ResourceType>>() {}.getType();
- }
-
- @Test
- public void serialize_null() {
- assertEquals("null", gson.toJson(null, createListTypeToken()));
- }
-
- @Test
- public void serialize_emptyList() {
- List<ResourceType> types = new ArrayList<>();
- assertEquals("\"\"", gson.toJson(types, createListTypeToken()));
- }
-
- @Test
- public void serialize_singleType() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- assertEquals("\"W\"", gson.toJson(types, createListTypeToken()));
- }
-
- @Test
- public void serialize_multipleTimesSameType() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- types.add(ResourceType.WOOD);
- types.add(ResourceType.WOOD);
- assertEquals("\"WWW\"", gson.toJson(types, createListTypeToken()));
- }
-
- @Test
- public void serialize_mixedTypes() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- types.add(ResourceType.CLAY);
- types.add(ResourceType.STONE);
- assertEquals("\"WCS\"", gson.toJson(types, createListTypeToken()));
- }
-
- @Test
- public void deserialize_null() {
- assertNull(gson.fromJson("null", createListTypeToken()));
- }
-
- @Test
- public void deserialize_emptyList() {
- List<ResourceType> types = new ArrayList<>();
- assertEquals(types, gson.fromJson("\"\"", createListTypeToken()));
- }
-
- @Test
- public void deserialize_singleType() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- assertEquals(types, gson.fromJson("\"W\"", createListTypeToken()));
- }
-
- @Test
- public void deserialize_multipleTimesSameType() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- types.add(ResourceType.WOOD);
- types.add(ResourceType.WOOD);
- assertEquals(types, gson.fromJson("\"WWW\"", createListTypeToken()));
- }
-
- @Test
- public void deserialize_mixedTypes() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- types.add(ResourceType.CLAY);
- types.add(ResourceType.STONE);
- assertEquals(types, gson.fromJson("\"WCS\"", createListTypeToken()));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java b/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java
deleted file mode 100644
index 1fd01337..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import static org.junit.Assert.*;
-
-public class ResourcesSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(Resources.class, new ResourcesSerializer()).create();
- }
-
- @Test
- public void serialize_null() {
- assertEquals("null", gson.toJson(null, Resources.class));
- }
-
- @Test
- public void serialize_emptyResourcesToNull() {
- Resources resources = new Resources();
- assertEquals("null", gson.toJson(resources));
- }
-
- @Test
- public void serialize_singleType() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- assertEquals("\"W\"", gson.toJson(resources));
- }
-
- @Test
- public void serialize_multipleTimesSameType() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 3);
- assertEquals("\"WWW\"", gson.toJson(resources));
- }
-
- @Test
- public void serialize_mixedTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 1);
- assertEquals("\"WSC\"", gson.toJson(resources));
- }
-
- @Test
- public void serialize_mixedTypes_unordered() {
- Resources resources = new Resources();
- resources.add(ResourceType.CLAY, 1);
- resources.add(ResourceType.WOOD, 2);
- resources.add(ResourceType.CLAY, 1);
- resources.add(ResourceType.STONE, 1);
- assertEquals("\"WWSCC\"", gson.toJson(resources));
- }
-
- @Test
- public void deserialize_null() {
- assertNull(gson.fromJson("null", Resources.class));
- }
-
- @Test
- public void deserialize_emptyList() {
- Resources resources = new Resources();
- assertEquals(resources, gson.fromJson("\"\"", Resources.class));
- }
-
- @Test
- public void deserialize_singleType() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- assertEquals(resources, gson.fromJson("\"W\"", Resources.class));
- }
-
- @Test
- public void deserialize_multipleTimesSameType() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 3);
- assertEquals(resources, gson.fromJson("\"WWW\"", Resources.class));
- }
-
- @Test
- public void deserialize_mixedTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- resources.add(ResourceType.CLAY, 1);
- resources.add(ResourceType.STONE, 1);
- assertEquals(resources, gson.fromJson("\"WCS\"", Resources.class));
- }
-
- @Test
- public void deserialize_mixedTypes_unordered() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- resources.add(ResourceType.CLAY, 2);
- resources.add(ResourceType.STONE, 3);
- assertEquals(resources, gson.fromJson("\"SCWCSS\"", Resources.class));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java b/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java
deleted file mode 100644
index 40088fda..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import static org.junit.Assert.*;
-
-public class ScienceProgressSerializerTest {
-
- private static final String COMPASS_STR = "\"COMPASS\"";
-
- private static final String WHEEL_STR = "\"WHEEL\"";
-
- private static final String TABLET_STR = "\"TABLET\"";
-
- private static final String JOKER_STR = "\"any\"";
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(ScienceProgress.class, new ScienceProgressSerializer()).create();
- }
-
- @Test
- public void serialize_emptyToNull() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 0);
- String json = gson.toJson(progress);
- assertEquals("null", json);
- }
-
- @Test
- public void serialize_oneCompass() {
- ScienceProgress progress = TestUtils.createScienceProgress(1, 0, 0, 0);
- String json = gson.toJson(progress);
- assertEquals(COMPASS_STR, json);
- }
-
- @Test
- public void serialize_oneWheel() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 1, 0, 0);
- String json = gson.toJson(progress);
- assertEquals(WHEEL_STR, json);
- }
-
- @Test
- public void serialize_oneTablet() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 1, 0);
- String json = gson.toJson(progress);
- assertEquals(TABLET_STR, json);
- }
-
- @Test
- public void serialize_oneJoker() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 1);
- String json = gson.toJson(progress);
- assertEquals(JOKER_STR, json);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMultipleCompasses() {
- ScienceProgress progress = TestUtils.createScienceProgress(2, 0, 0, 0);
- gson.toJson(progress);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMultipleWheels() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 2, 0, 0);
- gson.toJson(progress);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMultipleTablets() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 2, 0);
- gson.toJson(progress);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMultipleJokers() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 2);
- gson.toJson(progress);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMixedElements() {
- ScienceProgress progress = TestUtils.createScienceProgress(1, 1, 0, 0);
- gson.toJson(progress);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnEmptyString() {
- gson.fromJson("\"\"", ScienceProgress.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnGarbageString() {
- gson.fromJson("thisisgarbage", ScienceProgress.class);
- }
-
- @Test
- public void deserialize_compass() {
- ScienceProgress progress = gson.fromJson(COMPASS_STR, ScienceProgress.class);
- assertNotNull(progress.getScience());
- assertEquals(1, progress.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(0, progress.getScience().getJokers());
- }
-
- @Test
- public void deserialize_wheel() {
- ScienceProgress progress = gson.fromJson(WHEEL_STR, ScienceProgress.class);
- assertNotNull(progress.getScience());
- assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(1, progress.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(0, progress.getScience().getJokers());
- }
-
- @Test
- public void deserialize_tablet() {
- ScienceProgress progress = gson.fromJson(TABLET_STR, ScienceProgress.class);
- assertNotNull(progress.getScience());
- assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(1, progress.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(0, progress.getScience().getJokers());
- }
-
- @Test
- public void deserialize_joker() {
- ScienceProgress progress = gson.fromJson(JOKER_STR, ScienceProgress.class);
- assertNotNull(progress.getScience());
- assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(1, progress.getScience().getJokers());
- }
-
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java b/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java
deleted file mode 100644
index 5f42bc53..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.junit.Before;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.BoardElementType;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-
-@RunWith(Theories.class)
-public class BonusPerBoardElementTest {
-
- @DataPoints
- public static int[] values() {
- return new int[] {0, 1, 2, 3};
- }
-
- @DataPoints
- public static Color[] colors() {
- return Color.values();
- }
-
- @DataPoints
- public static RelativeBoardPosition[] positions() {
- return RelativeBoardPosition.values();
- }
-
- private Table table;
-
- @Before
- public void setUp() throws Exception {
- table = TestUtils.createTable(4);
- }
-
- private static BonusPerBoardElement createBonus(BoardElementType type, int gold, int points, Color... colors) {
- BonusPerBoardElement bonus = new BonusPerBoardElement();
- bonus.setType(type);
- bonus.setGold(gold);
- bonus.setPoints(points);
- bonus.setColors(Arrays.asList(colors));
- return bonus;
- }
-
- @Theory
- public void computePoints_countsCards(RelativeBoardPosition boardPosition, int nbCards, int nbOtherCards,
- int points, int gold, Color color) {
- Board board = table.getBoard(0, boardPosition);
- TestUtils.addCards(board, nbCards, nbOtherCards, color);
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.CARD, gold, points, color);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- assertEquals(nbCards * points, bonus.computePoints(table, 0));
- }
-
- @Theory
- public void computePoints_countsDefeatTokens(RelativeBoardPosition boardPosition, int nbDefeatTokens, int points, int gold) {
- Board board = table.getBoard(0, boardPosition);
- for (int i = 0; i < nbDefeatTokens; i++) {
- board.getMilitary().defeat();
- }
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.DEFEAT_TOKEN, gold, points);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- assertEquals(nbDefeatTokens * points, bonus.computePoints(table, 0));
- }
-
- @Theory
- public void computePoints_countsWonderStages(RelativeBoardPosition boardPosition, int nbStages, int points, int gold) {
- Board board = table.getBoard(0, boardPosition);
- for (int i = 0; i < nbStages; i++) {
- board.getWonder().buildLevel(new CardBack(""));
- }
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.BUILT_WONDER_STAGES, gold, points);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- assertEquals(nbStages * points, bonus.computePoints(table, 0));
- }
-
- @Theory
- public void apply_countsCards(RelativeBoardPosition boardPosition, int nbCards, int nbOtherCards,
- int points, int gold, Color color) {
- Board board = table.getBoard(0, boardPosition);
- TestUtils.addCards(board, nbCards, nbOtherCards, color);
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.CARD, gold, points, color);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- Board selfBoard = table.getBoard(0);
- int initialGold = selfBoard.getGold();
- bonus.apply(table, 0);
- assertEquals(initialGold + nbCards * gold, selfBoard.getGold());
- }
-
- @Theory
- public void apply_countsDefeatTokens(RelativeBoardPosition boardPosition, int nbDefeatTokens, int points, int gold) {
- Board board = table.getBoard(0, boardPosition);
- for (int i = 0; i < nbDefeatTokens; i++) {
- board.getMilitary().defeat();
- }
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.DEFEAT_TOKEN, gold, points);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- Board selfBoard = table.getBoard(0);
- int initialGold = selfBoard.getGold();
- bonus.apply(table, 0);
- assertEquals(initialGold + nbDefeatTokens * gold, selfBoard.getGold());
- }
-
- @Theory
- public void apply_countsWonderStages(RelativeBoardPosition boardPosition, int nbStages, int points, int gold) {
- Board board = table.getBoard(0, boardPosition);
- for (int i = 0; i < nbStages; i++) {
- board.getWonder().buildLevel(new CardBack(""));
- }
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.BUILT_WONDER_STAGES, gold, points);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- Board selfBoard = table.getBoard(0);
- int initialGold = selfBoard.getGold();
- bonus.apply(table, 0);
- assertEquals(initialGold + nbStages * gold, selfBoard.getGold());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java b/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java
deleted file mode 100644
index cf8ce21d..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.Assume;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.Provider;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class DiscountTest {
-
- @DataPoints
- public static int[] discountedPrices() {
- return new int[]{0, 1, 2};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @DataPoints
- public static Provider[] providers() {
- return Provider.values();
- }
-
- @Theory
- public void apply_givesDiscountedPrice(int discountedPrice, ResourceType discountedType, Provider provider) {
- Board board = TestUtils.createBoard(ResourceType.CLAY, 3);
- Discount discount = new Discount();
- discount.setDiscountedPrice(discountedPrice);
- discount.getProviders().add(provider);
- discount.getResourceTypes().add(discountedType);
- discount.apply(board);
-
- BoughtResources boughtResources = TestUtils.createBoughtResources(provider, discountedType);
- assertEquals(discountedPrice, board.getTradingRules().computeCost(boughtResources));
- }
-
- @Theory
- public void apply_doesNotAffectOtherResources(int discountedPrice, ResourceType discountedType, Provider provider,
- ResourceType otherType, Provider otherProvider) {
- Assume.assumeTrue(otherProvider != provider);
- Assume.assumeTrue(otherType != discountedType);
-
- Board board = TestUtils.createBoard(ResourceType.CLAY, 3);
- Discount discount = new Discount();
- discount.setDiscountedPrice(discountedPrice);
- discount.getProviders().add(provider);
- discount.getResourceTypes().add(discountedType);
- discount.apply(board);
-
- // this is the default in the settings used by TestUtils.createBoard()
- int normalPrice = 2;
-
- BoughtResources fromOtherType = TestUtils.createBoughtResources(provider, otherType);
- assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherType));
-
- BoughtResources fromOtherProvider = TestUtils.createBoughtResources(otherProvider, discountedType);
- assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherProvider));
-
- BoughtResources fromOtherProviderAndType = TestUtils.createBoughtResources(otherProvider, otherType);
- assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherProviderAndType));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java b/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java
deleted file mode 100644
index e4d4c27f..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-
-@RunWith(Theories.class)
-public class GoldIncreaseTest {
-
- @DataPoints
- public static int[] goldAmounts() {
- return new int[]{-5, -1, 0, 1, 2, 5, 10};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @Theory
- public void apply_increaseGoldWithRightAmount(int initialAmount, int goldIncreaseAmount, ResourceType type) {
- Board board = TestUtils.createBoard(type, initialAmount);
- GoldIncrease goldIncrease = new GoldIncrease(goldIncreaseAmount);
-
- goldIncrease.apply(board);
-
- assertEquals(initialAmount + goldIncreaseAmount, board.getGold());
- }
-
- @Theory
- public void computePoints_isAlwaysZero(int gold) {
- GoldIncrease goldIncrease = new GoldIncrease(gold);
- Table table = TestUtils.createTable(5);
- assertEquals(0, goldIncrease.computePoints(table, 0));
- }
-
- @Theory
- public void equals_falseWhenNull(int gold) {
- GoldIncrease goldIncrease = new GoldIncrease(gold);
- //noinspection ObjectEqualsNull
- assertFalse(goldIncrease.equals(null));
- }
-
- @Theory
- public void equals_falseWhenDifferentClass(int gold) {
- GoldIncrease goldIncrease = new GoldIncrease(gold);
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(gold);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(goldIncrease.equals(reinforcements));
- }
-
- @Theory
- public void equals_trueWhenSame(int gold) {
- GoldIncrease goldIncrease = new GoldIncrease(gold);
- assertEquals(goldIncrease, goldIncrease);
- }
-
- @Theory
- public void equals_trueWhenSameContent(int gold) {
- GoldIncrease goldIncrease1 = new GoldIncrease(gold);
- GoldIncrease goldIncrease2 = new GoldIncrease(gold);
- assertTrue(goldIncrease1.equals(goldIncrease2));
- }
-
- @Theory
- public void hashCode_sameWhenSameContent(int gold) {
- GoldIncrease goldIncrease1 = new GoldIncrease(gold);
- GoldIncrease goldIncrease2 = new GoldIncrease(gold);
- assertEquals(goldIncrease1.hashCode(), goldIncrease2.hashCode());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java b/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java
deleted file mode 100644
index d3c2cc03..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-
-@RunWith(Theories.class)
-public class MilitaryReinforcementsTest {
-
- @DataPoints
- public static int[] shieldCounts() {
- return new int[]{0, 1, 2, 3, 5};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @Theory
- public void apply_increaseGoldWithRightAmount(int initialShields, int additionalShields, ResourceType type) {
- Board board = TestUtils.createBoard(type);
- board.getMilitary().addShields(initialShields);
-
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(additionalShields);
- reinforcements.apply(board);
-
- assertEquals(initialShields + additionalShields, board.getMilitary().getNbShields());
- }
-
- @Theory
- public void computePoints_isAlwaysZero(int shields) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields);
- Table table = TestUtils.createTable(5);
- assertEquals(0, reinforcements.computePoints(table, 0));
- }
-
- @Theory
- public void equals_falseWhenNull(int shields) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields);
- //noinspection ObjectEqualsNull
- assertFalse(reinforcements.equals(null));
- }
-
- @Theory
- public void equals_falseWhenDifferentClass(int shields) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields);
- GoldIncrease goldIncrease = new GoldIncrease(shields);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(reinforcements.equals(goldIncrease));
- }
-
- @Theory
- public void equals_trueWhenSame(int shields) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields);
- assertEquals(reinforcements, reinforcements);
- }
-
- @Theory
- public void equals_trueWhenSameContent(int shields) {
- MilitaryReinforcements reinforcements1 = new MilitaryReinforcements(shields);
- MilitaryReinforcements reinforcements2 = new MilitaryReinforcements(shields);
- assertTrue(reinforcements1.equals(reinforcements2));
- }
-
- @Theory
- public void hashCode_sameWhenSameContent(int shields) {
- MilitaryReinforcements reinforcements1 = new MilitaryReinforcements(shields);
- MilitaryReinforcements reinforcements2 = new MilitaryReinforcements(shields);
- assertEquals(reinforcements1.hashCode(), reinforcements2.hashCode());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java b/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java
deleted file mode 100644
index 6031e112..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-
-@RunWith(Theories.class)
-public class ProductionIncreaseTest {
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- private static ProductionIncrease createProductionIncrease(ResourceType... types) {
- ProductionIncrease effect = new ProductionIncrease();
- effect.getProduction().addAll(TestUtils.createFixedProduction(types));
- return effect;
- }
-
- @Theory
- public void apply_boardContainsAddedResourceType(ResourceType initialType, ResourceType addedType, ResourceType extraType) {
- Board board = TestUtils.createBoard(initialType);
- ProductionIncrease effect = createProductionIncrease(addedType);
-
- effect.apply(board);
-
- Resources resources = TestUtils.createResources(initialType, addedType);
- assertTrue(board.getProduction().contains(resources));
-
- Resources moreResources = TestUtils.createResources(initialType, addedType, extraType);
- assertFalse(board.getProduction().contains(moreResources));
- }
-
- @Theory
- public void computePoints_isAlwaysZero(ResourceType addedType) {
- ProductionIncrease effect = createProductionIncrease(addedType);
- Table table = TestUtils.createTable(5);
- assertEquals(0, effect.computePoints(table, 0));
- }
-
- @Theory
- public void equals_falseWhenNull(ResourceType addedType) {
- ProductionIncrease effect = createProductionIncrease(addedType);
- //noinspection ObjectEqualsNull
- assertFalse(effect.equals(null));
- }
-
- @Theory
- public void equals_falseWhenDifferentClass(ResourceType addedType) {
- ProductionIncrease effect = createProductionIncrease(addedType);
- Production production = TestUtils.createFixedProduction(addedType);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(effect.equals(production));
- }
-
- @Theory
- public void equals_trueWhenSame(ResourceType addedType) {
- ProductionIncrease effect = createProductionIncrease(addedType);
- assertEquals(effect, effect);
- }
-
- @Theory
- public void equals_trueWhenSameContent(ResourceType addedType) {
- ProductionIncrease effect1 = createProductionIncrease(addedType);
- ProductionIncrease effect2 = createProductionIncrease(addedType);
- assertTrue(effect1.equals(effect2));
- }
-
- @Theory
- public void hashCode_sameWhenSameContent(ResourceType addedType) {
- ProductionIncrease effect1 = createProductionIncrease(addedType);
- ProductionIncrease effect2 = createProductionIncrease(addedType);
- assertEquals(effect1.hashCode(), effect2.hashCode());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java b/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java
deleted file mode 100644
index a1c8a8de..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-
-@RunWith(Theories.class)
-public class RawPointsIncreaseTest {
-
- @DataPoints
- public static int[] points() {
- return new int[] {0, 1, 2, 3, 5};
- }
-
- @Theory
- public void computePoints_equalsNbOfPoints(int points) {
- RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points);
- Table table = TestUtils.createTable(5);
- assertEquals(points, rawPointsIncrease.computePoints(table, 0));
- }
-
- @Theory
- public void equals_falseWhenNull(int points) {
- RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points);
- //noinspection ObjectEqualsNull
- assertFalse(rawPointsIncrease.equals(null));
- }
-
- @Theory
- public void equals_falseWhenDifferentClass(int points) {
- RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points);
- GoldIncrease goldIncrease = new GoldIncrease(points);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(rawPointsIncrease.equals(goldIncrease));
- }
-
- @Theory
- public void equals_trueWhenSame(int points) {
- RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points);
- assertEquals(rawPointsIncrease, rawPointsIncrease);
- }
-
- @Theory
- public void equals_trueWhenSameContent(int points) {
- RawPointsIncrease rawPointsIncrease1 = new RawPointsIncrease(points);
- RawPointsIncrease rawPointsIncrease2 = new RawPointsIncrease(points);
- assertTrue(rawPointsIncrease1.equals(rawPointsIncrease2));
- }
-
- @Theory
- public void hashCode_sameWhenSameContent(int points) {
- RawPointsIncrease rawPointsIncrease1 = new RawPointsIncrease(points);
- RawPointsIncrease rawPointsIncrease2 = new RawPointsIncrease(points);
- assertEquals(rawPointsIncrease1.hashCode(), rawPointsIncrease2.hashCode());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java b/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java
deleted file mode 100644
index 56289654..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.Science;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-
-@RunWith(Theories.class)
-public class ScienceProgressTest {
-
- @DataPoints
- public static int[] elementsCount() {
- return new int[] {0, 1, 2};
- }
-
- @Theory
- public void apply_initContainsAddedScience(int initCompasses, int initWheels, int initTablets, int initJokers,
- int compasses, int wheels, int tablets, int jokers) {
- Board board = TestUtils.createBoard(ResourceType.ORE);
- Science initialScience = TestUtils.createScience(initCompasses, initWheels, initTablets, initJokers);
- board.getScience().addAll(initialScience);
-
- ScienceProgress effect = TestUtils.createScienceProgress(compasses, wheels, tablets, jokers);
- effect.apply(board);
-
- assertEquals(initCompasses + compasses, board.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(initWheels + wheels, board.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(initTablets + tablets, board.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(initJokers + jokers, board.getScience().getJokers());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java b/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java
deleted file mode 100644
index b04db127..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Arrays;
-
-import org.junit.Assume;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.BoardElementType;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(Theories.class)
-public class SpecialAbilityActivationTest {
-
- @DataPoints
- public static SpecialAbility[] abilities() {
- return SpecialAbility.values();
- }
-
- @DataPoints
- public static RelativeBoardPosition[] neighbours() {
- return new RelativeBoardPosition[]{RelativeBoardPosition.LEFT, RelativeBoardPosition.RIGHT};
- }
-
- @DataPoints
- public static Card[] guilds() {
- BonusPerBoardElement bonus = new BonusPerBoardElement();
- bonus.setType(BoardElementType.CARD);
- bonus.setColors(Arrays.asList(Color.GREY, Color.BROWN));
- bonus.setBoards(Arrays.asList(RelativeBoardPosition.LEFT, RelativeBoardPosition.RIGHT));
- bonus.setPoints(1);
-
- BonusPerBoardElement bonus2 = new BonusPerBoardElement();
- bonus2.setType(BoardElementType.BUILT_WONDER_STAGES);
- bonus2.setBoards(
- Arrays.asList(RelativeBoardPosition.LEFT, RelativeBoardPosition.SELF, RelativeBoardPosition.RIGHT));
- bonus2.setPoints(1);
-
- return new Card[]{TestUtils.createGuildCard(1, bonus), TestUtils.createGuildCard(2, bonus2)};
- }
-
- @Theory
- public void apply_addsAbility(SpecialAbility ability) {
- SpecialAbilityActivation effect = new SpecialAbilityActivation(ability);
- Table table = TestUtils.createTable(5);
-
- effect.apply(table, 0);
-
- Board board = table.getBoard(0);
- assertTrue(board.hasSpecial(ability));
- }
-
- @Theory
- public void computePoints_zeroExceptForCopyGuild(SpecialAbility ability) {
- Assume.assumeTrue(ability != SpecialAbility.COPY_GUILD);
-
- SpecialAbilityActivation effect = new SpecialAbilityActivation(ability);
- Table table = TestUtils.createTable(5);
-
- assertEquals(0, effect.computePoints(table, 0));
- }
-
- @Theory
- public void computePoints_copiedGuild(Card guildCard, RelativeBoardPosition neighbour) {
- SpecialAbilityActivation effect = new SpecialAbilityActivation(SpecialAbility.COPY_GUILD);
- Table table = TestUtils.createTable(5);
-
- Board neighbourBoard = table.getBoard(0, neighbour);
- neighbourBoard.addCard(guildCard);
-
- Board board = table.getBoard(0);
- board.setCopiedGuild(guildCard);
-
- int directPointsFromGuildCard = guildCard.getEffects().stream().mapToInt(e -> e.computePoints(table, 0)).sum();
- assertEquals(directPointsFromGuildCard, effect.computePoints(table, 0));
- }
-
- @Test(expected = IllegalStateException.class)
- public void computePoints_copyGuild_failWhenNoChosenGuild() {
- SpecialAbilityActivation effect = new SpecialAbilityActivation(SpecialAbility.COPY_GUILD);
- Table table = TestUtils.createTable(5);
- effect.computePoints(table, 0);
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java b/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java
deleted file mode 100644
index 76d2345f..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java
+++ /dev/null
@@ -1,271 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class ProductionTest {
-
- private Resources emptyResources;
-
- private Resources resources1Wood;
-
- private Resources resources1Stone;
-
- private Resources resources1Stone1Wood;
-
- private Resources resources2Stones;
-
- private Resources resources2Stones3Clay;
-
- @Before
- public void init() {
- emptyResources = new Resources();
-
- resources1Wood = new Resources();
- resources1Wood.add(ResourceType.WOOD, 1);
-
- resources1Stone = new Resources();
- resources1Stone.add(ResourceType.STONE, 1);
-
- resources1Stone1Wood = new Resources();
- resources1Stone1Wood.add(ResourceType.STONE, 1);
- resources1Stone1Wood.add(ResourceType.WOOD, 1);
-
- resources2Stones = new Resources();
- resources2Stones.add(ResourceType.STONE, 2);
-
- resources2Stones3Clay = new Resources();
- resources2Stones3Clay.add(ResourceType.STONE, 2);
- resources2Stones3Clay.add(ResourceType.CLAY, 3);
- }
-
- @Test
- public void contains_newProductionContainsEmpty() {
- Production production = new Production();
- assertTrue(production.contains(emptyResources));
- }
-
- @Test
- public void contains_singleFixedResource_noneAtAll() {
- Production production = new Production();
- assertFalse(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_singleFixedResource_notEnough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 1);
- assertFalse(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_singleFixedResource_justEnough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 2);
- assertTrue(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_singleFixedResource_moreThanEnough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 3);
- assertTrue(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_singleFixedResource_moreThanEnough_amongOthers() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 3);
- production.addFixedResource(ResourceType.CLAY, 2);
- assertTrue(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_multipleFixedResources_notEnoughOfOne() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 3);
- production.addFixedResource(ResourceType.CLAY, 1);
- assertFalse(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void contains_multipleFixedResources_notEnoughOfBoth() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 1);
- production.addFixedResource(ResourceType.CLAY, 1);
- assertFalse(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void contains_multipleFixedResources_moreThanEnough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 3);
- production.addFixedResource(ResourceType.CLAY, 5);
- assertTrue(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void contains_singleChoice_containsEmpty() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.CLAY);
- assertTrue(production.contains(emptyResources));
- }
-
- @Test
- public void contains_singleChoice_enough() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- assertTrue(production.contains(resources1Wood));
- assertTrue(production.contains(resources1Stone));
- }
-
- @Test
- public void contains_multipleChoices_notBoth() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.CLAY);
- production.addChoice(ResourceType.STONE, ResourceType.CLAY);
- production.addChoice(ResourceType.STONE, ResourceType.CLAY);
- assertFalse(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void contains_multipleChoices_enough() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void contains_multipleChoices_enoughReverseOrder() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void contains_multipleChoices_moreThanEnough() {
- Production production = new Production();
- production.addChoice(ResourceType.LOOM, ResourceType.GLASS, ResourceType.PAPYRUS);
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void contains_mixedFixedAndChoice_enough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.WOOD, 1);
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void addAll_empty() {
- Production production = new Production();
- production.addAll(emptyResources);
- assertTrue(production.contains(emptyResources));
- }
-
- @Test
- public void addAll_singleResource() {
- Production production = new Production();
- production.addAll(resources1Stone);
- assertTrue(production.contains(resources1Stone));
- }
-
- @Test
- public void addAll_multipleResources() {
- Production production = new Production();
- production.addAll(resources2Stones3Clay);
- assertTrue(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void addAll_production_multipleFixedResources() {
- Production production = new Production();
- production.addAll(resources2Stones3Clay);
-
- Production production2 = new Production();
- production2.addAll(production);
-
- assertTrue(production2.contains(resources2Stones3Clay));
- }
-
- @Test
- public void addAll_production_multipleChoices() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
-
- Production production2 = new Production();
- production2.addAll(production);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void addAll_production_mixedFixedResourcesAndChoices() {
- Production production = new Production();
- production.addFixedResource(ResourceType.WOOD, 1);
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
-
- Production production2 = new Production();
- production2.addAll(production);
-
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void equals_falseWhenNull() {
- Production production = new Production();
- production.addFixedResource(ResourceType.GLASS, 1);
- production.addChoice(ResourceType.ORE, ResourceType.WOOD);
- //noinspection ObjectEqualsNull
- assertFalse(production.equals(null));
- }
-
- @Test
- public void equals_falseWhenDifferentClass() {
- Production production = new Production();
- production.addFixedResource(ResourceType.GLASS, 1);
- Resources resources = new Resources();
- resources.add(ResourceType.GLASS, 1);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(production.equals(resources));
- }
-
- @Test
- public void equals_trueWhenSame() {
- Production production = new Production();
- assertEquals(production, production);
- }
-
- @Test
- public void equals_trueWhenSameContent() {
- Production production1 = new Production();
- Production production2 = new Production();
- assertTrue(production1.equals(production2));
- production1.addFixedResource(ResourceType.GLASS, 1);
- production2.addFixedResource(ResourceType.GLASS, 1);
- assertTrue(production1.equals(production2));
- production1.addChoice(ResourceType.ORE, ResourceType.WOOD);
- production2.addChoice(ResourceType.ORE, ResourceType.WOOD);
- assertTrue(production1.equals(production2));
- }
-
- @Test
- public void hashCode_sameWhenSameContent() {
- Production production1 = new Production();
- Production production2 = new Production();
- assertEquals(production1.hashCode(), production2.hashCode());
- production1.addFixedResource(ResourceType.GLASS, 1);
- production2.addFixedResource(ResourceType.GLASS, 1);
- assertEquals(production1.hashCode(), production2.hashCode());
- production1.addChoice(ResourceType.ORE, ResourceType.WOOD);
- production2.addChoice(ResourceType.ORE, ResourceType.WOOD);
- assertEquals(production1.hashCode(), production2.hashCode());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java b/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java
deleted file mode 100644
index 674c90e7..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java
+++ /dev/null
@@ -1,431 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class ResourcesTest {
-
- @Test
- public void init_shouldBeEmpty() {
- Resources resources = new Resources();
- for (ResourceType resourceType : ResourceType.values()) {
- assertEquals(0, resources.getQuantity(resourceType));
- }
- }
-
- @Test
- public void add_zero() {
- Resources resources = new Resources();
- resources.add(ResourceType.CLAY, 0);
- assertEquals(0, resources.getQuantity(ResourceType.CLAY));
- }
-
- @Test
- public void add_simple() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 3);
- assertEquals(3, resources.getQuantity(ResourceType.WOOD));
- }
-
- @Test
- public void add_multipleCallsStacked() {
- Resources resources = new Resources();
- resources.add(ResourceType.ORE, 3);
- resources.add(ResourceType.ORE, 2);
- assertEquals(5, resources.getQuantity(ResourceType.ORE));
- }
-
- @Test
- public void add_interlaced() {
- Resources resources = new Resources();
- resources.add(ResourceType.GLASS, 3);
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.WOOD, 4);
- resources.add(ResourceType.GLASS, 2);
- assertEquals(5, resources.getQuantity(ResourceType.GLASS));
- }
-
- @Test
- public void addAll_empty() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources emptyResources = new Resources();
-
- resources.addAll(emptyResources);
- assertEquals(1, resources.getQuantity(ResourceType.STONE));
- assertEquals(3, resources.getQuantity(ResourceType.CLAY));
- assertEquals(0, resources.getQuantity(ResourceType.ORE));
- assertEquals(0, resources.getQuantity(ResourceType.GLASS));
- assertEquals(0, resources.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void addAll_zeros() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources emptyResources = new Resources();
- emptyResources.add(ResourceType.STONE, 0);
- emptyResources.add(ResourceType.CLAY, 0);
-
- resources.addAll(emptyResources);
- assertEquals(1, resources.getQuantity(ResourceType.STONE));
- assertEquals(3, resources.getQuantity(ResourceType.CLAY));
- assertEquals(0, resources.getQuantity(ResourceType.ORE));
- assertEquals(0, resources.getQuantity(ResourceType.GLASS));
- assertEquals(0, resources.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void addAll_same() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources resources2 = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 6);
-
- resources.addAll(resources2);
- assertEquals(3, resources.getQuantity(ResourceType.STONE));
- assertEquals(9, resources.getQuantity(ResourceType.CLAY));
- assertEquals(0, resources.getQuantity(ResourceType.ORE));
- assertEquals(0, resources.getQuantity(ResourceType.GLASS));
- assertEquals(0, resources.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void addAll_overlap() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources resources2 = new Resources();
- resources.add(ResourceType.CLAY, 6);
- resources.add(ResourceType.ORE, 4);
-
- resources.addAll(resources2);
- assertEquals(1, resources.getQuantity(ResourceType.STONE));
- assertEquals(9, resources.getQuantity(ResourceType.CLAY));
- assertEquals(4, resources.getQuantity(ResourceType.ORE));
- assertEquals(0, resources.getQuantity(ResourceType.GLASS));
- assertEquals(0, resources.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void contains_emptyContainsEmpty() {
- Resources emptyResources = new Resources();
- Resources emptyResources2 = new Resources();
- assertTrue(emptyResources.contains(emptyResources2));
- }
-
- @Test
- public void contains_singleTypeContainsEmpty() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
-
- Resources emptyResources = new Resources();
-
- assertTrue(resources.contains(emptyResources));
- }
-
- @Test
- public void contains_multipleTypesContainsEmpty() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources emptyResources = new Resources();
-
- assertTrue(resources.contains(emptyResources));
- }
-
- @Test
- public void contains_self() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- assertTrue(resources.contains(resources));
- }
-
- @Test
- public void contains_allOfEachType() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.STONE, 1);
- resources2.add(ResourceType.CLAY, 3);
-
- assertTrue(resources.contains(resources2));
- }
-
- @Test
- public void contains_someOfEachType() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.STONE, 1);
- resources2.add(ResourceType.CLAY, 3);
-
- assertTrue(resources.contains(resources2));
- }
-
- @Test
- public void contains_someOfSomeTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 3);
-
- assertTrue(resources.contains(resources2));
- }
-
- @Test
- public void contains_allOfSomeTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 4);
-
- assertTrue(resources.contains(resources2));
- }
-
- @Test
- public void minus_empty() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources emptyResources = new Resources();
-
- Resources diff = resources.minus(emptyResources);
- assertEquals(1, diff.getQuantity(ResourceType.STONE));
- assertEquals(3, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_self() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources diff = resources.minus(resources);
- assertEquals(0, diff.getQuantity(ResourceType.STONE));
- assertEquals(0, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_allOfEachType() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.STONE, 1);
- resources2.add(ResourceType.CLAY, 3);
-
- Resources diff = resources.minus(resources2);
- assertEquals(0, diff.getQuantity(ResourceType.STONE));
- assertEquals(0, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_someOfEachType() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.STONE, 1);
- resources2.add(ResourceType.CLAY, 3);
-
- Resources diff = resources.minus(resources2);
- assertEquals(1, diff.getQuantity(ResourceType.STONE));
- assertEquals(1, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_someOfSomeTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 3);
-
- Resources diff = resources.minus(resources2);
- assertEquals(2, diff.getQuantity(ResourceType.STONE));
- assertEquals(1, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_allOfSomeTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 4);
-
- Resources diff = resources.minus(resources2);
- assertEquals(2, diff.getQuantity(ResourceType.STONE));
- assertEquals(0, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_tooMuchOfExistingType() {
- Resources resources = new Resources();
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 5);
-
- Resources diff = resources.minus(resources2);
- assertEquals(0, diff.getQuantity(ResourceType.CLAY));
- }
-
- @Test
- public void minus_someOfAnAbsentType() {
- Resources resources = new Resources();
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.LOOM, 5);
-
- Resources diff = resources.minus(resources2);
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_someOfATypeWithZero() {
- Resources resources = new Resources();
- resources.add(ResourceType.LOOM, 0);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.LOOM, 5);
-
- Resources diff = resources.minus(resources2);
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void isEmpty_noElement() {
- Resources resources = new Resources();
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_singleZeroElement() {
- Resources resources = new Resources();
- resources.add(ResourceType.LOOM, 0);
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_multipleZeroElements() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 0);
- resources.add(ResourceType.ORE, 0);
- resources.add(ResourceType.LOOM, 0);
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_singleElementMoreThanZero() {
- Resources resources = new Resources();
- resources.add(ResourceType.LOOM, 3);
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_mixedZeroAndNonZeroElements() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 0);
- resources.add(ResourceType.LOOM, 3);
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_mixedZeroAndNonZeroElements_reverseOrder() {
- Resources resources = new Resources();
- resources.add(ResourceType.ORE, 3);
- resources.add(ResourceType.PAPYRUS, 0);
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void equals_falseWhenNull() {
- Resources resources = new Resources();
- resources.add(ResourceType.GLASS, 1);
- //noinspection ObjectEqualsNull
- assertFalse(resources.equals(null));
- }
-
- @Test
- public void equals_falseWhenDifferentClass() {
- Resources resources = new Resources();
- resources.add(ResourceType.GLASS, 1);
- Production production = new Production();
- production.addFixedResource(ResourceType.GLASS, 1);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(resources.equals(production));
- }
-
- @Test
- public void equals_trueWhenSame() {
- Resources resources = new Resources();
- assertEquals(resources, resources);
- }
-
- @Test
- public void equals_trueWhenSameContent() {
- Resources resources1 = new Resources();
- Resources resources2 = new Resources();
- assertTrue(resources1.equals(resources2));
- resources1.add(ResourceType.GLASS, 1);
- resources2.add(ResourceType.GLASS, 1);
- assertTrue(resources1.equals(resources2));
- }
-
- @Test
- public void hashCode_sameWhenSameContent() {
- Resources resources1 = new Resources();
- Resources resources2 = new Resources();
- assertEquals(resources1.hashCode(), resources2.hashCode());
- resources1.add(ResourceType.GLASS, 1);
- resources2.add(ResourceType.GLASS, 1);
- assertEquals(resources1.hashCode(), resources2.hashCode());
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java b/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java
deleted file mode 100644
index cd6661dc..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.*;
-import static org.junit.Assume.*;
-
-@RunWith(Theories.class)
-public class TradingRulesTest {
-
- @DataPoints
- public static int[] costs() {
- return new int[] {0, 1, 2};
- }
-
- @DataPoints
- public static Provider[] providers() {
- return Provider.values();
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @Theory
- public void computeCost_zeroForNoResources(int defaultCost) {
- TradingRules rules = new TradingRules(defaultCost);
- assertEquals(0, rules.computeCost(new ArrayList<>()));
- }
-
- @Theory
- public void computeCost_defaultCostWhenNoOverride(int defaultCost, Provider provider, ResourceType type) {
- TradingRules rules = new TradingRules(defaultCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, type);
- assertEquals(defaultCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_twiceDefaultFor2Resources(int defaultCost, Provider provider, ResourceType type) {
- TradingRules rules = new TradingRules(defaultCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, type, type);
- assertEquals(2 * defaultCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_overriddenCost(int defaultCost, int overriddenCost, Provider provider, ResourceType type) {
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(type, provider, overriddenCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, type);
- assertEquals(overriddenCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_defaultCostWhenOverrideOnOtherProviderOrType(int defaultCost, int overriddenCost,
- Provider overriddenProvider, ResourceType overriddenType, Provider provider, ResourceType type) {
- assumeTrue(overriddenProvider != provider || overriddenType != type);
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(overriddenType, overriddenProvider, overriddenCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, type);
- assertEquals(defaultCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_oneDefaultAndOneOverriddenType(int defaultCost, int overriddenCost,
- ResourceType overriddenType, Provider provider, ResourceType type) {
- assumeTrue(overriddenType != type);
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(overriddenType, provider, overriddenCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, overriddenType, type);
- assertEquals(defaultCost + overriddenCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_oneDefaultAndOneOverriddenProvider(int defaultCost, int overriddenCost,
- Provider overriddenProvider, Provider provider, ResourceType type) {
- assumeTrue(overriddenProvider != provider);
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(type, overriddenProvider, overriddenCost);
-
- List<BoughtResources> boughtResources = new ArrayList<>(2);
- boughtResources.add(TestUtils.createBoughtResources(provider, type));
- boughtResources.add(TestUtils.createBoughtResources(overriddenProvider, type));
-
- assertEquals(defaultCost + overriddenCost, rules.computeCost(boughtResources));
- }
-
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java b/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java
deleted file mode 100644
index b5ddb7b1..00000000
--- a/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java
+++ /dev/null
@@ -1,191 +0,0 @@
-package org.luxons.sevenwonders.game.test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.Science;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.cards.Decks;
-import org.luxons.sevenwonders.game.cards.Requirements;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.Provider;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-import org.luxons.sevenwonders.game.wonders.WonderStage;
-
-public class TestUtils {
-
- public static Game createGame(int id, int nbPlayers) {
- Settings settings = new Settings(nbPlayers, new CustomizableSettings());
- List<Player> players = TestUtils.createPlayers(nbPlayers);
- List<Board> boards = TestUtils.createBoards(nbPlayers);
- List<Card> cards = TestUtils.createSampleCards(0, nbPlayers * 7);
- Map<Integer, List<Card>> cardsPerAge = new HashMap<>();
- cardsPerAge.put(1, cards);
- return new Game(id, settings, players, boards, new Decks(cardsPerAge));
- }
-
- public static Table createTable(int nbPlayers) {
- return new Table(createBoards(nbPlayers));
- }
-
- public static List<Board> createBoards(int count) {
- List<Board> boards = new ArrayList<>(count);
- for (int i = 0; i < count; i++) {
- boards.add(createBoard(ResourceType.WOOD));
- }
- return boards;
- }
-
- public static List<Player> createPlayers(int count) {
- List<Player> players = new ArrayList<>(count);
- for (int i = 0; i < count; i++) {
- String username = "testUser" + i;
- String displayName = "Test User " + i;
- Player player = new Player(username, displayName);
- players.add(player);
- }
- return players;
- }
-
- public static Board createBoard(ResourceType initialResource) {
- Settings settings = new Settings(5);
- Wonder wonder = createWonder(initialResource);
-
- String username = "testUser" + initialResource.getSymbol();
- String displayName = "Test User " + initialResource.getSymbol();
- Player player = new Player(username, displayName);
-
- return new Board(wonder, player, settings);
- }
-
- public static Board createBoard(ResourceType initialResource, ResourceType... production) {
- Board board = createBoard(initialResource);
- board.getProduction().addAll(createFixedProduction(production));
- return board;
- }
-
- public static Board createBoard(ResourceType initialResource, int gold, ResourceType... production) {
- Board board = createBoard(initialResource, production);
- board.setGold(gold);
- return board;
- }
-
- public static Wonder createWonder() {
- return createWonder(ResourceType.WOOD);
- }
-
- public static Wonder createWonder(ResourceType initialResource) {
- WonderStage stage1 = new WonderStage();
- stage1.setRequirements(new Requirements());
- WonderStage stage2 = new WonderStage();
- stage1.setRequirements(new Requirements());
- WonderStage stage3 = new WonderStage();
- stage1.setRequirements(new Requirements());
- return new Wonder("Test Wonder " + initialResource.getSymbol(), initialResource, stage1, stage2, stage3);
- }
-
- public static Production createFixedProduction(ResourceType... producedTypes) {
- Production production = new Production();
- Resources fixedProducedResources = production.getFixedResources();
- fixedProducedResources.addAll(createResources(producedTypes));
- return production;
- }
-
- public static Resources createResources(ResourceType... types) {
- Resources resources = new Resources();
- for (ResourceType producedType : types) {
- resources.add(producedType, 1);
- }
- return resources;
- }
-
- public static BoughtResources createBoughtResources(Provider provider, ResourceType... resources) {
- BoughtResources boughtResources = new BoughtResources();
- boughtResources.setProvider(provider);
- boughtResources.setResources(TestUtils.createResources(resources));
- return boughtResources;
- }
-
- public static List<Card> createSampleCards(int fromIndex, int nbCards) {
- List<Card> sampleCards = new ArrayList<>();
- for (int i = fromIndex; i < fromIndex + nbCards; i++) {
- sampleCards.add(createCard(i, Color.BLUE));
- }
- return sampleCards;
- }
-
- public static Card createCard(String name) {
- return new Card(name, Color.BLUE, new Requirements(), null, null, null, null);
- }
-
- private static Card createCard(int num, Color color) {
- return new Card("Test Card " + num, color, new Requirements(), null, null, null, null);
- }
-
- public static Card createGuildCard(int num, Effect effect) {
- List<Effect> effects = Collections.singletonList(effect);
- return new Card("Test Guild " + num, Color.PURPLE, new Requirements(), effects, null, null, null);
- }
-
- public static void addCards(Board board, int nbCardsOfColor, int nbOtherCards, Color color) {
- addCards(board, nbCardsOfColor, color);
- Color otherColor = getDifferentColorFrom(color);
- addCards(board, nbOtherCards, otherColor);
- }
-
- public static void addCards(Board board, int nbCards, Color color) {
- for (int i = 0; i < nbCards; i++) {
- board.addCard(createCard(i, color));
- }
- }
-
- public static Color getDifferentColorFrom(Color... colors) {
- List<Color> forbiddenColors = Arrays.asList(colors);
- for (Color color : Color.values()) {
- if (!forbiddenColors.contains(color)) {
- return color;
- }
- }
- throw new IllegalArgumentException("All colors are forbidden!");
- }
-
- public static ScienceProgress createScienceProgress(int compasses, int wheels, int tablets, int jokers) {
- ScienceProgress progress = new ScienceProgress();
- progress.setScience(TestUtils.createScience(compasses, wheels, tablets, jokers));
- return progress;
- }
-
- public static Science createScience(int compasses, int wheels, int tablets, int jokers) {
- Science science = new Science();
- if (compasses > 0) {
- science.add(ScienceType.COMPASS, compasses);
- }
- if (wheels > 0) {
- science.add(ScienceType.WHEEL, wheels);
- }
- if (tablets > 0) {
- science.add(ScienceType.TABLET, tablets);
- }
- if (jokers > 0) {
- science.addJoker(jokers);
- }
- return science;
- }
-}
diff --git a/src/test/java/org/luxons/sevenwonders/repositories/GameRepositoryTest.java b/src/test/java/org/luxons/sevenwonders/repositories/GameRepositoryTest.java
deleted file mode 100644
index 5d7d558b..00000000
--- a/src/test/java/org/luxons/sevenwonders/repositories/GameRepositoryTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.luxons.sevenwonders.repositories;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.test.TestUtils;
-import org.luxons.sevenwonders.repositories.GameRepository.GameAlreadyExistsException;
-import org.luxons.sevenwonders.repositories.GameRepository.GameNotFoundException;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.fail;
-
-public class GameRepositoryTest {
-
- private GameRepository repository;
-
- @Before
- public void setUp() {
- repository = new GameRepository();
- }
-
- @Test(expected = GameAlreadyExistsException.class)
- public void add_failsOnExistingId() {
- Game game1 = TestUtils.createGame(0, 5);
- repository.add(game1);
- Game game2 = TestUtils.createGame(0, 7);
- repository.add(game2);
- }
-
- @Test(expected = GameNotFoundException.class)
- public void find_failsOnUnknownId() {
- repository.find(123);
- }
-
- @Test
- public void find_returnsTheSameObject() {
- Game game = TestUtils.createGame(0, 5);
- repository.add(game);
- assertSame(game, repository.find(0));
- }
-
- @Test(expected = GameNotFoundException.class)
- public void remove_failsOnUnknownId() {
- repository.remove(123);
- }
-
- @Test
- public void remove_succeeds() {
- Game game = TestUtils.createGame(0, 5);
- repository.add(game);
- assertNotNull(repository.find(0));
- repository.remove(0);
- try {
- repository.find(0);
- fail(); // the call to find() should have failed
- } catch (GameNotFoundException e) {
- // the game has been properly removed
- }
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java b/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java
deleted file mode 100644
index f5a8d800..00000000
--- a/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.luxons.sevenwonders.repositories;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.Lobby;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
-import org.luxons.sevenwonders.repositories.LobbyRepository.LobbyNotFoundException;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-public class LobbyRepositoryTest {
-
- private LobbyRepository repository;
-
- @Before
- public void setUp() {
- repository = new LobbyRepository(new GameDefinitionLoader());
- }
-
- @Test
- public void list_initiallyEmpty() {
- assertTrue(repository.list().isEmpty());
- }
-
- @Test
- public void list_returnsAllLobbies() {
- Player owner = new Player("owner", "The Owner");
- Lobby lobby1 = repository.create("Test Name 1", owner);
- Lobby lobby2 = repository.create("Test Name 2", owner);
- assertTrue(repository.list().contains(lobby1));
- assertTrue(repository.list().contains(lobby2));
- }
-
- @Test
- public void create_withCorrectOwner() {
- Player owner = new Player("owner", "The Owner");
- Lobby lobby = repository.create("Test Name", owner);
- assertTrue(lobby.isOwner(owner.getUsername()));
- }
-
- @Test(expected = LobbyNotFoundException.class)
- public void find_failsOnUnknownId() {
- repository.find(123);
- }
-
- @Test
- public void find_returnsTheSameObject() {
- Player owner = new Player("owner", "The Owner");
- Lobby lobby1 = repository.create("Test Name 1", owner);
- Lobby lobby2 = repository.create("Test Name 2", owner);
- assertSame(lobby1, repository.find(lobby1.getId()));
- assertSame(lobby2, repository.find(lobby2.getId()));
- }
-
- @Test(expected = LobbyNotFoundException.class)
- public void remove_failsOnUnknownId() {
- repository.remove(123);
- }
-
- @Test
- public void remove_succeeds() {
- Player owner = new Player("owner", "The Owner");
- Lobby lobby1 = repository.create("Test Name 1", owner);
- assertNotNull(repository.find(lobby1.getId()));
- repository.remove(lobby1.getId());
- try {
- repository.find(lobby1.getId());
- fail(); // the call to find() should have failed
- } catch (LobbyNotFoundException e) {
- // the lobby has been properly removed
- }
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/repositories/PlayerRepositoryTest.java b/src/test/java/org/luxons/sevenwonders/repositories/PlayerRepositoryTest.java
deleted file mode 100644
index d9e07b3f..00000000
--- a/src/test/java/org/luxons/sevenwonders/repositories/PlayerRepositoryTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.luxons.sevenwonders.repositories;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.repositories.PlayerRepository.PlayerNotFoundException;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-public class PlayerRepositoryTest {
-
- private PlayerRepository repository;
-
- @Before
- public void setUp() {
- repository = new PlayerRepository();
- }
-
- @Test
- public void contains_falseIfNoUserAdded() {
- assertFalse(repository.contains("anyUsername"));
- }
-
- @Test
- public void contains_trueForCreatedPlayer() {
- repository.createOrUpdate("player1", "Player 1");
- assertTrue(repository.contains("player1"));
- }
-
- @Test
- public void createOrUpdate_createsProperly() {
- Player player1 = repository.createOrUpdate("player1", "Player 1");
- assertEquals("player1", player1.getUsername());
- assertEquals("Player 1", player1.getDisplayName());
- }
-
- @Test
- public void createOrUpdate_updatesDisplayName() {
- Player player1 = repository.createOrUpdate("player1", "Player 1");
- Player player1Updated = repository.createOrUpdate("player1", "Much Better Name");
- assertSame(player1, player1Updated);
- assertEquals("Much Better Name", player1Updated.getDisplayName());
- }
-
- @Test(expected = PlayerNotFoundException.class)
- public void find_failsOnUnknownUsername() {
- repository.find("anyUsername");
- }
-
- @Test
- public void find_returnsTheSameObject() {
- Player player1 = repository.createOrUpdate("player1", "Player 1");
- Player player2 = repository.createOrUpdate("player2", "Player 2");
- assertSame(player1, repository.find("player1"));
- assertSame(player2, repository.find("player2"));
- }
-
- @Test(expected = PlayerNotFoundException.class)
- public void remove_failsOnUnknownUsername() {
- repository.remove("anyUsername");
- }
-
- @Test
- public void remove_succeeds() {
- repository.createOrUpdate("player1", "Player 1");
- assertTrue(repository.contains("player1"));
- repository.remove("player1");
- assertFalse(repository.contains("player1"));
- }
-} \ No newline at end of file
diff --git a/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java b/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java
deleted file mode 100644
index 1a799ff3..00000000
--- a/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.luxons.sevenwonders.validation;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Lobby;
-import org.luxons.sevenwonders.game.Player;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
-import org.luxons.sevenwonders.repositories.GameRepository;
-import org.luxons.sevenwonders.repositories.GameRepository.GameNotFoundException;
-import org.luxons.sevenwonders.repositories.LobbyRepository;
-import org.luxons.sevenwonders.repositories.LobbyRepository.LobbyNotFoundException;
-
-import static org.junit.Assert.*;
-
-public class DestinationAccessValidatorTest {
-
- private LobbyRepository lobbyRepository;
-
- private GameRepository gameRepository;
-
- private DestinationAccessValidator destinationAccessValidator;
-
- @Before
- public void setup() {
- gameRepository = new GameRepository();
- lobbyRepository = new LobbyRepository(new GameDefinitionLoader());
- destinationAccessValidator = new DestinationAccessValidator(lobbyRepository, gameRepository);
- }
-
- private Lobby createLobby(String gameName, String ownerUsername, String... otherPlayers) {
- Player owner = new Player(ownerUsername, ownerUsername);
- Lobby lobby = lobbyRepository.create(gameName, owner);
- for (String playerName : otherPlayers) {
- Player player = new Player(playerName, playerName);
- lobby.addPlayer(player);
- }
- return lobby;
- }
-
- private void createGame(String gameName, String ownerUsername, String... otherPlayers) {
- Lobby lobby = createLobby(gameName, ownerUsername, otherPlayers);
- Game game = lobby.startGame();
- gameRepository.add(game);
- }
-
- @Test
- public void validate_failsOnNullUser() {
- assertFalse(destinationAccessValidator.hasAccess(null, "doesNotMatter"));
- }
-
- @Test
- public void validate_successWhenNoReference() {
- assertTrue(destinationAccessValidator.hasAccess("", ""));
- assertTrue(destinationAccessValidator.hasAccess("", "test"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "test"));
- }
-
- @Test
- public void validate_successWhenNoRefFollows() {
- assertTrue(destinationAccessValidator.hasAccess("testUser", "/game/"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "/lobby/"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "prefix/game/"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "prefix/lobby/"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "/game//suffix"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "/lobby//suffix"));
- }
-
- @Test
- public void validate_successWhenRefIsNotANumber() {
- assertTrue(destinationAccessValidator.hasAccess("testUser", "/game/notANumber"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "/lobby/notANumber"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "prefix/game/notANumber"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "prefix/lobby/notANumber"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "/game/notANumber/suffix"));
- assertTrue(destinationAccessValidator.hasAccess("testUser", "/lobby/notANumber/suffix"));
- }
-
- @Test(expected = LobbyNotFoundException.class)
- public void validate_failWhenNoLobbyExist() {
- destinationAccessValidator.hasAccess("", "/lobby/0");
- }
-
- @Test(expected = GameNotFoundException.class)
- public void validate_failWhenNoGameExist() {
- destinationAccessValidator.hasAccess("", "/game/0");
- }
-
- @Test(expected = LobbyNotFoundException.class)
- public void validate_failWhenReferencedLobbyDoesNotExist() {
- createLobby("Test Game", "ownerUser1");
- createLobby("Test Game 2", "ownerUser2");
- destinationAccessValidator.hasAccess("doesNotMatter", "/lobby/3");
- }
-
- @Test(expected = GameNotFoundException.class)
- public void validate_failWhenReferencedGameDoesNotExist() {
- createGame("Test Game 1", "user1", "user2", "user3");
- createGame("Test Game 2", "user4", "user5", "user6");
- destinationAccessValidator.hasAccess("doesNotMatter", "/game/3");
- }
-
- @Test
- public void validate_failWhenUserIsNotPartOfReferencedLobby() {
- createLobby("Test Game", "ownerUser");
- destinationAccessValidator.hasAccess("userNotInLobby", "/lobby/0");
- }
-
- @Test
- public void validate_failWhenUserIsNotPartOfReferencedGame() {
- createGame("Test Game", "ownerUser", "otherUser1", "otherUser2");
- destinationAccessValidator.hasAccess("userNotInGame", "/game/0");
- }
-
- @Test
- public void validate_successWhenUserIsOwnerOfReferencedLobby() {
- createLobby("Test Game 1", "user1");
- assertTrue(destinationAccessValidator.hasAccess("user1", "/lobby/0"));
- createLobby("Test Game 2", "user2");
- assertTrue(destinationAccessValidator.hasAccess("user2", "/lobby/1"));
- }
-
- @Test
- public void validate_successWhenUserIsMemberOfReferencedLobby() {
- createLobby("Test Game 1", "user1", "user2");
- assertTrue(destinationAccessValidator.hasAccess("user2", "/lobby/0"));
- createLobby("Test Game 2", "user3", "user4");
- assertTrue(destinationAccessValidator.hasAccess("user4", "/lobby/1"));
- }
-
- @Test
- public void validate_successWhenUserIsOwnerOfReferencedGame() {
- createGame("Test Game 1", "owner1", "user2", "user3");
- assertTrue(destinationAccessValidator.hasAccess("owner1", "/game/0"));
- createGame("Test Game 2", "owner4", "user5", "user6");
- assertTrue(destinationAccessValidator.hasAccess("owner4", "/game/1"));
- }
-
- @Test
- public void validate_successWhenUserIsMemberOfReferencedGame() {
- createGame("Test Game 1", "owner1", "user2", "user3");
- assertTrue(destinationAccessValidator.hasAccess("user2", "/game/0"));
- createGame("Test Game 2", "owner4", "user5", "user6");
- assertTrue(destinationAccessValidator.hasAccess("user6", "/game/1"));
- }
-
-} \ No newline at end of file
bgstack15