diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..ac0080a --- /dev/null +++ b/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": [ + [ "@babel/preset-env", { "modules": false } ] + ] +} diff --git a/.gitignore b/.gitignore index 84b6143..e36a8bf 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ yarn.error junit.xml *.DS_Store .token -dev-app-update.yml \ No newline at end of file +dev-app-update.yml +webpack-visualization/ \ No newline at end of file diff --git a/package.json b/package.json index b6aea07..3bd3092 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "build-main": "cross-env NODE_ENV=production webpack --config webpack.main.prod.config.js", "build-renderer": "cross-env NODE_ENV=production webpack --config webpack.renderer.prod.config.js", "prebuild": "rm -rf ./dist", - "build": "npm run build-main && npm run build-renderer", + "build": "concurrently \"npm:build-main\" \"npm:build-renderer\"", "start-renderer-dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.renderer.dev.config.js", "start-main-dev": "webpack --config webpack.main.config.js &&cross-env NODE_OPTIONS=--experimental-worker electron .", "start-dev": "cross-env NODE_ENV=development START_HOT=1 npm run start-renderer-dev", @@ -90,6 +90,7 @@ "@babel/preset-env": "^7.4.5", "@babel/preset-react": "^7.0.0", "@babel/preset-typescript": "^7.3.3", + "@babel/runtime": "^7.5.5", "@hot-loader/react-dom": "^16.8.6", "@jest-runner/electron": "^2.0.2", "@svgr/webpack": "^4.3.2", @@ -113,34 +114,54 @@ "@types/styled-components": "^4.1.16", "@types/webdriverio": "^4.8.7", "@types/webpack-env": "^1.13.3", + "antd": "^3.19.7", "babel-loader": "^8.0.6", + "classnames": "^2.2.6", "codecov": "^3.5.0", + "concurrently": "^5.0.1", "cross-env": "^5.1.3", - "css-loader": "^2.1.1", + "deox": "^2.1.0", + "echarts": "^4.5.0", + "echarts-for-react": "^2.0.15-beta.1", "electron": "^6.0.2", "electron-builder": "^21.2.0", "electron-devtools-installer": "^2.2.4", "electron-rebuild": "^1.8.5", + "electron-updater": "^4.1.2", "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.14.0", "file-loader": "^3.0.1", "fork-ts-checker-webpack-plugin": "^1.3.4", + "get-app-icon": "^1.0.0", "html-webpack-plugin": "^3.2.0", "husky": "^2.3.0", "image-webpack-loader": "^4.6.0", "jest": "^24.8.0", "jest-junit": "^7.0.0", "lint-staged": "^8.1.7", + "lodash-es": "^4.17.15", + "marked": "^0.7.0", "native-ext-loader": "^2.3.0", + "nedb": "^1.8.0", "node-sass": "^4.12.0", "prettier": "^1.17.1", + "prop-types": "^15.7.2", + "react": "^16.8.6", + "react-beautiful-dnd": "^12.2.0", + "react-dom": "^16.8.6", + "react-hot-keys": "^2.4.4", "react-hot-loader": "^4.8.8", + "react-redux": "^7.0.3", + "react-stack-grid": "^0.7.1", "react-test-renderer": "^16.8.6", + "react-trend": "zxch3n/react-trend", + "redux": "^4.0.1", "redux-devtools-extension": "^2.13.5", - "sass-loader": "^7.1.0", + "redux-thunk": "^2.3.0", + "shortid": "^2.2.14", "source-map-loader": "^0.2.4", "spectron": "^8.0.0", - "style-loader": "^0.23.1", + "styled-components": "^4.3.2", "ts-jest": "^24.0.2", "ts-loader": "^6.0.4", "tslint": "^5.16.0", @@ -154,33 +175,21 @@ "webpack-dev-server": "^3.4.1", "webpack-merge": "^4.2.1", "webpack-node-externals": "^1.7.2", - "worker-loader": "^2.0.0" + "webpack-visualizer-plugin": "^0.1.11", + "wordcloud": "^1.1.0", + "worker-loader": "^2.0.0", + "css-loader": "^3.3.2", + "sass-loader": "^8.0.0", + "style-loader": "^1.0.1" }, "dependencies": { - "@babel/runtime": "^7.5.5", - "active-win": "^5.1.2", - "antd": "^3.19.7", - "classnames": "^2.2.6", - "deox": "^2.1.0", - "echarts": "^4.5.0", - "echarts-for-react": "^2.0.15-beta.1", - "electron-updater": "^4.1.2", - "get-app-icon": "^1.0.0", - "lodash": "^4.17.14", - "marked": "^0.7.0", - "nedb": "^1.8.0", - "prop-types": "^15.7.2", - "react": "^16.8.6", - "react-beautiful-dnd": "^11.0.5", - "react-dom": "^16.8.6", - "react-hot-keys": "^2.4.4", - "react-redux": "^7.0.3", - "react-stack-grid": "^0.7.1", - "react-trend": "zxch3n/react-trend", - "redux": "^4.0.1", - "redux-thunk": "^2.3.0", - "shortid": "^2.2.14", - "styled-components": "^4.3.2", - "wordcloud": "^1.1.0" - } + "active-win": "^5.1.2" + }, + "sideEffects": [ + "**/*.css", + "**/*.scss", + "./src/main/**/*", + "./src/config.ts", + "**/electron" + ] } diff --git a/src/main/AutoUpdater.ts b/src/main/AutoUpdater.ts index 9ab9723..3d0b661 100644 --- a/src/main/AutoUpdater.ts +++ b/src/main/AutoUpdater.ts @@ -1,6 +1,5 @@ import { autoUpdater } from 'electron-updater'; import { GithubOptions } from 'builder-util-runtime'; -import { readFileSync } from 'fs'; export class AutoUpdater { constructor(logger: any) { @@ -13,7 +12,6 @@ export class AutoUpdater { }); autoUpdater.on('update-available', info => { console.log('update available'); - console.log(info); sendStatusToWindow('update-available', `Version: ${info.version}; ${info.releaseName}`); }); autoUpdater.on('update-not-available', info => { diff --git a/src/main/main.ts b/src/main/main.ts index 53e3324..37f06c6 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -105,6 +105,7 @@ app.on('ready', async () => { } } ]; + // @ts-ignore const contextMenu = Menu.buildFromTemplate(menuItems); mGlobal.tray.setToolTip('Pomodoro Logger'); @@ -120,7 +121,6 @@ app.on('ready', async () => { await createWindow(); const autoUpdater = new AutoUpdater((type: string, info: any) => { - console.log(info); if (win) { win.webContents.send(type, info); } diff --git a/src/renderer/components/Analyser/Analyser.tsx b/src/renderer/components/Analyser/Analyser.tsx index 2171808..05c448a 100644 --- a/src/renderer/components/Analyser/Analyser.tsx +++ b/src/renderer/components/Analyser/Analyser.tsx @@ -82,7 +82,6 @@ export const Analyser: React.FC = (props: Props) => { console.error(err); return; } - console.log(doc); doc.sort((a, b) => a.startTime - b.startTime); setRecord(doc[doc.length - 1]); }); diff --git a/src/renderer/components/Application.tsx b/src/renderer/components/Application.tsx index b3528ec..19681e9 100644 --- a/src/renderer/components/Application.tsx +++ b/src/renderer/components/Application.tsx @@ -7,6 +7,7 @@ import History from './History'; import Analyser from './Analyser'; import ReactHotkeys from 'react-hot-keys'; import { connect } from 'react-redux'; +import { remote } from 'electron'; import { actions as timerActions, switchTab, TimerActionTypes } from './Timer/action'; import { actions as historyActions, HistoryActionCreatorTypes } from './History/action'; import { kanbanActions } from './Kanban/reducer'; @@ -19,7 +20,6 @@ import Timer from './Timer'; import { UserGuide } from './UserGuide/UserGuide'; import { UpdateController } from './UpdateController'; import { CardInDetail } from './Kanban/Card/CardInDetail'; -import '../style/global.css'; import { ConnectedPomodoroSankey } from './Visualization/PomodoroSankey'; const Main = styled.div` @@ -51,6 +51,10 @@ const Application = (props: Props) => { case 'ctrl+shift+tab': props.switchTab(-1); break; + case 'ctrl+f12': + console.log('I hear you!'); + remote.getCurrentWebContents().openDevTools({ activate: true, mode: 'detach' }); + break; } }; @@ -124,7 +128,7 @@ const Application = (props: Props) => { - + ); }; diff --git a/src/renderer/components/History/History.tsx b/src/renderer/components/History/History.tsx index 0a3b0c2..923a528 100644 --- a/src/renderer/components/History/History.tsx +++ b/src/renderer/components/History/History.tsx @@ -43,7 +43,7 @@ interface Props extends HistoryActionCreatorTypes, HistoryState { chooseRecord: (r: PomodoroRecord) => void; } -export const History: React.FunctionComponent = (props: Props) => { +export const History: React.FunctionComponent = React.memo((props: Props) => { const [targetDate, setTargetDate] = useState(undefined); const [shownPomodoros, setPomodoros] = useState(undefined); const [aggInfo, setAggInfo] = useState({ @@ -86,7 +86,6 @@ export const History: React.FunctionComponent = (props: Props) => { }) .then((ans: AggPomodoroInfo) => { setAggInfo(ans); - console.log('set agg info'); }); }, [props.chosenId, props.expiringKey]); useEffect(() => { @@ -94,12 +93,10 @@ export const History: React.FunctionComponent = (props: Props) => { return; } - console.log('Date Effect'); const db = new DBWorker('sessionDB'); const dateStart = new Date(`${targetDate[0]}-${targetDate[1]}-${targetDate[2]}`).getTime(); const nextDay = dateStart + 24 * 3600 * 1000; db.find({ startTime: { $lt: nextDay, $gte: dateStart } }, {}).then(docs => { - console.log('docs', docs); if (docs && docs.length) { setPomodoros(docs); } @@ -236,4 +233,4 @@ export const History: React.FunctionComponent = (props: Props) => { ); -}; +}); diff --git a/src/renderer/components/Kanban/Board/Board.tsx b/src/renderer/components/Kanban/Board/Board.tsx index ab12adf..15ab03a 100644 --- a/src/renderer/components/Kanban/Board/Board.tsx +++ b/src/renderer/components/Kanban/Board/Board.tsx @@ -1,10 +1,11 @@ import { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd'; import React, { FC } from 'react'; -import { BoardActionTypes, KanbanBoard } from './action'; +import { BoardActionTypes, defaultBoard, KanbanBoard } from './action'; import styled from 'styled-components'; import List from '../List'; import { Button } from 'antd'; import { fatScrollBar } from '../../../style/scrollbar'; +import { isShallowEqualByKeys } from '../../../utils'; const Container = styled.div` height: 100%; @@ -39,71 +40,79 @@ export interface InputProps { } interface Props extends KanbanBoard, BoardActionTypes, InputProps {} -export const Board: FC = (props: Props) => { - const handleDragEnd = ({ source, destination, type }: DropResult) => { - // dropped outside the list - if (!destination) { - return; - } - if (type === 'COLUMN') { - // Prevent update if nothing has changed - if (source.index !== destination.index) { - props.moveList(source.droppableId, source.index, destination.index); +export const Board: FC = React.memo( + (props: Props) => { + const handleDragEnd = ({ source, destination, type }: DropResult) => { + // dropped outside the list + if (!destination) { + return; } - return; - } - // Move card - if (source.index !== destination.index || source.droppableId !== destination.droppableId) { - props.moveCard( - source.droppableId, - destination.droppableId, - source.index, - destination.index + if (type === 'COLUMN') { + // Prevent update if nothing has changed + if (source.index !== destination.index) { + props.moveList(source.droppableId, source.index, destination.index); + } + return; + } + // Move card + if ( + source.index !== destination.index || + source.droppableId !== destination.droppableId + ) { + props.moveCard( + source.droppableId, + destination.droppableId, + source.index, + destination.index + ); + } + }; + + const addList = async () => { + await props.addList(props._id, 'TestList'); + }; + + const { doesOnlyShowFocusedList = false } = props; + let lists; + if (doesOnlyShowFocusedList) { + lists = (provided: any) => ( + + + {provided.placeholder} + + ); + } else { + lists = (provided: any) => ( + + {props.lists.map((listId, index) => ( + + ))} + {provided.placeholder} + + - - ) : ( - <> - Kanban Boards Overview - + const onKeyDown = (name: string) => { + switch (name) { + case 'esc': + if (props.kanban.chosenBoardId) { + goBack(); + } else { + props.changeAppTab('timer'); + } + break; + case 'ctrl+n': + if (!props.kanban.chosenBoardId) { + addBoard(); + } + break; + } + }; - - - - )} -
+ return ( + +
+ {props.kanban.chosenBoardId ? ( <> + {props.boards[props.kanban.chosenBoardId].name} + + ) : ( + <> + Kanban Boards Overview + + + + )} +
+ {props.kanban.chosenBoardId ? ( + <> +
+
+ + {props.kanban.chosenBoardId === undefined ? ( + ) : ( - - - - + )} -
- - - {props.kanban.chosenBoardId === undefined ? ( - - ) : ( - - )} - - { - // @ts-ignore - + + { + // @ts-ignore + + } + + ); + }, + (prevProps, nextProps) => { + for (const key of uiStateNames) { + // @ts-ignore + if (!isShallowEqual(prevProps[key], nextProps[key])) { + return false; } - - ); -}; + } + + return true; + } +); interface FormProps { boardId: string; diff --git a/src/renderer/components/Kanban/List/List.tsx b/src/renderer/components/Kanban/List/List.tsx index aa2e561..c002588 100644 --- a/src/renderer/components/Kanban/List/List.tsx +++ b/src/renderer/components/Kanban/List/List.tsx @@ -113,7 +113,7 @@ interface Props extends ListType, InputProps, ListActionTypes, KanbanActionTypes cardsState: CardsState; } -export const List: FC = (props: Props) => { +export const List: FC = React.memo((props: Props) => { const { focused = false, searchReg, cards, cardsState, done = false } = props; const [estimatedTimeSum, actualTimeSum] = props.cards.reduce( (l: [number, number], r: string) => { @@ -276,4 +276,4 @@ export const List: FC = (props: Props) => { )} ); -}; +}); diff --git a/src/renderer/components/Kanban/reducer.ts b/src/renderer/components/Kanban/reducer.ts index c10eb09..117a7fc 100644 --- a/src/renderer/components/Kanban/reducer.ts +++ b/src/renderer/components/Kanban/reducer.ts @@ -2,7 +2,11 @@ import { combineReducers } from 'redux'; import { actions as boardActions, boardReducer, KanbanBoardState } from './Board/action'; import { actions as listActions, ListsState, listReducer } from './List/action'; import { actions as cardActions, cardReducer, CardsState } from './Card/action'; -import { actions as overallActions, KanbanState, reducer as kanbanReducer } from './action'; +import { + actions as overallActions, + KanbanState as OKanbanState, + reducer as kanbanReducer +} from './action'; export const reducer = combineReducers({ boards: boardReducer, @@ -15,9 +19,11 @@ export interface KanbanState { boards: KanbanBoardState; lists: ListsState; cards: CardsState; - kanban: KanbanState; + kanban: OKanbanState; } +export const uiStateNames = ['boards', 'lists', 'cards', 'kanban']; + export const kanbanActions = { boardActions, listActions, diff --git a/src/renderer/components/Setting/Setting.tsx b/src/renderer/components/Setting/Setting.tsx index 263e74f..b31db01 100644 --- a/src/renderer/components/Setting/Setting.tsx +++ b/src/renderer/components/Setting/Setting.tsx @@ -18,6 +18,7 @@ import { writeFile } from 'fs'; import { shell, remote, app } from 'electron'; import { promisify } from 'util'; import { DistractingList, DistractingListModalButton } from './DistractingList'; +import { isShallowEqualByKeys } from '../../utils'; const dialog = remote.dialog; @@ -59,179 +60,197 @@ const longBreakMarks = { 20: '20min' }; +const settingUiStates = [ + 'focusDuration', + 'restDuration', + 'longBreakDuration', + 'monitorInterval', + 'screenShotInterval', + 'startOnBoot', + 'distractingList' +]; + interface Props extends TimerState, TimerActionTypes {} -export const Setting: React.FunctionComponent = (props: Props) => { - const onChangeFocus = React.useCallback((v: number | [number, number]) => { - if (v instanceof Array) { - return; - } +export const Setting: React.FunctionComponent = React.memo( + (props: Props) => { + const onChangeFocus = React.useCallback((v: number | [number, number]) => { + if (v instanceof Array) { + return; + } - props.setFocusDuration(v * 60); - }, []); + props.setFocusDuration(v * 60); + }, []); - const onChangeRest = React.useCallback((v: number | [number, number]) => { - if (v instanceof Array) { - return; - } + const onChangeRest = React.useCallback((v: number | [number, number]) => { + if (v instanceof Array) { + return; + } - props.setRestDuration(v * 60); - }, []); + props.setRestDuration(v * 60); + }, []); - const onChangeLongBreak = React.useCallback((v: number | [number, number]) => { - if (v instanceof Array) { - return; - } + const onChangeLongBreak = React.useCallback((v: number | [number, number]) => { + if (v instanceof Array) { + return; + } - props.setLongBreakDuration(v * 60); - }, []); + props.setLongBreakDuration(v * 60); + }, []); - const switchScreenshot = React.useCallback((v: boolean) => { - if (v) { - props.setScreenShotInterval(1000 * 60 * 5); - } else { - props.setScreenShotInterval(undefined); - } + const switchScreenshot = React.useCallback((v: boolean) => { + if (v) { + props.setScreenShotInterval(1000 * 60 * 5); + } else { + props.setScreenShotInterval(undefined); + } - notification.open({ - message: 'Restart App to Apply Changes', - description: 'Screenshot setting change needs restart to be applied', - duration: 0, - icon: - }); - }, []); - - const setStartOnBoot = React.useCallback((v: boolean) => { - props.setStartOnBoot(v); - if (v) { - app.setLoginItemSettings({ - openAtLogin: true, - openAsHidden: true + notification.open({ + message: 'Restart App to Apply Changes', + description: 'Screenshot setting change needs restart to be applied', + duration: 0, + icon: }); - } else { - app.setLoginItemSettings({ - openAtLogin: false + }, []); + + const setStartOnBoot = React.useCallback((v: boolean) => { + props.setStartOnBoot(v); + if (v) { + app.setLoginItemSettings({ + openAtLogin: true, + openAsHidden: true + }); + } else { + app.setLoginItemSettings({ + openAtLogin: false + }); + } + }, []); + + function onDeleteData() { + deleteAllUserData().then(() => { + message.info('All user data is removed. Pomodoro needs to restart.'); }); } - }, []); - function onDeleteData() { - deleteAllUserData().then(() => { - message.info('All user data is removed. Pomodoro needs to restart.'); - }); - } + async function onExportingData() { + const { canceled, filePath } = await dialog.showSaveDialog(remote.getCurrentWindow(), { + title: 'Pomodoro Data Export', + defaultPath: 'pomodoroDB.dat', + filters: [ + { + name: 'Data File', + extensions: ['dat'] + } + ] + }); - async function onExportingData() { - const { canceled, filePath } = await dialog.showSaveDialog(remote.getCurrentWindow(), { - title: 'Pomodoro Data Export', - defaultPath: 'pomodoroDB.dat', - filters: [ - { - name: 'Data File', - extensions: ['dat'] - } - ] - }); - - if (!canceled && filePath) { - console.log(filePath); - const data = await exportDBData(); - await promisify(writeFile)(filePath, JSON.stringify(data), { encoding: 'utf-8' }); - message.success('Data Exported'); + if (!canceled && filePath) { + const data = await exportDBData(); + await promisify(writeFile)(filePath, JSON.stringify(data), { encoding: 'utf-8' }); + message.success('Data Exported'); + } } - } - function openIssuePage() { - shell.openExternal('https://github.com/zxch3n/PomodoroLogger/issues/new'); - } + function openIssuePage() { + shell.openExternal('https://github.com/zxch3n/PomodoroLogger/issues/new'); + } - function openGithubPage() { - shell.openExternal('https://github.com/zxch3n/PomodoroLogger'); - } + function openGithubPage() { + shell.openExternal('https://github.com/zxch3n/PomodoroLogger'); + } - return ( - -

Focus Duration

- - +

Focus Duration

+ + + + + + +

Short Break

+ + + + + +

Long Break

+ + + + +
+ + + Start On Boot + + -
- - - -

Short Break

- - - - - -

Long Break

- - - - -
- - - Start On Boot - - -
- - - Screenshot - - - -

Data Management

- - -
-
- - - - - -

Misc

- -
-
- - - - - + Screenshot + + -
-
-
- ); -}; + +

Data Management

+ + +
+
+ + + + + +

Misc

+ + +
+
+ + + + + +
+
+ + ); + }, + (prevProps, nextProps) => { + return isShallowEqualByKeys(prevProps, nextProps, settingUiStates); + } +); diff --git a/src/renderer/components/Timer/Timer.tsx b/src/renderer/components/Timer/Timer.tsx index 7283215..67075fd 100644 --- a/src/renderer/components/Timer/Timer.tsx +++ b/src/renderer/components/Timer/Timer.tsx @@ -3,7 +3,12 @@ import { Button, Divider, message, Tooltip, Popconfirm } from 'antd'; import Progress from './Progress'; import { KanbanActionTypes } from '../Kanban/action'; import { BoardActionTypes } from '../Kanban/Board/action'; -import { LONG_BREAK_INTERVAL, TimerActionTypes as ThisActionTypes } from './action'; +import { + LONG_BREAK_INTERVAL, + TimerActionTypes as ThisActionTypes, + defaultState, + uiStateNames +} from './action'; import { RootState } from '../../reducers'; import { FocusSelector } from './FocusSelector'; import { Monitor } from '../../monitor'; @@ -26,6 +31,7 @@ import dingMp3 from '../../../res/ding.mp3'; import ReactHotkeys from 'react-hot-keys'; import { EfficiencyAnalyser } from '../../../efficiency/efficiency'; import { tabMaxHeight, thinScrollBar } from '../../style/scrollbar'; +import { isShallowEqual, isShallowEqualByKeys } from '../../utils'; const setMenuItems: (...args: any) => void = remote.getGlobal('setMenuItems'); @@ -204,6 +210,20 @@ class Timer extends Component { }); } + shouldComponentUpdate( + nextProps: Readonly, + nextState: Readonly, + nextContext: any + ): boolean { + if (!isShallowEqual(this.state, nextState)) { + return true; + } + + const next = nextProps.timer; + const _this = this.props.timer; + return !isShallowEqualByKeys(next, _this, uiStateNames); + } + addMenuItems(): void { setMenuItems([ { @@ -459,7 +479,6 @@ class Timer extends Component { this.props.timer.distractingList.concat(boardDistractionList) ); this.stagedSession.efficiency = this.efficiencyAnalyser.analyse(this.stagedSession); - console.log('efficiency', this.stagedSession.efficiency); } } diff --git a/src/renderer/components/Timer/action.ts b/src/renderer/components/Timer/action.ts index 142a4ab..3cffeb1 100644 --- a/src/renderer/components/Timer/action.ts +++ b/src/renderer/components/Timer/action.ts @@ -4,11 +4,11 @@ import { addSession } from '../../monitor/sessionManager'; import { actions as boardActions } from '../Kanban/Board/action'; import { actions as kanbanActions } from '../Kanban/action'; import { actions as historyActions } from '../History/action'; -import { throttle, debounce } from 'lodash'; +import { throttle } from 'lodash'; import { promisify } from 'util'; import dbs, { getNameFromBoardId } from '../../dbs'; import { PomodoroRecord } from '../../monitor/type'; -import { workers } from '../../workers'; +import { workers } from '../../workers/index'; import { DEBUG_TIME_SCALE, __DEV__ } from '../../../config'; import { AsyncDB } from '../../../utils/dbHelper'; @@ -69,6 +69,16 @@ export const defaultState: TimerState = { currentTab: 'timer' }; +export const uiStateNames = [ + 'chosenRecord', + 'targetTime', + 'leftTime', + 'isFocusing', + 'isRunning', + 'boardId', + 'iBreak' +]; + if (__DEV__) { defaultState.currentTab = 'analyser'; } @@ -178,7 +188,6 @@ export const actions = { }, setDistractingList: (distractingList: DistractingRow[]) => async (dispatch: Dispatch) => { dispatch(setDistractingList(distractingList)); - console.log(distractingList); await settingDB.update( { name: 'setting' }, { $set: { distractingList } }, @@ -259,7 +268,6 @@ export const actions = { if (newProjectId !== undefined) { const newProject = await getNameFromBoardId(newProjectId); - console.log('predicted type', newProject); dispatch(setBoardId(newProject)); } }, diff --git a/src/renderer/components/Visualization/WordCloud.tsx b/src/renderer/components/Visualization/WordCloud.tsx index f66c2f6..57d7c67 100644 --- a/src/renderer/components/Visualization/WordCloud.tsx +++ b/src/renderer/components/Visualization/WordCloud.tsx @@ -52,7 +52,6 @@ export const AsyncWordCloud: React.FC = (props: MAsyncProps) => { const [isLoading, setIsLoading] = React.useState(true); React.useEffect(() => { tokenizer.tokenize(records).then(weights => { - console.log(records, weights); setWeights(weights); setIsLoading(false); }); diff --git a/src/renderer/monitor/sessionManager.ts b/src/renderer/monitor/sessionManager.ts index 85d8b0c..e000c33 100644 --- a/src/renderer/monitor/sessionManager.ts +++ b/src/renderer/monitor/sessionManager.ts @@ -63,7 +63,7 @@ export async function addSession(record: PomodoroRecord) { // TODO: invoke ML inference } // @ts-ignore - await insert(record).catch(err => console.log(err)); + await insert(record).catch(err => console.error(err)); } export async function removeSession(startTime: number) { diff --git a/src/renderer/style/global.css b/src/renderer/style/global.css deleted file mode 100644 index 25fa51c..0000000 --- a/src/renderer/style/global.css +++ /dev/null @@ -1,2 +0,0 @@ -body { -} diff --git a/src/renderer/utils.ts b/src/renderer/utils.ts index c7cf5bf..62ddeea 100644 --- a/src/renderer/utils.ts +++ b/src/renderer/utils.ts @@ -1,17 +1,17 @@ import { Dispatch } from 'redux'; -export const genMapDispatchToProp = (actions: { [key: string]: any }) => ( - dispatch: Dispatch -) => { - const dict: Partial = {}; - for (const name in actions) { - // @ts-ignore - const actionCreator = actions[name]; - // @ts-ignore - dict[name] = (...args: any) => dispatch(actionCreator(...args)); - } +export const genMapDispatchToProp = (actions: { [key: string]: any }) => { + return (dispatch: Dispatch) => { + const dict: Partial = {}; + for (const name in actions) { + // @ts-ignore + const actionCreator = actions[name]; + // @ts-ignore + dict[name] = (...args: any) => dispatch(actionCreator(...args)); + } - return dict as T; + return dict as T; + }; }; export const generateRandomName = () => { @@ -67,3 +67,43 @@ export function parseTime(formattedTime: string) { const minute = parseInt(matchedM.entries().next().value[1], 10); return hour + minute / 60; } + +export function isShallowEqual(v: { [key: string]: any }, o: { [key: string]: any }) { + for (const key in v) { + if (!(key in o) || v[key] !== o[key]) { + return false; + } + } + + for (const key in o) { + if (!(key in v) || v[key] !== o[key]) { + return false; + } + } + + return true; +} + +export function isShallowEqualByKeys( + v: { [key: string]: any }, + o: { [key: string]: any }, + keys: string[] +) { + for (const key of keys) { + const hasNum = (key in o ? 1 : 0) + (key in v ? 1 : 0); + if (hasNum === 0) { + continue; + } + + if (hasNum !== 2) { + return false; + } + + // @ts-ignore + if (o[key] !== v[key]) { + return false; + } + } + + return true; +} diff --git a/src/renderer/workers/tokenizer.ts b/src/renderer/workers/tokenizer.ts index 6847316..e895865 100644 --- a/src/renderer/workers/tokenizer.ts +++ b/src/renderer/workers/tokenizer.ts @@ -18,7 +18,6 @@ export class Tokenizer extends BaseWorker { }, { tokenize: (payload, done) => { - console.log(payload); done(payload); } }, diff --git a/tsconfig.json b/tsconfig.json index 073dfa8..261e705 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { /* Basic Options */ - "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */ + "target": "es2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "lib": [ "dom", diff --git a/webpack.base.config.js b/webpack.base.config.js index 3112e52..20df14a 100644 --- a/webpack.base.config.js +++ b/webpack.base.config.js @@ -14,7 +14,6 @@ module.exports = { resolve: { extensions: ['.tsx', '.ts', '.js', '.json'] }, - devtool: 'source-map', plugins: [ ], }; diff --git a/webpack.main.config.js b/webpack.main.config.js index 27ad4ac..85dfa2c 100644 --- a/webpack.main.config.js +++ b/webpack.main.config.js @@ -1,14 +1,13 @@ const webpack = require('webpack'); const merge = require('webpack-merge'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); -const nodeExternals = require('webpack-node-externals'); const baseConfig = require('./webpack.base.config'); module.exports = merge.smart(baseConfig, { target: 'electron-main', entry: { - main: './src/main/main.ts' + main: ['./src/main/main.ts', './src/main/db.ts', './src/main/AutoUpdater.ts'] }, module: { rules: [ @@ -39,13 +38,14 @@ module.exports = merge.smart(baseConfig, { } ] }, + devtool: 'source-map', plugins: [ new ForkTsCheckerWebpackPlugin({ - reportFiles: ['src/main/**/*'] + reportFiles: ['src/main/**/*'], }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development') }), ], - externals: [nodeExternals()], + // externals: [nodeExternals()], }); diff --git a/webpack.main.prod.config.js b/webpack.main.prod.config.js index 2f55271..4daf464 100644 --- a/webpack.main.prod.config.js +++ b/webpack.main.prod.config.js @@ -1,13 +1,23 @@ const merge = require('webpack-merge'); +const Visualizer = require('webpack-visualizer-plugin'); const webpack = require('webpack'); - const baseConfig = require('./webpack.main.config'); +const fs = require('fs'); + +if (!fs.existsSync('./webpack-visualization')) { + fs.mkdirSync('./webpack-visualization') +} +// disable source-map in production build +baseConfig.devtool = undefined; module.exports = merge.smart(baseConfig, { mode: 'production', plugins: [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production') }), - ] + new Visualizer({ + filename: "./webpack-visualization/main.html" + }) + ], }); diff --git a/webpack.renderer.config.js b/webpack.renderer.config.js index 1cc4db5..b6f2846 100644 --- a/webpack.renderer.config.js +++ b/webpack.renderer.config.js @@ -53,7 +53,7 @@ const fixNedbForElectronRenderer = { module.exports = merge.smart(baseConfig, { target: 'electron-renderer', entry: { - app: ['@babel/polyfill', './src/renderer/app.tsx'] + app: ['./src/renderer/app.tsx'] }, output: { globalObject: 'this' @@ -68,9 +68,12 @@ module.exports = merge.smart(baseConfig, { cacheDirectory: true, babelrc: false, presets: [ - [ - '@babel/preset-env', - { targets: { browsers: 'last 2 versions ' } } + [ + '@babel/preset-env', + { + targets: { browsers: 'last 2 versions ' }, + modules: false + } ], '@babel/preset-typescript', '@babel/preset-react' diff --git a/webpack.renderer.dev.config.js b/webpack.renderer.dev.config.js index 60daa62..ea56eec 100644 --- a/webpack.renderer.dev.config.js +++ b/webpack.renderer.dev.config.js @@ -9,6 +9,7 @@ module.exports = merge.smart(baseConfig, { 'react-dom': '@hot-loader/react-dom' } }, + devtool: 'source-map', devServer: { port: 2003, compress: false, diff --git a/webpack.renderer.prod.config.js b/webpack.renderer.prod.config.js index 364c748..a8a5b71 100644 --- a/webpack.renderer.prod.config.js +++ b/webpack.renderer.prod.config.js @@ -1,7 +1,17 @@ const merge = require('webpack-merge'); - +const Visualizer = require('webpack-visualizer-plugin'); const baseConfig = require('./webpack.renderer.config'); +const fs = require('fs'); + +if (!fs.existsSync('./webpack-visualization')) { + fs.mkdirSync('./webpack-visualization') +} module.exports = merge.smart(baseConfig, { - mode: 'production' + mode: 'production', + plugins: [ + new Visualizer({ + filename: "./webpack-visualization/renderer.html" + }) + ] }); diff --git a/yarn.lock b/yarn.lock index 4813557..9eca546 100644 --- a/yarn.lock +++ b/yarn.lock @@ -806,10 +806,10 @@ pirates "^4.0.0" source-map-support "^0.5.9" -"@babel/runtime-corejs2@^7.4.5": - version "7.5.5" - resolved "https://registry.npm.taobao.org/@babel/runtime-corejs2/download/@babel/runtime-corejs2-7.5.5.tgz#c3214c08ef20341af4187f1c9fbdc357fbec96b2" - integrity sha1-wyFMCO8gNBr0GH8cn73DV/vslrI= +"@babel/runtime-corejs2@^7.6.3": + version "7.7.6" + resolved "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.7.6.tgz#50b7cd4eab929b4cb66167c4972d35eaceaa124b" + integrity sha512-QYp/8xdH8iMin3pH5gtT/rUuttVfIcOhWBC3wh9Eh/qs4jEe39+3DpCDLgWXhMQgiCTOH8mrLSvQ0OHOCcox9g== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.2" @@ -1721,7 +1721,7 @@ acorn-walk@^6.0.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn@^5.5.3: +acorn@^5.2.1, acorn@^5.5.3: version "5.7.3" resolved "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== @@ -2145,6 +2145,11 @@ ast-types@0.11.7: resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" integrity sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw== +ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -2309,6 +2314,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base62@^1.1.0: + version "1.2.8" + resolved "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz#1264cb0fb848d875792877479dbe8bae6bae3428" + integrity sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA== + base64-js@^1.0.2: version "1.3.1" resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" @@ -2854,7 +2864,7 @@ camelcase@^4.1.0: resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -3072,15 +3082,14 @@ clone-deep@^0.2.4: lazy-cache "^1.0.3" shallow-clone "^0.1.2" -clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ== +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: - for-own "^1.0.0" is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" + kind-of "^6.0.2" + shallow-clone "^3.0.0" clone-response@1.0.2, clone-response@^1.0.2: version "1.0.2" @@ -3166,6 +3175,11 @@ commander@^2.12.1, commander@^2.14.1, commander@^2.19.0, commander@^2.20.0, comm resolved "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@^2.5.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@~2.19.0: version "2.19.0" resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -3183,6 +3197,21 @@ commondir@^1.0.1: resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +commoner@^0.10.1: + version "0.10.8" + resolved "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" + integrity sha1-NPw2cs0kOT6LtH5wyqApOBH08sU= + dependencies: + commander "^2.5.0" + detective "^4.3.1" + glob "^5.0.15" + graceful-fs "^4.1.2" + iconv-lite "^0.4.5" + mkdirp "^0.5.0" + private "^0.1.6" + q "^1.1.2" + recast "^0.11.17" + component-classes@1.x, component-classes@^1.2.5, component-classes@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691" @@ -3245,6 +3274,21 @@ concat-stream@1.6.2, concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concurrently@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/concurrently/-/concurrently-5.0.1.tgz#9d15e0e7bb7ebe5c3bcd86deb8393501c35dd003" + integrity sha512-fPKUlOAXEXpktp3z7RqIvzTSCowfDo8oQbdKoGKGZVm+G2hGFbIIAFm4qwWcGl/sIHmpMSgPqeCbjld3kdPXvA== + dependencies: + chalk "^2.4.2" + date-fns "^2.0.1" + lodash "^4.17.15" + read-pkg "^4.0.1" + rxjs "^6.5.2" + spawn-command "^0.0.2-1" + supports-color "^6.1.0" + tree-kill "^1.2.1" + yargs "^13.3.0" + config-chain@^1.1.11: version "1.1.12" resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" @@ -3523,12 +3567,12 @@ css-animation@1.x, css-animation@^1.3.2, css-animation@^1.5.0: babel-runtime "6.x" component-classes "^1.2.5" -css-box-model@^1.1.2: - version "1.1.3" - resolved "https://registry.npm.taobao.org/css-box-model/download/css-box-model-1.1.3.tgz#aa1ac5853d2c9358783e67fe0b1ca22ecd82b232" - integrity sha1-qhrFhT0sk1h4Pmf+CxyiLs2CsjI= +css-box-model@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz#3a26377b4162b3200d2ede4b064ec5b6a75186d0" + integrity sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA== dependencies: - tiny-invariant "^1.0.5" + tiny-invariant "^1.0.6" css-color-keywords@^1.0.0: version "1.0.0" @@ -3543,22 +3587,23 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -css-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" - integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w== +css-loader@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-3.3.2.tgz#41b2086528aa4fbf8c0692e874bc14f081129b21" + integrity sha512-4XSiURS+YEK2fQhmSaM1onnUm0VKWNf6WWBYjkp9YbSDGCBTVZ5XOM6Gkxo8tLgQlzkZOBJvk9trHlDk4gjEYg== dependencies: - camelcase "^5.2.0" - icss-utils "^4.1.0" + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" loader-utils "^1.2.3" normalize-path "^3.0.0" - postcss "^7.0.14" + postcss "^7.0.23" postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^2.0.6" - postcss-modules-scope "^2.1.0" - postcss-modules-values "^2.0.0" - postcss-value-parser "^3.3.0" - schema-utils "^1.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.1.1" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.2" + schema-utils "^2.6.0" css-parse@^2.0.0: version "2.0.0" @@ -3692,6 +3737,11 @@ cyclist@~0.2.2: resolved "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +d3@^3.5.6: + version "3.5.17" + resolved "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" + integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -3713,6 +3763,11 @@ date-fns@^1.27.2: resolved "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== +date-fns@^2.0.1: + version "2.8.1" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.8.1.tgz#2109362ccb6c87c3ca011e9e31f702bc09e4123b" + integrity sha512-EL/C8IHvYRwAHYgFRse4MGAPSqlJVlOrhVYZ75iQBKrnv+ZedmYsgwH3t+BCDuZDXpoo07+q9j4qgSSOa7irJg== + date-now@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -3883,6 +3938,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + del@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" @@ -3965,6 +4025,14 @@ detect-node@^2.0.4: resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +detective@^4.3.1: + version "4.7.1" + resolved "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" + integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== + dependencies: + acorn "^5.2.1" + defined "^1.0.0" + dev-null@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/dev-null/-/dev-null-0.1.1.tgz#5a205ce3c2b2ef77b6238d6ba179eb74c6a0e818" @@ -4454,6 +4522,14 @@ env-paths@^1.0.0: resolved "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= +envify@^3.0.0: + version "3.4.1" + resolved "https://registry.npmjs.org/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" + integrity sha1-1xIjKejfFoi6dxsSUBkXyc5cvOg= + dependencies: + jstransform "^11.0.3" + through "~2.3.4" + enzyme-adapter-react-16@^1.14.0: version "1.14.0" resolved "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz#204722b769172bcf096cb250d33e6795c1f1858f" @@ -4584,7 +4660,12 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^3.1.3: +esprima-fb@^15001.1.0-dev-harmony-fb: + version "15001.1.0-dev-harmony-fb" + resolved "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" + integrity sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE= + +esprima@^3.1.3, esprima@~3.1.0: version "3.1.3" resolved "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= @@ -4920,6 +5001,17 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fbjs@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz#9636b7705f5ba9684d44b72f78321254afc860f7" + integrity sha1-lja3cF9bqWhNRLcveDISVK/IYPc= + dependencies: + core-js "^1.0.0" + loose-envify "^1.0.0" + promise "^7.0.3" + ua-parser-js "^0.7.9" + whatwg-fetch "^0.9.0" + fbjs@^0.8.0, fbjs@^0.8.15, fbjs@^0.8.16, fbjs@^0.8.9: version "0.8.17" resolved "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" @@ -5163,13 +5255,6 @@ for-own@^0.1.3: dependencies: for-in "^1.0.1" -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -5456,6 +5541,17 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: version "7.1.4" resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -5999,7 +6095,7 @@ icon-extractor@^1.0.3: dependencies: lodash "^3.10.1" -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@^0.4.5, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6021,12 +6117,7 @@ iconv@2: nan "^2.13.1" safer-buffer "^2.1.2" -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^4.1.0: +icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== @@ -7343,6 +7434,17 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jstransform@^11.0.3: + version "11.0.3" + resolved "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" + integrity sha1-CaeJk+CuTU70SH9hVakfYZDLQiM= + dependencies: + base62 "^1.1.0" + commoner "^0.10.1" + esprima-fb "^15001.1.0-dev-harmony-fb" + object-assign "^2.0.0" + source-map "^0.4.2" + keyv@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" @@ -7571,7 +7673,7 @@ loader-runner@^2.4.0: resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3, loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -7612,6 +7714,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash-es@^4.17.15: + version "4.17.15" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -7666,11 +7773,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ= - lodash.throttle@^4.0.0: version "4.1.1" resolved "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" @@ -7681,7 +7783,7 @@ lodash@^3.10.1: resolved "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@^4.0.0, lodash@^4.15.0, lodash@^4.16.5, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.15.0, lodash@^4.16.5, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.10: version "4.17.15" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -7893,10 +7995,10 @@ memoize-one@^5.0.0: resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.5.tgz#8cd3809555723a07684afafcd6f756072ac75d7e" integrity sha512-ey6EpYv0tEaIbM/nTDOpHciXUvd+ackQrJgEzBwemhZZIWZjcyodqEcrmqDy2BKRTM3a65kKBV4WtLXJDt26SQ== -memoize-one@^5.0.4: +memoize-one@^5.1.1: version "5.1.1" - resolved "https://registry.npm.taobao.org/memoize-one/download/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" - integrity sha1-BHtuMZm1COrsA1BN5xIpuOsddcA= + resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" @@ -8059,7 +8161,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -8626,6 +8728,11 @@ object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4. resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= +object-assign@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo= + object-copy@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -9271,32 +9378,33 @@ postcss-modules-extract-imports@^2.0.0: dependencies: postcss "^7.0.5" -postcss-modules-local-by-default@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" - integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA== +postcss-modules-local-by-default@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - postcss-value-parser "^3.3.1" + icss-utils "^4.1.1" + postcss "^7.0.16" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.0" -postcss-modules-scope@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" - integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== +postcss-modules-scope@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba" + integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" -postcss-modules-values@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" - integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== dependencies: - icss-replace-symbols "^1.1.0" + icss-utils "^4.0.0" postcss "^7.0.6" -postcss-selector-parser@^6.0.0: +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== @@ -9305,15 +9413,20 @@ postcss-selector-parser@^6.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: +postcss-value-parser@^3.3.0: version "3.3.1" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.17" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" - integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== + +postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.24" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.24.tgz#972c3c5be431b32e40caefe6c81b5a19117704c2" + integrity sha512-Xl0XvdNWg+CblAXzNvbSOUvgJXwSjmbAKORqyw9V2AlHrm1js2gFw9y3jibBAhpKZi8b5JzJCVh/FyzPsTtgTA== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -9393,7 +9506,7 @@ promise-inflight@^1.0.1: resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise@^7.1.1: +promise@^7.0.3, promise@^7.1.1: version "7.3.1" resolved "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== @@ -9550,10 +9663,10 @@ querystringify@^2.1.1: resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -raf-schd@^4.0.0: +raf-schd@^4.0.2: version "4.0.2" - resolved "https://registry.npm.taobao.org/raf-schd/download/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" - integrity sha1-vUTHCBiPLoTIEL9V/OqSMbyu2KA= + resolved "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" + integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== raf@^3.4.0, raf@^3.4.1: version "3.4.1" @@ -10051,19 +10164,23 @@ rc@^1.2.1, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-beautiful-dnd@^11.0.5: - version "11.0.5" - resolved "https://registry.npm.taobao.org/react-beautiful-dnd/download/react-beautiful-dnd-11.0.5.tgz#16b1dbd4d6493de0cb3f842cad57c7e9e1ff5fe7" - integrity sha1-FrHb1NZJPeDLP4QsrVfH6eH/X+c= +react-beautiful-dnd@^12.2.0: + version "12.2.0" + resolved "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-12.2.0.tgz#e5f6222f9e7934c6ed4ee09024547f9e353ae423" + integrity sha512-s5UrOXNDgeEC+sx65IgbeFlqKKgK3c0UfbrJLWufP34WBheyu5kJ741DtJbsSgPKyNLkqfswpMYr0P8lRj42cA== dependencies: - "@babel/runtime-corejs2" "^7.4.5" - css-box-model "^1.1.2" - memoize-one "^5.0.4" - raf-schd "^4.0.0" - react-redux "^7.0.3" - redux "^4.0.1" - tiny-invariant "^1.0.4" - use-memo-one "^1.1.0" + "@babel/runtime-corejs2" "^7.6.3" + css-box-model "^1.2.0" + memoize-one "^5.1.1" + raf-schd "^4.0.2" + react-redux "^7.1.1" + redux "^4.0.4" + use-memo-one "^1.1.1" + +react-dom@^0.14.0: + version "0.14.9" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-0.14.9.tgz#05064a3dcf0fb1880a3b2bfc9d58c55d8d9f6293" + integrity sha1-BQZKPc8PsYgKOyv8nVjFXY2fYpM= react-dom@^16.8.6: version "16.8.6" @@ -10104,6 +10221,11 @@ react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is resolved "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== +react-is@^16.9.0: + version "16.12.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" + integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== + react-lazy-load@^3.0.13: version "3.0.13" resolved "https://registry.npmjs.org/react-lazy-load/-/react-lazy-load-3.0.13.tgz#3b0a92d336d43d3f0d73cbe6f35b17050b08b824" @@ -10131,6 +10253,18 @@ react-redux@^7.0.3: prop-types "^15.7.2" react-is "^16.8.6" +react-redux@^7.1.1: + version "7.1.3" + resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.1.3.tgz#717a3d7bbe3a1b2d535c94885ce04cdc5a33fc79" + integrity sha512-uI1wca+ECG9RoVkWQFF4jDMqmaw0/qnvaSvOoL/GA4dNxf6LoV8sUAcNDvE5NWKs4hFpn0t6wswNQnY3f7HT3w== + dependencies: + "@babel/runtime" "^7.5.5" + hoist-non-react-statics "^3.3.0" + invariant "^2.2.4" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^16.9.0" + react-sizeme@^2.2.0: version "2.6.10" resolved "https://registry.npmjs.org/react-sizeme/-/react-sizeme-2.6.10.tgz#9993dcb5e67fab94a8e5d078a0d3820609010f17" @@ -10192,6 +10326,14 @@ react-trend@zxch3n/react-trend: version "0.0.0" resolved "https://codeload.github.com/zxch3n/react-trend/tar.gz/c2458375d3c45388431e78895190e1226c7d7e52" +react@^0.14.0: + version "0.14.9" + resolved "https://registry.npmjs.org/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1" + integrity sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE= + dependencies: + envify "^3.0.0" + fbjs "^0.6.1" + react@^16.8.6: version "16.8.6" resolved "https://registry.npmjs.org/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" @@ -10248,6 +10390,15 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= + dependencies: + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" + read-pkg@^5.1.1: version "5.2.0" resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -10306,6 +10457,16 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +recast@^0.11.17: + version "0.11.23" + resolved "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + recast@^0.16.1: version "0.16.2" resolved "https://registry.npmjs.org/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2" @@ -10354,7 +10515,7 @@ redux-thunk@*, redux-thunk@^2.2.0, redux-thunk@^2.3.0: resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== -redux@^4.0.0, redux@^4.0.1: +redux@^4.0.0, redux@^4.0.1, redux@^4.0.4: version "4.0.4" resolved "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz#4ee1aeb164b63d6a1bcc57ae4aa0b6e6fa7a3796" integrity sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q== @@ -10755,6 +10916,13 @@ rxjs@^6.3.1, rxjs@^6.3.3: dependencies: tslib "^1.9.0" +rxjs@^6.5.2: + version "6.5.3" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -10809,17 +10977,16 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sass-loader@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d" - integrity sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w== +sass-loader@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.0.tgz#e7b07a3e357f965e6b03dd45b016b0a9746af797" + integrity sha512-+qeMu563PN7rPdit2+n5uuYVR0SSVwm0JsOUsaJXzgYcClWSlmX0iHDnmeOobPkf5kUglVot3QS6SyLyaQoJ4w== dependencies: - clone-deep "^2.0.1" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - neo-async "^2.5.0" - pify "^3.0.0" - semver "^5.5.0" + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.1.0" + semver "^6.3.0" sax@^1.2.4, sax@~1.2.4: version "1.2.4" @@ -10859,6 +11026,14 @@ schema-utils@^2.0.0: ajv "^6.1.0" ajv-keywords "^3.1.0" +schema-utils@^2.0.1, schema-utils@^2.1.0, schema-utils@^2.6.0: + version "2.6.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz#eb78f0b945c7bcfa2082b3565e8db3548011dc4f" + integrity sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg== + dependencies: + ajv "^6.10.2" + ajv-keywords "^3.4.1" + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -11030,14 +11205,12 @@ shallow-clone@^0.1.2: lazy-cache "^0.2.3" mixin-object "^2.0.1" -shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA== +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.0.1" + kind-of "^6.0.2" shallow-equal@^1.0.0: version "1.2.0" @@ -11239,7 +11412,7 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0: version "0.5.7" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -11254,6 +11427,11 @@ source-map@^0.7.3: resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= + spawn-rx@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz#1d33511e13ec26337da51d78630e08beb57a6767" @@ -11605,13 +11783,13 @@ strip-outer@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -style-loader@^0.23.1: - version "0.23.1" - resolved "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" - integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== +style-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/style-loader/-/style-loader-1.0.1.tgz#aec6d4c61d0ed8d0a442faed741d4dfc6573888a" + integrity sha512-CnpEkSR1C+REjudiTWCv4+ssP7SCiuaQZJTZDWBRwTJoS90mdqkB8uOGMHKgVeUzpaU7IfLWoyQbvvs5Joj3Xw== dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" + loader-utils "^1.2.3" + schema-utils "^2.0.1" styled-components@^4.3.2: version "4.3.2" @@ -11864,7 +12042,7 @@ through2@~0.2.3: readable-stream "~1.1.9" xtend "~2.1.1" -through@2, through@^2.3.6, through@^2.3.8: +through@2, through@^2.3.6, through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -11886,10 +12064,10 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -tiny-invariant@^1.0.4, tiny-invariant@^1.0.5: +tiny-invariant@^1.0.6: version "1.0.6" - resolved "https://registry.npm.taobao.org/tiny-invariant/download/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha1-s/mziDXjakHIQ6OwkHpaezdV3nM= + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" + integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== tinycolor2@^1.4.1: version "1.4.1" @@ -12003,6 +12181,11 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tree-kill@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -12213,7 +12396,7 @@ typescript@^3.7.2: resolved "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== -ua-parser-js@^0.7.18: +ua-parser-js@^0.7.18, ua-parser-js@^0.7.9: version "0.7.20" resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== @@ -12426,10 +12609,10 @@ urlgrey@^0.4.4: resolved "https://registry.npm.taobao.org/urlgrey/download/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" integrity sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8= -use-memo-one@^1.1.0: +use-memo-one@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/use-memo-one/download/use-memo-one-1.1.1.tgz?cache=0&sync_timestamp=1562652934593&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuse-memo-one%2Fdownload%2Fuse-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c" - integrity sha1-Oebwj+J+Qip9eyNLX5BWrzE70iw= + resolved "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c" + integrity sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ== use@^3.1.0: version "3.1.1" @@ -12696,6 +12879,16 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" +webpack-visualizer-plugin@^0.1.11: + version "0.1.11" + resolved "https://registry.npmjs.org/webpack-visualizer-plugin/-/webpack-visualizer-plugin-0.1.11.tgz#b8770ad86b4f652612c68b1b782253faf9f8a34e" + integrity sha1-uHcK2GtPZSYSxosbeCJT+vn4o04= + dependencies: + d3 "^3.5.6" + mkdirp "^0.5.1" + react "^0.14.0" + react-dom "^0.14.0" + webpack@^4.32.2: version "4.39.1" resolved "https://registry.npmjs.org/webpack/-/webpack-4.39.1.tgz#60ed9fb2b72cd60f26ea526c404d2a4cc97a1bd8" @@ -12756,6 +12949,11 @@ whatwg-fetch@>=0.10.0: resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== +whatwg-fetch@^0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" + integrity sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA= + whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"