diff --git a/README.md b/README.md index 9b73f1b..cafcc66 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,14 @@ **PokéNurse** is a desktop application for Windows and Mac that allows you to manage your pokémon from Pokémon Go without the need for a mobile device. You can now favorite, transfer, and evolve from the comfort of your own home! -## Downloads for v2.1.0 +## Downloads for v2.2.0 You may view all the releases [here](https://github.com/vinnymac/PokeNurse/releases) -* [macOS](https://github.com/vinnymac/PokeNurse/releases/download/v2.1.0/PokeNurse.dmg) -* [Windows](https://github.com/vinnymac/PokeNurse/releases/download/v2.1.0/PokeNurse.exe) -* [Linux 32 bit](https://github.com/vinnymac/PokeNurse/releases/download/v2.1.0/PokeNurse-ia32.deb) -* [Linux 64 bit](https://github.com/vinnymac/PokeNurse/releases/download/v2.1.0/PokeNurse-x64.deb) +* [macOS](https://github.com/vinnymac/PokeNurse/releases/download/v2.2.0/PokeNurse.dmg) +* [Windows](https://github.com/vinnymac/PokeNurse/releases/download/v2.2.0/PokeNurse.exe) +* [Debian 32 bit](https://github.com/vinnymac/PokeNurse/releases/download/v2.2.0/PokeNurse-ia32.deb) +* [Debian 64 bit](https://github.com/vinnymac/PokeNurse/releases/download/v2.2.0/PokeNurse-x64.deb) +* [AppImage 32 bit](https://github.com/vinnymac/PokeNurse/releases/download/v2.2.0/PokeNurse-ia32.AppImage) +* [AppImage 64 bit](https://github.com/vinnymac/PokeNurse/releases/download/v2.2.0/PokeNurse-x64.AppImage) ## Examples ![Login Window](app/loginExample.png) diff --git a/app/actions/authenticate.js b/app/actions/authenticate.js index e670390..ee8c986 100644 --- a/app/actions/authenticate.js +++ b/app/actions/authenticate.js @@ -28,7 +28,7 @@ const userLoginFailed = createAction('USER_LOGIN_FAILED') const accountPath = path.join(remote.app.getPath('appData'), '/pokenurse/account.json') export default { - login({ method, username, password, hashingKey }) { + login({ method, username, password, hashingKey, apiVersion }) { return async (dispatch) => { dispatch(userLoginStarted()) @@ -49,8 +49,8 @@ export default { useHashingServer: !!hashingKey, } - // Use API version 0.53 (minimum version for hashing server) - if (hashingKey) options.version = 5300 + // Use default API version + if (hashingKey) options.version = apiVersion || 5704 const client = new pogobuf.Client(options) diff --git a/app/app.global.css b/app/app.global.css index 3931912..6ad6557 100644 --- a/app/app.global.css +++ b/app/app.global.css @@ -1,6 +1,13 @@ @import "~bootstrap/dist/css/bootstrap.css"; @import "~font-awesome/css/font-awesome.css"; +/* Let the app use native fonts */ +body { +font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Noto, Cantarell, "Open Sans", "Avenir Next", Avenir, "Helvetica Neue", Helvetica, "Lucida Grande", Arial, sans-serif; +text-rendering: optimizeLegibility; +-webkit-font-smoothing: antialiased; +} + /**** Menu Styles ****/ /* Position and sizing of burger button */ .bm-burger-button { @@ -276,12 +283,12 @@ display:inline-block; margin-left: 30px; margin-right: 30px; background: #fafafa; -box-shadow: 0px 1px 15px rgba(0, 0, 0, 0.43); +box-shadow: 0 15px 50px rgba(0, 0, 0, 0.35); padding: 10px; text-align: center; max-width: 550px; margin: auto; -border-radius: 3px; +border-radius: .5rem; width: 450px; box-sizing: border-box; padding-top: 50px; @@ -400,6 +407,9 @@ margin: auto; left: 0; right: 0; cursor: pointer; +//max-width: 400px; +height: 90%; +image-rendering: pixelated; } #pokemon_sprite_wrapper { @@ -442,27 +452,25 @@ transform: rotate(0deg) translate(-192px); #pokemon_name { font-size: 40px; -margin-top: 3px; color:#466c6d; text-transform: capitalize; } #pokemon_health_bar { display: block; -margin: auto; +margin: 8px auto; width: 240px; background: #6ceaba; -height: 7px; -margin-top: 8px; -border-radius: 2px; +height: 8px; +border-radius: 1rem; border: 1px solid #61cea4; box-sizing: border-box; } #pokemon_health { font-size: 20px; -margin-top: 4px; color: #383e3c; +margin-bottom: 16px; } .pokemon_info { @@ -471,13 +479,17 @@ width: 100%; height: 80px; position:relative; border-bottom: 1px solid #e2e2e2; +border-top: 1px solid #e2e2e2; +margin-bottom: -1px; } .pokemon-info-item { -display: inline-block; +display: inline-flex; +flex-direction: column; +justify-content: center; +align-content: center; height: 100%; position: relative; -width: 100%; } .split-2-way{ @@ -488,37 +500,39 @@ width: 49%; width: 32%; } -.split-2-way:nth-child(1) { -box-sizing: border-box; -border-right: 1px solid #e2e2e2; +.split-4-way{ +width: 24%; } -.split-3-way:nth-child(1) { +.split-2-way, +.split-3-way, +.split-4-way { box-sizing: border-box; -border-right: 1px solid #e2e2e2; +border-left: 1px solid #e2e2e2; } -.split-3-way:nth-child(2) { -box-sizing: border-box; -border-right: 1px solid #e2e2e2; +.split-2-way:nth-child(1), +.split-3-way:nth-child(1), +.split-4-way:nth-child(1) { + border-left: none; } .pokemon-info-item-title { color: #717171; -margin-top:6px; +text-transform: uppercase; +letter-spacing: 0.5px; } .pokemon-info-item-text { font-size: 16px; -margin-top: 12px; text-transform: capitalize; +font-weight: 600; } .pokemon-stat-unit { color: #717171; -font-size:14px; +font-size: 14px; position: relative; -top:1px; text-transform: lowercase; } @@ -537,28 +551,33 @@ color: #3c605c; #pokemon_evolve_info { display: block; width: 100%; -height: 100px; -margin-top: 20px; +margin: 16px 0; position: relative; -border-bottom: 1px solid #e2e2e2; +border-top: 1px solid #e2e2e2; } .pokemon-evolve-info-item { display:inline-block; -height:70px; +margin-left: 1rem; +} + +.pokemon-evolve-info-item:nth-child(2) { +margin-left: 0; } .pokemon-evolve-info-item-title { -margin-top:-20px; +margin-top: -16px; text-transform: capitalize; text-decoration: none; color:#466c6d; } .pokemon-evolve-info-title { -margin-top:0px; +margin-top:24px; +margin-bottom: 8px; color: #717171; text-transform: uppercase; +letter-spacing: 0.5px; } .pokemon_move_info { @@ -569,6 +588,7 @@ position:relative; .pokemon-move-item { display:inline-flex; +align-items: center; position: relative; height: 60px; width:100%; @@ -576,14 +596,16 @@ color:#3C4741; } .pokemon-move-item-title { -margin-top: 15px; -margin-bottom: 15px; +margin-top: 24px; +margin-bottom: 8px; color: #717171; text-transform: uppercase; +letter-spacing: 0.5px; } .pokemon-move-item.mine{ -border:1px solid #D3D3D3; +border-radius: .5rem; +border:1px solid #B8B8BB; background-color:#E8E8EE; } @@ -593,10 +615,7 @@ border:0px solid white; .pokemon-move-item-text-area{ display:inline-block; -position:relative; -height:100%; width:40%; -padding-top: 6px; } .pokemon-move-title { @@ -615,21 +634,18 @@ text-transform: capitalize; .pokemon-move-damage { display: inline-block; -position: relative; -height:100%; -width:30%; +width:20%; text-transform: capitalize; color:#3c605c; -line-height: 50px; text-align: center; +font-weight: 600; +font-size: 16px; } .pokemon-move-cost { -display: inline-block; -position: relative; -height:10px; -width:30%; -padding-top: 10px; +display: inline-flex; +justify-content: space-around; +width:40%; } .pokemon-move-cost-item { @@ -640,10 +656,8 @@ background: -moz-linear-gradient(top, rgba(68,180,252,1) 0%, rgba(104,225,251,1 background: -webkit-linear-gradient(top, rgba(68,180,252,1) 0%,rgba(104,225,251,1) 100%); background: linear-gradient(to bottom, rgba(68,180,252,1) 0%,rgba(104,225,251,1) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#44b4fc', endColorstr='#68e1fb',GradientType=0 ); -margin-left:3px; -margin-top:10px; border:3px solid #afdaff; -border-radius:5px; +border-radius:1rem; } .pokemon-cp{ @@ -652,17 +666,28 @@ fontSize: 18px; font-weight: bold; } -#detailModal .modal-outline-white{ -text-shadow: - 1px 2px 0 #000, - -1px -1px 0 #000, - 1px -1px 0 #000, - -1px 1px 0 #000, - 1px 1px 0 #000; --webkit-text-fill-color: white; +#detailModal .modal-outline-white { + color: white; + opacity: 1; +} + +.close { + color: white; + opacity: 0.75; +} + +.close:hover, .close:focus { + color: white; + opacity: 1; } + #detailModal .modal-header{ -border-bottom: 0px solid; +border-bottom: 0; +} + +.modal-content { + border: none; + border-radius: .5rem; } .pokemon-move-type.normal {color: #A8A878;} diff --git a/app/package.json b/app/package.json index aa5ef89..13d41b7 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "PokeNurse", "productName": "PokeNurse", - "version": "2.1.0", + "version": "2.2.0", "description": "A tool for Pokémon Go to aid in transferring and evolving Pokémon", "main": "./main.js", "author": { diff --git a/app/reducers/trainer.js b/app/reducers/trainer.js index b0a0d7c..1118420 100644 --- a/app/reducers/trainer.js +++ b/app/reducers/trainer.js @@ -73,7 +73,10 @@ function getNewSpeciesState(state) { } }) updatedSpecieState.checkAll = checkAll - speciesState[pid] = Object.assign({}, existingSpecieState, updatedSpecieState) + speciesState[pid] = { + ...existingSpecieState, + ...updatedSpecieState, + } // specie state does not exist } else { speciesState[pid] = { @@ -103,62 +106,69 @@ function getNewMonsters(state, monsters, sortBy, sortDir) { specie.pokemon = getSortedPokemon(specie, specieState) }) - - return Object.assign({}, monsters, { - species: sortedSpecies - }) + return { + ...monsters, + species: sortedSpecies, + } } // Anytime the speciesState changes we should recount selected function updateSpecies(state, index, updater) { - const speciesAtIndex = state.monsters.species[index] - const updatedSpecies = Object.assign({}, speciesAtIndex, updater(speciesAtIndex)) - - const updatedMonsters = Object.assign({}, state.monsters, { - species: Immutable.array.set(state.monsters.species, index, updatedSpecies) - }) + const specieAtIndexPokemonId = index + 1 + const indexForSpecie = state.monsters.species.findIndex(specie => specie.pokemon_id === specieAtIndexPokemonId) + const specieAtIndex = state.monsters.species[indexForSpecie] + const updatedSpecies = { ...specieAtIndex, ...updater(specieAtIndex) } + + const updatedMonsters = { + ...state.monsters, + species: Immutable.array.set(state.monsters.species, indexForSpecie, updatedSpecies), + } - const updatedStateWithMonsters = Object.assign({}, state, { - monsters: updatedMonsters - }) + const updatedStateWithMonsters = { + ...state, + monsters: updatedMonsters, + } const { speciesState, selectedCount } = getNewSpeciesState(updatedStateWithMonsters) - return Object.assign({}, updatedStateWithMonsters, { + return { + ...updatedStateWithMonsters, speciesState, - selectedCount - }) + selectedCount, + } } function updateSpeciesState(state, id, updater) { const { - speciesState + speciesState, } = state - const newSpecieState = {} const existingSpecieState = speciesState[String(id)] - newSpecieState[String(id)] = Object.assign( - {}, - existingSpecieState, - updater(existingSpecieState) - ) - - return Object.assign({}, speciesState, newSpecieState) + return { + ...speciesState, + [String(id)]: { + ...existingSpecieState, + ...updater(existingSpecieState), + }, + } } function updatePokemonState(speciesState, pid, updater) { const existingPokemonByIdState = speciesState.pokemonState[String(pid)] const newPokemonByIdState = {} - newPokemonByIdState[String(pid)] = Object.assign( - {}, - existingPokemonByIdState, - updater(existingPokemonByIdState) - ) - return Object.assign({}, speciesState.pokemonState, newPokemonByIdState) + newPokemonByIdState[String(pid)] = { + ...existingPokemonByIdState, + ...updater(existingPokemonByIdState), + } + + return { + ...speciesState.pokemonState, + ...newPokemonByIdState + } } function updateMonster(state, pokemon, options = {}) { @@ -169,9 +179,10 @@ function updateMonster(state, pokemon, options = {}) { return updateSpecies(state, speciesIndex, (speciesAtIndex) => { const index = speciesAtIndex.pokemon.findIndex((p) => p.id === pokemon.id) - const sorted = getSortedPokemon(Object.assign({}, speciesAtIndex, { - pokemon: Immutable.array.set(speciesAtIndex.pokemon, index, updatedPokemon) - }), state.speciesState[pokemon.pokemon_id]) + const sorted = getSortedPokemon({ + ...speciesAtIndex, + pokemon: Immutable.array.set(speciesAtIndex.pokemon, index, updatedPokemon), + }, state.speciesState[pokemon.pokemon_id]) return { // make sure we sort the new pokemon index now that we updated it pokemon: sorted @@ -195,7 +206,10 @@ function getNewSortDirectionFromSortBy(sortBy, specieState) { export default handleActions({ GET_TRAINER_INFO_SUCCESS(state, action) { - return Object.assign({}, state, action.payload) + return { + ...state, + ...action.payload, + } }, GET_TRAINER_INFO_FAILED(state, action) { @@ -206,7 +220,10 @@ export default handleActions({ GET_TRAINER_POKEMON_SUCCESS(state, action) { const monsters = getNewMonsters(state, action.payload, state.sortBy, state.sortDir) - const updatedStateWithMonsters = Object.assign({}, state, { monsters }) + const updatedStateWithMonsters = { + ...state, + monsters, + } const { speciesState, @@ -214,10 +231,11 @@ export default handleActions({ } = getNewSpeciesState(updatedStateWithMonsters) // TODO always sort the data before we return it - return Object.assign({}, updatedStateWithMonsters, { + return { + ...updatedStateWithMonsters, speciesState, - selectedCount - }) + selectedCount, + } }, GET_TRAINER_POKEMON_FAILED(state, action) { @@ -246,23 +264,25 @@ export default handleActions({ // TODO Maybe just generic UPDATE_TRAINER_STORE // using this too much right now, taking the easy way out of refactoring UPDATE_MONSTER_SORT(state, action) { - return Object.assign({}, state, action.payload) + return { ...state, ...action.payload } }, SORT_SPECIES(state, action) { const { sortBy, - speciesIndex + speciesIndex, // this index could be wrong when sorted, so we use findIndex } = action.payload - const pokemonId = state.monsters.species[speciesIndex].pokemon_id + const pokemonId = speciesIndex + 1 + const specieState = state.speciesState[pokemonId] const sortDir = getNewSortDirectionFromSortBy(sortBy, specieState) - const updatedSpeciesState = Object.assign({}, state, { - speciesState: updateSpeciesState(state, pokemonId, () => ({ sortDir, sortBy })) - }) + const updatedSpeciesState = { + ...state, + speciesState: updateSpeciesState(state, pokemonId, () => ({ sortDir, sortBy })), + } return updateSpecies(updatedSpeciesState, speciesIndex, (speciesAtIndex) => { const sorted = getSortedPokemon(speciesAtIndex, null, sortBy, sortDir) @@ -332,13 +352,14 @@ export default handleActions({ if (specie.count < 1) return state - return Object.assign({}, state, { + return { + ...state, speciesState: updateSpeciesState(state, specie.pokemon_id, (speciesState) => { const newCollapsed = !speciesState.collapsed return { collapsed: newCollapsed } - }) - }) + }), + } }, CHECK_ALL_BY_SPECIES(state, action) { @@ -360,11 +381,10 @@ export default handleActions({ } } - newPokemonState[id] = Object.assign( - {}, - specieState.pokemonState[id], - { check: newCheckAllState } - ) + newPokemonState[id] = { + ...specieState.pokemonState[id], + check: newCheckAllState, + } }) return { @@ -373,10 +393,11 @@ export default handleActions({ } }) - return Object.assign({}, state, { + return { + ...state, speciesState, - selectedCount - }) + selectedCount, + } }, CHECK_POKEMON(state, action) { @@ -410,10 +431,11 @@ export default handleActions({ } ) - return Object.assign({}, state, { + return { + ...state, speciesState, - selectedCount - }) + selectedCount, + } }, SORT_ALL_SPECIES(state, action) { @@ -421,15 +443,17 @@ export default handleActions({ const sortDir = getNewSortDirectionFromSortBy(sortBy, state) - const monsters = Object.assign({}, state.monsters, { - species: getSortedSpecies(state.monsters, sortBy, sortDir) - }) + const monsters = { + ...state.monsters, + species: getSortedSpecies(state.monsters, sortBy, sortDir), + } - return Object.assign({}, state, { + return { + ...state, sortDir, sortBy, monsters - }) + } }, SORT_WITH_DEFAULTS(state, action) { @@ -440,30 +464,31 @@ export default handleActions({ defaultSpecieSortDirection, } = action.payload - const updatedSpeciesAndMonstersState = Object.assign({}, state.monsters, { + const updatedSpeciesAndMonstersState = { + ...state.monsters, species: getSortedSpecies(state.monsters, defaultPokedexSortBy, defaultPokedexSortDirection).map((s) => { const sorted = getSortedPokemon(s, null, defaultSpecieSortBy, defaultSpecieSortDirection) - return Object.assign({}, s, { - pokemon: sorted - }) - }) - }) + return { ...s, pokemon: sorted } + }), + } const updatedSpeciesState = mapValues(state.speciesState, (specieState) => { - const newSpecieState = Object.assign({}, specieState, { + const newSpecieState = { + ...specieState, sortBy: defaultSpecieSortBy, sortDir: defaultSpecieSortDirection, - }) + } return newSpecieState }) - return Object.assign({}, state, { + return { + ...state, monsters: updatedSpeciesAndMonstersState, sortBy: defaultPokedexSortBy, sortDir: defaultPokedexSortDirection, speciesState: updatedSpeciesState, - }) + } }, }, initialState) diff --git a/app/screens/Detail/components/CinematicMove.js b/app/screens/Detail/components/CinematicMove.js index 5daed80..4d1e9f9 100644 --- a/app/screens/Detail/components/CinematicMove.js +++ b/app/screens/Detail/components/CinematicMove.js @@ -21,7 +21,7 @@ class CinematicMove extends React.Component { myMove } = this.props - const chargeMoveStyle = { width: `${move.energy_cost}px` } + const chargeMoveStyle = { width: `${move.energy_cost - 3}%` } const chargedMoveBars = times(Math.floor(100 / move.energy_cost), (i) =>
diff --git a/app/screens/Detail/components/ModalBody.js b/app/screens/Detail/components/ModalBody.js index f3448cb..b94cace 100644 --- a/app/screens/Detail/components/ModalBody.js +++ b/app/screens/Detail/components/ModalBody.js @@ -93,21 +93,21 @@ class ModalBody extends React.Component {
{`HP ${hp}`}
-
-
{`${type.join(' / ')}`}
-
Type
-
-
+
- {`${weight} `} - kg + {`${weight}`} +  kg
Weight
-
+
+
{`${type.join(' / ')}`}
+
Type
+
+
- {`${height} `} - m + {`${height}`} +  m
Height
@@ -119,7 +119,7 @@ class ModalBody extends React.Component {
{candies}
-
{`${name} Candies`}
+
{`${name} Candy`}
diff --git a/app/screens/Detail/components/QuickMove.js b/app/screens/Detail/components/QuickMove.js index 134a8ba..f7610c9 100644 --- a/app/screens/Detail/components/QuickMove.js +++ b/app/screens/Detail/components/QuickMove.js @@ -42,7 +42,7 @@ class QuickMove extends React.Component { delayShow={100} show > -
{`${move.name}`}
+
{`${move.name.replace(' Fast', '')}`}
{`${move.type}`}
diff --git a/app/screens/Detail/index.js b/app/screens/Detail/index.js index 9c64dd9..22463f3 100644 --- a/app/screens/Detail/index.js +++ b/app/screens/Detail/index.js @@ -56,7 +56,9 @@ class ModalDialog extends React.Component {
- +

{this.props.name}

diff --git a/app/screens/Login/components/LoginFormContainer.js b/app/screens/Login/components/LoginFormContainer.js index 030a0f5..a000320 100644 --- a/app/screens/Login/components/LoginFormContainer.js +++ b/app/screens/Login/components/LoginFormContainer.js @@ -29,8 +29,14 @@ const AUTH_METHODS = { const hashKeyTooltip = ( - Hash Keys for 0.53+ support, instead of the potentially unsafe 0.45 API. - Note that Hash Keys currently have varying costs based on your Requests per Minute. + This is a safer way to interact with the API. + Hash Keys currently have varying costs based on your Requests per Minute. + +) + +const apiVersionTooltip = ( + + Use specific API Version, 0.53 is 5300, 0.57.4 is 5704, etc. ) @@ -147,10 +153,22 @@ class LoginForm extends React.Component { { this.hashKey = c }} defaultValue={credentials.hashingKey || ''} /> + + + + + + { this.apiVersion = c }} + defaultValue={credentials.apiVersion || ''} + /> @@ -200,6 +218,7 @@ class LoginForm extends React.Component { const password = findDOMNode(this.password).value const hashingKey = findDOMNode(this.hashKey).value const rememberMe = findDOMNode(this.rememberMe).checked + const apiVersion = findDOMNode(this.apiVersion).value if (!username) { ipcRenderer.send('error-message', 'A username is required to login.') @@ -216,6 +235,7 @@ class LoginForm extends React.Component { username, password, hashingKey, + apiVersion, } if (rememberMe) { diff --git a/app/screens/Table/components/Species.js b/app/screens/Table/components/Species.js index 58056fc..9d9619d 100644 --- a/app/screens/Table/components/Species.js +++ b/app/screens/Table/components/Species.js @@ -148,6 +148,8 @@ class Species extends React.Component { if (specie.evolves > 0) { const totalCandyNeeded = specie.candyToEvolve * specie.count const extraCandyNeeded = totalCandyNeeded - specie.candy + const extraPokemonNeeded = Math.floor((extraCandyNeeded * -1) / specie.candyToEvolve) + if (extraCandyNeeded > 0) { extraCandyNeededSpan = ( ) - } else if (extraCandyNeeded < 0) { + } else if (extraPokemonNeeded > 0 && extraCandyNeeded < 0) { extraPokemonNeededSpan = ( - {` +${Math.floor((extraCandyNeeded * -1) / specie.candyToEvolve)}`} + {` +${extraPokemonNeeded}`} ) } diff --git a/package.json b/package.json index 009687c..39259d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "PokeNurse", - "version": "2.1.0", + "version": "2.2.0", "description": "A tool for Pokémon Go to aid in transferring and evolving Pokémon", "main": "main.js", "scripts": { @@ -81,7 +81,7 @@ "asar": "0.13.0", "babel-core": "6.23.1", "babel-eslint": "7.1.1", - "babel-loader": "6.3.2", + "babel-loader": "6.4.0", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-webpack-loaders": "0.8.0", @@ -92,14 +92,14 @@ "babel-preset-stage-0": "6.22.0", "babel-register": "6.23.0", "babili-webpack-plugin": "0.0.9", - "cross-env": "3.1.4", + "cross-env": "3.2.3", "css-loader": "0.26.1", "del": "^2.2.2", "devtron": "^1.3.0", - "electron": "1.4.15", + "electron": "1.6.2", "electron-builder": "10.15.1", "electron-devtools-installer": "2.1.0", - "eslint": "3.16.1", + "eslint": "3.17.1", "eslint-config-airbnb": "10.0.1", "eslint-formatter-pretty": "^1.1.0", "eslint-import-resolver-webpack": "0.8.1", @@ -107,7 +107,7 @@ "eslint-plugin-jsx-a11y": "2.2.2", "eslint-plugin-no-loops": "^0.3.0", "eslint-plugin-react": "6.10.0", - "express": "4.14.1", + "express": "4.15.2", "extract-text-webpack-plugin": "^1.0.1", "file-loader": "0.10.0", "html-webpack-plugin": "2.28.0", @@ -116,20 +116,20 @@ "lodash": "4.17.4", "minimist": "^1.2.0", "moment": "2.17.1", - "postcss": "5.2.15", + "postcss": "5.2.16", "react-addons-perf": "^15.4.2", "react-bootstrap": "^0.30.3", - "react-burger-menu": "1.10.12", + "react-burger-menu": "1.10.14", "react-hot-loader": "3.0.0-beta.6", "redux-actions": "1.2.1", - "redux-logger": "2.8.1", + "redux-logger": "2.8.2", "semver": "^5.3.0", "style-loader": "^0.13.1", "url-loader": "^0.5.7", "webpack": "1.14.0", "webpack-dashboard": "0.2.1", "webpack-dev-middleware": "1.10.1", - "webpack-hot-middleware": "2.17.0", + "webpack-hot-middleware": "2.17.1", "webpack-merge": "2.6.0", "webpack-validator": "2.3.0" }, @@ -137,13 +137,13 @@ "async-file": "^2.0.2", "bootstrap": "^3.3.7", "electron-debug": "^1.1.0", - "electron-localshortcut": "^1.0.0", + "electron-localshortcut": "1.1.0", "font-awesome": "^4.7.0", "node-pogo-protos": "2.7.0", "pogobuf": "1.10.0", "react": "15.4.2", "react-dom": "15.4.2", - "react-redux": "5.0.2", + "react-redux": "5.0.3", "redux": "^3.6.0", "redux-thunk": "2.2.0", "source-map-support": "0.4.11" diff --git a/yarn.lock b/yarn.lock index d4e073b..1ddde43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -94,9 +94,9 @@ 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.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" ansi-regex@^2.0.0: version "2.0.0" @@ -661,9 +661,9 @@ babel-helpers@^6.23.0: babel-runtime "^6.22.0" babel-template "^6.23.0" -babel-loader@6.3.2: - version "6.3.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.3.2.tgz#18de4566385578c1b4f8ffe6cbc668f5e2a5ef03" +babel-loader@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.0.tgz#e98c239662a22533b9e7a49594ef216d7635ea28" dependencies: find-cache-dir "^0.1.1" loader-utils "^0.2.16" @@ -2261,11 +2261,12 @@ cross-env@^3.1.1: dependencies: cross-spawn "^3.0.1" -cross-env@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.1.4.tgz#56e8bca96f17908a6eb1bc2012ca126f92842130" +cross-env@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.2.3.tgz#a43a0799b8ec422d0279b829ce8d7cf2da6b17ac" dependencies: - cross-spawn "^3.0.1" + cross-spawn "^5.1.0" + is-windows "^1.0.0" cross-spawn@^3.0.1: version "3.0.1" @@ -2281,6 +2282,14 @@ cross-spawn@^4.0.0: lru-cache "^4.0.1" which "^1.2.9" +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-unzip@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/cross-unzip/-/cross-unzip-0.0.2.tgz#5183bc47a09559befcf98cc4657964999359372f" @@ -2467,6 +2476,12 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" + dependencies: + ms "0.7.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2534,7 +2549,7 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@~1.1.0: +depd@~1.1.0, depd@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -3076,9 +3091,9 @@ eslint-plugin-react@6.10.0: jsx-ast-utils "^1.3.4" object.assign "^4.0.4" -eslint@3.16.1: - version "3.16.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.16.1.tgz#9bc31fc7341692cf772e80607508f67d711c5609" +eslint@3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.17.1.tgz#b80ae12d9c406d858406fccda627afce33ea10ea" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -3157,9 +3172,9 @@ esutils@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" -etag@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" eve@~0.4.2: version "0.4.2" @@ -3208,9 +3223,9 @@ expand-tilde@^1.2.2: dependencies: os-homedir "^1.0.1" -express@4.14.1: - version "4.14.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.14.1.tgz#646c237f766f148c2120aff073817b9e4d7e0d33" +express@4.15.2: + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" dependencies: accepts "~1.3.3" array-flatten "1.1.1" @@ -3218,23 +3233,25 @@ express@4.14.1: content-type "~1.0.2" cookie "0.3.1" cookie-signature "1.0.6" - debug "~2.2.0" + debug "2.6.1" depd "~1.1.0" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.7.0" - finalhandler "0.5.1" - fresh "0.3.0" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.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.3" - qs "6.2.0" + qs "6.4.0" range-parser "~1.2.0" - send "0.14.2" - serve-static "~1.11.2" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" type-is "~1.6.14" utils-merge "1.0.0" vary "~1.1.0" @@ -3337,13 +3354,15 @@ filled-array@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" -finalhandler@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.1.tgz#2c400d8d4530935bc232549c5fa385ec07de6fcd" +finalhandler@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755" dependencies: - debug "~2.2.0" + debug "2.6.1" + encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" + parseurl "~1.3.1" statuses "~1.3.1" unpipe "~1.0.0" @@ -3437,9 +3456,9 @@ 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" +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" fs-exists-sync@^0.1.0: version "0.1.0" @@ -3835,12 +3854,13 @@ htmlparser2@~3.3.0: domutils "1.1" readable-stream "1.0" -http-errors@~1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" dependencies: + depd "1.1.0" inherits "2.0.3" - setprototypeof "1.0.2" + setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" http-signature@~0.10.0: @@ -4165,6 +4185,10 @@ is-windows@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" +is-windows@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.0.tgz#c61d61020c3ebe99261b781bd3d1622395f547f8" + 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" @@ -5190,9 +5214,9 @@ pbkdf2@^3.0.3: dependencies: create-hmac "^1.1.2" -pcrypt@laverdet/pcrypt: +pcrypt@starkevin/pcrypt: version "1.0.0" - resolved "https://codeload.github.com/laverdet/pcrypt/tar.gz/a74de46ae39d54c2d9897f6b081a0f3a31b45f50" + resolved "https://codeload.github.com/starkevin/pcrypt/tar.gz/4b6dc0be094f0d891bff01c09d1225a5e5330dbe" pend@~1.2.0: version "1.2.0" @@ -5624,9 +5648,9 @@ qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" -qs@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" +qs@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" query-string@^4.1.0: version "4.2.3" @@ -5705,9 +5729,9 @@ react-bootstrap@^0.30.3: uncontrollable "^4.0.1" warning "^3.0.0" -react-burger-menu@1.10.12: - version "1.10.12" - resolved "https://registry.yarnpkg.com/react-burger-menu/-/react-burger-menu-1.10.12.tgz#503584c9b171a659171a5f9326b2282ad063ac87" +react-burger-menu@1.10.14: + version "1.10.14" + resolved "https://registry.yarnpkg.com/react-burger-menu/-/react-burger-menu-1.10.14.tgz#3917c1c33dd74e6e28c871eba45293a2f41284e5" dependencies: browserify-optional "^1.0.0" classnames "^2.1.1" @@ -5947,9 +5971,9 @@ redux-actions@1.2.1: lodash "^4.13.1" reduce-reducers "^0.1.0" -redux-logger@2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-2.8.1.tgz#c00e689ba00342f44858701d76b1d73fbade72bd" +redux-logger@2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-2.8.2.tgz#52140a89afa1c1d25312cc17649c116650bf7fca" dependencies: deep-diff "0.3.4" @@ -6193,32 +6217,32 @@ semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0, "semver@2 || 3 || 4 version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -send@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.14.2.tgz#39b0438b3f510be5dc6f667a11f71689368cdeef" +send@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" dependencies: - debug "~2.2.0" + debug "2.6.1" 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.1" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" mime "1.3.4" ms "0.7.2" on-finished "~2.3.0" range-parser "~1.2.0" statuses "~1.3.1" -serve-static@~1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.2.tgz#2cf9889bd4435a320cc36895c9aa57bd662e6ac7" +serve-static@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" parseurl "~1.3.1" - send "0.14.2" + send "0.15.1" set-blocking@^1.0.0: version "1.0.0" @@ -6236,9 +6260,9 @@ 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" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" sha.js@^2.3.6: version "2.4.8" @@ -6250,6 +6274,16 @@ sha.js@2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +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.7.5: version "0.7.5" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675" @@ -6950,11 +6984,11 @@ webpack-dev-middleware@1.10.1: path-is-absolute "^1.0.0" range-parser "^1.0.3" -webpack-hot-middleware@2.17.0: - version "2.17.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.17.0.tgz#5af55fd2bc2f9a4392edd553f2a0fbebd4d75e78" +webpack-hot-middleware@2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.17.1.tgz#0c8fbf6f93ff29c095d684b07ab6d6c0f2f951d7" dependencies: - ansi-html "0.0.6" + ansi-html "0.0.7" html-entities "^1.2.0" querystring "^0.2.0" strip-ansi "^3.0.0"