diff --git a/generatePokemonData.ts b/generatePokemonData.ts index 2ee5c6b..84aa9ef 100644 --- a/generatePokemonData.ts +++ b/generatePokemonData.ts @@ -2,9 +2,7 @@ import * as fs from 'fs'; import Pokemon from 'pokemongo-json-pokedex/output/pokemon.json'; import { ILeaguePokemon, IPokemon, IStats, League, Grade } from 'app/models/Pokemon'; -interface ICpAndTotalFound { - [ key : number ] : Array; -} +type ICpAndTotalFound = Record>; interface IStatsDistribution { great : ICpAndTotalFound; ultra : ICpAndTotalFound; @@ -33,8 +31,8 @@ const getClosestCpMultiplierIndex = (value : number) => { }; const familyOrder : Array = []; -const familyEvolutionOrder : { [ key : string ] : Array } = {}; -const familyEncountered : { [ key : string ] : Array } = {}; +const familyEvolutionOrder : Record> = {}; +const familyEncountered : Record> = {}; Pokemon.forEach((mon) => { const baseAtk = mon.stats.baseAttack; const baseDef = mon.stats.baseDefense; diff --git a/package.json b/package.json index 4549a37..f213d25 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,13 @@ "license": "UNLICENSED", "scripts": { "#": "DO NOT ADD '-d' OPTION TO WEBPACK OR ALL SOURCEMAPS WILL BREAK: https://webpack.js.org/api/cli/#shortcuts", + "lint": "tslint --project tslint.json", "package": "yarn build -- --config webpack.config.prod.js --bail --display-used-exports -p", "package-for-test": "yarn build -- --config webpack.config.test.js --bail --display-used-exports", "watch": "yarn build -- --config webpack.config.js --colors --debug --output-pathinfo --progress --watch", "build": "node ./node_modules/webpack/bin/webpack.js --cache=true --display-error-details --profile", "clean": "rm -rf ./dist/*", - "tsnode": "./node_modules/.bin/ts-node" + "tsnode": "./node_modules/.bin/ts-node -r tsconfig-paths/register" }, "devDependencies": { "@babel/core": "^7.2.2", @@ -21,6 +22,7 @@ "@types/node": "^10.12.18", "@types/react": "^16.7.18", "@types/react-dom": "^16.0.11", + "@types/react-redux": "^6.0.12", "babel-loader": "^8.0.4", "babel-plugin-transform-builtin-extend": "^1.1.2", "css-loader": "^2.1.0", @@ -40,6 +42,7 @@ "stylelint-webpack-plugin": "^0.10.5", "ts-loader": "^5.3.2", "ts-node": "^7.0.1", + "tsconfig-paths": "^3.7.0", "tslint": "^5.12.0", "tslint-eslint-rules": "^5.4.0", "tslint-loader": "^3.5.4", @@ -52,7 +55,12 @@ }, "dependencies": { "pokemongo-json-pokedex": "^3.4.6", + "prop-types": "^15.6.2", "react": "^16.7.0", - "react-dom": "^16.7.0" + "react-dom": "^16.7.0", + "react-redux": "^6.0.0", + "redux": "^4.0.1", + "redux-thunk": "^2.3.0", + "typesafe-actions": "^3.0.0" } } diff --git a/src/ts/api/PokemonService.ts b/src/ts/api/PokemonService.ts index 6835e9c..4c050fa 100644 --- a/src/ts/api/PokemonService.ts +++ b/src/ts/api/PokemonService.ts @@ -12,7 +12,7 @@ export class PokemonService implements IPokemonService { is_active: true, }; - return AjaxUtils.ajaxGet('/api/billing/plan', queryParameters) + return AjaxUtils.ajaxGet('/dist/db/order.json', queryParameters) .then((response : Array) => { return Promise.resolve(this.serializePokemonList(response)); }); @@ -22,23 +22,24 @@ export class PokemonService implements IPokemonService { const pokemonList = jsonPokemonList.reduce((result : Array, pokemonJson) => { try { if (typeof pokemonJson.name !== 'string') { - throw 'pokemon missing name'; + throw new Error('pokemon missing name'); } if (typeof pokemonJson.id !== 'string') { - throw 'pokemon missing id'; + throw new Error('pokemon missing id'); } if (typeof pokemonJson.family !== 'string') { - throw 'pokemon missing family'; + throw new Error('pokemon missing family'); } if (typeof pokemonJson.dex !== 'number') { - throw 'pokemon missing dex'; + throw new Error('pokemon missing dex'); } if (typeof pokemonJson.stats !== 'object') { - throw 'pokemon missing stats'; + throw new Error('pokemon missing stats'); } const pokemon : IPokemon = { ...pokemonJson }; result.push(pokemon); } catch (e) { + /* tslint:disable-next-line:no-console */ console.error(pokemonJson, e.message); } return result; diff --git a/src/ts/app/PokemonApp.tsx b/src/ts/app/PokemonApp.tsx new file mode 100644 index 0000000..23a885b --- /dev/null +++ b/src/ts/app/PokemonApp.tsx @@ -0,0 +1,42 @@ +import * as React from 'react'; +import { connect } from 'react-redux'; +import { Dispatch } from 'redux'; + +import { appReducers } from './index'; + +import * as ActionsPokemonSelectList from './PokemonSelectList/actions'; +import { IPokemonSelectListState, ThunkDispatchPokemonSelectList } from './PokemonSelectList/types'; + +import { PokemonSelectList } from './PokemonSelectList/PokemonSelectList'; + +interface IPokemonAppProps { + pokemonSelectListState : IPokemonSelectListState; +} + +interface IConnectedPokemonAppProps extends IPokemonAppProps { + dispatch : ThunkDispatchPokemonSelectList; +} + +class PokemonApp extends React.Component { + constructor(props : IConnectedPokemonAppProps) { + super(props); + } + + public componentWillMount() { + this.props.dispatch(ActionsPokemonSelectList.fetchPokemonList()); + } + + public render() { + return ( + + ); + } +} + +const mapStateToProps = (state : ReturnType) : IPokemonAppProps => { + return { + pokemonSelectListState: state.pokemonSelectListState, + }; +}; + +export const ConnectedPokemonApp = connect(mapStateToProps)(PokemonApp); diff --git a/src/ts/app/PokemonSelectList/PokemonSelectList.tsx b/src/ts/app/PokemonSelectList/PokemonSelectList.tsx new file mode 100644 index 0000000..b44f381 --- /dev/null +++ b/src/ts/app/PokemonSelectList/PokemonSelectList.tsx @@ -0,0 +1,17 @@ +import * as React from 'react'; + +import { IPokemon } from 'app/models/Pokemon'; + +export interface IPokemonSelectListProps { + pokemonList : Array; +} + +export class PokemonSelectList extends React.Component { + public render() { + return ( +
+ { this.props.pokemonList.map((pokemon, index) =>
{ pokemon.name }
) } +
+ ); + } +} diff --git a/src/ts/app/PokemonSelectList/actions.ts b/src/ts/app/PokemonSelectList/actions.ts new file mode 100644 index 0000000..2df5224 --- /dev/null +++ b/src/ts/app/PokemonSelectList/actions.ts @@ -0,0 +1,20 @@ +import { action } from 'typesafe-actions'; + +import { IPokemon } from 'app/models/Pokemon'; + +import { PokemonSelectListActionTypes, ThunkResult } from './types'; + +export const setPokemonList = (pokemonList : Array) => action(PokemonSelectListActionTypes.SET_POKEMON_LIST, { pokemonList }); + +export const fetchPokemonList = ( +) : ThunkResult> => { + return (dispatch, getState, extraArguments) => { + return new Promise((resolve, reject) => { + extraArguments.services.pokemonService.getPokemonList() + .then((pokemonList) => { + dispatch(setPokemonList(pokemonList)); + resolve(); + }); + }); + }; +}; diff --git a/src/ts/app/PokemonSelectList/reducers.ts b/src/ts/app/PokemonSelectList/reducers.ts new file mode 100644 index 0000000..def52c7 --- /dev/null +++ b/src/ts/app/PokemonSelectList/reducers.ts @@ -0,0 +1,29 @@ +import { Reducer } from 'redux'; + +import * as Actions from './actions'; +import { IPokemonSelectListState, PokemonSelectListActionTypes } from './types'; + +export const initialState : IPokemonSelectListState = { + pokemonList: [], + pokemonListFiltered: [], +}; + +const reduceSetPokemonList = ( + state : IPokemonSelectListState, + action : ReturnType +) : IPokemonSelectListState => ({ + ...state, + pokemonList: action.payload.pokemonList, +}); + +export const PokemonSelectListReducers : Reducer = ( + state : IPokemonSelectListState = initialState, + action, +) : IPokemonSelectListState => { + switch (action.type) { + case PokemonSelectListActionTypes.SET_POKEMON_LIST: + return reduceSetPokemonList(state, action as ReturnType); + default: + return state; + } +}; diff --git a/src/ts/app/PokemonSelectList/types.ts b/src/ts/app/PokemonSelectList/types.ts new file mode 100644 index 0000000..1884904 --- /dev/null +++ b/src/ts/app/PokemonSelectList/types.ts @@ -0,0 +1,32 @@ +import { Action } from 'redux'; +import { ThunkAction, ThunkDispatch } from 'redux-thunk'; + +import { IProviderExtraArguments } from 'common/models/IProviderExtraArguments'; + +import { PokemonService } from 'api/PokemonService'; + +import { IPokemon } from 'app/models/Pokemon'; + +export interface IPokemonSelectListState { + pokemonList : Array; + pokemonListFiltered : Array; +} + +export interface IPokemonSelectListStore { + pokemonSelectListState : IPokemonSelectListState; +} + +export interface IPokemonSelectListServices { + pokemonService : PokemonService; +} + +export interface IPokemonSelectListExtraArguments extends IProviderExtraArguments { + services : IPokemonSelectListServices; +} + +export type ThunkResult = ThunkAction; +export type ThunkDispatchPokemonSelectList = ThunkDispatch; + +export const PokemonSelectListActionTypes = { + SET_POKEMON_LIST: 'POKEMON_SELECT_LIST/SET_POKEMON_LIST', +}; diff --git a/src/ts/app/components/PokemonSelectList/PokemonSelectList.tsx b/src/ts/app/components/PokemonSelectList/PokemonSelectList.tsx deleted file mode 100644 index 741c545..0000000 --- a/src/ts/app/components/PokemonSelectList/PokemonSelectList.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import * as React from 'react'; - -import { PokemonService } from 'api/PokemonService'; - -export interface IPokemonSelectListProps {} - -export class PokemonSelectList extends React.Component { - - constructor(props : IPokemonSelectListProps) { - super(props); - } - - public componentWillMount() { - // TODO: switch to redux - // PokemonService - } - - public render() { - return ( -
Pokemon List
- ); - } -} diff --git a/src/ts/app/index.tsx b/src/ts/app/index.tsx index 404b39b..a7eb5d4 100644 --- a/src/ts/app/index.tsx +++ b/src/ts/app/index.tsx @@ -1,11 +1,61 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import * as Redux from 'redux'; +import thunk from 'redux-thunk'; -import { PokemonSelectList } from './components/PokemonSelectList/PokemonSelectList'; +import { IProviderExtraArguments } from 'common/models/IProviderExtraArguments'; + +import { IPokemonSelectListExtraArguments } from 'app/PokemonSelectList/types'; + +import { PokemonService } from 'api/PokemonService'; + +import { PokemonSelectListReducers } from './PokemonSelectList/reducers'; + +import { ConnectedPokemonApp } from './PokemonApp'; import 'styles/index.scss'; +export const appReducers = Redux.combineReducers({ + pokemonSelectListState : PokemonSelectListReducers +}); + +const extraArguments : IPokemonSelectListExtraArguments = { + services: { + pokemonService: new PokemonService() + } +}; + +const store = Redux.createStore( + appReducers, + // enableBatching(appReducers), + Redux.applyMiddleware( + thunk.withExtraArgument(extraArguments) + ) +); + ReactDOM.render( - , + + + , document.getElementById('pokemon-mount') ); + +// const BATCH_ACTION_TYPE = '_BATCHING_REDUCER_BATCH_ACTION_'; + +// // TODO Allow this to also take ThunkAction +// export function batchActions(actions : Array) : Redux.Action { +// return action(BATCH_ACTION_TYPE, actions); +// } + +// // This is called in the Provider on all Reducers +// export function enableBatching(reducer : Redux.Reducer) { +// return function batchingReducer(state : any, action : Redux.Action) { +// if (action && (action.type === BATCH_ACTION_TYPE)) { +// const payload = (action as Redux.Action).payload; +// return payload.reduce(batchingReducer, state); +// } + +// return reducer(state, action); +// }; +// } diff --git a/src/ts/common/models/IProviderExtraArguments.ts b/src/ts/common/models/IProviderExtraArguments.ts new file mode 100644 index 0000000..1d763c0 --- /dev/null +++ b/src/ts/common/models/IProviderExtraArguments.ts @@ -0,0 +1,3 @@ +export interface IProviderExtraArguments { + services : object; +} diff --git a/tsconfig.json b/tsconfig.json index 47873d3..cee3d39 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,7 @@ "paths": { "api/*": ["src/ts/api/*"], "app/*": ["src/ts/app/*"], + "common/*": ["src/ts/common/*"], "styles/*": ["src/scss/*"] }, "plugins": [{ diff --git a/tslint.json b/tslint.json index 626c020..29312ec 100644 --- a/tslint.json +++ b/tslint.json @@ -1,7 +1,7 @@ { "extends": ["tslint:latest", "tslint-react", "tslint-eslint-rules"], "rules": { - "no-implicit-dependencies": [true, ["styles", "app", "api"]], + "no-implicit-dependencies": [true, ["api", "app", "common", "styles"]], "no-default-export": true, "no-unused-expression": true, "no-unused-variable": [true, "react"], diff --git a/webpack.config.js b/webpack.config.js index 7379a10..b880960 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -11,6 +11,7 @@ const typescriptResolve = { // keep in sync with tsconfig.json `paths` and tslint.json `no-implicit-dependencies` 'api': path.resolve('./src/ts/api'), 'app': path.resolve('./src/ts/app'), + 'common': path.resolve('./src/ts/common'), 'styles': path.resolve('./src/scss'), }, extensions: ['.ts', '.tsx', '.js'], @@ -50,6 +51,7 @@ module.exports = function (env, tsLoaderHappyPackMode) { }, resolve: typescriptResolve, devtool: 'source-map', + mode: 'development', plugins: plugins, module: { rules: [ diff --git a/webpack.config.prod.js b/webpack.config.prod.js index 1d77f3d..2a98218 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -7,6 +7,7 @@ const StyleLintPlugin = require('stylelint-webpack-plugin'); module.exports = function(env) { var generatedConfig = config(env, false); + generatedConfig.mode = 'production'; generatedConfig.plugins = [ new webpack.LoaderOptionsPlugin({ minimize: true diff --git a/yarn.lock b/yarn.lock index 36930e7..528600a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -673,6 +673,13 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.1.0" +"@babel/runtime@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" + integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg== + dependencies: + regenerator-runtime "^0.12.0" + "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" @@ -719,6 +726,11 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/node@^10.12.18": version "10.12.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" @@ -736,6 +748,14 @@ dependencies: "@types/react" "*" +"@types/react-redux@^6.0.12": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-6.0.12.tgz#f3e9a400b8d40db43ffd8949ce14db4aa17a53ce" + integrity sha512-fvcpm7cfW/JMflRdZgegCVbSGYt/hyEWQKriesaLZDRDjBGKQsAiui08VCQg5lBpocPmulVGKFhICtOAcMUPOQ== + dependencies: + "@types/react" "*" + redux "^4.0.0" + "@types/react@*", "@types/react@^16.7.18": version "16.7.18" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.7.18.tgz#f4ce0d539a893dd61e36cd11ae3a5e54f5a48337" @@ -1964,6 +1984,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deepmerge@^2.0.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -2813,6 +2838,13 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz#c09c0555c84b38a7ede6912b61efddafd6e75e1e" + integrity sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw== + dependencies: + react-is "^16.3.2" + homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" @@ -2981,7 +3013,7 @@ interpret@^1.1.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -invariant@^2.2.2: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -3487,7 +3519,7 @@ longest-streak@^2.0.1: resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" integrity sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -4686,6 +4718,23 @@ react-dom@^16.7.0: prop-types "^15.6.2" scheduler "^0.12.0" +react-is@^16.3.2, react-is@^16.6.3: + version "16.7.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.7.0.tgz#c1bd21c64f1f1364c6f70695ec02d69392f41bfa" + integrity sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g== + +react-redux@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-6.0.0.tgz#09e86eeed5febb98e9442458ad2970c8f1a173ef" + integrity sha512-EmbC3uLl60pw2VqSSkj6HpZ6jTk12RMrwXMBdYtM6niq0MdEaRq9KYCwpJflkOZj349BLGQm1MI/JO1W96kLWQ== + dependencies: + "@babel/runtime" "^7.2.0" + hoist-non-react-statics "^3.2.1" + invariant "^2.2.4" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-is "^16.6.3" + react@^16.7.0: version "16.7.0" resolved "https://registry.yarnpkg.com/react/-/react-16.7.0.tgz#b674ec396b0a5715873b350446f7ea0802ab6381" @@ -4777,6 +4826,19 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" +redux-thunk@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" + integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== + +redux@^4.0.0, redux@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" + integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + regenerate-unicode-properties@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" @@ -5613,6 +5675,11 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= +symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + table@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837" @@ -5808,6 +5875,17 @@ ts-node@^7.0.1: source-map-support "^0.5.6" yn "^2.0.0" +tsconfig-paths@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.7.0.tgz#02ae978db447b22e09dafcd4198be95c4885ceb2" + integrity sha512-7iE+Q/2E1lgvxD+c0Ot+GFFmgmfIjt/zCayyruXkXQ84BLT85gHXy0WSoQSiuFX9+d+keE/jiON7notV74ZY+A== + dependencies: + "@types/json5" "^0.0.29" + deepmerge "^2.0.1" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" @@ -5909,6 +5987,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typesafe-actions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/typesafe-actions/-/typesafe-actions-3.0.0.tgz#8b162ea11fa7383d4b4d96afc181118e84e06e10" + integrity sha512-NLpRc/FY+jPfWL0aUXQzjxPyF0Xug2om6akaoRLQ18KGwP2yYNBJu9vkv2q1q+Cx/+edy2Qf6O8xXnYY/xwz1A== + typescript@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5"