├── .github
└── FUNDING.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── client
└── acp
│ ├── .eslintrc
│ ├── actions
│ ├── load-calculation-properties.js
│ ├── load-settings.js
│ ├── save-properties.js
│ ├── save-settings.js
│ └── simple-actions.js
│ ├── controller
│ └── actions.js
│ ├── index.js
│ ├── model
│ ├── action-types.js
│ ├── pages.js
│ ├── reducers.js
│ ├── redux-store.js
│ └── socket-api.js
│ ├── package.json
│ ├── service
│ └── socket-service.js
│ ├── style
│ ├── _layout.scss
│ └── acp.scss
│ ├── view
│ ├── display
│ │ └── save-button.js
│ └── widget
│ │ ├── dashboard.js
│ │ ├── page-manage.js
│ │ ├── page-plugins.js
│ │ ├── page-ranking.js
│ │ ├── page-settings.js
│ │ └── tab-host.js
│ ├── webpack.config.js
│ └── yarn.lock
├── package.json
├── plugin.json
├── plugin
├── .eslintrc
├── actions.js
├── constants.js
├── controller.js
├── database.js
├── default-ranking.js
├── files.js
├── filters.js
├── index.js
├── nodebb.js
├── settings.js
└── sockets.js
├── public
├── css
│ └── acp.css
├── js
│ ├── acp.js
│ └── overview.js
└── templates
│ ├── admin
│ └── plugins
│ │ └── points.tpl
│ ├── client
│ └── points
│ │ ├── overview.tpl
│ │ └── user.tpl
│ └── partials
│ └── points_profile.tpl
├── style
├── _animation.less
├── _vars.less
└── client.less
└── yarn.lock
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: NicolasSiver # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 |
5 | # Runtime data
6 | pids
7 | *.pid
8 | *.seed
9 |
10 | # Directory for instrumented libs generated by jscoverage/JSCover
11 | lib-cov
12 |
13 | # Coverage directory used by tools like istanbul
14 | coverage
15 |
16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17 | .grunt
18 |
19 | # node-waf configuration
20 | .lock-wscript
21 |
22 | # Compiled binary addons (http://nodejs.org/api/addons.html)
23 | build/Release
24 |
25 | # Dependency directory
26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
27 | node_modules
28 |
29 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion
30 |
31 | *.iml
32 |
33 | ## Directory-based project format:
34 | .idea/
35 | # if you remove the above rule, at least ignore the following:
36 |
37 | # User-specific stuff:
38 | # .idea/workspace.xml
39 | # .idea/tasks.xml
40 | # .idea/dictionaries
41 |
42 | # Sensitive or high-churn files:
43 | # .idea/dataSources.ids
44 | # .idea/dataSources.xml
45 | # .idea/sqlDataSources.xml
46 | # .idea/dynamic.xml
47 | # .idea/uiDesigner.xml
48 |
49 | # Gradle:
50 | # .idea/gradle.xml
51 | # .idea/libraries
52 |
53 | # Mongo Explorer plugin:
54 | # .idea/mongoSettings.xml
55 |
56 | ## File-based project format:
57 | *.ipr
58 | *.iws
59 |
60 | ## Plugin-specific files:
61 |
62 | # IntelliJ
63 | /out/
64 |
65 | # mpeltonen/sbt-idea plugin
66 | .idea_modules/
67 |
68 | # JIRA plugin
69 | atlassian-ide-plugin.xml
70 |
71 | # Crashlytics plugin (for Android Studio and IntelliJ)
72 | com_crashlytics_export_strings.xml
73 | crashlytics.properties
74 | crashlytics-build.properties
75 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ### v6.0.1 - 5/30/2019
4 |
5 | - Fixed issue with the forum crash if there are purged posts in the topic
6 |
7 | ### v6.0.0 - 3/30/2019
8 |
9 | - Changed compatibility with NodeBB `v1.12.x`
10 |
11 | ### v5.0.0 - 5/22/2018
12 |
13 | - Changed compatibility with NodeBB `v1.9.x`
14 | - Changed `Overview` page to handle rendering process server-side
15 | - Removed development dependencies like `lodash` and `code-climate`
16 | - Fixed issue with long usernames on `Overview` page
17 | - Fixed issue where a deleted user was not removed completely
18 |
19 | ### v4.0.0 - 9/11/2016
20 |
21 | - Fully functional ACP panel with an ability to change different settings: weight for actions, base values for computation, general settings
22 | - Compatibility with `v1.x.x` forum
23 |
24 | ### v3.0.1 - 3/31/2016
25 |
26 | - Security update
27 |
28 | ### v3.0.0 - 11/26/2015
29 |
30 | - Compatibility with `v0.9.x` forum
31 | - Updated look for Overview page
32 | - Provided template for profile view, for easy include
33 |
34 | ### v2.1.0 - 10/8/2015
35 |
36 | - New posts now will be populated with points
37 | - Updated all package dependencies
38 | - Points section will show exactly 20 top users
39 |
40 | ### v2.0.0 - 10/2/2015
41 |
42 | - Compatibility with `v0.8.x` forum
43 | - Improved support for themes, you don't need inject templates anymore
44 | - Improved Overview page
45 |
46 | ### v1.2.0 - 5/10/2015
47 |
48 | - Use Posts filter
49 | - Added Settings to Topic View
50 |
51 | ### v1.1.0 - 5/10/2015
52 |
53 | - Rank calculation moved to client-side
54 |
55 | ### v1.0.0 - 4/26/2015
56 |
57 | - Very first release
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Nicolas Siver
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # NodeBB: Points
2 |
3 | Additional metrics for User Profiles. It's like experience in video games. Plugin is good for gamification of your board.
4 |
5 | 
6 | 
7 |
8 |
9 |
10 |
11 |
12 | - [The Ranking Calculation](#the-ranking-calculation)
13 | - [Themes](#themes)
14 | - [Profile View](#profile-view)
15 | - [Topic View](#topic-view)
16 |
17 |
18 |
19 | ## The Ranking Calculation
20 |
21 | The Ranking calculator is a function, that should accept 2 parameters - settings and raw points.
22 | Settings could vary from one calculator to another. Calculator must return object with properties listed below:
23 |
24 | - `rank` [Number] - user's rank, level
25 | - `rankProgress` [Number] - amount of points on current level
26 | - `rankTotal` [Number] - amount of points needed to level-up
27 | - `total` [Number] - raw amount of points
28 |
29 | Example: [Default Function](https://github.com/NicolasSiver/nodebb-plugin-ns-points/blob/f34a4cf6c69b4c8b1abbf88efc3a0f1d8ad6fcf2/public/js/ranking.js#L9-L27)
30 |
31 | ## Themes
32 |
33 | Plugin populates both: `Profile` and `Topic` views. Search for `points` property in corresponding entities.
34 | Don't forget to add link on _overview_ page, link should look like - `/points`
35 |
36 | ### Profile View
37 |
38 | If you want points in Profile, do very basic changes to your theme:
39 |
40 | > Example: Persona Theme, `v4`, find `templates/account/profile.tpl`, edit template in package directory - `node_modules`
41 |
42 | Find block that is responsible for [stats](https://github.com/NodeBB/nodebb-theme-persona/blob/4c32d4b0b16711bde6ee84d6b18dfb13dbfc24c0/templates/account/profile.tpl#L14-L41), and insert template where you want:
43 |
44 | ```html
45 |
46 |
47 | ...
48 |
49 |
50 |
51 | ...
52 |
53 |
54 | ```
55 |
56 | ### Topic View
57 |
58 | Every post will have additional field: `points`.
59 | If you want utilize points calculation feature in topic view, you should use theme that supports such type of integration.
60 |
--------------------------------------------------------------------------------
/client/acp/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "es6": true
4 | },
5 | "rules": {
6 | "no-multi-spaces": 0,
7 | "quotes": [
8 | 2,
9 | "single"
10 | ]
11 | },
12 | "ecmaFeatures": {
13 | "modules": true,
14 | "jsx": true
15 | }
16 | }
--------------------------------------------------------------------------------
/client/acp/actions/load-calculation-properties.js:
--------------------------------------------------------------------------------
1 | import {updateProperties} from './simple-actions';
2 | import SocketService from '../service/socket-service';
3 |
4 | export default function () {
5 | return (dispatch, getState) => {
6 | SocketService.getCalculationProperties((error, properties) => {
7 | if (!error) {
8 | dispatch(updateProperties(properties));
9 | }
10 | });
11 | };
12 | }
13 |
--------------------------------------------------------------------------------
/client/acp/actions/load-settings.js:
--------------------------------------------------------------------------------
1 | import {updateSettings} from './simple-actions';
2 | import SocketService from '../service/socket-service';
3 |
4 | export default function () {
5 | return (dispatch, getState) => {
6 | SocketService.getSettings((error, settings) => {
7 | if (!error) {
8 | dispatch(updateSettings(settings));
9 | }
10 | });
11 | };
12 | }
13 |
--------------------------------------------------------------------------------
/client/acp/actions/save-properties.js:
--------------------------------------------------------------------------------
1 | import {propertiesSaved} from './simple-actions';
2 | import SocketService from '../service/socket-service';
3 |
4 | export default function (properties) {
5 | return (dispatch, getState) => {
6 | SocketService.saveCalculationProperties(properties, (error) => {
7 | if (!error) {
8 | dispatch(propertiesSaved());
9 | }
10 | });
11 | };
12 | }
13 |
--------------------------------------------------------------------------------
/client/acp/actions/save-settings.js:
--------------------------------------------------------------------------------
1 | import {settingsSaved} from './simple-actions';
2 | import SocketService from '../service/socket-service';
3 |
4 | export default function (settings) {
5 | return (dispatch, getState) => {
6 | SocketService.saveSettings(settings, (error) => {
7 | if (!error) {
8 | dispatch(settingsSaved());
9 | }
10 | });
11 | };
12 | }
13 |
--------------------------------------------------------------------------------
/client/acp/actions/simple-actions.js:
--------------------------------------------------------------------------------
1 | import * as ActionTypes from '../model/action-types';
2 |
3 | export function changeSection(page) {
4 | return {
5 | type : ActionTypes.SECTION_WILL_CHANGE,
6 | payload: {
7 | section: page
8 | }
9 | };
10 | }
11 |
12 | export function propertiesSaved() {
13 | return {
14 | type: ActionTypes.CALCULATION_PROPERTIES_DID_STORE
15 | };
16 | }
17 |
18 | export function setMaxOverviewUsers(users) {
19 | return {
20 | type : ActionTypes.OVERVIEW_MAX_USERS_WILL_CHANGE,
21 | payload: parseInt(users, 10)
22 | };
23 | }
24 |
25 | export function settingsSaved() {
26 | return {
27 | type: ActionTypes.SETTINGS_DID_STORE
28 | };
29 | }
30 |
31 | export function updateProperties(properties) {
32 | return {
33 | type : ActionTypes.CALCULATION_PROPERTIES_DID_UPDATE,
34 | payload: properties
35 | };
36 | }
37 |
38 | export function updateProperty(property, value) {
39 | return {
40 | type : ActionTypes.CALCULATION_PROPERTY_WILL_UPDATE,
41 | payload: {property, value}
42 | };
43 | }
44 |
45 | export function updateSettings(settings) {
46 | return {
47 | type : ActionTypes.SETTINGS_DID_UPDATE,
48 | payload: settings
49 | };
50 | }
51 |
--------------------------------------------------------------------------------
/client/acp/controller/actions.js:
--------------------------------------------------------------------------------
1 | import * as ActionTypes from '../model/action-types';
2 |
3 | export function changeSection(page) {
4 | return {
5 | type : ActionTypes.SECTION_WILL_CHANGE,
6 | payload: {
7 | section: page
8 | }
9 | };
10 | }
--------------------------------------------------------------------------------
/client/acp/index.js:
--------------------------------------------------------------------------------
1 | import Dashboard from './view/widget/dashboard';
2 | import React from 'react';
3 | import ReactDom from 'react-dom';
4 |
5 | export function init() {
6 | return ReactDom.render(
7 | ,
8 | document.getElementsByClassName('points-acp-dashboard')[0]
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/client/acp/model/action-types.js:
--------------------------------------------------------------------------------
1 | export const CALCULATION_PROPERTIES_DID_STORE = 'calculationPropertiesDidStore';
2 | export const CALCULATION_PROPERTIES_DID_UPDATE = 'calculationPropertiesDidUpdate';
3 | export const CALCULATION_PROPERTY_WILL_UPDATE = 'calculationPropertyWillUpdate';
4 | export const OVERVIEW_MAX_USERS_WILL_CHANGE = 'overviewMaxUsersWillChange';
5 | export const SECTION_WILL_CHANGE = 'sectionWillChange';
6 | export const SETTINGS_DID_STORE = 'settingsDidStore';
7 | export const SETTINGS_DID_UPDATE = 'settingsDidUpdate';
--------------------------------------------------------------------------------
/client/acp/model/pages.js:
--------------------------------------------------------------------------------
1 | export const RANKING = 'ranking';
2 |
3 | export const MANAGE = 'manage';
4 |
5 | export const SETTINGS = 'settings';
6 |
--------------------------------------------------------------------------------
/client/acp/model/reducers.js:
--------------------------------------------------------------------------------
1 | import u from 'updeep';
2 |
3 | import * as ActionTypes from './action-types';
4 | import * as Pages from './pages';
5 |
6 | const PAGES = [
7 | {name: 'Ranking', value: Pages.RANKING},
8 | {name: 'Manage', value: Pages.MANAGE},
9 | {name: 'Settings', value: Pages.SETTINGS}
10 | ];
11 |
12 | export function calculationProperties(state = {}, action) {
13 | switch (action.type) {
14 | case ActionTypes.CALCULATION_PROPERTY_WILL_UPDATE:
15 | let propertyUpdate = {};
16 | propertyUpdate[action.payload.property] = action.payload.value;
17 | return u(propertyUpdate, state);
18 | case ActionTypes.CALCULATION_PROPERTIES_DID_UPDATE:
19 | return u(action.payload, state);
20 | default:
21 | return state;
22 | }
23 | }
24 |
25 | export function calculationPropertiesChanged(state = false, action) {
26 | switch (action.type) {
27 | case ActionTypes.CALCULATION_PROPERTY_WILL_UPDATE:
28 | return true;
29 | case ActionTypes.CALCULATION_PROPERTIES_DID_STORE:
30 | return false;
31 | default:
32 | return state;
33 | }
34 | }
35 |
36 | export function section(state = Pages.RANKING, action) {
37 | switch (action.type) {
38 | case ActionTypes.SECTION_WILL_CHANGE:
39 | return action.payload.section;
40 | default:
41 | return state;
42 | }
43 | }
44 |
45 | export function sections(state = PAGES, action) {
46 | return state;
47 | }
48 |
49 | export function settings(state = {}, action) {
50 | switch (action.type) {
51 | case ActionTypes.OVERVIEW_MAX_USERS_WILL_CHANGE:
52 | return u({maxUsers: action.payload}, state);
53 | case ActionTypes.SETTINGS_DID_UPDATE:
54 | return u(action.payload, state);
55 | default:
56 | return state;
57 | }
58 | }
59 |
60 | export function settingsChanged(state = false, action) {
61 | switch (action.type) {
62 | case ActionTypes.OVERVIEW_MAX_USERS_WILL_CHANGE:
63 | return true;
64 | case ActionTypes.SETTINGS_DID_STORE:
65 | return false;
66 | default:
67 | return state;
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/client/acp/model/redux-store.js:
--------------------------------------------------------------------------------
1 | import {applyMiddleware, combineReducers, createStore} from 'redux';
2 | import ReduxThunk from 'redux-thunk';
3 |
4 | import * as Reducers from './reducers';
5 |
6 | export default class ReduxStore {
7 | constructor() {
8 | this.store = createStore(combineReducers(Reducers), applyMiddleware(ReduxThunk));
9 | }
10 |
11 | dispatch(action) {
12 | return this.store.dispatch(action);
13 | }
14 |
15 | getStore() {
16 | return this.store;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/client/acp/model/socket-api.js:
--------------------------------------------------------------------------------
1 | export const GET_CALCULATION_PROPERTIES = 'plugins.ns-points.getCalculationProperties';
2 | export const GET_SETTINGS = 'plugins.ns-points.getSettings';
3 | export const SAVE_CALCULATION_PROPERTIES = 'plugins.ns-points.saveCalculationProperties';
4 | export const SAVE_SETTINGS = 'plugins.ns-points.saveSettings';
5 |
--------------------------------------------------------------------------------
/client/acp/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "acp",
3 | "version": "1.0.0",
4 | "description": "ACP for Points management",
5 | "main": "index.js",
6 | "scripts": {
7 | "build": "NODE_ENV=production webpack --progress -p",
8 | "start": "parallelshell 'webpack --progress --colors --watch' 'node-sass --watch style/acp.scss ../../public/css/acp.css'",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "keywords": [
12 | "acp"
13 | ],
14 | "repository": {
15 | "type": "git",
16 | "url": "git+https://github.com/NicolasSiver/nodebb-plugin-ns-points.git"
17 | },
18 | "author": "Nicolas Siver",
19 | "license": "MIT",
20 | "dependencies": {
21 | "classnames": "^2.2.5",
22 | "react": "^15.3.1",
23 | "react-dom": "^15.3.1",
24 | "react-redux": "^4.4.5",
25 | "redux": "^3.6.0",
26 | "redux-thunk": "^2.1.0",
27 | "updeep": "^0.16.1"
28 | },
29 | "devDependencies": {
30 | "babel-core": "^6.14.0",
31 | "babel-loader": "^6.2.5",
32 | "babel-preset-es2015": "^6.14.0",
33 | "babel-preset-react": "^6.11.1",
34 | "exports-loader": "^0.6.3",
35 | "imports-loader": "^0.6.5",
36 | "node-sass": "^3.9.3",
37 | "parallelshell": "^3.0.2",
38 | "webpack": "^1.13.2"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/client/acp/service/socket-service.js:
--------------------------------------------------------------------------------
1 | import * as SocketApi from '../model/socket-api';
2 |
3 | export default class SocketService {
4 | static getCalculationProperties(done) {
5 | window.socket.emit(
6 | SocketApi.GET_CALCULATION_PROPERTIES,
7 | {},
8 | (error, properties) => {
9 | if (error) {
10 | //App.alertError(error.message);
11 | }
12 | done(error, properties);
13 | }
14 | );
15 | }
16 |
17 | static getSettings(done) {
18 | window.socket.emit(
19 | SocketApi.GET_SETTINGS,
20 | {},
21 | (error, settings) => {
22 | if (error) {
23 | //App.alertError(error.message);
24 | }
25 | done(error, settings);
26 | }
27 | );
28 | }
29 |
30 | static saveCalculationProperties(props, done) {
31 | window.socket.emit(
32 | SocketApi.SAVE_CALCULATION_PROPERTIES,
33 | props,
34 | (error) => {
35 | if (error) {
36 | //App.alertError(error.message);
37 | }
38 | done(error);
39 | }
40 | );
41 | }
42 |
43 | static saveSettings(settings, done) {
44 | window.socket.emit(
45 | SocketApi.SAVE_SETTINGS,
46 | settings,
47 | (error) => {
48 | if (error) {
49 | //App.alertError(error.message);
50 | }
51 | done(error);
52 | }
53 | );
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/client/acp/style/_layout.scss:
--------------------------------------------------------------------------------
1 | // Rhythm of 4px
2 | $vp-rhythm-base: 4px;
3 |
4 | $vp-rhythm-xs: $vp-rhythm-base;
5 | $vp-rhythm-s: $vp-rhythm-base * 2;
6 | $vp-rhythm: $vp-rhythm-base * 3;
7 | $vp-rhythm-l: $vp-rhythm-base * 4;
8 | $vp-rhythm-xl: $vp-rhythm-base * 5;
--------------------------------------------------------------------------------
/client/acp/style/acp.scss:
--------------------------------------------------------------------------------
1 | @import "layout";
2 |
3 | .points-acp-dashboard {
4 | .tab-content {
5 | margin-top: $vp-rhythm-l;
6 | }
7 | }
--------------------------------------------------------------------------------
/client/acp/view/display/save-button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const SaveButton = ({enabled, clickHandler}) => {
4 | if (enabled) {
5 | return (
6 |
11 | );
12 | }
13 |
14 | return null;
15 | };
16 |
17 | export default SaveButton;
18 |
--------------------------------------------------------------------------------
/client/acp/view/widget/dashboard.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {Provider} from 'react-redux';
3 |
4 | import * as Actions from '../../controller/actions';
5 | import loadCalculationProperties from '../../actions/load-calculation-properties';
6 | import loadSettings from '../../actions/load-settings';
7 | import ReduxStore from '../../model/redux-store';
8 | import TabHost from './tab-host';
9 |
10 | export default class Dashboard extends React.Component {
11 | constructor(props) {
12 | super(props);
13 | this.mainStore = new ReduxStore();
14 | }
15 |
16 | componentDidMount() {
17 | this.mainStore.dispatch(loadCalculationProperties());
18 | this.mainStore.dispatch(loadSettings());
19 | }
20 |
21 | render() {
22 | return ;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/client/acp/view/widget/page-manage.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {connect} from 'react-redux';
3 |
4 | class PageManage extends React.Component {
5 | render() {
6 | return (
7 |
8 |
9 | Functionality will be added with a next big update.
10 | Ability to set points or grant particular amount for the user.
11 |
12 |
13 | );
14 | }
15 | }
16 |
17 | export default connect()(PageManage);
--------------------------------------------------------------------------------
/client/acp/view/widget/page-plugins.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {connect} from 'react-redux';
3 |
4 | class PagePlugins extends React.Component {
5 | render() {
6 | return (
7 |
8 |
Functionality will be added with a next big update.
9 | Plugin
10 | will provide API for integration with another plugins.
11 |
12 |
13 | );
14 | }
15 | }
16 |
17 | export default connect()(PagePlugins);
--------------------------------------------------------------------------------
/client/acp/view/widget/page-ranking.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {connect} from 'react-redux';
3 |
4 | import SaveButton from '../display/save-button';
5 | import saveProperties from '../../actions/save-properties';
6 | import {updateProperty} from '../../actions/simple-actions';
7 |
8 | class PageRanking extends React.Component {
9 | constructor(props) {
10 | super(props);
11 | this.texts = {
12 | postWeight : {
13 | title: 'Weight: Post',
14 | hint : 'Points given for every post'
15 | },
16 | topicWeight : {
17 | title: 'Weight: Topic',
18 | hint : 'Points given for every created topic'
19 | },
20 | reputationWeight : {
21 | title: 'Weight: Reputation',
22 | hint : 'Points given for reputation grow'
23 | },
24 | reputationActionWeight: {
25 | title: 'Weight: Reputation Action',
26 | hint : `Points given for increasing someone's reputation`
27 | },
28 | basePoints : {
29 | title: 'Base Points',
30 | hint : 'Points needed to achieve very first level up'
31 | },
32 | baseGrow : {
33 | title: 'Base Grow',
34 | hint : 'Determines how many extra points needed to achieve every next level'
35 | }
36 | };
37 |
38 | this.saveHandler = (e) => this.props.dispatch(saveProperties(this.props.calculationProperties));
39 | }
40 |
41 | // FIXME DRY, try to use same Ranking calculation which is provided for the client side
42 | calculateLevels(basePoints, baseGrow) {
43 | let accumulatedPoints = 0,
44 | level = 1,
45 | currentLevelTotal = parseInt(basePoints, 10),
46 | levelGrow = parseInt(baseGrow, 10),
47 | preview = [10, 20, 30, 40, 50, 60, 70, 80, 99],
48 | previewIndex = -1,
49 | result = [];
50 |
51 | while (level < 100) {
52 | level++;
53 | accumulatedPoints += currentLevelTotal;
54 | currentLevelTotal += levelGrow;
55 |
56 | previewIndex = preview.indexOf(level);
57 | if (previewIndex != -1) {
58 | result.push({level, accumulatedPoints});
59 | }
60 | }
61 |
62 | return result;
63 | }
64 |
65 | generateFields(fields) {
66 | // Convert to N columns, possible values - 2, 3, 4, 6, 12
67 | let columns = 2, rows = [], index = 0, cursor = 0;
68 | let columnClass = `col-md-${12 / columns}`;
69 |
70 | for (let key of Object.keys(fields)) {
71 | if (!rows[index]) {
72 | rows[index] = [];
73 | }
74 | rows[index].push(key);
75 |
76 | cursor++;
77 | if (cursor % columns == 0) {
78 | index++;
79 | }
80 | }
81 |
82 | return (
83 |
84 | {rows.map(columnList => {
85 | return (
86 |
87 | {columnList.map(fieldKey => {
88 | let textData = this.texts[fieldKey];
89 | return (
90 |
91 |
92 |
93 | this.propertyDidChange(fieldKey, e.target.value)}/>
99 | {textData.hint}
100 |
101 |
102 | );
103 | })}
104 |
105 | );
106 | })}
107 |
108 | );
109 | }
110 |
111 | generateLevelPreview(basePoints, baseGrow) {
112 | if (basePoints == 0) {
113 | return Invalid. Level Grow isn't possible.
114 | }
115 |
116 | return
117 | {this.calculateLevels(basePoints, baseGrow).map(levelData => {
118 | return (
119 |
120 | Level {levelData.level}: {levelData.accumulatedPoints} points
121 |
122 | );
123 | })}
124 |
;
125 | }
126 |
127 | propertyDidChange(property, value) {
128 | this.props.dispatch(updateProperty(property, value));
129 | }
130 |
131 | render() {
132 | return (
133 |
134 |
135 | {this.generateFields(this.props.calculationProperties)}
136 |
139 |
140 |
141 |
Preview Default Ranking
142 | {this.generateLevelPreview(
143 | this.props.calculationProperties['basePoints'],
144 | this.props.calculationProperties['baseGrow']
145 | )}
146 |
147 |
148 | );
149 | }
150 | }
151 |
152 | export default connect(state => {
153 | return {
154 | calculationProperties : state.calculationProperties,
155 | calculationPropertiesChanged: state.calculationPropertiesChanged
156 | };
157 | })(PageRanking);
158 |
--------------------------------------------------------------------------------
/client/acp/view/widget/page-settings.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {connect} from 'react-redux';
3 |
4 | import SaveButton from '../display/save-button';
5 | import saveSettings from '../../actions/save-settings';
6 | import {setMaxOverviewUsers} from '../../actions/simple-actions';
7 |
8 | class PageSettings extends React.Component {
9 | constructor(props) {
10 | super(props);
11 | this.setMaxUsers = (e) => {
12 | var users = e.target.value;
13 | if (users) {
14 | this.props.dispatch(setMaxOverviewUsers(users));
15 | }
16 | };
17 | this.saveSettings = () => {
18 | this.props.dispatch(saveSettings(this.props.settings));
19 | };
20 | }
21 |
22 | render() {
23 | return (
24 |
25 |
26 |
27 |
28 |
29 |
35 | How many persons should be shown at Overview page.
36 |
37 |
40 |
41 |
42 |
43 | );
44 | }
45 | }
46 |
47 | export default connect(state => {
48 | return {
49 | settings : state.settings,
50 | settingsChanged: state.settingsChanged
51 | };
52 | })(PageSettings);
53 |
--------------------------------------------------------------------------------
/client/acp/view/widget/tab-host.js:
--------------------------------------------------------------------------------
1 | import classNames from 'classnames';
2 | import React from 'react';
3 | import {connect} from 'react-redux';
4 |
5 | import {changeSection} from '../../controller/actions';
6 | import * as Pages from '../../model/pages';
7 | import PageManage from './page-manage';
8 | import PagePlugins from './page-plugins';
9 | import PageRanking from './page-ranking';
10 | import PageSettings from './page-settings';
11 |
12 | class TabHost extends React.Component {
13 | createSection(page) {
14 | switch (page) {
15 | case Pages.RANKING:
16 | return ;
17 | case Pages.PLUGINS:
18 | return ;
19 | case Pages.MANAGE:
20 | return ;
21 | case Pages.SETTINGS:
22 | return ;
23 | default:
24 | return null;
25 | }
26 | }
27 |
28 | render() {
29 | return
30 |
31 | {this.props.sections.map((section) => {
32 | let liClass = classNames({active: this.props.section === section.value});
33 | return (
34 | - this.props.dispatch(changeSection(section.value))}>
35 | {section.name}
36 |
37 | );
38 | })}
39 |
40 |
41 |
42 |
43 | {this.createSection(this.props.section)}
44 |
45 |
46 |
47 | }
48 | }
49 |
50 | export default connect((state) => {
51 | return {
52 | section : state.section,
53 | sections: state.sections
54 | };
55 | })(TabHost);
56 |
--------------------------------------------------------------------------------
/client/acp/webpack.config.js:
--------------------------------------------------------------------------------
1 | var path = require('path'),
2 | webpack = require('webpack');
3 |
4 | module.exports = {
5 | entry : "./index.js",
6 | output : {
7 | path : "../../public/js",
8 | filename : "acp.js",
9 | libraryTarget: "amd",
10 | library : "admin/plugins/points"
11 | },
12 | module : {
13 | loaders: [
14 | {
15 | test : /\.jsx?$/,
16 | exclude: /node_modules/,
17 | loader : 'babel-loader',
18 | query : {
19 | presets: ['es2015', 'react']
20 | }
21 | }
22 | ]
23 | },
24 | watchOptions: {
25 | poll: 1000
26 | },
27 | plugins : [
28 | new webpack.DefinePlugin({
29 | 'process.env': {
30 | 'NODE_ENV': JSON.stringify('production')
31 | }
32 | })
33 | ]
34 | };
35 |
--------------------------------------------------------------------------------
/client/acp/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | abbrev@1:
6 | version "1.1.1"
7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
8 |
9 | acorn@^3.0.0:
10 | version "3.3.0"
11 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
12 |
13 | ajv@^5.1.0:
14 | version "5.5.2"
15 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
16 | dependencies:
17 | co "^4.6.0"
18 | fast-deep-equal "^1.0.0"
19 | fast-json-stable-stringify "^2.0.0"
20 | json-schema-traverse "^0.3.0"
21 |
22 | align-text@^0.1.1, align-text@^0.1.3:
23 | version "0.1.4"
24 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
25 | dependencies:
26 | kind-of "^3.0.2"
27 | longest "^1.0.1"
28 | repeat-string "^1.5.2"
29 |
30 | amdefine@>=0.0.4:
31 | version "1.0.1"
32 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
33 |
34 | ansi-regex@^2.0.0:
35 | version "2.1.1"
36 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
37 |
38 | ansi-styles@^2.2.1:
39 | version "2.2.1"
40 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
41 |
42 | anymatch@^1.3.0:
43 | version "1.3.2"
44 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
45 | dependencies:
46 | micromatch "^2.1.5"
47 | normalize-path "^2.0.0"
48 |
49 | aproba@^1.0.3:
50 | version "1.2.0"
51 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
52 |
53 | are-we-there-yet@~1.1.2:
54 | version "1.1.4"
55 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
56 | dependencies:
57 | delegates "^1.0.0"
58 | readable-stream "^2.0.6"
59 |
60 | arr-diff@^2.0.0:
61 | version "2.0.0"
62 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
63 | dependencies:
64 | arr-flatten "^1.0.1"
65 |
66 | arr-flatten@^1.0.1:
67 | version "1.1.0"
68 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
69 |
70 | array-find-index@^1.0.1:
71 | version "1.0.2"
72 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
73 |
74 | array-unique@^0.2.1:
75 | version "0.2.1"
76 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
77 |
78 | asap@~2.0.3:
79 | version "2.0.6"
80 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
81 |
82 | asn1@~0.2.3:
83 | version "0.2.3"
84 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
85 |
86 | assert-plus@1.0.0, assert-plus@^1.0.0:
87 | version "1.0.0"
88 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
89 |
90 | assert@^1.1.1:
91 | version "1.4.1"
92 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
93 | dependencies:
94 | util "0.10.3"
95 |
96 | async-each@^1.0.0:
97 | version "1.0.1"
98 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
99 |
100 | async-foreach@^0.1.3:
101 | version "0.1.3"
102 | resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
103 |
104 | async@^0.9.0:
105 | version "0.9.2"
106 | resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
107 |
108 | async@^1.3.0:
109 | version "1.5.2"
110 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
111 |
112 | async@~0.2.6:
113 | version "0.2.10"
114 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
115 |
116 | asynckit@^0.4.0:
117 | version "0.4.0"
118 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
119 |
120 | aws-sign2@~0.7.0:
121 | version "0.7.0"
122 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
123 |
124 | aws4@^1.6.0:
125 | version "1.7.0"
126 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
127 |
128 | babel-code-frame@^6.26.0:
129 | version "6.26.0"
130 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
131 | dependencies:
132 | chalk "^1.1.3"
133 | esutils "^2.0.2"
134 | js-tokens "^3.0.2"
135 |
136 | babel-core@^6.14.0, babel-core@^6.26.0:
137 | version "6.26.3"
138 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
139 | dependencies:
140 | babel-code-frame "^6.26.0"
141 | babel-generator "^6.26.0"
142 | babel-helpers "^6.24.1"
143 | babel-messages "^6.23.0"
144 | babel-register "^6.26.0"
145 | babel-runtime "^6.26.0"
146 | babel-template "^6.26.0"
147 | babel-traverse "^6.26.0"
148 | babel-types "^6.26.0"
149 | babylon "^6.18.0"
150 | convert-source-map "^1.5.1"
151 | debug "^2.6.9"
152 | json5 "^0.5.1"
153 | lodash "^4.17.4"
154 | minimatch "^3.0.4"
155 | path-is-absolute "^1.0.1"
156 | private "^0.1.8"
157 | slash "^1.0.0"
158 | source-map "^0.5.7"
159 |
160 | babel-generator@^6.26.0:
161 | version "6.26.1"
162 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
163 | dependencies:
164 | babel-messages "^6.23.0"
165 | babel-runtime "^6.26.0"
166 | babel-types "^6.26.0"
167 | detect-indent "^4.0.0"
168 | jsesc "^1.3.0"
169 | lodash "^4.17.4"
170 | source-map "^0.5.7"
171 | trim-right "^1.0.1"
172 |
173 | babel-helper-builder-react-jsx@^6.24.1:
174 | version "6.26.0"
175 | resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
176 | dependencies:
177 | babel-runtime "^6.26.0"
178 | babel-types "^6.26.0"
179 | esutils "^2.0.2"
180 |
181 | babel-helper-call-delegate@^6.24.1:
182 | version "6.24.1"
183 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
184 | dependencies:
185 | babel-helper-hoist-variables "^6.24.1"
186 | babel-runtime "^6.22.0"
187 | babel-traverse "^6.24.1"
188 | babel-types "^6.24.1"
189 |
190 | babel-helper-define-map@^6.24.1:
191 | version "6.26.0"
192 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
193 | dependencies:
194 | babel-helper-function-name "^6.24.1"
195 | babel-runtime "^6.26.0"
196 | babel-types "^6.26.0"
197 | lodash "^4.17.4"
198 |
199 | babel-helper-function-name@^6.24.1:
200 | version "6.24.1"
201 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
202 | dependencies:
203 | babel-helper-get-function-arity "^6.24.1"
204 | babel-runtime "^6.22.0"
205 | babel-template "^6.24.1"
206 | babel-traverse "^6.24.1"
207 | babel-types "^6.24.1"
208 |
209 | babel-helper-get-function-arity@^6.24.1:
210 | version "6.24.1"
211 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
212 | dependencies:
213 | babel-runtime "^6.22.0"
214 | babel-types "^6.24.1"
215 |
216 | babel-helper-hoist-variables@^6.24.1:
217 | version "6.24.1"
218 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
219 | dependencies:
220 | babel-runtime "^6.22.0"
221 | babel-types "^6.24.1"
222 |
223 | babel-helper-optimise-call-expression@^6.24.1:
224 | version "6.24.1"
225 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
226 | dependencies:
227 | babel-runtime "^6.22.0"
228 | babel-types "^6.24.1"
229 |
230 | babel-helper-regex@^6.24.1:
231 | version "6.26.0"
232 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
233 | dependencies:
234 | babel-runtime "^6.26.0"
235 | babel-types "^6.26.0"
236 | lodash "^4.17.4"
237 |
238 | babel-helper-replace-supers@^6.24.1:
239 | version "6.24.1"
240 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
241 | dependencies:
242 | babel-helper-optimise-call-expression "^6.24.1"
243 | babel-messages "^6.23.0"
244 | babel-runtime "^6.22.0"
245 | babel-template "^6.24.1"
246 | babel-traverse "^6.24.1"
247 | babel-types "^6.24.1"
248 |
249 | babel-helpers@^6.24.1:
250 | version "6.24.1"
251 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
252 | dependencies:
253 | babel-runtime "^6.22.0"
254 | babel-template "^6.24.1"
255 |
256 | babel-loader@^6.2.5:
257 | version "6.4.1"
258 | resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca"
259 | dependencies:
260 | find-cache-dir "^0.1.1"
261 | loader-utils "^0.2.16"
262 | mkdirp "^0.5.1"
263 | object-assign "^4.0.1"
264 |
265 | babel-messages@^6.23.0:
266 | version "6.23.0"
267 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
268 | dependencies:
269 | babel-runtime "^6.22.0"
270 |
271 | babel-plugin-check-es2015-constants@^6.22.0:
272 | version "6.22.0"
273 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
274 | dependencies:
275 | babel-runtime "^6.22.0"
276 |
277 | babel-plugin-syntax-flow@^6.18.0:
278 | version "6.18.0"
279 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
280 |
281 | babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
282 | version "6.18.0"
283 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
284 |
285 | babel-plugin-transform-es2015-arrow-functions@^6.22.0:
286 | version "6.22.0"
287 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
288 | dependencies:
289 | babel-runtime "^6.22.0"
290 |
291 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
292 | version "6.22.0"
293 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
294 | dependencies:
295 | babel-runtime "^6.22.0"
296 |
297 | babel-plugin-transform-es2015-block-scoping@^6.24.1:
298 | version "6.26.0"
299 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
300 | dependencies:
301 | babel-runtime "^6.26.0"
302 | babel-template "^6.26.0"
303 | babel-traverse "^6.26.0"
304 | babel-types "^6.26.0"
305 | lodash "^4.17.4"
306 |
307 | babel-plugin-transform-es2015-classes@^6.24.1:
308 | version "6.24.1"
309 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
310 | dependencies:
311 | babel-helper-define-map "^6.24.1"
312 | babel-helper-function-name "^6.24.1"
313 | babel-helper-optimise-call-expression "^6.24.1"
314 | babel-helper-replace-supers "^6.24.1"
315 | babel-messages "^6.23.0"
316 | babel-runtime "^6.22.0"
317 | babel-template "^6.24.1"
318 | babel-traverse "^6.24.1"
319 | babel-types "^6.24.1"
320 |
321 | babel-plugin-transform-es2015-computed-properties@^6.24.1:
322 | version "6.24.1"
323 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
324 | dependencies:
325 | babel-runtime "^6.22.0"
326 | babel-template "^6.24.1"
327 |
328 | babel-plugin-transform-es2015-destructuring@^6.22.0:
329 | version "6.23.0"
330 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
331 | dependencies:
332 | babel-runtime "^6.22.0"
333 |
334 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1:
335 | version "6.24.1"
336 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
337 | dependencies:
338 | babel-runtime "^6.22.0"
339 | babel-types "^6.24.1"
340 |
341 | babel-plugin-transform-es2015-for-of@^6.22.0:
342 | version "6.23.0"
343 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
344 | dependencies:
345 | babel-runtime "^6.22.0"
346 |
347 | babel-plugin-transform-es2015-function-name@^6.24.1:
348 | version "6.24.1"
349 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
350 | dependencies:
351 | babel-helper-function-name "^6.24.1"
352 | babel-runtime "^6.22.0"
353 | babel-types "^6.24.1"
354 |
355 | babel-plugin-transform-es2015-literals@^6.22.0:
356 | version "6.22.0"
357 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
358 | dependencies:
359 | babel-runtime "^6.22.0"
360 |
361 | babel-plugin-transform-es2015-modules-amd@^6.24.1:
362 | version "6.24.1"
363 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
364 | dependencies:
365 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
366 | babel-runtime "^6.22.0"
367 | babel-template "^6.24.1"
368 |
369 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
370 | version "6.26.2"
371 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
372 | dependencies:
373 | babel-plugin-transform-strict-mode "^6.24.1"
374 | babel-runtime "^6.26.0"
375 | babel-template "^6.26.0"
376 | babel-types "^6.26.0"
377 |
378 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
379 | version "6.24.1"
380 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
381 | dependencies:
382 | babel-helper-hoist-variables "^6.24.1"
383 | babel-runtime "^6.22.0"
384 | babel-template "^6.24.1"
385 |
386 | babel-plugin-transform-es2015-modules-umd@^6.24.1:
387 | version "6.24.1"
388 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
389 | dependencies:
390 | babel-plugin-transform-es2015-modules-amd "^6.24.1"
391 | babel-runtime "^6.22.0"
392 | babel-template "^6.24.1"
393 |
394 | babel-plugin-transform-es2015-object-super@^6.24.1:
395 | version "6.24.1"
396 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
397 | dependencies:
398 | babel-helper-replace-supers "^6.24.1"
399 | babel-runtime "^6.22.0"
400 |
401 | babel-plugin-transform-es2015-parameters@^6.24.1:
402 | version "6.24.1"
403 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
404 | dependencies:
405 | babel-helper-call-delegate "^6.24.1"
406 | babel-helper-get-function-arity "^6.24.1"
407 | babel-runtime "^6.22.0"
408 | babel-template "^6.24.1"
409 | babel-traverse "^6.24.1"
410 | babel-types "^6.24.1"
411 |
412 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
413 | version "6.24.1"
414 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
415 | dependencies:
416 | babel-runtime "^6.22.0"
417 | babel-types "^6.24.1"
418 |
419 | babel-plugin-transform-es2015-spread@^6.22.0:
420 | version "6.22.0"
421 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
422 | dependencies:
423 | babel-runtime "^6.22.0"
424 |
425 | babel-plugin-transform-es2015-sticky-regex@^6.24.1:
426 | version "6.24.1"
427 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
428 | dependencies:
429 | babel-helper-regex "^6.24.1"
430 | babel-runtime "^6.22.0"
431 | babel-types "^6.24.1"
432 |
433 | babel-plugin-transform-es2015-template-literals@^6.22.0:
434 | version "6.22.0"
435 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
436 | dependencies:
437 | babel-runtime "^6.22.0"
438 |
439 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
440 | version "6.23.0"
441 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
442 | dependencies:
443 | babel-runtime "^6.22.0"
444 |
445 | babel-plugin-transform-es2015-unicode-regex@^6.24.1:
446 | version "6.24.1"
447 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
448 | dependencies:
449 | babel-helper-regex "^6.24.1"
450 | babel-runtime "^6.22.0"
451 | regexpu-core "^2.0.0"
452 |
453 | babel-plugin-transform-flow-strip-types@^6.22.0:
454 | version "6.22.0"
455 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
456 | dependencies:
457 | babel-plugin-syntax-flow "^6.18.0"
458 | babel-runtime "^6.22.0"
459 |
460 | babel-plugin-transform-react-display-name@^6.23.0:
461 | version "6.25.0"
462 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
463 | dependencies:
464 | babel-runtime "^6.22.0"
465 |
466 | babel-plugin-transform-react-jsx-self@^6.22.0:
467 | version "6.22.0"
468 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
469 | dependencies:
470 | babel-plugin-syntax-jsx "^6.8.0"
471 | babel-runtime "^6.22.0"
472 |
473 | babel-plugin-transform-react-jsx-source@^6.22.0:
474 | version "6.22.0"
475 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
476 | dependencies:
477 | babel-plugin-syntax-jsx "^6.8.0"
478 | babel-runtime "^6.22.0"
479 |
480 | babel-plugin-transform-react-jsx@^6.24.1:
481 | version "6.24.1"
482 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
483 | dependencies:
484 | babel-helper-builder-react-jsx "^6.24.1"
485 | babel-plugin-syntax-jsx "^6.8.0"
486 | babel-runtime "^6.22.0"
487 |
488 | babel-plugin-transform-regenerator@^6.24.1:
489 | version "6.26.0"
490 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
491 | dependencies:
492 | regenerator-transform "^0.10.0"
493 |
494 | babel-plugin-transform-strict-mode@^6.24.1:
495 | version "6.24.1"
496 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
497 | dependencies:
498 | babel-runtime "^6.22.0"
499 | babel-types "^6.24.1"
500 |
501 | babel-preset-es2015@^6.14.0:
502 | version "6.24.1"
503 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
504 | dependencies:
505 | babel-plugin-check-es2015-constants "^6.22.0"
506 | babel-plugin-transform-es2015-arrow-functions "^6.22.0"
507 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
508 | babel-plugin-transform-es2015-block-scoping "^6.24.1"
509 | babel-plugin-transform-es2015-classes "^6.24.1"
510 | babel-plugin-transform-es2015-computed-properties "^6.24.1"
511 | babel-plugin-transform-es2015-destructuring "^6.22.0"
512 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
513 | babel-plugin-transform-es2015-for-of "^6.22.0"
514 | babel-plugin-transform-es2015-function-name "^6.24.1"
515 | babel-plugin-transform-es2015-literals "^6.22.0"
516 | babel-plugin-transform-es2015-modules-amd "^6.24.1"
517 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
518 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
519 | babel-plugin-transform-es2015-modules-umd "^6.24.1"
520 | babel-plugin-transform-es2015-object-super "^6.24.1"
521 | babel-plugin-transform-es2015-parameters "^6.24.1"
522 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
523 | babel-plugin-transform-es2015-spread "^6.22.0"
524 | babel-plugin-transform-es2015-sticky-regex "^6.24.1"
525 | babel-plugin-transform-es2015-template-literals "^6.22.0"
526 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
527 | babel-plugin-transform-es2015-unicode-regex "^6.24.1"
528 | babel-plugin-transform-regenerator "^6.24.1"
529 |
530 | babel-preset-flow@^6.23.0:
531 | version "6.23.0"
532 | resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
533 | dependencies:
534 | babel-plugin-transform-flow-strip-types "^6.22.0"
535 |
536 | babel-preset-react@^6.11.1:
537 | version "6.24.1"
538 | resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
539 | dependencies:
540 | babel-plugin-syntax-jsx "^6.3.13"
541 | babel-plugin-transform-react-display-name "^6.23.0"
542 | babel-plugin-transform-react-jsx "^6.24.1"
543 | babel-plugin-transform-react-jsx-self "^6.22.0"
544 | babel-plugin-transform-react-jsx-source "^6.22.0"
545 | babel-preset-flow "^6.23.0"
546 |
547 | babel-register@^6.26.0:
548 | version "6.26.0"
549 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
550 | dependencies:
551 | babel-core "^6.26.0"
552 | babel-runtime "^6.26.0"
553 | core-js "^2.5.0"
554 | home-or-tmp "^2.0.0"
555 | lodash "^4.17.4"
556 | mkdirp "^0.5.1"
557 | source-map-support "^0.4.15"
558 |
559 | babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
560 | version "6.26.0"
561 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
562 | dependencies:
563 | core-js "^2.4.0"
564 | regenerator-runtime "^0.11.0"
565 |
566 | babel-template@^6.24.1, babel-template@^6.26.0:
567 | version "6.26.0"
568 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
569 | dependencies:
570 | babel-runtime "^6.26.0"
571 | babel-traverse "^6.26.0"
572 | babel-types "^6.26.0"
573 | babylon "^6.18.0"
574 | lodash "^4.17.4"
575 |
576 | babel-traverse@^6.24.1, babel-traverse@^6.26.0:
577 | version "6.26.0"
578 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
579 | dependencies:
580 | babel-code-frame "^6.26.0"
581 | babel-messages "^6.23.0"
582 | babel-runtime "^6.26.0"
583 | babel-types "^6.26.0"
584 | babylon "^6.18.0"
585 | debug "^2.6.8"
586 | globals "^9.18.0"
587 | invariant "^2.2.2"
588 | lodash "^4.17.4"
589 |
590 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
591 | version "6.26.0"
592 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
593 | dependencies:
594 | babel-runtime "^6.26.0"
595 | esutils "^2.0.2"
596 | lodash "^4.17.4"
597 | to-fast-properties "^1.0.3"
598 |
599 | babylon@^6.18.0:
600 | version "6.18.0"
601 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
602 |
603 | balanced-match@^1.0.0:
604 | version "1.0.0"
605 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
606 |
607 | base64-js@^1.0.2:
608 | version "1.3.0"
609 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
610 |
611 | bcrypt-pbkdf@^1.0.0:
612 | version "1.0.1"
613 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
614 | dependencies:
615 | tweetnacl "^0.14.3"
616 |
617 | big.js@^3.1.3:
618 | version "3.2.0"
619 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
620 |
621 | binary-extensions@^1.0.0:
622 | version "1.11.0"
623 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
624 |
625 | block-stream@*:
626 | version "0.0.9"
627 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
628 | dependencies:
629 | inherits "~2.0.0"
630 |
631 | brace-expansion@^1.1.7:
632 | version "1.1.11"
633 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
634 | dependencies:
635 | balanced-match "^1.0.0"
636 | concat-map "0.0.1"
637 |
638 | braces@^1.8.2:
639 | version "1.8.5"
640 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
641 | dependencies:
642 | expand-range "^1.8.1"
643 | preserve "^0.2.0"
644 | repeat-element "^1.1.2"
645 |
646 | browserify-aes@0.4.0:
647 | version "0.4.0"
648 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
649 | dependencies:
650 | inherits "^2.0.1"
651 |
652 | browserify-zlib@^0.1.4:
653 | version "0.1.4"
654 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
655 | dependencies:
656 | pako "~0.2.0"
657 |
658 | buffer@^4.9.0:
659 | version "4.9.1"
660 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
661 | dependencies:
662 | base64-js "^1.0.2"
663 | ieee754 "^1.1.4"
664 | isarray "^1.0.0"
665 |
666 | builtin-modules@^1.0.0:
667 | version "1.1.1"
668 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
669 |
670 | builtin-status-codes@^3.0.0:
671 | version "3.0.0"
672 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
673 |
674 | camelcase-keys@^2.0.0:
675 | version "2.1.0"
676 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
677 | dependencies:
678 | camelcase "^2.0.0"
679 | map-obj "^1.0.0"
680 |
681 | camelcase@^1.0.2:
682 | version "1.2.1"
683 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
684 |
685 | camelcase@^2.0.0:
686 | version "2.1.1"
687 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
688 |
689 | camelcase@^3.0.0:
690 | version "3.0.0"
691 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
692 |
693 | caseless@~0.12.0:
694 | version "0.12.0"
695 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
696 |
697 | center-align@^0.1.1:
698 | version "0.1.3"
699 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
700 | dependencies:
701 | align-text "^0.1.3"
702 | lazy-cache "^1.0.3"
703 |
704 | chalk@^1.1.1, chalk@^1.1.3:
705 | version "1.1.3"
706 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
707 | dependencies:
708 | ansi-styles "^2.2.1"
709 | escape-string-regexp "^1.0.2"
710 | has-ansi "^2.0.0"
711 | strip-ansi "^3.0.0"
712 | supports-color "^2.0.0"
713 |
714 | chokidar@^1.0.0:
715 | version "1.7.0"
716 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
717 | dependencies:
718 | anymatch "^1.3.0"
719 | async-each "^1.0.0"
720 | glob-parent "^2.0.0"
721 | inherits "^2.0.1"
722 | is-binary-path "^1.0.0"
723 | is-glob "^2.0.0"
724 | path-is-absolute "^1.0.0"
725 | readdirp "^2.0.0"
726 | optionalDependencies:
727 | fsevents "^1.0.0"
728 |
729 | chownr@^1.0.1:
730 | version "1.0.1"
731 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
732 |
733 | classnames@^2.2.5:
734 | version "2.2.5"
735 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
736 |
737 | cliui@^2.1.0:
738 | version "2.1.0"
739 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
740 | dependencies:
741 | center-align "^0.1.1"
742 | right-align "^0.1.1"
743 | wordwrap "0.0.2"
744 |
745 | cliui@^3.2.0:
746 | version "3.2.0"
747 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
748 | dependencies:
749 | string-width "^1.0.1"
750 | strip-ansi "^3.0.1"
751 | wrap-ansi "^2.0.0"
752 |
753 | clone@^1.0.2:
754 | version "1.0.4"
755 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
756 |
757 | co@^4.6.0:
758 | version "4.6.0"
759 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
760 |
761 | code-point-at@^1.0.0:
762 | version "1.1.0"
763 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
764 |
765 | combined-stream@1.0.6, combined-stream@~1.0.5:
766 | version "1.0.6"
767 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
768 | dependencies:
769 | delayed-stream "~1.0.0"
770 |
771 | commondir@^1.0.1:
772 | version "1.0.1"
773 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
774 |
775 | concat-map@0.0.1:
776 | version "0.0.1"
777 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
778 |
779 | console-browserify@^1.1.0:
780 | version "1.1.0"
781 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
782 | dependencies:
783 | date-now "^0.1.4"
784 |
785 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
786 | version "1.1.0"
787 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
788 |
789 | constants-browserify@^1.0.0:
790 | version "1.0.0"
791 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
792 |
793 | convert-source-map@^1.5.1:
794 | version "1.5.1"
795 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
796 |
797 | core-js@^1.0.0:
798 | version "1.2.7"
799 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
800 |
801 | core-js@^2.4.0, core-js@^2.5.0:
802 | version "2.5.6"
803 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.6.tgz#0fe6d45bf3cac3ac364a9d72de7576f4eb221b9d"
804 |
805 | core-util-is@1.0.2, core-util-is@~1.0.0:
806 | version "1.0.2"
807 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
808 |
809 | create-react-class@^15.5.1, create-react-class@^15.6.0:
810 | version "15.6.3"
811 | resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
812 | dependencies:
813 | fbjs "^0.8.9"
814 | loose-envify "^1.3.1"
815 | object-assign "^4.1.1"
816 |
817 | cross-spawn@^3.0.0:
818 | version "3.0.1"
819 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
820 | dependencies:
821 | lru-cache "^4.0.1"
822 | which "^1.2.9"
823 |
824 | crypto-browserify@3.3.0:
825 | version "3.3.0"
826 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
827 | dependencies:
828 | browserify-aes "0.4.0"
829 | pbkdf2-compat "2.0.1"
830 | ripemd160 "0.2.0"
831 | sha.js "2.2.6"
832 |
833 | currently-unhandled@^0.4.1:
834 | version "0.4.1"
835 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
836 | dependencies:
837 | array-find-index "^1.0.1"
838 |
839 | dashdash@^1.12.0:
840 | version "1.14.1"
841 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
842 | dependencies:
843 | assert-plus "^1.0.0"
844 |
845 | date-now@^0.1.4:
846 | version "0.1.4"
847 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
848 |
849 | debug@^2.1.2, debug@^2.6.8, debug@^2.6.9:
850 | version "2.6.9"
851 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
852 | dependencies:
853 | ms "2.0.0"
854 |
855 | decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
856 | version "1.2.0"
857 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
858 |
859 | deep-extend@^0.5.1:
860 | version "0.5.1"
861 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f"
862 |
863 | delayed-stream@~1.0.0:
864 | version "1.0.0"
865 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
866 |
867 | delegates@^1.0.0:
868 | version "1.0.0"
869 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
870 |
871 | detect-indent@^4.0.0:
872 | version "4.0.0"
873 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
874 | dependencies:
875 | repeating "^2.0.0"
876 |
877 | detect-libc@^1.0.2:
878 | version "1.0.3"
879 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
880 |
881 | domain-browser@^1.1.1:
882 | version "1.2.0"
883 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
884 |
885 | ecc-jsbn@~0.1.1:
886 | version "0.1.1"
887 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
888 | dependencies:
889 | jsbn "~0.1.0"
890 |
891 | emojis-list@^2.0.0:
892 | version "2.1.0"
893 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
894 |
895 | encoding@^0.1.11:
896 | version "0.1.12"
897 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
898 | dependencies:
899 | iconv-lite "~0.4.13"
900 |
901 | enhanced-resolve@~0.9.0:
902 | version "0.9.1"
903 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
904 | dependencies:
905 | graceful-fs "^4.1.2"
906 | memory-fs "^0.2.0"
907 | tapable "^0.1.8"
908 |
909 | errno@^0.1.3:
910 | version "0.1.7"
911 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
912 | dependencies:
913 | prr "~1.0.1"
914 |
915 | error-ex@^1.2.0:
916 | version "1.3.1"
917 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
918 | dependencies:
919 | is-arrayish "^0.2.1"
920 |
921 | escape-string-regexp@^1.0.2:
922 | version "1.0.5"
923 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
924 |
925 | esutils@^2.0.2:
926 | version "2.0.2"
927 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
928 |
929 | events@^1.0.0:
930 | version "1.1.1"
931 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
932 |
933 | expand-brackets@^0.1.4:
934 | version "0.1.5"
935 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
936 | dependencies:
937 | is-posix-bracket "^0.1.0"
938 |
939 | expand-range@^1.8.1:
940 | version "1.8.2"
941 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
942 | dependencies:
943 | fill-range "^2.1.0"
944 |
945 | exports-loader@^0.6.3:
946 | version "0.6.4"
947 | resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886"
948 | dependencies:
949 | loader-utils "^1.0.2"
950 | source-map "0.5.x"
951 |
952 | extend@~3.0.1:
953 | version "3.0.1"
954 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
955 |
956 | extglob@^0.3.1:
957 | version "0.3.2"
958 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
959 | dependencies:
960 | is-extglob "^1.0.0"
961 |
962 | extsprintf@1.3.0:
963 | version "1.3.0"
964 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
965 |
966 | extsprintf@^1.2.0:
967 | version "1.4.0"
968 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
969 |
970 | fast-deep-equal@^1.0.0:
971 | version "1.1.0"
972 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
973 |
974 | fast-json-stable-stringify@^2.0.0:
975 | version "2.0.0"
976 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
977 |
978 | fbjs@^0.8.16, fbjs@^0.8.9:
979 | version "0.8.16"
980 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
981 | dependencies:
982 | core-js "^1.0.0"
983 | isomorphic-fetch "^2.1.1"
984 | loose-envify "^1.0.0"
985 | object-assign "^4.1.0"
986 | promise "^7.1.1"
987 | setimmediate "^1.0.5"
988 | ua-parser-js "^0.7.9"
989 |
990 | filename-regex@^2.0.0:
991 | version "2.0.1"
992 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
993 |
994 | fill-range@^2.1.0:
995 | version "2.2.4"
996 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
997 | dependencies:
998 | is-number "^2.1.0"
999 | isobject "^2.0.0"
1000 | randomatic "^3.0.0"
1001 | repeat-element "^1.1.2"
1002 | repeat-string "^1.5.2"
1003 |
1004 | find-cache-dir@^0.1.1:
1005 | version "0.1.1"
1006 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
1007 | dependencies:
1008 | commondir "^1.0.1"
1009 | mkdirp "^0.5.1"
1010 | pkg-dir "^1.0.0"
1011 |
1012 | find-up@^1.0.0:
1013 | version "1.1.2"
1014 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
1015 | dependencies:
1016 | path-exists "^2.0.0"
1017 | pinkie-promise "^2.0.0"
1018 |
1019 | for-in@^1.0.1:
1020 | version "1.0.2"
1021 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
1022 |
1023 | for-own@^0.1.4:
1024 | version "0.1.5"
1025 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
1026 | dependencies:
1027 | for-in "^1.0.1"
1028 |
1029 | forever-agent@~0.6.1:
1030 | version "0.6.1"
1031 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
1032 |
1033 | form-data@~2.3.1:
1034 | version "2.3.2"
1035 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
1036 | dependencies:
1037 | asynckit "^0.4.0"
1038 | combined-stream "1.0.6"
1039 | mime-types "^2.1.12"
1040 |
1041 | fs-minipass@^1.2.5:
1042 | version "1.2.5"
1043 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
1044 | dependencies:
1045 | minipass "^2.2.1"
1046 |
1047 | fs.realpath@^1.0.0:
1048 | version "1.0.0"
1049 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1050 |
1051 | fsevents@^1.0.0:
1052 | version "1.2.4"
1053 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
1054 | dependencies:
1055 | nan "^2.9.2"
1056 | node-pre-gyp "^0.10.0"
1057 |
1058 | fstream@^1.0.0, fstream@^1.0.2:
1059 | version "1.0.11"
1060 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
1061 | dependencies:
1062 | graceful-fs "^4.1.2"
1063 | inherits "~2.0.0"
1064 | mkdirp ">=0.5 0"
1065 | rimraf "2"
1066 |
1067 | gauge@~2.7.3:
1068 | version "2.7.4"
1069 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
1070 | dependencies:
1071 | aproba "^1.0.3"
1072 | console-control-strings "^1.0.0"
1073 | has-unicode "^2.0.0"
1074 | object-assign "^4.1.0"
1075 | signal-exit "^3.0.0"
1076 | string-width "^1.0.1"
1077 | strip-ansi "^3.0.1"
1078 | wide-align "^1.1.0"
1079 |
1080 | gaze@^1.0.0:
1081 | version "1.1.3"
1082 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
1083 | dependencies:
1084 | globule "^1.0.0"
1085 |
1086 | get-caller-file@^1.0.1:
1087 | version "1.0.2"
1088 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
1089 |
1090 | get-stdin@^4.0.1:
1091 | version "4.0.1"
1092 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
1093 |
1094 | getpass@^0.1.1:
1095 | version "0.1.7"
1096 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
1097 | dependencies:
1098 | assert-plus "^1.0.0"
1099 |
1100 | glob-base@^0.3.0:
1101 | version "0.3.0"
1102 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
1103 | dependencies:
1104 | glob-parent "^2.0.0"
1105 | is-glob "^2.0.0"
1106 |
1107 | glob-parent@^2.0.0:
1108 | version "2.0.0"
1109 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
1110 | dependencies:
1111 | is-glob "^2.0.0"
1112 |
1113 | glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1:
1114 | version "7.1.2"
1115 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
1116 | dependencies:
1117 | fs.realpath "^1.0.0"
1118 | inflight "^1.0.4"
1119 | inherits "2"
1120 | minimatch "^3.0.4"
1121 | once "^1.3.0"
1122 | path-is-absolute "^1.0.0"
1123 |
1124 | globals@^9.18.0:
1125 | version "9.18.0"
1126 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
1127 |
1128 | globule@^1.0.0:
1129 | version "1.2.0"
1130 | resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09"
1131 | dependencies:
1132 | glob "~7.1.1"
1133 | lodash "~4.17.4"
1134 | minimatch "~3.0.2"
1135 |
1136 | graceful-fs@^4.1.2:
1137 | version "4.1.11"
1138 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
1139 |
1140 | har-schema@^2.0.0:
1141 | version "2.0.0"
1142 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
1143 |
1144 | har-validator@~5.0.3:
1145 | version "5.0.3"
1146 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
1147 | dependencies:
1148 | ajv "^5.1.0"
1149 | har-schema "^2.0.0"
1150 |
1151 | has-ansi@^2.0.0:
1152 | version "2.0.0"
1153 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
1154 | dependencies:
1155 | ansi-regex "^2.0.0"
1156 |
1157 | has-flag@^1.0.0:
1158 | version "1.0.0"
1159 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
1160 |
1161 | has-unicode@^2.0.0:
1162 | version "2.0.1"
1163 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
1164 |
1165 | hoist-non-react-statics@^2.5.0:
1166 | version "2.5.0"
1167 | resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40"
1168 |
1169 | home-or-tmp@^2.0.0:
1170 | version "2.0.0"
1171 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
1172 | dependencies:
1173 | os-homedir "^1.0.0"
1174 | os-tmpdir "^1.0.1"
1175 |
1176 | hosted-git-info@^2.1.4:
1177 | version "2.6.0"
1178 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222"
1179 |
1180 | http-signature@~1.2.0:
1181 | version "1.2.0"
1182 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
1183 | dependencies:
1184 | assert-plus "^1.0.0"
1185 | jsprim "^1.2.2"
1186 | sshpk "^1.7.0"
1187 |
1188 | https-browserify@0.0.1:
1189 | version "0.0.1"
1190 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
1191 |
1192 | iconv-lite@^0.4.4, iconv-lite@~0.4.13:
1193 | version "0.4.23"
1194 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
1195 | dependencies:
1196 | safer-buffer ">= 2.1.2 < 3"
1197 |
1198 | ieee754@^1.1.4:
1199 | version "1.1.11"
1200 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455"
1201 |
1202 | ignore-walk@^3.0.1:
1203 | version "3.0.1"
1204 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
1205 | dependencies:
1206 | minimatch "^3.0.4"
1207 |
1208 | imports-loader@^0.6.5:
1209 | version "0.6.5"
1210 | resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.6.5.tgz#ae74653031d59e37b3c2fb2544ac61aeae3530a6"
1211 | dependencies:
1212 | loader-utils "0.2.x"
1213 | source-map "0.1.x"
1214 |
1215 | in-publish@^2.0.0:
1216 | version "2.0.0"
1217 | resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
1218 |
1219 | indent-string@^2.1.0:
1220 | version "2.1.0"
1221 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
1222 | dependencies:
1223 | repeating "^2.0.0"
1224 |
1225 | indexof@0.0.1:
1226 | version "0.0.1"
1227 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
1228 |
1229 | inflight@^1.0.4:
1230 | version "1.0.6"
1231 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1232 | dependencies:
1233 | once "^1.3.0"
1234 | wrappy "1"
1235 |
1236 | inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
1237 | version "2.0.3"
1238 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1239 |
1240 | inherits@2.0.1:
1241 | version "2.0.1"
1242 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
1243 |
1244 | ini@~1.3.0:
1245 | version "1.3.5"
1246 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
1247 |
1248 | interpret@^0.6.4:
1249 | version "0.6.6"
1250 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
1251 |
1252 | invariant@^2.0.0, invariant@^2.2.2:
1253 | version "2.2.4"
1254 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
1255 | dependencies:
1256 | loose-envify "^1.0.0"
1257 |
1258 | invert-kv@^1.0.0:
1259 | version "1.0.0"
1260 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
1261 |
1262 | is-arrayish@^0.2.1:
1263 | version "0.2.1"
1264 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
1265 |
1266 | is-binary-path@^1.0.0:
1267 | version "1.0.1"
1268 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
1269 | dependencies:
1270 | binary-extensions "^1.0.0"
1271 |
1272 | is-buffer@^1.1.5:
1273 | version "1.1.6"
1274 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
1275 |
1276 | is-builtin-module@^1.0.0:
1277 | version "1.0.0"
1278 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
1279 | dependencies:
1280 | builtin-modules "^1.0.0"
1281 |
1282 | is-dotfile@^1.0.0:
1283 | version "1.0.3"
1284 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
1285 |
1286 | is-equal-shallow@^0.1.3:
1287 | version "0.1.3"
1288 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
1289 | dependencies:
1290 | is-primitive "^2.0.0"
1291 |
1292 | is-extendable@^0.1.1:
1293 | version "0.1.1"
1294 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
1295 |
1296 | is-extglob@^1.0.0:
1297 | version "1.0.0"
1298 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
1299 |
1300 | is-finite@^1.0.0:
1301 | version "1.0.2"
1302 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
1303 | dependencies:
1304 | number-is-nan "^1.0.0"
1305 |
1306 | is-fullwidth-code-point@^1.0.0:
1307 | version "1.0.0"
1308 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1309 | dependencies:
1310 | number-is-nan "^1.0.0"
1311 |
1312 | is-glob@^2.0.0, is-glob@^2.0.1:
1313 | version "2.0.1"
1314 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
1315 | dependencies:
1316 | is-extglob "^1.0.0"
1317 |
1318 | is-number@^2.1.0:
1319 | version "2.1.0"
1320 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
1321 | dependencies:
1322 | kind-of "^3.0.2"
1323 |
1324 | is-number@^4.0.0:
1325 | version "4.0.0"
1326 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
1327 |
1328 | is-posix-bracket@^0.1.0:
1329 | version "0.1.1"
1330 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
1331 |
1332 | is-primitive@^2.0.0:
1333 | version "2.0.0"
1334 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
1335 |
1336 | is-stream@^1.0.1:
1337 | version "1.1.0"
1338 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
1339 |
1340 | is-typedarray@~1.0.0:
1341 | version "1.0.0"
1342 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1343 |
1344 | is-utf8@^0.2.0:
1345 | version "0.2.1"
1346 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
1347 |
1348 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
1349 | version "1.0.0"
1350 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1351 |
1352 | isexe@^2.0.0:
1353 | version "2.0.0"
1354 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1355 |
1356 | isobject@^2.0.0:
1357 | version "2.1.0"
1358 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
1359 | dependencies:
1360 | isarray "1.0.0"
1361 |
1362 | isomorphic-fetch@^2.1.1:
1363 | version "2.2.1"
1364 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
1365 | dependencies:
1366 | node-fetch "^1.0.1"
1367 | whatwg-fetch ">=0.10.0"
1368 |
1369 | isstream@~0.1.2:
1370 | version "0.1.2"
1371 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1372 |
1373 | js-base64@^2.1.8:
1374 | version "2.4.5"
1375 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92"
1376 |
1377 | js-tokens@^3.0.0, js-tokens@^3.0.2:
1378 | version "3.0.2"
1379 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1380 |
1381 | jsbn@~0.1.0:
1382 | version "0.1.1"
1383 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
1384 |
1385 | jsesc@^1.3.0:
1386 | version "1.3.0"
1387 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
1388 |
1389 | jsesc@~0.5.0:
1390 | version "0.5.0"
1391 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
1392 |
1393 | json-schema-traverse@^0.3.0:
1394 | version "0.3.1"
1395 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
1396 |
1397 | json-schema@0.2.3:
1398 | version "0.2.3"
1399 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1400 |
1401 | json-stringify-safe@~5.0.1:
1402 | version "5.0.1"
1403 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1404 |
1405 | json5@^0.5.0, json5@^0.5.1:
1406 | version "0.5.1"
1407 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
1408 |
1409 | jsprim@^1.2.2:
1410 | version "1.4.1"
1411 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
1412 | dependencies:
1413 | assert-plus "1.0.0"
1414 | extsprintf "1.3.0"
1415 | json-schema "0.2.3"
1416 | verror "1.10.0"
1417 |
1418 | kind-of@^3.0.2:
1419 | version "3.2.2"
1420 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
1421 | dependencies:
1422 | is-buffer "^1.1.5"
1423 |
1424 | kind-of@^6.0.0:
1425 | version "6.0.2"
1426 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
1427 |
1428 | lazy-cache@^1.0.3:
1429 | version "1.0.4"
1430 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
1431 |
1432 | lcid@^1.0.0:
1433 | version "1.0.0"
1434 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
1435 | dependencies:
1436 | invert-kv "^1.0.0"
1437 |
1438 | load-json-file@^1.0.0:
1439 | version "1.1.0"
1440 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
1441 | dependencies:
1442 | graceful-fs "^4.1.2"
1443 | parse-json "^2.2.0"
1444 | pify "^2.0.0"
1445 | pinkie-promise "^2.0.0"
1446 | strip-bom "^2.0.0"
1447 |
1448 | loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.16:
1449 | version "0.2.17"
1450 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
1451 | dependencies:
1452 | big.js "^3.1.3"
1453 | emojis-list "^2.0.0"
1454 | json5 "^0.5.0"
1455 | object-assign "^4.0.1"
1456 |
1457 | loader-utils@^1.0.2:
1458 | version "1.1.0"
1459 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
1460 | dependencies:
1461 | big.js "^3.1.3"
1462 | emojis-list "^2.0.0"
1463 | json5 "^0.5.0"
1464 |
1465 | lodash-es@^4.2.1:
1466 | version "4.17.10"
1467 | resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05"
1468 |
1469 | lodash.assign@^4.2.0:
1470 | version "4.2.0"
1471 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
1472 |
1473 | lodash.clonedeep@^4.3.2:
1474 | version "4.5.0"
1475 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
1476 |
1477 | lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.4:
1478 | version "4.17.10"
1479 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
1480 |
1481 | longest@^1.0.1:
1482 | version "1.0.1"
1483 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
1484 |
1485 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
1486 | version "1.3.1"
1487 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
1488 | dependencies:
1489 | js-tokens "^3.0.0"
1490 |
1491 | loud-rejection@^1.0.0:
1492 | version "1.6.0"
1493 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
1494 | dependencies:
1495 | currently-unhandled "^0.4.1"
1496 | signal-exit "^3.0.0"
1497 |
1498 | lru-cache@^4.0.1:
1499 | version "4.1.3"
1500 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
1501 | dependencies:
1502 | pseudomap "^1.0.2"
1503 | yallist "^2.1.2"
1504 |
1505 | map-obj@^1.0.0, map-obj@^1.0.1:
1506 | version "1.0.1"
1507 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
1508 |
1509 | math-random@^1.0.1:
1510 | version "1.0.1"
1511 | resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
1512 |
1513 | memory-fs@^0.2.0:
1514 | version "0.2.0"
1515 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
1516 |
1517 | memory-fs@~0.3.0:
1518 | version "0.3.0"
1519 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
1520 | dependencies:
1521 | errno "^0.1.3"
1522 | readable-stream "^2.0.1"
1523 |
1524 | meow@^3.7.0:
1525 | version "3.7.0"
1526 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
1527 | dependencies:
1528 | camelcase-keys "^2.0.0"
1529 | decamelize "^1.1.2"
1530 | loud-rejection "^1.0.0"
1531 | map-obj "^1.0.1"
1532 | minimist "^1.1.3"
1533 | normalize-package-data "^2.3.4"
1534 | object-assign "^4.0.1"
1535 | read-pkg-up "^1.0.1"
1536 | redent "^1.0.0"
1537 | trim-newlines "^1.0.0"
1538 |
1539 | micromatch@^2.1.5:
1540 | version "2.3.11"
1541 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
1542 | dependencies:
1543 | arr-diff "^2.0.0"
1544 | array-unique "^0.2.1"
1545 | braces "^1.8.2"
1546 | expand-brackets "^0.1.4"
1547 | extglob "^0.3.1"
1548 | filename-regex "^2.0.0"
1549 | is-extglob "^1.0.0"
1550 | is-glob "^2.0.1"
1551 | kind-of "^3.0.2"
1552 | normalize-path "^2.0.1"
1553 | object.omit "^2.0.0"
1554 | parse-glob "^3.0.4"
1555 | regex-cache "^0.4.2"
1556 |
1557 | mime-db@~1.33.0:
1558 | version "1.33.0"
1559 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
1560 |
1561 | mime-types@^2.1.12, mime-types@~2.1.17:
1562 | version "2.1.18"
1563 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
1564 | dependencies:
1565 | mime-db "~1.33.0"
1566 |
1567 | minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2:
1568 | version "3.0.4"
1569 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1570 | dependencies:
1571 | brace-expansion "^1.1.7"
1572 |
1573 | minimist@0.0.8:
1574 | version "0.0.8"
1575 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1576 |
1577 | minimist@^1.1.3, minimist@^1.2.0:
1578 | version "1.2.0"
1579 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1580 |
1581 | minimist@~0.0.1:
1582 | version "0.0.10"
1583 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
1584 |
1585 | minipass@^2.2.1, minipass@^2.2.4:
1586 | version "2.3.3"
1587 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233"
1588 | dependencies:
1589 | safe-buffer "^5.1.2"
1590 | yallist "^3.0.0"
1591 |
1592 | minizlib@^1.1.0:
1593 | version "1.1.0"
1594 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb"
1595 | dependencies:
1596 | minipass "^2.2.1"
1597 |
1598 | "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
1599 | version "0.5.1"
1600 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1601 | dependencies:
1602 | minimist "0.0.8"
1603 |
1604 | ms@2.0.0:
1605 | version "2.0.0"
1606 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1607 |
1608 | nan@^2.3.2, nan@^2.9.2:
1609 | version "2.10.0"
1610 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
1611 |
1612 | needle@^2.2.0:
1613 | version "2.2.1"
1614 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d"
1615 | dependencies:
1616 | debug "^2.1.2"
1617 | iconv-lite "^0.4.4"
1618 | sax "^1.2.4"
1619 |
1620 | node-fetch@^1.0.1:
1621 | version "1.7.3"
1622 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
1623 | dependencies:
1624 | encoding "^0.1.11"
1625 | is-stream "^1.0.1"
1626 |
1627 | node-gyp@^3.3.1:
1628 | version "3.6.2"
1629 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60"
1630 | dependencies:
1631 | fstream "^1.0.0"
1632 | glob "^7.0.3"
1633 | graceful-fs "^4.1.2"
1634 | minimatch "^3.0.2"
1635 | mkdirp "^0.5.0"
1636 | nopt "2 || 3"
1637 | npmlog "0 || 1 || 2 || 3 || 4"
1638 | osenv "0"
1639 | request "2"
1640 | rimraf "2"
1641 | semver "~5.3.0"
1642 | tar "^2.0.0"
1643 | which "1"
1644 |
1645 | node-libs-browser@^0.7.0:
1646 | version "0.7.0"
1647 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
1648 | dependencies:
1649 | assert "^1.1.1"
1650 | browserify-zlib "^0.1.4"
1651 | buffer "^4.9.0"
1652 | console-browserify "^1.1.0"
1653 | constants-browserify "^1.0.0"
1654 | crypto-browserify "3.3.0"
1655 | domain-browser "^1.1.1"
1656 | events "^1.0.0"
1657 | https-browserify "0.0.1"
1658 | os-browserify "^0.2.0"
1659 | path-browserify "0.0.0"
1660 | process "^0.11.0"
1661 | punycode "^1.2.4"
1662 | querystring-es3 "^0.2.0"
1663 | readable-stream "^2.0.5"
1664 | stream-browserify "^2.0.1"
1665 | stream-http "^2.3.1"
1666 | string_decoder "^0.10.25"
1667 | timers-browserify "^2.0.2"
1668 | tty-browserify "0.0.0"
1669 | url "^0.11.0"
1670 | util "^0.10.3"
1671 | vm-browserify "0.0.4"
1672 |
1673 | node-pre-gyp@^0.10.0:
1674 | version "0.10.0"
1675 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46"
1676 | dependencies:
1677 | detect-libc "^1.0.2"
1678 | mkdirp "^0.5.1"
1679 | needle "^2.2.0"
1680 | nopt "^4.0.1"
1681 | npm-packlist "^1.1.6"
1682 | npmlog "^4.0.2"
1683 | rc "^1.1.7"
1684 | rimraf "^2.6.1"
1685 | semver "^5.3.0"
1686 | tar "^4"
1687 |
1688 | node-sass@^3.9.3:
1689 | version "3.13.1"
1690 | resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.13.1.tgz#7240fbbff2396304b4223527ed3020589c004fc2"
1691 | dependencies:
1692 | async-foreach "^0.1.3"
1693 | chalk "^1.1.1"
1694 | cross-spawn "^3.0.0"
1695 | gaze "^1.0.0"
1696 | get-stdin "^4.0.1"
1697 | glob "^7.0.3"
1698 | in-publish "^2.0.0"
1699 | lodash.assign "^4.2.0"
1700 | lodash.clonedeep "^4.3.2"
1701 | meow "^3.7.0"
1702 | mkdirp "^0.5.1"
1703 | nan "^2.3.2"
1704 | node-gyp "^3.3.1"
1705 | npmlog "^4.0.0"
1706 | request "^2.61.0"
1707 | sass-graph "^2.1.1"
1708 |
1709 | "nopt@2 || 3":
1710 | version "3.0.6"
1711 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
1712 | dependencies:
1713 | abbrev "1"
1714 |
1715 | nopt@^4.0.1:
1716 | version "4.0.1"
1717 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
1718 | dependencies:
1719 | abbrev "1"
1720 | osenv "^0.1.4"
1721 |
1722 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
1723 | version "2.4.0"
1724 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
1725 | dependencies:
1726 | hosted-git-info "^2.1.4"
1727 | is-builtin-module "^1.0.0"
1728 | semver "2 || 3 || 4 || 5"
1729 | validate-npm-package-license "^3.0.1"
1730 |
1731 | normalize-path@^2.0.0, normalize-path@^2.0.1:
1732 | version "2.1.1"
1733 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
1734 | dependencies:
1735 | remove-trailing-separator "^1.0.1"
1736 |
1737 | npm-bundled@^1.0.1:
1738 | version "1.0.3"
1739 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308"
1740 |
1741 | npm-packlist@^1.1.6:
1742 | version "1.1.10"
1743 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a"
1744 | dependencies:
1745 | ignore-walk "^3.0.1"
1746 | npm-bundled "^1.0.1"
1747 |
1748 | "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
1749 | version "4.1.2"
1750 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1751 | dependencies:
1752 | are-we-there-yet "~1.1.2"
1753 | console-control-strings "~1.1.0"
1754 | gauge "~2.7.3"
1755 | set-blocking "~2.0.0"
1756 |
1757 | number-is-nan@^1.0.0:
1758 | version "1.0.1"
1759 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1760 |
1761 | oauth-sign@~0.8.2:
1762 | version "0.8.2"
1763 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
1764 |
1765 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
1766 | version "4.1.1"
1767 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1768 |
1769 | object.omit@^2.0.0:
1770 | version "2.0.1"
1771 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
1772 | dependencies:
1773 | for-own "^0.1.4"
1774 | is-extendable "^0.1.1"
1775 |
1776 | once@^1.3.0:
1777 | version "1.4.0"
1778 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1779 | dependencies:
1780 | wrappy "1"
1781 |
1782 | optimist@~0.6.0:
1783 | version "0.6.1"
1784 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
1785 | dependencies:
1786 | minimist "~0.0.1"
1787 | wordwrap "~0.0.2"
1788 |
1789 | os-browserify@^0.2.0:
1790 | version "0.2.1"
1791 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
1792 |
1793 | os-homedir@^1.0.0:
1794 | version "1.0.2"
1795 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1796 |
1797 | os-locale@^1.4.0:
1798 | version "1.4.0"
1799 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
1800 | dependencies:
1801 | lcid "^1.0.0"
1802 |
1803 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
1804 | version "1.0.2"
1805 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1806 |
1807 | osenv@0, osenv@^0.1.4:
1808 | version "0.1.5"
1809 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
1810 | dependencies:
1811 | os-homedir "^1.0.0"
1812 | os-tmpdir "^1.0.0"
1813 |
1814 | pako@~0.2.0:
1815 | version "0.2.9"
1816 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
1817 |
1818 | parallelshell@^3.0.2:
1819 | version "3.0.2"
1820 | resolved "https://registry.yarnpkg.com/parallelshell/-/parallelshell-3.0.2.tgz#fffc55aaa145bdd44b5381cf7fd5e521fc21aa7b"
1821 |
1822 | parse-glob@^3.0.4:
1823 | version "3.0.4"
1824 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
1825 | dependencies:
1826 | glob-base "^0.3.0"
1827 | is-dotfile "^1.0.0"
1828 | is-extglob "^1.0.0"
1829 | is-glob "^2.0.0"
1830 |
1831 | parse-json@^2.2.0:
1832 | version "2.2.0"
1833 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
1834 | dependencies:
1835 | error-ex "^1.2.0"
1836 |
1837 | path-browserify@0.0.0:
1838 | version "0.0.0"
1839 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
1840 |
1841 | path-exists@^2.0.0:
1842 | version "2.1.0"
1843 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
1844 | dependencies:
1845 | pinkie-promise "^2.0.0"
1846 |
1847 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
1848 | version "1.0.1"
1849 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1850 |
1851 | path-type@^1.0.0:
1852 | version "1.1.0"
1853 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
1854 | dependencies:
1855 | graceful-fs "^4.1.2"
1856 | pify "^2.0.0"
1857 | pinkie-promise "^2.0.0"
1858 |
1859 | pbkdf2-compat@2.0.1:
1860 | version "2.0.1"
1861 | resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
1862 |
1863 | performance-now@^2.1.0:
1864 | version "2.1.0"
1865 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
1866 |
1867 | pify@^2.0.0:
1868 | version "2.3.0"
1869 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1870 |
1871 | pinkie-promise@^2.0.0:
1872 | version "2.0.1"
1873 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1874 | dependencies:
1875 | pinkie "^2.0.0"
1876 |
1877 | pinkie@^2.0.0:
1878 | version "2.0.4"
1879 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1880 |
1881 | pkg-dir@^1.0.0:
1882 | version "1.0.0"
1883 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
1884 | dependencies:
1885 | find-up "^1.0.0"
1886 |
1887 | preserve@^0.2.0:
1888 | version "0.2.0"
1889 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
1890 |
1891 | private@^0.1.6, private@^0.1.8:
1892 | version "0.1.8"
1893 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
1894 |
1895 | process-nextick-args@~2.0.0:
1896 | version "2.0.0"
1897 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
1898 |
1899 | process@^0.11.0:
1900 | version "0.11.10"
1901 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
1902 |
1903 | promise@^7.1.1:
1904 | version "7.3.1"
1905 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
1906 | dependencies:
1907 | asap "~2.0.3"
1908 |
1909 | prop-types@^15.5.10, prop-types@^15.5.4:
1910 | version "15.6.1"
1911 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca"
1912 | dependencies:
1913 | fbjs "^0.8.16"
1914 | loose-envify "^1.3.1"
1915 | object-assign "^4.1.1"
1916 |
1917 | prr@~1.0.1:
1918 | version "1.0.1"
1919 | resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
1920 |
1921 | pseudomap@^1.0.2:
1922 | version "1.0.2"
1923 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
1924 |
1925 | punycode@1.3.2:
1926 | version "1.3.2"
1927 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
1928 |
1929 | punycode@^1.2.4, punycode@^1.4.1:
1930 | version "1.4.1"
1931 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1932 |
1933 | qs@~6.5.1:
1934 | version "6.5.2"
1935 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
1936 |
1937 | querystring-es3@^0.2.0:
1938 | version "0.2.1"
1939 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
1940 |
1941 | querystring@0.2.0:
1942 | version "0.2.0"
1943 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
1944 |
1945 | randomatic@^3.0.0:
1946 | version "3.0.0"
1947 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923"
1948 | dependencies:
1949 | is-number "^4.0.0"
1950 | kind-of "^6.0.0"
1951 | math-random "^1.0.1"
1952 |
1953 | rc@^1.1.7:
1954 | version "1.2.7"
1955 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297"
1956 | dependencies:
1957 | deep-extend "^0.5.1"
1958 | ini "~1.3.0"
1959 | minimist "^1.2.0"
1960 | strip-json-comments "~2.0.1"
1961 |
1962 | react-dom@^15.3.1:
1963 | version "15.6.2"
1964 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730"
1965 | dependencies:
1966 | fbjs "^0.8.9"
1967 | loose-envify "^1.1.0"
1968 | object-assign "^4.1.0"
1969 | prop-types "^15.5.10"
1970 |
1971 | react-redux@^4.4.5:
1972 | version "4.4.9"
1973 | resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.9.tgz#8ca6d4670925a454ce67086c2305e9630670909a"
1974 | dependencies:
1975 | create-react-class "^15.5.1"
1976 | hoist-non-react-statics "^2.5.0"
1977 | invariant "^2.0.0"
1978 | lodash "^4.2.0"
1979 | loose-envify "^1.1.0"
1980 | prop-types "^15.5.4"
1981 |
1982 | react@^15.3.1:
1983 | version "15.6.2"
1984 | resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72"
1985 | dependencies:
1986 | create-react-class "^15.6.0"
1987 | fbjs "^0.8.9"
1988 | loose-envify "^1.1.0"
1989 | object-assign "^4.1.0"
1990 | prop-types "^15.5.10"
1991 |
1992 | read-pkg-up@^1.0.1:
1993 | version "1.0.1"
1994 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
1995 | dependencies:
1996 | find-up "^1.0.0"
1997 | read-pkg "^1.0.0"
1998 |
1999 | read-pkg@^1.0.0:
2000 | version "1.1.0"
2001 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
2002 | dependencies:
2003 | load-json-file "^1.0.0"
2004 | normalize-package-data "^2.3.2"
2005 | path-type "^1.0.0"
2006 |
2007 | readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.3.6:
2008 | version "2.3.6"
2009 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
2010 | dependencies:
2011 | core-util-is "~1.0.0"
2012 | inherits "~2.0.3"
2013 | isarray "~1.0.0"
2014 | process-nextick-args "~2.0.0"
2015 | safe-buffer "~5.1.1"
2016 | string_decoder "~1.1.1"
2017 | util-deprecate "~1.0.1"
2018 |
2019 | readdirp@^2.0.0:
2020 | version "2.1.0"
2021 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
2022 | dependencies:
2023 | graceful-fs "^4.1.2"
2024 | minimatch "^3.0.2"
2025 | readable-stream "^2.0.2"
2026 | set-immediate-shim "^1.0.1"
2027 |
2028 | redent@^1.0.0:
2029 | version "1.0.0"
2030 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
2031 | dependencies:
2032 | indent-string "^2.1.0"
2033 | strip-indent "^1.0.1"
2034 |
2035 | redux-thunk@^2.1.0:
2036 | version "2.2.0"
2037 | resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
2038 |
2039 | redux@^3.6.0:
2040 | version "3.7.2"
2041 | resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
2042 | dependencies:
2043 | lodash "^4.2.1"
2044 | lodash-es "^4.2.1"
2045 | loose-envify "^1.1.0"
2046 | symbol-observable "^1.0.3"
2047 |
2048 | regenerate@^1.2.1:
2049 | version "1.4.0"
2050 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
2051 |
2052 | regenerator-runtime@^0.11.0:
2053 | version "0.11.1"
2054 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
2055 |
2056 | regenerator-transform@^0.10.0:
2057 | version "0.10.1"
2058 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
2059 | dependencies:
2060 | babel-runtime "^6.18.0"
2061 | babel-types "^6.19.0"
2062 | private "^0.1.6"
2063 |
2064 | regex-cache@^0.4.2:
2065 | version "0.4.4"
2066 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
2067 | dependencies:
2068 | is-equal-shallow "^0.1.3"
2069 |
2070 | regexpu-core@^2.0.0:
2071 | version "2.0.0"
2072 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
2073 | dependencies:
2074 | regenerate "^1.2.1"
2075 | regjsgen "^0.2.0"
2076 | regjsparser "^0.1.4"
2077 |
2078 | regjsgen@^0.2.0:
2079 | version "0.2.0"
2080 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
2081 |
2082 | regjsparser@^0.1.4:
2083 | version "0.1.5"
2084 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
2085 | dependencies:
2086 | jsesc "~0.5.0"
2087 |
2088 | remove-trailing-separator@^1.0.1:
2089 | version "1.1.0"
2090 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
2091 |
2092 | repeat-element@^1.1.2:
2093 | version "1.1.2"
2094 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
2095 |
2096 | repeat-string@^1.5.2:
2097 | version "1.6.1"
2098 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
2099 |
2100 | repeating@^2.0.0:
2101 | version "2.0.1"
2102 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
2103 | dependencies:
2104 | is-finite "^1.0.0"
2105 |
2106 | request@2, request@^2.61.0:
2107 | version "2.87.0"
2108 | resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e"
2109 | dependencies:
2110 | aws-sign2 "~0.7.0"
2111 | aws4 "^1.6.0"
2112 | caseless "~0.12.0"
2113 | combined-stream "~1.0.5"
2114 | extend "~3.0.1"
2115 | forever-agent "~0.6.1"
2116 | form-data "~2.3.1"
2117 | har-validator "~5.0.3"
2118 | http-signature "~1.2.0"
2119 | is-typedarray "~1.0.0"
2120 | isstream "~0.1.2"
2121 | json-stringify-safe "~5.0.1"
2122 | mime-types "~2.1.17"
2123 | oauth-sign "~0.8.2"
2124 | performance-now "^2.1.0"
2125 | qs "~6.5.1"
2126 | safe-buffer "^5.1.1"
2127 | tough-cookie "~2.3.3"
2128 | tunnel-agent "^0.6.0"
2129 | uuid "^3.1.0"
2130 |
2131 | require-directory@^2.1.1:
2132 | version "2.1.1"
2133 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
2134 |
2135 | require-main-filename@^1.0.1:
2136 | version "1.0.1"
2137 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
2138 |
2139 | right-align@^0.1.1:
2140 | version "0.1.3"
2141 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
2142 | dependencies:
2143 | align-text "^0.1.1"
2144 |
2145 | rimraf@2, rimraf@^2.6.1:
2146 | version "2.6.2"
2147 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
2148 | dependencies:
2149 | glob "^7.0.5"
2150 |
2151 | ripemd160@0.2.0:
2152 | version "0.2.0"
2153 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
2154 |
2155 | safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
2156 | version "5.1.2"
2157 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
2158 |
2159 | "safer-buffer@>= 2.1.2 < 3":
2160 | version "2.1.2"
2161 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2162 |
2163 | sass-graph@^2.1.1:
2164 | version "2.2.4"
2165 | resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
2166 | dependencies:
2167 | glob "^7.0.0"
2168 | lodash "^4.0.0"
2169 | scss-tokenizer "^0.2.3"
2170 | yargs "^7.0.0"
2171 |
2172 | sax@^1.2.4:
2173 | version "1.2.4"
2174 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
2175 |
2176 | scss-tokenizer@^0.2.3:
2177 | version "0.2.3"
2178 | resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
2179 | dependencies:
2180 | js-base64 "^2.1.8"
2181 | source-map "^0.4.2"
2182 |
2183 | "semver@2 || 3 || 4 || 5", semver@^5.3.0:
2184 | version "5.5.0"
2185 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
2186 |
2187 | semver@~5.3.0:
2188 | version "5.3.0"
2189 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
2190 |
2191 | set-blocking@^2.0.0, set-blocking@~2.0.0:
2192 | version "2.0.0"
2193 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
2194 |
2195 | set-immediate-shim@^1.0.1:
2196 | version "1.0.1"
2197 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
2198 |
2199 | setimmediate@^1.0.4, setimmediate@^1.0.5:
2200 | version "1.0.5"
2201 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
2202 |
2203 | sha.js@2.2.6:
2204 | version "2.2.6"
2205 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
2206 |
2207 | signal-exit@^3.0.0:
2208 | version "3.0.2"
2209 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
2210 |
2211 | slash@^1.0.0:
2212 | version "1.0.0"
2213 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
2214 |
2215 | source-list-map@~0.1.7:
2216 | version "0.1.8"
2217 | resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
2218 |
2219 | source-map-support@^0.4.15:
2220 | version "0.4.18"
2221 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
2222 | dependencies:
2223 | source-map "^0.5.6"
2224 |
2225 | source-map@0.1.x:
2226 | version "0.1.43"
2227 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
2228 | dependencies:
2229 | amdefine ">=0.0.4"
2230 |
2231 | source-map@0.5.x, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
2232 | version "0.5.7"
2233 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
2234 |
2235 | source-map@^0.4.2, source-map@~0.4.1:
2236 | version "0.4.4"
2237 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
2238 | dependencies:
2239 | amdefine ">=0.0.4"
2240 |
2241 | spdx-correct@^3.0.0:
2242 | version "3.0.0"
2243 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
2244 | dependencies:
2245 | spdx-expression-parse "^3.0.0"
2246 | spdx-license-ids "^3.0.0"
2247 |
2248 | spdx-exceptions@^2.1.0:
2249 | version "2.1.0"
2250 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
2251 |
2252 | spdx-expression-parse@^3.0.0:
2253 | version "3.0.0"
2254 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
2255 | dependencies:
2256 | spdx-exceptions "^2.1.0"
2257 | spdx-license-ids "^3.0.0"
2258 |
2259 | spdx-license-ids@^3.0.0:
2260 | version "3.0.0"
2261 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
2262 |
2263 | sshpk@^1.7.0:
2264 | version "1.14.1"
2265 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb"
2266 | dependencies:
2267 | asn1 "~0.2.3"
2268 | assert-plus "^1.0.0"
2269 | dashdash "^1.12.0"
2270 | getpass "^0.1.1"
2271 | optionalDependencies:
2272 | bcrypt-pbkdf "^1.0.0"
2273 | ecc-jsbn "~0.1.1"
2274 | jsbn "~0.1.0"
2275 | tweetnacl "~0.14.0"
2276 |
2277 | stream-browserify@^2.0.1:
2278 | version "2.0.1"
2279 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
2280 | dependencies:
2281 | inherits "~2.0.1"
2282 | readable-stream "^2.0.2"
2283 |
2284 | stream-http@^2.3.1:
2285 | version "2.8.2"
2286 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87"
2287 | dependencies:
2288 | builtin-status-codes "^3.0.0"
2289 | inherits "^2.0.1"
2290 | readable-stream "^2.3.6"
2291 | to-arraybuffer "^1.0.0"
2292 | xtend "^4.0.0"
2293 |
2294 | string-width@^1.0.1, string-width@^1.0.2:
2295 | version "1.0.2"
2296 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
2297 | dependencies:
2298 | code-point-at "^1.0.0"
2299 | is-fullwidth-code-point "^1.0.0"
2300 | strip-ansi "^3.0.0"
2301 |
2302 | string_decoder@^0.10.25:
2303 | version "0.10.31"
2304 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
2305 |
2306 | string_decoder@~1.1.1:
2307 | version "1.1.1"
2308 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
2309 | dependencies:
2310 | safe-buffer "~5.1.0"
2311 |
2312 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
2313 | version "3.0.1"
2314 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
2315 | dependencies:
2316 | ansi-regex "^2.0.0"
2317 |
2318 | strip-bom@^2.0.0:
2319 | version "2.0.0"
2320 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
2321 | dependencies:
2322 | is-utf8 "^0.2.0"
2323 |
2324 | strip-indent@^1.0.1:
2325 | version "1.0.1"
2326 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
2327 | dependencies:
2328 | get-stdin "^4.0.1"
2329 |
2330 | strip-json-comments@~2.0.1:
2331 | version "2.0.1"
2332 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
2333 |
2334 | supports-color@^2.0.0:
2335 | version "2.0.0"
2336 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
2337 |
2338 | supports-color@^3.1.0:
2339 | version "3.2.3"
2340 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
2341 | dependencies:
2342 | has-flag "^1.0.0"
2343 |
2344 | symbol-observable@^1.0.3:
2345 | version "1.2.0"
2346 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
2347 |
2348 | tapable@^0.1.8, tapable@~0.1.8:
2349 | version "0.1.10"
2350 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
2351 |
2352 | tar@^2.0.0:
2353 | version "2.2.1"
2354 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
2355 | dependencies:
2356 | block-stream "*"
2357 | fstream "^1.0.2"
2358 | inherits "2"
2359 |
2360 | tar@^4:
2361 | version "4.4.2"
2362 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462"
2363 | dependencies:
2364 | chownr "^1.0.1"
2365 | fs-minipass "^1.2.5"
2366 | minipass "^2.2.4"
2367 | minizlib "^1.1.0"
2368 | mkdirp "^0.5.0"
2369 | safe-buffer "^5.1.2"
2370 | yallist "^3.0.2"
2371 |
2372 | timers-browserify@^2.0.2:
2373 | version "2.0.10"
2374 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"
2375 | dependencies:
2376 | setimmediate "^1.0.4"
2377 |
2378 | to-arraybuffer@^1.0.0:
2379 | version "1.0.1"
2380 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
2381 |
2382 | to-fast-properties@^1.0.3:
2383 | version "1.0.3"
2384 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
2385 |
2386 | tough-cookie@~2.3.3:
2387 | version "2.3.4"
2388 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
2389 | dependencies:
2390 | punycode "^1.4.1"
2391 |
2392 | trim-newlines@^1.0.0:
2393 | version "1.0.0"
2394 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
2395 |
2396 | trim-right@^1.0.1:
2397 | version "1.0.1"
2398 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
2399 |
2400 | tty-browserify@0.0.0:
2401 | version "0.0.0"
2402 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
2403 |
2404 | tunnel-agent@^0.6.0:
2405 | version "0.6.0"
2406 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
2407 | dependencies:
2408 | safe-buffer "^5.0.1"
2409 |
2410 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
2411 | version "0.14.5"
2412 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
2413 |
2414 | ua-parser-js@^0.7.9:
2415 | version "0.7.18"
2416 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed"
2417 |
2418 | uglify-js@~2.7.3:
2419 | version "2.7.5"
2420 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
2421 | dependencies:
2422 | async "~0.2.6"
2423 | source-map "~0.5.1"
2424 | uglify-to-browserify "~1.0.0"
2425 | yargs "~3.10.0"
2426 |
2427 | uglify-to-browserify@~1.0.0:
2428 | version "1.0.2"
2429 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
2430 |
2431 | updeep@^0.16.1:
2432 | version "0.16.1"
2433 | resolved "https://registry.yarnpkg.com/updeep/-/updeep-0.16.1.tgz#8bfc34cbc2f7b8f3dc0166052c0e8bb7716cc6c8"
2434 | dependencies:
2435 | lodash "^4.2.0"
2436 |
2437 | url@^0.11.0:
2438 | version "0.11.0"
2439 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
2440 | dependencies:
2441 | punycode "1.3.2"
2442 | querystring "0.2.0"
2443 |
2444 | util-deprecate@~1.0.1:
2445 | version "1.0.2"
2446 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2447 |
2448 | util@0.10.3, util@^0.10.3:
2449 | version "0.10.3"
2450 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
2451 | dependencies:
2452 | inherits "2.0.1"
2453 |
2454 | uuid@^3.1.0:
2455 | version "3.2.1"
2456 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
2457 |
2458 | validate-npm-package-license@^3.0.1:
2459 | version "3.0.3"
2460 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
2461 | dependencies:
2462 | spdx-correct "^3.0.0"
2463 | spdx-expression-parse "^3.0.0"
2464 |
2465 | verror@1.10.0:
2466 | version "1.10.0"
2467 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
2468 | dependencies:
2469 | assert-plus "^1.0.0"
2470 | core-util-is "1.0.2"
2471 | extsprintf "^1.2.0"
2472 |
2473 | vm-browserify@0.0.4:
2474 | version "0.0.4"
2475 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
2476 | dependencies:
2477 | indexof "0.0.1"
2478 |
2479 | watchpack@^0.2.1:
2480 | version "0.2.9"
2481 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
2482 | dependencies:
2483 | async "^0.9.0"
2484 | chokidar "^1.0.0"
2485 | graceful-fs "^4.1.2"
2486 |
2487 | webpack-core@~0.6.9:
2488 | version "0.6.9"
2489 | resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
2490 | dependencies:
2491 | source-list-map "~0.1.7"
2492 | source-map "~0.4.1"
2493 |
2494 | webpack@^1.13.2:
2495 | version "1.15.0"
2496 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.15.0.tgz#4ff31f53db03339e55164a9d468ee0324968fe98"
2497 | dependencies:
2498 | acorn "^3.0.0"
2499 | async "^1.3.0"
2500 | clone "^1.0.2"
2501 | enhanced-resolve "~0.9.0"
2502 | interpret "^0.6.4"
2503 | loader-utils "^0.2.11"
2504 | memory-fs "~0.3.0"
2505 | mkdirp "~0.5.0"
2506 | node-libs-browser "^0.7.0"
2507 | optimist "~0.6.0"
2508 | supports-color "^3.1.0"
2509 | tapable "~0.1.8"
2510 | uglify-js "~2.7.3"
2511 | watchpack "^0.2.1"
2512 | webpack-core "~0.6.9"
2513 |
2514 | whatwg-fetch@>=0.10.0:
2515 | version "2.0.4"
2516 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
2517 |
2518 | which-module@^1.0.0:
2519 | version "1.0.0"
2520 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
2521 |
2522 | which@1, which@^1.2.9:
2523 | version "1.3.0"
2524 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
2525 | dependencies:
2526 | isexe "^2.0.0"
2527 |
2528 | wide-align@^1.1.0:
2529 | version "1.1.2"
2530 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
2531 | dependencies:
2532 | string-width "^1.0.2"
2533 |
2534 | window-size@0.1.0:
2535 | version "0.1.0"
2536 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
2537 |
2538 | wordwrap@0.0.2:
2539 | version "0.0.2"
2540 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
2541 |
2542 | wordwrap@~0.0.2:
2543 | version "0.0.3"
2544 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
2545 |
2546 | wrap-ansi@^2.0.0:
2547 | version "2.1.0"
2548 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
2549 | dependencies:
2550 | string-width "^1.0.1"
2551 | strip-ansi "^3.0.1"
2552 |
2553 | wrappy@1:
2554 | version "1.0.2"
2555 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2556 |
2557 | xtend@^4.0.0:
2558 | version "4.0.1"
2559 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
2560 |
2561 | y18n@^3.2.1:
2562 | version "3.2.1"
2563 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
2564 |
2565 | yallist@^2.1.2:
2566 | version "2.1.2"
2567 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
2568 |
2569 | yallist@^3.0.0, yallist@^3.0.2:
2570 | version "3.0.2"
2571 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
2572 |
2573 | yargs-parser@^5.0.0:
2574 | version "5.0.0"
2575 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
2576 | dependencies:
2577 | camelcase "^3.0.0"
2578 |
2579 | yargs@^7.0.0:
2580 | version "7.1.0"
2581 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
2582 | dependencies:
2583 | camelcase "^3.0.0"
2584 | cliui "^3.2.0"
2585 | decamelize "^1.1.1"
2586 | get-caller-file "^1.0.1"
2587 | os-locale "^1.4.0"
2588 | read-pkg-up "^1.0.1"
2589 | require-directory "^2.1.1"
2590 | require-main-filename "^1.0.1"
2591 | set-blocking "^2.0.0"
2592 | string-width "^1.0.2"
2593 | which-module "^1.0.0"
2594 | y18n "^3.2.1"
2595 | yargs-parser "^5.0.0"
2596 |
2597 | yargs@~3.10.0:
2598 | version "3.10.0"
2599 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
2600 | dependencies:
2601 | camelcase "^1.0.2"
2602 | cliui "^2.1.0"
2603 | decamelize "^1.0.0"
2604 | window-size "0.1.0"
2605 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodebb-plugin-ns-points",
3 | "version": "6.0.1",
4 | "description": "Additional metrics for User Profiles. It's like experience in video games. Plugin is good for gamification of your board.",
5 | "main": "./plugin/index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/NicolasSiver/nodebb-plugin-ns-points.git"
12 | },
13 | "keywords": [
14 | "nodebb",
15 | "plugin",
16 | "points",
17 | "experience",
18 | "gamification",
19 | "metrics",
20 | "profile"
21 | ],
22 | "author": "Nicolas Siver",
23 | "license": "MIT",
24 | "bugs": {
25 | "url": "https://github.com/NicolasSiver/nodebb-plugin-ns-points/issues"
26 | },
27 | "homepage": "https://github.com/NicolasSiver/nodebb-plugin-ns-points#readme",
28 | "dependencies": {
29 | "async": "^3.0.1",
30 | "object-assign": "^4.1.0"
31 | },
32 | "nbbpm": {
33 | "compatibility": "~1.12.0"
34 | },
35 | "engines": {
36 | "node": ">=6"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/plugin.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "nodebb-plugin-ns-points",
3 | "name": "NodeBB Points",
4 | "description": "Additional metrics for User Profiles. It's like experience in video games. Plugin is good for gamification of your board.",
5 | "url": "https://github.com/NicolasSiver/nodebb-plugin-ns-points",
6 | "library": "./plugin/index.js",
7 | "hooks": [
8 | {
9 | "hook": "action:post.save",
10 | "method": "hooks.actions.postSave"
11 | },
12 | {
13 | "hook": "action:topic.save",
14 | "method": "hooks.actions.topicSave"
15 | },
16 | {
17 | "hook": "action:post.upvote",
18 | "method": "hooks.actions.postUpvote"
19 | },
20 | {
21 | "hook": "action:post.unvote",
22 | "method": "hooks.actions.postUnvote"
23 | },
24 | {
25 | "hook": "filter:admin.header.build",
26 | "method": "hooks.filters.menuAdmin"
27 | },
28 | {
29 | "hook": "filter:navigation.available",
30 | "method": "hooks.filters.navigation"
31 | },
32 | {
33 | "hook": "filter:post.get",
34 | "method": "hooks.filters.postGet"
35 | },
36 | {
37 | "hook": "filter:post.getPosts",
38 | "method": "hooks.filters.postGetPosts"
39 | },
40 | {
41 | "hook": "filter:topic.get",
42 | "method": "hooks.filters.topicGet"
43 | },
44 | {
45 | "hook": "filter:user.account",
46 | "method": "hooks.filters.account"
47 | },
48 | {
49 | "hook": "static:app.load",
50 | "method": "hooks.statics.load"
51 | },
52 | {
53 | "hook": "static:user.delete",
54 | "method": "hooks.statics.userDelete"
55 | }
56 | ],
57 | "less": [
58 | "style/client.less"
59 | ],
60 | "acpScripts": [
61 | "public/js/acp.js"
62 | ],
63 | "scripts": [
64 | "public/js/overview.js"
65 | ],
66 | "staticDirs": {
67 | "css": "./public/css",
68 | "templates": "./public/templates",
69 | "js": "./public/js"
70 | },
71 | "templates": "./public/templates"
72 | }
--------------------------------------------------------------------------------
/plugin/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "node": true
4 | },
5 | "rules": {
6 | "no-multi-spaces": 0,
7 | "no-use-before-define": 0,
8 | "key-spacing": 0,
9 | "quotes": [
10 | 2,
11 | "single"
12 | ]
13 | }
14 | }
--------------------------------------------------------------------------------
/plugin/actions.js:
--------------------------------------------------------------------------------
1 | (function (Action) {
2 | 'use strict';
3 |
4 | const async = require('async');
5 |
6 | const settings = require('./settings'),
7 | database = require('./database');
8 |
9 | const debug = function (id, delta, total) {
10 | console.log('User %d changed amount of points on %d, total: %d', id, delta, total);
11 | };
12 |
13 | const groupChange = function (users, done) {
14 | async.each(users, function (user, next) {
15 | incrementPoints(user.uid, user.points, next);
16 | }, done);
17 | };
18 |
19 | const incrementPoints = function (uid, increment, done) {
20 | // TODO Prevent points assignment for guest users
21 | done = done || (() => undefined);
22 | database.incrementBy(uid, increment, function (error, points) {
23 | if (error) {
24 | return done(error);
25 | }
26 | //TODO Today Statistics
27 | //debug(uid, increment, points);
28 | done(null);
29 | });
30 | };
31 |
32 | /**
33 | * Adding post
34 | * @param postData {object} Post with signature - { pid:3, uid:1, tid:'1', content:'text', timestamp:1429974406764, reputation:0, votes: 0, edited: 0, deleted: 0, cid:2 }
35 | */
36 | Action.postSave = function (postData) {
37 | var value = settings.get().postWeight;
38 | incrementPoints(postData.post.uid, value);
39 | };
40 |
41 | /**
42 | * Removing of previous up-vote for the post
43 | * Reputation actions could be found in favourites.js, line 206
44 | * @param metadata {object} aggregated data - { pid:'2', uid:1, owner:2, current:'unvote'}
45 | */
46 | Action.postUnvote = function (metadata) {
47 | //Handle unvotes only for upvotes
48 | if (metadata.current === 'upvote') {
49 | groupChange([
50 | {uid: metadata.owner, points: -settings.get().reputationWeight},
51 | {uid: metadata.uid, points: -settings.get().reputationActionWeight}
52 | ], function (error) {
53 | if (error) {
54 | console.error(error);
55 | }
56 | })
57 | }
58 | };
59 |
60 | Action.postUpvote = function (metadata) {
61 | groupChange([
62 | {uid: metadata.owner, points: settings.get().reputationWeight},
63 | {uid: metadata.uid, points: settings.get().reputationActionWeight}
64 | ], function (error) {
65 | if (error) {
66 | console.error(error);
67 | }
68 | })
69 | };
70 |
71 | /**
72 | *
73 | * @param topicData {object} Signature - { tid:2, uid:1, cid:'1', mainPid:0, title: 'text', slug:'text', timestamp: 429976183015, lastposttime:0, postcount:0, viewcount:0, locked:0, deleted:0, pinned:0 }
74 | */
75 | Action.topicSave = function (topicData) {
76 | let value = settings.get().topicWeight;
77 | incrementPoints(topicData.topic.uid, value);
78 | };
79 |
80 | })(module.exports);
81 |
--------------------------------------------------------------------------------
/plugin/constants.js:
--------------------------------------------------------------------------------
1 | module.exports = Object.freeze({
2 | NAMESPACE: 'ns:points',
3 | SOCKETS : 'ns-points'
4 | });
5 |
--------------------------------------------------------------------------------
/plugin/controller.js:
--------------------------------------------------------------------------------
1 | (function (Controller) {
2 | 'use strict';
3 |
4 | const async = require('async'),
5 | benchpress = require('./nodebb').benchpress,
6 | nconf = require('./nodebb').nconf;
7 |
8 | const database = require('./database'),
9 | Ranking = require('./default-ranking'),
10 | files = require('./files'),
11 | settings = require('./settings');
12 |
13 | Controller.deleteUser = function (uid, done) {
14 | database.delete(uid, done);
15 | };
16 |
17 | Controller.getCalculationProperties = function (done) {
18 | async.waterfall([
19 | async.apply(settings.getData),
20 | function (cachedSettings, next) {
21 | let result = Object.assign({}, cachedSettings);
22 | delete result.maxUsers;
23 | next(null, result);
24 | }
25 | ], done);
26 | };
27 |
28 | Controller.getSettings = function (done) {
29 | async.waterfall([
30 | async.apply(settings.getData),
31 | function (settings, callback) {
32 | callback(null, {
33 | maxUsers: settings.maxUsers
34 | });
35 | }
36 | ], done);
37 | };
38 |
39 | Controller.getTopUsers = function (done) {
40 | let templateData, rankMeta;
41 |
42 | async.waterfall([
43 | function (next) {
44 | async.parallel({
45 | settingsData: async.apply(settings.getData),
46 | userTemplate: async.apply(files.getUserTemplate)
47 | }, next);
48 | },
49 | function (payload, next) {
50 | database.getUsers(payload.settingsData.maxUsers - 1, function (error, users) {
51 | if (error) {
52 | return next(error);
53 | }
54 |
55 | async.map(
56 | users,
57 | (user, callback) => {
58 | rankMeta = Ranking.compute(payload.settingsData, user.points);
59 |
60 | templateData = Object.assign(
61 | {
62 | progress : rankMeta.rankProgress / rankMeta.rankTotal * 100,
63 | rank : rankMeta.rank,
64 | rankProgress : `${rankMeta.rankProgress} / ${rankMeta.rankTotal}`,
65 | relative_path: nconf.get('relative_path')
66 | },
67 | user
68 | );
69 |
70 | benchpress
71 | .compileRender(payload.userTemplate, templateData)
72 | .then(template => {
73 | callback(null, template);
74 | });
75 | },
76 | next
77 | );
78 | });
79 | },
80 | (users, next) => next(null, {users})
81 | ], done);
82 | };
83 |
84 | Controller.injectSettings = function (response, done) {
85 | async.waterfall([
86 | async.apply(settings.getData),
87 | function (settingsData, next) {
88 | response.pointsSettings = settingsData;
89 | next(null, response);
90 | }
91 | ], done);
92 | };
93 |
94 | Controller.saveCalculationProperties = function (payload, done) {
95 | let scheme = [
96 | 'postWeight', 'topicWeight',
97 | 'reputationWeight', 'reputationActionWeight',
98 | 'basePoints', 'baseGrow'
99 | ];
100 | async.waterfall([
101 | function composePayload(callback) {
102 | let result = {}, value;
103 | scheme.forEach(function (field) {
104 | value = payload[field];
105 | if (payload.hasOwnProperty(field) && value) {
106 | result[field] = parseInt(value, 10);
107 | }
108 | });
109 | callback(null, result);
110 | },
111 | function save(data, callback) {
112 | settings.save(data, callback);
113 | }
114 | ], done);
115 | };
116 |
117 | Controller.saveSettings = function (payload, done) {
118 | async.waterfall([
119 | function validatePayload(callback) {
120 | let users = parseInt(payload.maxUsers);
121 | if (isNaN(users)) {
122 | return callback(new Error('Max Users is not a number.'));
123 | }
124 | callback(null, users);
125 | },
126 | function save(users, callback) {
127 | settings.save({
128 | maxUsers: users
129 | }, callback);
130 | }
131 | ], done);
132 | };
133 |
134 | })(module.exports);
135 |
--------------------------------------------------------------------------------
/plugin/database.js:
--------------------------------------------------------------------------------
1 | (function (Database) {
2 | 'use strict';
3 |
4 | const async = require('async');
5 |
6 | const nodebb = require('./nodebb'),
7 | constants = require('./constants');
8 |
9 | const db = nodebb.db,
10 | user = nodebb.user;
11 |
12 | //FIXME Remove Points object if User is deleted or create utility method for ACP
13 | Database.delete = function (uid, done) {
14 | db.sortedSetRemove(constants.NAMESPACE, uid, done);
15 | };
16 |
17 | Database.getPoints = function (uid, done) {
18 | db.sortedSetScore(constants.NAMESPACE, uid, done);
19 | };
20 |
21 | Database.getUsers = function (limit, done) {
22 | async.waterfall([
23 | async.apply(db.getSortedSetRevRangeWithScores, constants.NAMESPACE, 0, limit),
24 | function (scoredUsers, next) {
25 | var scores = {},
26 | ids = scoredUsers.map(function (scoredUser) {
27 | scores[scoredUser.value] = scoredUser.score;
28 | return scoredUser.value;
29 | });
30 | next(null, ids, scores);
31 | },
32 | function (uids, scoreMap, next) {
33 | user.getUsersFields(uids, ['picture', 'username', 'userslug'], function (error, users) {
34 | if (error) {
35 | return next(error);
36 | }
37 |
38 | next(null, users.map(function (user) {
39 | user.points = scoreMap[user.uid] || 0;
40 | return user;
41 | }));
42 | });
43 | }
44 | ], done);
45 | };
46 |
47 | Database.incrementBy = function (uid, increment, done) {
48 | db.sortedSetIncrBy(constants.NAMESPACE, increment, uid, done);
49 | };
50 |
51 | })(module.exports);
52 |
--------------------------------------------------------------------------------
/plugin/default-ranking.js:
--------------------------------------------------------------------------------
1 | class DefaultRanking {
2 |
3 | static compute(settings, points) {
4 | let accumulatedPoints = 0;
5 | let level = 0;
6 | let levelProgress = 0;
7 | let currentLevelTotal = settings.basePoints;
8 | let levelGrow = settings.baseGrow;
9 |
10 | while (accumulatedPoints <= points) {
11 | levelProgress = points - accumulatedPoints;
12 | level++;
13 | accumulatedPoints += currentLevelTotal;
14 | currentLevelTotal += levelGrow;
15 | }
16 |
17 | return {
18 | rank : level,
19 | rankProgress: levelProgress,
20 | rankTotal : currentLevelTotal - levelGrow,
21 | total : points
22 | };
23 | }
24 |
25 | }
26 |
27 | module.exports = DefaultRanking;
28 |
--------------------------------------------------------------------------------
/plugin/files.js:
--------------------------------------------------------------------------------
1 | (function (Files) {
2 | 'use strict';
3 |
4 | var fs = require('fs'),
5 | path = require('path');
6 |
7 | var userTemplate = null;
8 |
9 | Files.init = function (done) {
10 | fs.readFile(
11 | path.resolve(__dirname, '../public', './templates/client/points/user.tpl'),
12 | 'utf8',
13 | function (error, template) {
14 | if (error) {
15 | return done(error);
16 | }
17 | userTemplate = template;
18 | done(null);
19 | });
20 | };
21 |
22 | Files.getUserTemplate = function (done) {
23 | done(null, userTemplate);
24 | };
25 |
26 | })(module.exports);
27 |
--------------------------------------------------------------------------------
/plugin/filters.js:
--------------------------------------------------------------------------------
1 | (function (Filter) {
2 | 'use strict';
3 |
4 | var async = require('async'),
5 | database = require('./database'),
6 | controller = require('./controller');
7 |
8 | /**
9 | * Hook to render user profile.
10 | * 'userData' will be used as payload in hook handler.
11 | *
12 | * @param params {object} Payload :{userData: userData, uid: callerUID}
13 | * @param callback {function}
14 | */
15 | Filter.account = function (params, callback) {
16 | database.getPoints(params.userData.uid, function (error, points) {
17 | if (error) {
18 | return callback(error);
19 | }
20 | params.userData.points = points || 0;
21 | callback(null, params);
22 | });
23 | };
24 |
25 | Filter.menuAdmin = function (header, callback) {
26 | header.plugins.push({
27 | route: '/plugins/points',
28 | icon : 'fa-gamepad',
29 | name : 'Points'
30 | });
31 | callback(null, header);
32 | };
33 |
34 | Filter.navigation = function (items, callback) {
35 | items.push({
36 | route : "/points",
37 | title : "Points",
38 | enabled : true,
39 | iconClass: "fa-gamepad",
40 | textClass: "visible-xs-inline",
41 | text : "Points"
42 | });
43 | callback(null, items);
44 | };
45 |
46 | /**
47 | * Hook to render single posted post
48 | *
49 | * @param postData {object} Fields: {pid, uid, tid, content, timestamp, reputation, votes, editor, edited, deleted, cid}
50 | * @param callback {function}
51 | */
52 | Filter.postGet = function (postData, callback) {
53 | database.getPoints(postData.uid, function (error, points) {
54 | if (error) {
55 | return callback(error);
56 | }
57 | postData.points = points || 0;
58 | callback(null, postData);
59 | });
60 | };
61 |
62 | /**
63 | * Hook to render topic thread
64 | *
65 | * @param payload {object} Fields: {posts: posts, uid: uid}
66 | * @param callback {function}
67 | */
68 | Filter.postGetPosts = function (payload, callback) {
69 | // Remove purged posts
70 | var posts = payload.posts.filter(post => post !== null);
71 |
72 | async.map(posts, function (post, next) {
73 | database.getPoints(post.uid, function (error, points) {
74 | if (error) {
75 | return next(error);
76 | }
77 | post.points = points || 0;
78 | next(null, post);
79 | });
80 | }, function (error, results) {
81 | if (error) {
82 | return callback(error);
83 | }
84 | payload.posts = results;
85 | callback(null, payload);
86 | });
87 | };
88 |
89 | /**
90 | * Hook to inject points settings and values
91 | * @param topicData {object} Fields: {topic: topicData, uid: uid}
92 | * @param callback {function}
93 | */
94 | Filter.topicGet = function (topicData, callback) {
95 | controller.injectSettings(topicData.topic, function (error, topicWithSettings) {
96 | if (error) {
97 | return callback(error);
98 | }
99 | topicData.topic = topicWithSettings;
100 | callback(null, topicData);
101 | });
102 | };
103 |
104 | })(module.exports);
--------------------------------------------------------------------------------
/plugin/index.js:
--------------------------------------------------------------------------------
1 | (function (Plugin) {
2 | 'use strict';
3 |
4 | const async = require('async');
5 |
6 | const actions = require('./actions'),
7 | controller = require('./controller'),
8 | files = require('./files'),
9 | filters = require('./filters'),
10 | settings = require('./settings'),
11 | sockets = require('./sockets');
12 |
13 | //NodeBB list of Hooks: https://github.com/NodeBB/NodeBB/wiki/Hooks
14 | Plugin.hooks = {
15 | actions: actions,
16 | filters: filters,
17 | statics: {
18 | load: function (params, callback) {
19 | var router = params.router,
20 | middleware = params.middleware,
21 | controllers = params.controllers,
22 | pluginUri = '/admin/plugins/points',
23 |
24 | renderAdmin = function (req, res, next) {
25 | res.render(pluginUri.substring(1), {});
26 | },
27 |
28 | renderOverviewSection = function (req, res, next) {
29 | controller.getTopUsers(function (error, payload) {
30 | if (error) {
31 | return res.status(500).json(error);
32 | }
33 | res.render('client/points/overview', payload);
34 | });
35 | };
36 |
37 | router.get(pluginUri, middleware.admin.buildHeader, renderAdmin);
38 | router.get('/api' + pluginUri, renderAdmin);
39 |
40 | // Overview Page
41 | router.get('/points', middleware.buildHeader, renderOverviewSection);
42 | router.get('/api/points', renderOverviewSection);
43 |
44 | async.parallel({
45 | settings: async.apply(settings.init),
46 | sockets : async.apply(sockets.init),
47 | files : async.apply(files.init)
48 | }, callback);
49 | },
50 |
51 | userDelete: function ({uid}, callback) {
52 | controller.deleteUser(uid, callback);
53 | }
54 | }
55 | };
56 | })(module.exports);
57 |
--------------------------------------------------------------------------------
/plugin/nodebb.js:
--------------------------------------------------------------------------------
1 | (function (Module, NodeBB) {
2 | 'use strict';
3 |
4 | Module.exports = {
5 | adminSockets : NodeBB.require('./src/socket.io/admin').plugins,
6 | db : NodeBB.require('./src/database'),
7 | meta : NodeBB.require('./src/meta'),
8 | pluginSockets: NodeBB.require('./src/socket.io/plugins'),
9 | postTools : NodeBB.require('./src/posts/tools'),
10 | settings : NodeBB.require('./src/settings'),
11 | socketIndex : NodeBB.require('./src/socket.io/index'),
12 | topics : NodeBB.require('./src/topics'),
13 | user : NodeBB.require('./src/user'),
14 |
15 | benchpress: NodeBB.require('benchpressjs'),
16 | nconf : NodeBB.require('nconf')
17 | };
18 |
19 | })(module, require.main);
--------------------------------------------------------------------------------
/plugin/settings.js:
--------------------------------------------------------------------------------
1 | (function (Settings) {
2 | 'use strict';
3 |
4 | var objectAssign = require('object-assign');
5 |
6 | var meta = require('./nodebb').meta,
7 | constants = require('./constants');
8 |
9 | //Memory cache
10 | var settingsCache = null,
11 | defaults = {
12 | postWeight : 1,
13 | topicWeight : 4,
14 | reputationWeight : 2,
15 | reputationActionWeight: 1,
16 | maxUsers : 20,
17 |
18 | basePoints: 10,
19 | baseGrow : 4
20 | };
21 |
22 | Settings.init = function (done) {
23 | meta.settings.get(constants.NAMESPACE, function (error, settings) {
24 | if (error) {
25 | return done(error);
26 | }
27 | settingsCache = objectAssign(defaults, settings);
28 | done(null);
29 | });
30 | };
31 |
32 | /**
33 | * @deprecated since version 4.0.0
34 | */
35 | Settings.get = function () {
36 | return settingsCache;
37 | };
38 |
39 | Settings.getData = function (done) {
40 | done(null, settingsCache);
41 | };
42 |
43 | Settings.save = function (settings, done) {
44 | settingsCache = objectAssign(settingsCache, settings);
45 | meta.settings.set(constants.NAMESPACE, settingsCache, function (error) {
46 | done(error, settingsCache);
47 | });
48 | };
49 |
50 | })(module.exports);
51 |
--------------------------------------------------------------------------------
/plugin/sockets.js:
--------------------------------------------------------------------------------
1 | (function (Sockets) {
2 | 'use strict';
3 |
4 | var constants = require('./constants'),
5 | controller = require('./controller'),
6 | nodebb = require('./nodebb');
7 |
8 | var sockets = nodebb.pluginSockets;
9 |
10 | Sockets.init = function (callback) {
11 | sockets[constants.SOCKETS] = {};
12 | //Acknowledgements
13 | sockets[constants.SOCKETS].getCalculationProperties = Sockets.getCalculationProperties;
14 | sockets[constants.SOCKETS].getSettings = Sockets.getSettings;
15 | sockets[constants.SOCKETS].saveCalculationProperties = Sockets.saveCalculationProperties;
16 | sockets[constants.SOCKETS].saveSettings = Sockets.saveSettings;
17 | callback();
18 | };
19 |
20 | Sockets.getCalculationProperties = function (socket, payload, callback) {
21 | controller.getCalculationProperties(callback);
22 | };
23 |
24 | Sockets.getSettings = function (socket, payload, callback) {
25 | controller.getSettings(callback);
26 | };
27 |
28 | Sockets.saveCalculationProperties = function (socket, payload, callback) {
29 | controller.saveCalculationProperties(payload, callback);
30 | };
31 |
32 | Sockets.saveSettings = function (socket, payload, callback) {
33 | controller.saveSettings(payload, callback);
34 | };
35 |
36 | })(module.exports);
37 |
--------------------------------------------------------------------------------
/public/css/acp.css:
--------------------------------------------------------------------------------
1 | .points-acp-dashboard .tab-content {
2 | margin-top: 16px; }
3 |
--------------------------------------------------------------------------------
/public/js/overview.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /* globals define, app, ajaxify, bootbox, socket, templates, utils */
4 |
5 | define('forum/client/points/overview', [], function () {
6 |
7 | var Overview = {},
8 | columns = 4,
9 | className = 'col-lg-3 col-md-3 col-xs-12 points-fade-in',
10 | delay = 0.1;
11 |
12 | Overview.init = function () {
13 | var container = document.getElementsByClassName('points-users')[0];
14 | var i, len = ajaxify.data.users.length, payload, htmlRow, htmlUser;
15 |
16 | for (i = 0; i < len; ++i) {
17 | payload = ajaxify.data.users[i];
18 |
19 | if (i % columns === 0) {
20 | htmlRow = document.createElement('div');
21 | htmlRow.className = 'row';
22 | container.appendChild(htmlRow);
23 | }
24 |
25 | htmlUser = document.createElement('div');
26 | htmlUser.className = className;
27 | htmlUser.style['animation-delay'] = delay * i + 's';
28 | htmlUser.innerHTML = payload;
29 | htmlRow.appendChild(htmlUser);
30 | }
31 | };
32 |
33 | return Overview;
34 | });
35 |
--------------------------------------------------------------------------------
/public/templates/admin/plugins/points.tpl:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/templates/client/points/overview.tpl:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/templates/client/points/user.tpl:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
{username}
15 |
Points: {points}
16 |
Progress: {rankProgress}
17 |
18 |
25 |
26 |
--------------------------------------------------------------------------------
/public/templates/partials/points_profile.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{points}
4 |
Points
5 |
6 |
--------------------------------------------------------------------------------
/style/_animation.less:
--------------------------------------------------------------------------------
1 | @keyframes fadeIn {
2 | from {
3 | opacity: 0;
4 | }
5 | to {
6 | opacity: 1;
7 | }
8 | }
9 |
10 | .points-fade-in {
11 | opacity: 0;
12 | animation: fadeIn ease-in-out 1;
13 | animation-fill-mode: forwards;
14 | animation-duration: 0.3s;
15 | }
--------------------------------------------------------------------------------
/style/_vars.less:
--------------------------------------------------------------------------------
1 | @avatar-size: 100px;
2 | @progress-height: 8px;
3 | @ns-points-badge-font-size: 2rem;
4 | @ns-points-avatar-font-size: 5rem;
5 | @ns-points-badge-size: 32px;
6 | @username-size: 1.8em;
7 | @rank-padding: 6px;
8 | @padding-s: 8px;
9 | @line-margin: 16px;
10 | @block-margin: 24px;
11 |
12 | @color-light: #FFFFFF;
13 | @color-dark: #000000;
14 |
15 | @font-normal: 300;
16 | @font-narrow: 100;
17 | @font-bold: 700;
--------------------------------------------------------------------------------
/style/client.less:
--------------------------------------------------------------------------------
1 | @import "_animation";
2 | @import "_vars";
3 |
4 | .points-container {
5 |
6 | .row {
7 | margin-bottom: @line-margin;
8 | }
9 |
10 | .points-avatar {
11 | position: relative;
12 | width: @avatar-size;
13 | height: @avatar-size;
14 | padding: 0;
15 | flex-shrink: 0;
16 |
17 | .img-thumbnail {
18 | width: 100%;
19 | height: 100%;
20 | border-radius: 50%;
21 | }
22 |
23 | .icon-thumbnail {
24 | width: 100%;
25 | height: 100%;
26 | line-height: @avatar-size;
27 | font-size: @ns-points-avatar-font-size;
28 | border-radius: 50%;
29 | text-align: center;
30 | color: fade(@color-light, 87%);
31 | }
32 |
33 | span {
34 | position: absolute;
35 | bottom: 0;
36 | right: 0;
37 | text-align: center;
38 | border-radius: 50%;
39 | width: @ns-points-badge-size;
40 | height: @ns-points-badge-size;
41 | line-height: @ns-points-badge-size;
42 | font-size: @ns-points-badge-font-size;
43 | font-weight: @font-normal;
44 | color: fade(@color-light, 90%);
45 | background: fade(@color-dark, 87%);
46 | }
47 | }
48 |
49 | .points-stats {
50 | flex: 1;
51 | margin-left: @block-margin;
52 | min-width: 0;
53 |
54 | .points-numbers {
55 | display: block;
56 | text-transform: lowercase;
57 | }
58 |
59 | .rank-progress {
60 | display: block;
61 | text-transform: lowercase;
62 | }
63 |
64 | .progress {
65 | height: @progress-height;
66 | margin: @padding-s 0;
67 | }
68 | }
69 |
70 | .points-user-info {
71 | width: 100%;
72 | }
73 |
74 | .points-user-name {
75 | font-weight: @font-narrow;
76 | font-size: @username-size;
77 |
78 | display: block;
79 | overflow: hidden;
80 | white-space: nowrap;
81 | text-overflow: ellipsis;
82 | width: 100%;
83 | }
84 |
85 | .points-user {
86 | display: flex;
87 | flex-direction: row;
88 | flex-wrap: nowrap;
89 | }
90 | }
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | async@^3.0.1:
6 | version "3.0.1"
7 | resolved "https://registry.yarnpkg.com/async/-/async-3.0.1.tgz#dfeb34657d1e63c94c0eee424297bf8a2c9a8182"
8 | integrity sha512-ZswD8vwPtmBZzbn9xyi8XBQWXH3AvOQ43Za1KWYq7JeycrZuUYzx01KvHcVbXltjqH4y0MWrQ33008uLTqXuDw==
9 |
10 | object-assign@^4.1.0:
11 | version "4.1.1"
12 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
13 |
--------------------------------------------------------------------------------