diff --git a/client/actions/auth.js b/client/actions/auth.js index dff23f21f..f420c55ea 100644 --- a/client/actions/auth.js +++ b/client/actions/auth.js @@ -15,14 +15,8 @@ const webAuthOptions = { const webAuth = new auth0.WebAuth(webAuthOptions); // eslint-disable-line no-undef export function login(returnUrl, locale) { - console.log("login function running"); - sessionStorage.setItem('delegated-admin:returnTo', returnUrl || '/users'); - console.log('delegated-admin:returnTo', returnUrl || '/users') - - console.log({ webAuthOptions }) - webAuth.authorize({ ui_locales: locale }); @@ -146,8 +140,6 @@ const processTokens = (dispatch, apiToken, returnTo) => { } }); - - console.log(`dispatching LOGIN_SUCCESS with token: ${apiToken}, decodedToken: ${decodedToken}, user: ${decodedToken}, returnTo: ${returnTo}`); dispatch({ type: constants.LOGIN_SUCCESS, payload: { @@ -170,7 +162,6 @@ const processTokens = (dispatch, apiToken, returnTo) => { export function loadCredentials() { return (dispatch) => { if (window.location.hash) { - console.log(`dispatching LOGIN_PENDING`); dispatch({ type: constants.LOGIN_PENDING }); @@ -238,7 +229,7 @@ export function getAppSettings(onSuccess) { export function toggleStyleSettings() { return (dispatch, getState) => { - let settings = getState().settings.get('record'); + let settings = getState().settings.get('record').toJS(); settings = settings.settings || settings || {}; const useAlt = localStorage.getItem('delegated-admin:use-alt-css') === 'true'; const path = useAlt ? settings.css : settings.altcss; @@ -255,7 +246,7 @@ export function toggleStyleSettings() { export function getStyleSettings() { return (dispatch, getState) => { - let settings = getState().settings.get('record'); + let settings = getState().settings.get('record').toJS(); settings = settings.settings || settings || {}; const useAlt = localStorage.getItem('delegated-admin:use-alt-css') === 'true'; const path = !useAlt ? settings.css : settings.altcss; diff --git a/client/actions/user.js b/client/actions/user.js index 51f98c44e..9a505098d 100644 --- a/client/actions/user.js +++ b/client/actions/user.js @@ -18,7 +18,7 @@ const addRequiredTextParam = (url, languageDictionary) => { */ export function fetchUsers(search, reset = false, page = 0, filterBy, sort, onSuccess) { return (dispatch, getState) => { - const { sortProperty, sortOrder, searchValue, selectedFilter } = getState().users; + const { sortProperty, sortOrder, searchValue, selectedFilter } = getState().users.toJS(); const meta = { page, sortProperty, sortOrder, searchValue, onSuccess }; meta.selectedFilter = reset ? '' : filterBy || selectedFilter; meta.searchValue = reset ? '' : search || searchValue; @@ -75,7 +75,7 @@ export function createUser(user, languageDictionary) { */ export function requestCreateUser(memberships) { return (dispatch, getState) => { - const connections = getState().connections.get('records'); + const connections = getState().connections.get('records').toJS(); const connection = connections.length === 0 ? null @@ -238,27 +238,27 @@ export function cancelBlockUser() { /* * Update the user details. */ -// export function updateUser(userId, data, onSuccess, languageDictionary) { -// return (dispatch) => { -// dispatch({ -// type: constants.UPDATE_USER, -// meta: { -// userId, -// onSuccess: () => { -// if (onSuccess) { -// onSuccess(); -// } -// dispatch(fetchUserDetail(userId)); -// } -// }, -// payload: { -// promise: axios.put(addRequiredTextParam(`/api/users/${userId}`, languageDictionary), data, { -// responseType: 'json' -// }) -// } -// }); -// }; -// } +export function updateUser(userId, data, onSuccess, languageDictionary) { + return (dispatch) => { + dispatch({ + type: constants.UPDATE_USER, + meta: { + userId, + onSuccess: () => { + if (onSuccess) { + onSuccess(); + } + dispatch(fetchUserDetail(userId)); + } + }, + payload: { + promise: axios.put(addRequiredTextParam(`/api/users/${userId}`, languageDictionary), data, { + responseType: 'json' + }) + } + }); + }; +} /* * Block a user. */ @@ -384,7 +384,7 @@ export function cancelDeleteUser() { */ export function deleteUser() { return (dispatch, getState) => { - const { user: {user_id} } = getState().userDelete; + const { user: {user_id} } = getState().userDelete.toJS(); dispatch({ type: constants.DELETE_USER, payload: { @@ -425,7 +425,7 @@ export function cancelPasswordReset() { */ export function resetPassword(application) { return (dispatch, getState) => { - const { user: { user_id }, connection } = getState().passwordReset; + const { user: { user_id }, connection } = getState().passwordReset.toJS(); const clientId = application.client ? (application.client.value || application.client) : null; dispatch({ type: constants.PASSWORD_RESET, @@ -467,7 +467,7 @@ export function cancelPasswordChange() { */ export function changePassword(formData, languageDictionary) { return (dispatch, getState) => { - const { user: { user_id }, connection } = getState().passwordChange; + const { user: { user_id }, connection } = getState().passwordChange.toJS(); dispatch({ type: constants.PASSWORD_CHANGE, payload: { @@ -510,7 +510,7 @@ export function cancelUsernameChange() { */ export function changeUsername(userId, data, languageDictionary) { return (dispatch, getState) => { - const user = getState().user.get('record'); + const user = getState().user.get('record').toJS(); user.username = data.username; dispatch({ type: constants.USERNAME_CHANGE, diff --git a/client/components/Header.jsx b/client/components/Header.jsx index 4854c1db5..42c762826 100644 --- a/client/components/Header.jsx +++ b/client/components/Header.jsx @@ -20,25 +20,22 @@ export default class Header extends Component { getName(iss, user) { let thisMenuName = this.props.getDictValue('menuName'); - // user.get was erroring so commented out. User seems to be a decoded jwt - // I don't know what it was previously - to have getter fns, or why it's changed - - // thisMenuName = thisMenuName || (user && user.get('name')); - // thisMenuName = thisMenuName || (user && user.get('nickname')); - // thisMenuName = thisMenuName || (user && user.get('email')); + thisMenuName = thisMenuName || (user && user.get('name')); + thisMenuName = thisMenuName || (user && user.get('nickname')); + thisMenuName = thisMenuName || (user && user.get('email')); thisMenuName = thisMenuName || iss; return thisMenuName.length >= 21 ? thisMenuName.substr(0,18)+'...' : thisMenuName; } getPicture(iss, user) { - // if (user && user.get('picture')) { - // return user.get('picture'); - // } + if (user && user.get('picture')) { + return user.get('picture'); + } - // if (user && user.get('nickname')) { - // return `https://cdn.auth0.com/avatars/${user.get('nickname').slice(0, 2).toLowerCase()}.png`; - // } + if (user && user.get('nickname')) { + return `https://cdn.auth0.com/avatars/${user.get('nickname').slice(0, 2).toLowerCase()}.png`; + } return `https://cdn.auth0.com/avatars/${iss.slice(0, 2).toLowerCase()}.png`; } diff --git a/client/components/Logs/LogDialog.jsx b/client/components/Logs/LogDialog.jsx index 9b026ab47..b8883c78b 100644 --- a/client/components/Logs/LogDialog.jsx +++ b/client/components/Logs/LogDialog.jsx @@ -25,7 +25,7 @@ export default class LogDialog extends Component { const languageDictionary = this.props.languageDictionary || {}; - const log = this.props.log; + const log = this.props.log.toJS(); const logType = _.get(languageDictionary, `logTypes.${log.shortType}.event`, log.type); diff --git a/client/components/Logs/LogsTable.jsx b/client/components/Logs/LogsTable.jsx index b4742c0e1..9b7b2c266 100644 --- a/client/components/Logs/LogsTable.jsx +++ b/client/components/Logs/LogsTable.jsx @@ -29,7 +29,7 @@ export default class LogsTable extends Component { return
{languageDictionary.noLogsMessage || 'No logs found'}
; } - const logs = this.props.logs; + const logs = this.props.logs.toJS(); return ( diff --git a/client/components/Users/UserActions.jsx b/client/components/Users/UserActions.jsx index 78dbb4edf..d0ef53c8a 100644 --- a/client/components/Users/UserActions.jsx +++ b/client/components/Users/UserActions.jsx @@ -30,12 +30,12 @@ export default class UserActions extends Component { if (props.user) { this.state = { - user: props.user, + user: props.user.toJS(), loading: props.loading }; if (props.databaseConnections) { - this.state.databaseConnections = props.databaseConnections; + this.state.databaseConnections = props.databaseConnections.toJS(); } } else { this.state = { @@ -49,7 +49,7 @@ export default class UserActions extends Component { componentWillReceiveProps(nextProps) { if (nextProps.user) { - const { record, loading } = nextProps.user; + const { record, loading } = nextProps.user.toJS(); this.setState({ user: record, loading @@ -58,7 +58,7 @@ export default class UserActions extends Component { if (nextProps.databaseConnections) { this.setState({ - databaseConnections: nextProps.databaseConnections + databaseConnections: nextProps.databaseConnections.toJS() }); } diff --git a/client/components/Users/UserDevices.jsx b/client/components/Users/UserDevices.jsx index 97c0faffc..da4fe7ea6 100644 --- a/client/components/Users/UserDevices.jsx +++ b/client/components/Users/UserDevices.jsx @@ -40,7 +40,7 @@ export default class UserDevices extends Component { return
{languageDictionary.noDevicesMessage || 'This user does not have any registered devices.'}
; } - const devices = this.props.devices; + const devices = this.props.devices.toJS(); return ( diff --git a/client/components/Users/UserHeader.jsx b/client/components/Users/UserHeader.jsx index 43568b98e..6f58cf9d5 100644 --- a/client/components/Users/UserHeader.jsx +++ b/client/components/Users/UserHeader.jsx @@ -64,7 +64,7 @@ export default class UserHeader extends Component { return
; } - const user = this.props.user; + const user = this.props.user.toJS(); const userFields = this.props.userFields || []; const languageDictionary = this.props.languageDictionary || {}; diff --git a/client/components/Users/UserInfo.jsx b/client/components/Users/UserInfo.jsx index 2e3057746..7c23d65d8 100644 --- a/client/components/Users/UserInfo.jsx +++ b/client/components/Users/UserInfo.jsx @@ -104,7 +104,7 @@ export default class UserInfo extends Component { .value(); /* Prepare the user object */ - const userObject = user; + const userObject = user.toJS(); if (!userObject || Object.keys(userObject).length === 0) { return ( diff --git a/client/components/Users/UserLogs.jsx b/client/components/Users/UserLogs.jsx index 77f6594f9..14970cc02 100644 --- a/client/components/Users/UserLogs.jsx +++ b/client/components/Users/UserLogs.jsx @@ -26,7 +26,7 @@ export default class UserLogs extends Component { } const languageDictionary = this.props.languageDictionary || {}; - const logs = this.props.logs; + const logs = this.props.logs.toJS(); return ( diff --git a/client/components/Users/UserProfile.jsx b/client/components/Users/UserProfile.jsx index 7c87153bc..b567178ad 100644 --- a/client/components/Users/UserProfile.jsx +++ b/client/components/Users/UserProfile.jsx @@ -20,7 +20,7 @@ export default class UserProfile extends Component { return ( - + ); diff --git a/client/constants.js b/client/constants.js index dfdc92925..b33028faf 100644 --- a/client/constants.js +++ b/client/constants.js @@ -74,6 +74,7 @@ export const CREATE_USER_REJECTED = 'CREATE_USER_REJECTED'; export const CREATE_USER_FULFILLED = 'CREATE_USER_FULFILLED'; // Edit user. +export const UPDATE_USER = 'UPDATE_USER'; export const REQUEST_FIELDS_CHANGE = 'REQUEST_FIELDS_CHANGE'; export const CANCEL_FIELDS_CHANGE = 'CANCEL_FIELDS_CHANGE'; export const FIELDS_CHANGE = 'FIELDS_CHANGE'; diff --git a/client/containers/App.jsx b/client/containers/App.jsx index a3b137c1f..3fbe1c342 100644 --- a/client/containers/App.jsx +++ b/client/containers/App.jsx @@ -54,8 +54,8 @@ class App extends Component { render() { const { settingsLoading } = this.props; - const languageDictionary = this.props.languageDictionary ? this.props.languageDictionary : {}; - const settings = this.props.settings.get('settings') && this.props.settings.get('settings'); + const languageDictionary = this.props.languageDictionary ? this.props.languageDictionary.toJS() : {}; + const settings = this.props.settings.get('settings') && this.props.settings.get('settings').toJS(); const renderCssToggle = !!(settings && settings.css && settings.altcss); if (settingsLoading) { diff --git a/client/containers/Configuration/Configuration.jsx b/client/containers/Configuration/Configuration.jsx index 2527870a3..8e1b5850a 100644 --- a/client/containers/Configuration/Configuration.jsx +++ b/client/containers/Configuration/Configuration.jsx @@ -12,8 +12,8 @@ import getErrorMessage from '../../utils/getErrorMessage'; export default connectContainer(class extends Component { static stateToProps = (state) => ({ scripts: state.scripts, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, - languageDictionary: state.languageDictionary && state.languageDictionary.get('record') + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, + languageDictionary: state.languageDictionary && state.languageDictionary.get('record').toJS() }); static actionsToProps = { @@ -48,7 +48,7 @@ export default connectContainer(class extends Component { componentWillReceiveProps(nextProps) { if (nextProps.scripts) { const code = this.state.code; - const scripts = nextProps.scripts; + const scripts = nextProps.scripts.toJS(); Object.keys(scripts).forEach(scriptName => { if (!code[scriptName]) { code[scriptName] = scripts[scriptName].script; @@ -84,7 +84,7 @@ export default connectContainer(class extends Component { render() { const code = this.state.code; - const scripts = this.props.scripts; + const scripts = this.props.scripts.toJS(); const { languageDictionary, settings } = this.props; const originalTitle = (settings.dict && settings.dict.title) || window.config.TITLE || 'User Management'; document.title = `${languageDictionary.configurationMenuItemText || 'Configuration'} - ${originalTitle}`; diff --git a/client/containers/Login.jsx b/client/containers/Login.jsx index 6418c04b6..43a311972 100644 --- a/client/containers/Login.jsx +++ b/client/containers/Login.jsx @@ -17,21 +17,8 @@ class LoginContainer extends Component { componentWillMount() { if (this.props.auth.isAuthenticated) { - console.log(` - isAuthenticated: ${this.props.auth.isAuthenticated}, - pushing to ${this.props.auth.returnTo || '/users'} - `); - this.props.push(this.props.auth.returnTo || '/users'); } else if (!this.props.auth.isAuthenticating && !this.props.auth.error) { - - console.log(` - isAuthenticated: ${this.props.auth.isAuthenticated}, - isAuthenticating: ${this.props.auth.isAuthenticating}, - error: ${this.props.auth.error}, - pushing to login - `); - // reset the local storage for locale this.props.login(this.props.location.query.returnUrl, window.config.LOCALE || 'en'); } @@ -77,8 +64,8 @@ class LoginContainer extends Component { function mapStateToProps(state) { return { - auth: state.auth, - languageDictionary: state.languageDictionary.get('record') + auth: state.auth.toJS(), + languageDictionary: state.languageDictionary.get('record').toJS() }; } diff --git a/client/containers/Logs.jsx b/client/containers/Logs.jsx index 6735d774a..13524a27f 100644 --- a/client/containers/Logs.jsx +++ b/client/containers/Logs.jsx @@ -108,8 +108,8 @@ function mapStateToProps(state) { error: state.log.get('error'), loading: state.log.get('loading') }, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, - languageDictionary: state.languageDictionary.get('record') + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, + languageDictionary: state.languageDictionary.get('record').toJS() }; } diff --git a/client/containers/RequireAuthentication.jsx b/client/containers/RequireAuthentication.jsx index 24e80ac06..09def2aa8 100644 --- a/client/containers/RequireAuthentication.jsx +++ b/client/containers/RequireAuthentication.jsx @@ -21,21 +21,10 @@ export default function RequireAuthentication(InnerComponent) { } requireAuthentication() { - - console.log({ - isAuthenticated: this.props.auth.isAuthenticated, - isAuthenticating: this.props.auth.isAuthenticating - }) - - if (!this.props.auth.isAuthenticated && !this.props.auth.isAuthenticating) { if (!this.props.location) { - console.log('pushing to login'); - this.props.push('/login'); } else { - - console.log(`pushing to login with return url: ${this.props.location.pathname}${this.props.location.search ? this.props.location.search : ''}`); this.props.push(`/login?returnUrl=${this.props.location.pathname}${this.props.location.search ? this.props.location.search : ''}`); } } @@ -44,8 +33,7 @@ export default function RequireAuthentication(InnerComponent) { } render() { - // if (this.props.auth.isAuthenticated) { - if (true) { + if (this.props.auth.isAuthenticated) { return ; } @@ -53,5 +41,5 @@ export default function RequireAuthentication(InnerComponent) { } } - return connect((state) => ({ auth: state.auth }), { push })(RequireAuthenticationContainer); + return connect((state) => ({ auth: state.auth.toJS() }), { push })(RequireAuthenticationContainer); } diff --git a/client/containers/Users/Dialogs/BlockDialog.jsx b/client/containers/Users/Dialogs/BlockDialog.jsx index 293aed836..522ecd528 100644 --- a/client/containers/Users/Dialogs/BlockDialog.jsx +++ b/client/containers/Users/Dialogs/BlockDialog.jsx @@ -11,7 +11,7 @@ import getErrorMessage from '../../../utils/getErrorMessage'; export default connectContainer(class extends Component { static stateToProps = (state) => ({ block: state.block, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -38,11 +38,11 @@ export default connectContainer(class extends Component { render() { const { cancelBlockUser, settings } = this.props; - const { user, error, requesting, loading } = this.props.block; + const { user, error, requesting, loading } = this.props.block.toJS(); const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.blockDialogMessage || 'Do you really want to block {username}? ' + diff --git a/client/containers/Users/Dialogs/CreateDialog.jsx b/client/containers/Users/Dialogs/CreateDialog.jsx index 56c6c87e6..03f3a5cc4 100644 --- a/client/containers/Users/Dialogs/CreateDialog.jsx +++ b/client/containers/Users/Dialogs/CreateDialog.jsx @@ -44,15 +44,15 @@ export default connectContainer(class extends Component { } onSubmit = (user) => { - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); this.props.createUser(user, languageDictionary); }; render() { - const { error, loading, record } = this.props.userCreate; - const connections = this.props.connections; - const accessLevel = this.props.accessLevel.get('record'); - const languageDictionary = this.props.languageDictionary.get('record'); + const { error, loading, record } = this.props.userCreate.toJS(); + const connections = this.props.connections.toJS(); + const accessLevel = this.props.accessLevel.get('record').toJS(); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); return ( diff --git a/client/containers/Users/Dialogs/DeleteDialog.jsx b/client/containers/Users/Dialogs/DeleteDialog.jsx index 9215b4693..6e08c08f8 100644 --- a/client/containers/Users/Dialogs/DeleteDialog.jsx +++ b/client/containers/Users/Dialogs/DeleteDialog.jsx @@ -11,7 +11,7 @@ import getErrorMessage from '../../../utils/getErrorMessage'; export default connectContainer(class extends Component { static stateToProps = (state) => ({ userDelete: state.userDelete, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -37,10 +37,10 @@ export default connectContainer(class extends Component { render() { const { cancelDeleteUser, settings } = this.props; - const { user, error, requesting, loading } = this.props.userDelete; + const { user, error, requesting, loading } = this.props.userDelete.toJS(); const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.deleteDialogMessage || 'Do you really want to delete {username}? ' + diff --git a/client/containers/Users/Dialogs/EmailChangeDialog.jsx b/client/containers/Users/Dialogs/EmailChangeDialog.jsx index 6b3f389b5..c6d71d8b0 100644 --- a/client/containers/Users/Dialogs/EmailChangeDialog.jsx +++ b/client/containers/Users/Dialogs/EmailChangeDialog.jsx @@ -17,7 +17,7 @@ export default connectContainer(class extends Component { static stateToProps = (state) => ({ connections: state.connections, emailChange: state.emailChange, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -43,18 +43,18 @@ export default connectContainer(class extends Component { }; onSubmit = (emailForm) => { - const { user } = this.props.emailChange; + const { user } = this.props.emailChange.toJS(); - this.props.changeEmail(user, emailForm, this.props.languageDictionary.get('record')); + this.props.changeEmail(user, emailForm, this.props.languageDictionary.get('record').toJS()); }; render() { const { cancelEmailChange, settings, connections } = this.props; - const { user, connection, error, requesting, loading } = this.props.emailChange; + const { user, connection, error, requesting, loading } = this.props.emailChange.toJS(); const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.changeEmailMessage || 'Do you really want to change the email for {username}?'; @@ -63,7 +63,7 @@ export default connectContainer(class extends Component { const fields = _.cloneDeep(userFields) || []; useEmailField(true, fields); - useDisabledConnectionField(true, fields, connection, connections.get('records')); + useDisabledConnectionField(true, fields, connection, connections.get('records').toJS()); const allowedFields = ['email', 'connection']; const filteredFields = _.filter(fields, diff --git a/client/containers/Users/Dialogs/FieldsChangeDialog.jsx b/client/containers/Users/Dialogs/FieldsChangeDialog.jsx index af13d96cc..cb5db9d74 100644 --- a/client/containers/Users/Dialogs/FieldsChangeDialog.jsx +++ b/client/containers/Users/Dialogs/FieldsChangeDialog.jsx @@ -10,7 +10,7 @@ import getErrorMessage from '../../../utils/getErrorMessage'; export default connectContainer(class extends Component { static stateToProps = (state) => ({ fieldsChange: state.fieldsChange, - userId: state.fieldsChange.userId, + userId: state.fieldsChange.toJS().userId, languageDictionary: state.languageDictionary, userForm: state.form }); @@ -44,12 +44,12 @@ export default connectContainer(class extends Component { .uniq() .value(); - this.props.changeFields(this.props.userId, _.pick(user, submitFields), this.props.languageDictionary.get('record')); + this.props.changeFields(this.props.userId, _.pick(user, submitFields), this.props.languageDictionary.get('record').toJS()); } render() { - const { error, loading, record } = this.props.fieldsChange; - const languageDictionary = this.props.languageDictionary.get('record'); + const { error, loading, record } = this.props.fieldsChange.toJS(); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); return ( diff --git a/client/containers/Users/Dialogs/PasswordChangeDialog.jsx b/client/containers/Users/Dialogs/PasswordChangeDialog.jsx index 6049261d6..45769095a 100644 --- a/client/containers/Users/Dialogs/PasswordChangeDialog.jsx +++ b/client/containers/Users/Dialogs/PasswordChangeDialog.jsx @@ -20,7 +20,7 @@ export default connectContainer(class PasswordChangeDialog extends Component { static stateToProps = (state) => ({ connections: state.connections, passwordChange: state.passwordChange, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -45,14 +45,14 @@ export default connectContainer(class PasswordChangeDialog extends Component { }; onSubmit = (changeForm) => { - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); this.props.changePassword(changeForm, languageDictionary); }; render() { const { cancelPasswordChange, settings, connections } = this.props; - const { connection, user, error, requesting, loading } = this.props.passwordChange; + const { connection, user, error, requesting, loading } = this.props.passwordChange.toJS(); const userFields = settings.userFields || []; @@ -60,7 +60,7 @@ export default connectContainer(class PasswordChangeDialog extends Component { return null; } - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.changePasswordMessage || 'Do you really want to reset the password for {username}? ' + 'You\'ll need a safe way to communicate the new password to your user, never send the user this' + @@ -70,7 +70,7 @@ export default connectContainer(class PasswordChangeDialog extends Component { const fields = _.cloneDeep(userFields) || []; usePasswordFields(true, fields); - useDisabledConnectionField(true, fields, connection, connections.get('records')); + useDisabledConnectionField(true, fields, connection, connections.get('records').toJS()); useDisabledEmailField(true, fields); const allowedFields = ['email', 'connection', 'password', 'repeatPassword']; diff --git a/client/containers/Users/Dialogs/PasswordResetDialog.jsx b/client/containers/Users/Dialogs/PasswordResetDialog.jsx index 0b9a682e1..909483f1d 100644 --- a/client/containers/Users/Dialogs/PasswordResetDialog.jsx +++ b/client/containers/Users/Dialogs/PasswordResetDialog.jsx @@ -23,7 +23,7 @@ export default connectContainer(class extends Component { connections: state.connections, passwordReset: state.passwordReset, appsForConnection: getAppsForConnection(state), - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -57,14 +57,14 @@ export default connectContainer(class extends Component { render() { const { cancelPasswordReset, settings, connections } = this.props; - const { connection, user, error, requesting, loading } = this.props.passwordReset; + const { connection, user, error, requesting, loading } = this.props.passwordReset.toJS(); if (!requesting) { return null; } const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.resetPasswordMessage || 'Do you really want to reset the password for {username}? '+ @@ -73,8 +73,8 @@ export default connectContainer(class extends Component { getName(user, userFields, languageDictionary)); const fields = _.cloneDeep(userFields) || []; - useClientField(true, fields, this.props.appsForConnection); - useDisabledConnectionField(true, fields, connection, connections.get('records')); + useClientField(true, fields, this.props.appsForConnection.toJS()); + useDisabledConnectionField(true, fields, connection, connections.get('records').toJS()); useDisabledEmailField(true, fields); const allowedFields = ['email', 'client', 'connection']; @@ -98,7 +98,7 @@ export default connectContainer(class extends Component { {message}

({ removeBlockedIPs: state.removeBlockedIPs, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -37,11 +37,11 @@ export default connectContainer(class extends Component { render() { const { cancelRemoveBlocks, settings } = this.props; - const { user, error, requesting, loading } = this.props.removeBlockedIPs; + const { user, error, requesting, loading } = this.props.removeBlockedIPs.toJS(); const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.removeBlockedIPsDialogMessage || 'Do you really want to remove all Anomaly Detection blocks from {username}? ' + diff --git a/client/containers/Users/Dialogs/RemoveMultiFactorDialog.jsx b/client/containers/Users/Dialogs/RemoveMultiFactorDialog.jsx index 3ae2a5717..098db2404 100644 --- a/client/containers/Users/Dialogs/RemoveMultiFactorDialog.jsx +++ b/client/containers/Users/Dialogs/RemoveMultiFactorDialog.jsx @@ -15,7 +15,7 @@ import getErrorMessage from '../../../utils/getErrorMessage'; export default connectContainer(class extends Component { static stateToProps = (state) => ({ mfa: state.mfa, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -45,9 +45,9 @@ export default connectContainer(class extends Component { render() { const { cancelRemoveMultiFactor, settings } = this.props; - const { user, error, requesting, loading } = this.props.mfa; + const { user, error, requesting, loading } = this.props.mfa.toJS(); const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.removeMultiFactorMessage || 'Do you really want to remove the multi factor authentication settings for {username}? '+ diff --git a/client/containers/Users/Dialogs/ResendVerificationEmailDialog.jsx b/client/containers/Users/Dialogs/ResendVerificationEmailDialog.jsx index 2d0fc3003..5b443144a 100644 --- a/client/containers/Users/Dialogs/ResendVerificationEmailDialog.jsx +++ b/client/containers/Users/Dialogs/ResendVerificationEmailDialog.jsx @@ -11,7 +11,7 @@ import getErrorMessage from '../../../utils/getErrorMessage'; export default connectContainer(class extends Component { static stateToProps = (state) => ({ verificationEmail: state.verificationEmail, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -31,15 +31,15 @@ export default connectContainer(class extends Component { } onConfirm = () => { - this.props.resendVerificationEmail(this.props.verificationEmail.user.user_id); + this.props.resendVerificationEmail(this.props.verificationEmail.toJS().user.user_id); } render() { const { cancelResendVerificationEmail, settings } = this.props; - const { user, error, requesting, loading } = this.props.verificationEmail; + const { user, error, requesting, loading } = this.props.verificationEmail.toJS(); const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.resendVerificationEmailMessage || 'Do you really want to resend verification email to {username}?'; diff --git a/client/containers/Users/Dialogs/UnblockDialog.jsx b/client/containers/Users/Dialogs/UnblockDialog.jsx index e8cab6a09..c8b9cdf30 100644 --- a/client/containers/Users/Dialogs/UnblockDialog.jsx +++ b/client/containers/Users/Dialogs/UnblockDialog.jsx @@ -12,7 +12,7 @@ import getErrorMessage from '../../../utils/getErrorMessage'; export default connectContainer(class extends Component { static stateToProps = (state) => ({ unblock: state.unblock, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, languageDictionary: state.languageDictionary }); @@ -37,11 +37,11 @@ export default connectContainer(class extends Component { render() { const { cancelUnblockUser, settings } = this.props; - const { user, error, requesting, loading } = this.props.unblock; + const { user, error, requesting, loading } = this.props.unblock.toJS(); const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.unblockDialogMessage || 'Do you really want to unblock {username}? ' + diff --git a/client/containers/Users/Dialogs/UsernameChangeDialog.jsx b/client/containers/Users/Dialogs/UsernameChangeDialog.jsx index e01d0a6c1..37abc26f1 100644 --- a/client/containers/Users/Dialogs/UsernameChangeDialog.jsx +++ b/client/containers/Users/Dialogs/UsernameChangeDialog.jsx @@ -14,7 +14,7 @@ import getErrorMessage from '../../../utils/getErrorMessage'; export default connectContainer(class extends Component { static stateToProps = (state) => ({ usernameChange: state.usernameChange, - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, connections: state.connections, languageDictionary: state.languageDictionary }); @@ -41,14 +41,14 @@ export default connectContainer(class extends Component { }; onSubmit = (formData) => { - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); - this.props.changeUsername(this.props.usernameChange.user.user_id, formData, languageDictionary); + this.props.changeUsername(this.props.usernameChange.toJS().user.user_id, formData, languageDictionary); }; render() { const { cancelUsernameChange, connections, settings } = this.props; - const { user, connection, error, requesting, loading } = this.props.usernameChange; + const { user, connection, error, requesting, loading } = this.props.usernameChange.toJS(); if (!requesting) { return null; @@ -56,7 +56,7 @@ export default connectContainer(class extends Component { const userFields = settings.userFields || []; - const languageDictionary = this.props.languageDictionary.get('record'); + const languageDictionary = this.props.languageDictionary.get('record').toJS(); const messageFormat = languageDictionary.changeUsernameMessage || 'Do you really want to change the username for {username}?'; @@ -66,8 +66,8 @@ export default connectContainer(class extends Component { const allowedFields = ['username', 'connection']; const initialValues = mapValues(user, allowedFields, userFields, 'edit', languageDictionary); const fields = _.cloneDeep(userFields) || []; - useUsernameField(true, fields, connections.get('records'), connection, initialValues); - useDisabledConnectionField(true, fields, connection, connections.get('records')); + useUsernameField(true, fields, connections.get('records').toJS(), connection, initialValues); + useDisabledConnectionField(true, fields, connection, connections.get('records').toJS()); const filteredFields = _.filter(fields, field => _.includes(allowedFields, field.property)); diff --git a/client/containers/Users/User.jsx b/client/containers/Users/User.jsx index b544097c0..3ea28ad51 100644 --- a/client/containers/Users/User.jsx +++ b/client/containers/Users/User.jsx @@ -22,8 +22,8 @@ export default connectContainer(class extends Component { log: state.log, logs: state.user.get('logs'), devices: state.user.get('devices'), - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, - languageDictionary: state.languageDictionary.get('record') || {} + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, + languageDictionary: state.languageDictionary.get('record').toJS() || {} }); static actionsToProps = { diff --git a/client/containers/Users/Users.jsx b/client/containers/Users/Users.jsx index 14d3fc40d..da5768b6b 100644 --- a/client/containers/Users/Users.jsx +++ b/client/containers/Users/Users.jsx @@ -66,7 +66,7 @@ class Users extends Component { createUser = () => { this.props.requestCreateUser( - this.props.accessLevel.get('record').get('memberships') && this.props.accessLevel.get('record').get('memberships') + this.props.accessLevel.get('record').get('memberships') && this.props.accessLevel.get('record').get('memberships').toJS() ); }; @@ -159,8 +159,8 @@ function mapStateToProps(state) { userCreateLoading: state.userCreate.get('loading'), validationErrors: state.userCreate.get('validationErrors'), loading: state.users.get('loading'), - users: state.users.get('records'), - connections: state.connections.get('records'), + users: state.users.get('records').toJS(), + connections: state.connections.get('records').toJS(), connectionsLoading: state.connections.get('loading'), total: state.users.get('total'), nextPage: state.users.get('nextPage'), @@ -168,8 +168,8 @@ function mapStateToProps(state) { sortProperty: state.users.get('sortProperty'), sortOrder: state.users.get('sortOrder'), searchValue: state.users.get('searchValue'), - settings: (state.settings.get('record') && state.settings.get('record').settings) || {}, - languageDictionary: state.languageDictionary.get('record') + settings: (state.settings.get('record') && state.settings.get('record').toJS().settings) || {}, + languageDictionary: state.languageDictionary.get('record').toJS() }; } diff --git a/client/reducers/accessLevel.js b/client/reducers/accessLevel.js index f6825201b..bc3dd9759 100644 --- a/client/reducers/accessLevel.js +++ b/client/reducers/accessLevel.js @@ -6,7 +6,7 @@ import createReducer from '../utils/createReducer'; const initialState = { loading: false, error: null, - record: { role: 0, memberships: [], createMemberships: false } + record: fromJS({ role: 0, memberships: [], createMemberships: false }) }; export const accessLevel = createReducer(fromJS(initialState), { // eslint-disable-line import/prefer-default-export diff --git a/client/reducers/applications.js b/client/reducers/applications.js index 78420f3b3..6157a1894 100644 --- a/client/reducers/applications.js +++ b/client/reducers/applications.js @@ -6,7 +6,7 @@ import createReducer from '../utils/createReducer'; const initialState = { loading: false, error: null, - records: [] + records: fromJS([]), }; export const applications = createReducer(fromJS(initialState), { // eslint-disable-line import/prefer-default-export diff --git a/client/reducers/auth.js b/client/reducers/auth.js index 44048e1de..69d2a842c 100644 --- a/client/reducers/auth.js +++ b/client/reducers/auth.js @@ -28,7 +28,7 @@ export const auth = createReducer(fromJS(initialState), { // eslint-disable-line state.merge({ isAuthenticated: true, isAuthenticating: false, - user: action.payload.user, + user: fromJS(action.payload.user), token: action.payload.token, decodedToken: action.payload.decodedToken, issuer: new URL(action.payload.decodedToken.iss).hostname, diff --git a/client/reducers/block.js b/client/reducers/block.js index b64d594a3..34e2893b9 100644 --- a/client/reducers/block.js +++ b/client/reducers/block.js @@ -13,7 +13,7 @@ const initialState = { export const block = createReducer(fromJS(initialState), { // eslint-disable-line import/prefer-default-export [constants.REQUEST_BLOCK_USER]: (state, action) => state.merge({ - user: action.user, + user: fromJS(action.user), requesting: true }), [constants.CANCEL_BLOCK_USER]: (state) => diff --git a/client/reducers/connections.js b/client/reducers/connections.js index c56238d19..1d3f064c5 100644 --- a/client/reducers/connections.js +++ b/client/reducers/connections.js @@ -6,7 +6,7 @@ import createReducer from '../utils/createReducer'; const initialState = { loading: false, error: null, - records: [] + records: fromJS([]) }; export const connections = createReducer(fromJS(initialState), { // eslint-disable-line import/prefer-default-export diff --git a/client/reducers/languageDictionary.js b/client/reducers/languageDictionary.js index 74f765f69..2361aa93f 100644 --- a/client/reducers/languageDictionary.js +++ b/client/reducers/languageDictionary.js @@ -5,7 +5,7 @@ import createReducer from '../utils/createReducer'; const initialState = { loading: false, error: null, - record: { } + record: fromJS({}) }; export const languageDictionary = createReducer(fromJS(initialState), { // eslint-disable-line diff --git a/client/reducers/logs.js b/client/reducers/logs.js index 286cf6419..c6d866910 100644 --- a/client/reducers/logs.js +++ b/client/reducers/logs.js @@ -6,7 +6,7 @@ import createReducer from '../utils/createReducer'; const initialState = { loading: false, error: null, - records: [], + records: fromJS([]), currentRecord: null }; @@ -15,7 +15,7 @@ export const logs = createReducer(fromJS(initialState), { // eslint-disable-line state.merge({ ...initialState, loading: true, - records: action.meta.page === 0 ? [] : state.get('records') + records: fromJS(action.meta.page === 0 ? [] : state.get('records')), }), [constants.FETCH_LOGS_REJECTED]: (state, action) => state.merge({ @@ -27,7 +27,7 @@ export const logs = createReducer(fromJS(initialState), { // eslint-disable-line return state.merge({ loading: false, nextPage: action.meta.page + 1, - records: state.get('records').concat(fromJS(data.map(log => { + records: fromJS(state.get('records').concat(fromJS(data.map(log => { log.shortType = log.type; log.type = logTypes[log.type]; if (!log.type) { @@ -40,7 +40,7 @@ export const logs = createReducer(fromJS(initialState), { // eslint-disable-line }; } return log; - }))) + })))) }); } }); diff --git a/client/reducers/settings.js b/client/reducers/settings.js index 09b61110c..42ae5f96d 100644 --- a/client/reducers/settings.js +++ b/client/reducers/settings.js @@ -6,7 +6,7 @@ import createReducer from '../utils/createReducer'; const initialState = { loading: false, error: null, - record: { settings: { dict: { title: '', memberships: '' }, userFields: [], css: '' } } + record: fromJS({ settings: { dict: { title: '', memberships: '' }, userFields: [], css: '' } }) }; const parseFunction = (property, attribute, functionString) => { diff --git a/client/reducers/user.js b/client/reducers/user.js index f502fe852..177e5fd42 100644 --- a/client/reducers/user.js +++ b/client/reducers/user.js @@ -9,18 +9,18 @@ const initialState = { loading: false, error: null, userId: null, - record: { }, - memberships: [], - connection: {}, + record: fromJS({ }), + memberships: fromJS([]), + connection: fromJS({}), logs: { loading: false, error: null, - records: [] + records: fromJS([]) }, devices: { loading: false, error: null, - records: { } + records: fromJS({ }) } }; diff --git a/client/reducers/users.js b/client/reducers/users.js index 398792ff8..46d8bf20f 100644 --- a/client/reducers/users.js +++ b/client/reducers/users.js @@ -7,7 +7,7 @@ import createReducer from '../utils/createReducer'; const initialState = { loading: false, error: null, - records: [], + records: fromJS([]), total: 0, currentPage: 1, pages: 1, @@ -22,7 +22,7 @@ export const users = createReducer(fromJS(initialState), { // eslint-disable-lin state.merge({ ...initialState, loading: true, - records: action.meta.page === 0 ? [] : state.get('records'), + records: action.meta.page === 0 ? fromJS([]) : state.get('records'), pages: action.meta.page === 0 ? 1 : state.get('pages'), searchValue: action.meta.searchValue, sortProperty: action.meta.sortProperty, diff --git a/package-lock.json b/package-lock.json index a804d9208..01400042e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18564,8 +18564,6 @@ }, "node_modules/nyc/node_modules/align-text": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "inBundle": true, "license": "MIT", @@ -18581,8 +18579,6 @@ }, "node_modules/nyc/node_modules/amdefine": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true, "inBundle": true, "license": "BSD-3-Clause OR MIT", @@ -18592,8 +18588,6 @@ }, "node_modules/nyc/node_modules/ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, "inBundle": true, "license": "MIT", @@ -18603,8 +18597,6 @@ }, "node_modules/nyc/node_modules/append-transform": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "inBundle": true, "license": "MIT", @@ -18617,16 +18609,12 @@ }, "node_modules/nyc/node_modules/archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, "inBundle": true, "license": "MIT", @@ -18636,24 +18624,18 @@ }, "node_modules/nyc/node_modules/async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, "license": "MIT", @@ -18664,8 +18646,6 @@ }, "node_modules/nyc/node_modules/builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true, "inBundle": true, "license": "MIT", @@ -18675,8 +18655,6 @@ }, "node_modules/nyc/node_modules/caching-transform": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-2.0.0.tgz", - "integrity": "sha512-tTfemGmFWe7KZ3KN6VsSgQZbd9Bgo7A40wlp4PTsJJvFu4YAnEC5YnfdiKq6Vh2i9XJLnA9n8OXD46orVpnPMw==", "dev": true, "inBundle": true, "license": "MIT", @@ -18692,8 +18670,6 @@ }, "node_modules/nyc/node_modules/camelcase": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true, "inBundle": true, "license": "MIT", @@ -18704,8 +18680,6 @@ }, "node_modules/nyc/node_modules/center-align": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "inBundle": true, "license": "MIT", @@ -18720,8 +18694,6 @@ }, "node_modules/nyc/node_modules/cliui": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "inBundle": true, "license": "ISC", @@ -18734,8 +18706,6 @@ }, "node_modules/nyc/node_modules/cliui/node_modules/wordwrap": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true, "inBundle": true, "license": "MIT/X11", @@ -18746,8 +18716,6 @@ }, "node_modules/nyc/node_modules/code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "inBundle": true, "license": "MIT", @@ -18757,24 +18725,18 @@ }, "node_modules/nyc/node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/convert-source-map": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "inBundle": true, "license": "MIT", @@ -18784,8 +18746,6 @@ }, "node_modules/nyc/node_modules/cross-spawn": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "inBundle": true, "license": "MIT", @@ -18796,8 +18756,6 @@ }, "node_modules/nyc/node_modules/debug": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "inBundle": true, "license": "MIT", @@ -18807,8 +18765,6 @@ }, "node_modules/nyc/node_modules/debug-log": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", "dev": true, "inBundle": true, "license": "MIT", @@ -18818,8 +18774,6 @@ }, "node_modules/nyc/node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "inBundle": true, "license": "MIT", @@ -18829,8 +18783,6 @@ }, "node_modules/nyc/node_modules/default-require-extensions": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "inBundle": true, "license": "MIT", @@ -18843,8 +18795,6 @@ }, "node_modules/nyc/node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "inBundle": true, "license": "MIT", @@ -18854,16 +18804,12 @@ }, "node_modules/nyc/node_modules/es6-error": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/execa": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "inBundle": true, "license": "MIT", @@ -18882,8 +18828,6 @@ }, "node_modules/nyc/node_modules/execa/node_modules/cross-spawn": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "inBundle": true, "license": "MIT", @@ -18895,8 +18839,6 @@ }, "node_modules/nyc/node_modules/find-cache-dir": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "inBundle": true, "license": "MIT", @@ -18911,8 +18853,6 @@ }, "node_modules/nyc/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "inBundle": true, "license": "MIT", @@ -18925,8 +18865,6 @@ }, "node_modules/nyc/node_modules/foreground-child": { "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "inBundle": true, "license": "ISC", @@ -18937,24 +18875,18 @@ }, "node_modules/nyc/node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/get-caller-file": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true, "inBundle": true, "license": "MIT", @@ -18964,8 +18896,6 @@ }, "node_modules/nyc/node_modules/glob": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -18983,8 +18913,6 @@ }, "node_modules/nyc/node_modules/graceful-fs": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true, "inBundle": true, "license": "ISC", @@ -18994,8 +18922,6 @@ }, "node_modules/nyc/node_modules/handlebars": { "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "inBundle": true, "license": "MIT", @@ -19016,8 +18942,6 @@ }, "node_modules/nyc/node_modules/handlebars/node_modules/source-map": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19030,8 +18954,6 @@ }, "node_modules/nyc/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "inBundle": true, "license": "MIT", @@ -19041,16 +18963,12 @@ }, "node_modules/nyc/node_modules/hosted-git-info": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "inBundle": true, "license": "MIT", @@ -19060,8 +18978,6 @@ }, "node_modules/nyc/node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "inBundle": true, "license": "ISC", @@ -19072,16 +18988,12 @@ }, "node_modules/nyc/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/invert-kv": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true, "inBundle": true, "license": "MIT", @@ -19091,16 +19003,12 @@ }, "node_modules/nyc/node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true, "inBundle": true, "license": "MIT", @@ -19108,8 +19016,6 @@ }, "node_modules/nyc/node_modules/is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "inBundle": true, "license": "MIT", @@ -19122,8 +19028,6 @@ }, "node_modules/nyc/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "inBundle": true, "license": "MIT", @@ -19133,8 +19037,6 @@ }, "node_modules/nyc/node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true, "inBundle": true, "license": "MIT", @@ -19144,16 +19046,12 @@ }, "node_modules/nyc/node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/istanbul-lib-coverage": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19163,8 +19061,6 @@ }, "node_modules/nyc/node_modules/istanbul-lib-hook": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.1.tgz", - "integrity": "sha512-ufiZoiJ8CxY577JJWEeFuxXZoMqiKpq/RqZtOAYuQLvlkbJWscq9n3gc4xrCGH9n4pW0qnTxOz1oyMmVtk8E1w==", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19177,8 +19073,6 @@ }, "node_modules/nyc/node_modules/istanbul-lib-report": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.2.tgz", - "integrity": "sha512-rJ8uR3peeIrwAxoDEbK4dJ7cqqtxBisZKCuwkMtMv0xYzaAnsAi3AHrHPAAtNXzG/bcCgZZ3OJVqm1DTi9ap2Q==", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19193,8 +19087,6 @@ }, "node_modules/nyc/node_modules/istanbul-lib-source-maps": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-2.0.1.tgz", - "integrity": "sha512-30l40ySg+gvBLcxTrLzR4Z2XTRj3HgRCA/p2rnbs/3OiTaoj054gAbuP5DcLOtwqmy4XW8qXBHzrmP2/bQ9i3A==", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19211,8 +19103,6 @@ }, "node_modules/nyc/node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19222,8 +19112,6 @@ }, "node_modules/nyc/node_modules/istanbul-reports": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.0.1.tgz", - "integrity": "sha512-CT0QgMBJqs6NJLF678ZHcquUAZIoBIUNzdJrRJfpkI9OnzG6MkUfHxbJC3ln981dMswC7/B1mfX3LNkhgJxsuw==", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19236,16 +19124,12 @@ }, "node_modules/nyc/node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "inBundle": true, "license": "MIT", @@ -19259,8 +19143,6 @@ }, "node_modules/nyc/node_modules/lazy-cache": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true, "inBundle": true, "license": "MIT", @@ -19271,8 +19153,6 @@ }, "node_modules/nyc/node_modules/lcid": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "inBundle": true, "license": "MIT", @@ -19285,8 +19165,6 @@ }, "node_modules/nyc/node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "inBundle": true, "license": "MIT", @@ -19302,8 +19180,6 @@ }, "node_modules/nyc/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "inBundle": true, "license": "MIT", @@ -19317,16 +19193,12 @@ }, "node_modules/nyc/node_modules/lodash.flattendeep": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/longest": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true, "inBundle": true, "license": "MIT", @@ -19337,8 +19209,6 @@ }, "node_modules/nyc/node_modules/lru-cache": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "inBundle": true, "license": "ISC", @@ -19349,8 +19219,6 @@ }, "node_modules/nyc/node_modules/make-dir": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -19363,8 +19231,6 @@ }, "node_modules/nyc/node_modules/md5-hex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-2.0.0.tgz", - "integrity": "sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM=", "dev": true, "inBundle": true, "license": "MIT", @@ -19377,15 +19243,11 @@ }, "node_modules/nyc/node_modules/md5-o-matic": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", - "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", "dev": true, "inBundle": true }, "node_modules/nyc/node_modules/mem": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "inBundle": true, "license": "MIT", @@ -19398,8 +19260,6 @@ }, "node_modules/nyc/node_modules/merge-source-map": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "inBundle": true, "license": "MIT", @@ -19409,8 +19269,6 @@ }, "node_modules/nyc/node_modules/merge-source-map/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19420,8 +19278,6 @@ }, "node_modules/nyc/node_modules/mimic-fn": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -19431,8 +19287,6 @@ }, "node_modules/nyc/node_modules/minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "inBundle": true, "license": "ISC", @@ -19445,16 +19299,12 @@ }, "node_modules/nyc/node_modules/minimist": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "inBundle": true, "license": "MIT", @@ -19467,24 +19317,18 @@ }, "node_modules/nyc/node_modules/mkdirp/node_modules/minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/normalize-package-data": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -19497,8 +19341,6 @@ }, "node_modules/nyc/node_modules/npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "inBundle": true, "license": "MIT", @@ -19511,8 +19353,6 @@ }, "node_modules/nyc/node_modules/number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "inBundle": true, "license": "MIT", @@ -19522,8 +19362,6 @@ }, "node_modules/nyc/node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "inBundle": true, "license": "ISC", @@ -19533,8 +19371,6 @@ }, "node_modules/nyc/node_modules/optimist": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "inBundle": true, "license": "MIT/X11", @@ -19545,8 +19381,6 @@ }, "node_modules/nyc/node_modules/os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "inBundle": true, "license": "MIT", @@ -19556,8 +19390,6 @@ }, "node_modules/nyc/node_modules/os-locale": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "inBundle": true, "license": "MIT", @@ -19572,8 +19404,6 @@ }, "node_modules/nyc/node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, "inBundle": true, "license": "MIT", @@ -19583,8 +19413,6 @@ }, "node_modules/nyc/node_modules/p-limit": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "inBundle": true, "license": "MIT", @@ -19597,8 +19425,6 @@ }, "node_modules/nyc/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -19611,8 +19437,6 @@ }, "node_modules/nyc/node_modules/p-try": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -19622,8 +19446,6 @@ }, "node_modules/nyc/node_modules/package-hash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-2.0.0.tgz", - "integrity": "sha1-eK4ybIngWk2BO2hgGXevBcANKg0=", "dev": true, "inBundle": true, "license": "ISC", @@ -19639,8 +19461,6 @@ }, "node_modules/nyc/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "inBundle": true, "license": "MIT", @@ -19654,8 +19474,6 @@ }, "node_modules/nyc/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "inBundle": true, "license": "MIT", @@ -19665,8 +19483,6 @@ }, "node_modules/nyc/node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "inBundle": true, "license": "MIT", @@ -19676,8 +19492,6 @@ }, "node_modules/nyc/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, "inBundle": true, "license": "MIT", @@ -19687,8 +19501,6 @@ }, "node_modules/nyc/node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "inBundle": true, "license": "MIT", @@ -19701,8 +19513,6 @@ }, "node_modules/nyc/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "inBundle": true, "license": "MIT", @@ -19712,8 +19522,6 @@ }, "node_modules/nyc/node_modules/pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "inBundle": true, "license": "MIT", @@ -19726,16 +19534,12 @@ }, "node_modules/nyc/node_modules/pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/read-pkg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "inBundle": true, "license": "MIT", @@ -19750,8 +19554,6 @@ }, "node_modules/nyc/node_modules/read-pkg-up": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "inBundle": true, "license": "MIT", @@ -19765,8 +19567,6 @@ }, "node_modules/nyc/node_modules/release-zalgo": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "inBundle": true, "license": "ISC", @@ -19779,8 +19579,6 @@ }, "node_modules/nyc/node_modules/repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true, "inBundle": true, "license": "MIT", @@ -19791,8 +19589,6 @@ }, "node_modules/nyc/node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "inBundle": true, "license": "MIT", @@ -19802,16 +19598,12 @@ }, "node_modules/nyc/node_modules/require-main-filename": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "inBundle": true, "license": "MIT", @@ -19821,8 +19613,6 @@ }, "node_modules/nyc/node_modules/right-align": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "inBundle": true, "license": "MIT", @@ -19836,8 +19626,6 @@ }, "node_modules/nyc/node_modules/rimraf": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "inBundle": true, "license": "ISC", @@ -19850,16 +19638,12 @@ }, "node_modules/nyc/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/nyc/node_modules/semver": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "inBundle": true, "license": "ISC", @@ -19869,16 +19653,12 @@ }, "node_modules/nyc/node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "inBundle": true, "license": "MIT", @@ -19891,8 +19671,6 @@ }, "node_modules/nyc/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "inBundle": true, "license": "MIT", @@ -19902,16 +19680,12 @@ }, "node_modules/nyc/node_modules/signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -19922,8 +19696,6 @@ }, "node_modules/nyc/node_modules/spawn-wrap": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", - "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", "dev": true, "inBundle": true, "license": "ISC", @@ -19938,8 +19710,6 @@ }, "node_modules/nyc/node_modules/spdx-correct": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -19950,16 +19720,12 @@ }, "node_modules/nyc/node_modules/spdx-exceptions": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/nyc/node_modules/spdx-expression-parse": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "inBundle": true, "license": "MIT", @@ -19970,16 +19736,12 @@ }, "node_modules/nyc/node_modules/spdx-license-ids": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/nyc/node_modules/string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "inBundle": true, "license": "MIT", @@ -19993,8 +19755,6 @@ }, "node_modules/nyc/node_modules/strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "inBundle": true, "license": "MIT", @@ -20007,8 +19767,6 @@ }, "node_modules/nyc/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "inBundle": true, "license": "MIT", @@ -20018,8 +19776,6 @@ }, "node_modules/nyc/node_modules/strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true, "inBundle": true, "license": "MIT", @@ -20029,8 +19785,6 @@ }, "node_modules/nyc/node_modules/supports-color": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "inBundle": true, "license": "MIT", @@ -20043,8 +19797,6 @@ }, "node_modules/nyc/node_modules/test-exclude": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.0.0.tgz", - "integrity": "sha512-bO3Lj5+qFa9YLfYW2ZcXMOV1pmQvw+KS/DpjqhyX6Y6UZ8zstpZJ+mA2ERkXfpOqhxsJlQiLeVXD3Smsrs6oLw==", "dev": true, "inBundle": true, "license": "ISC", @@ -20060,8 +19812,6 @@ }, "node_modules/nyc/node_modules/uglify-js": { "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -20082,8 +19832,6 @@ }, "node_modules/nyc/node_modules/uglify-js/node_modules/yargs": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "inBundle": true, "license": "MIT", @@ -20097,8 +19845,6 @@ }, "node_modules/nyc/node_modules/uglify-to-browserify": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "dev": true, "inBundle": true, "license": "MIT", @@ -20106,8 +19852,6 @@ }, "node_modules/nyc/node_modules/uuid": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true, "inBundle": true, "license": "MIT", @@ -20117,8 +19861,6 @@ }, "node_modules/nyc/node_modules/validate-npm-package-license": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -20129,8 +19871,6 @@ }, "node_modules/nyc/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -20143,16 +19883,12 @@ }, "node_modules/nyc/node_modules/which-module": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/window-size": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "dev": true, "inBundle": true, "optional": true, @@ -20162,8 +19898,6 @@ }, "node_modules/nyc/node_modules/wordwrap": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true, "inBundle": true, "license": "MIT", @@ -20173,8 +19907,6 @@ }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "inBundle": true, "license": "MIT", @@ -20188,8 +19920,6 @@ }, "node_modules/nyc/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "inBundle": true, "license": "MIT", @@ -20199,8 +19929,6 @@ }, "node_modules/nyc/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "inBundle": true, "license": "MIT", @@ -20213,8 +19941,6 @@ }, "node_modules/nyc/node_modules/wrap-ansi/node_modules/string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "inBundle": true, "license": "MIT", @@ -20229,8 +19955,6 @@ }, "node_modules/nyc/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "inBundle": true, "license": "MIT", @@ -20243,16 +19967,12 @@ }, "node_modules/nyc/node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/write-file-atomic": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "inBundle": true, "license": "ISC", @@ -20264,24 +19984,18 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "inBundle": true, "license": "MIT", @@ -20302,8 +20016,6 @@ }, "node_modules/nyc/node_modules/yargs-parser": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "inBundle": true, "license": "ISC", @@ -20313,8 +20025,6 @@ }, "node_modules/nyc/node_modules/yargs-parser/node_modules/camelcase": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true, "inBundle": true, "license": "MIT", @@ -20324,8 +20034,6 @@ }, "node_modules/nyc/node_modules/yargs/node_modules/cliui": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -20337,8 +20045,6 @@ }, "node_modules/nyc/node_modules/yargs/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "inBundle": true, "license": "MIT", @@ -20351,8 +20057,6 @@ }, "node_modules/nyc/node_modules/yargs/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "inBundle": true, "license": "MIT", @@ -20366,8 +20070,6 @@ }, "node_modules/nyc/node_modules/yargs/node_modules/p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "inBundle": true, "license": "MIT", @@ -20380,8 +20082,6 @@ }, "node_modules/nyc/node_modules/yargs/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "inBundle": true, "license": "MIT", @@ -20394,8 +20094,6 @@ }, "node_modules/nyc/node_modules/yargs/node_modules/p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true, "inBundle": true, "license": "MIT", diff --git a/server/lib/multipartRequest.js b/server/lib/multipartRequest.js index 58740ce9f..086027ba6 100644 --- a/server/lib/multipartRequest.js +++ b/server/lib/multipartRequest.js @@ -28,7 +28,7 @@ export default function(client, entity, opts = {}, fetchOptions = {} ) { // if the total exceeds the limit, don't fetch any more connections from api2 // we get some from the initial request to get totals, but we'll ignore them - if (limit && (total > limit)) { + if (limit && (total > limit)) { pageCount = 1; return null; } @@ -39,12 +39,9 @@ export default function(client, entity, opts = {}, fetchOptions = {} ) { }); const getPage = (page) => - // the node-auth0 lib has been rewritten and not uses classes so we can't store the - // getter method in a variable and then call it as function, we need to call it directly client[entity].getAll({ ...options, page }) .then((data) => { data.forEach(item => result.push(item)); - console.log({ result }); return null; }); @@ -54,7 +51,7 @@ export default function(client, entity, opts = {}, fetchOptions = {} ) { // the number of connections exceeds the limit we can handle: // - don't return any to the frontend // - will use a free text box in the user creation dialogue - if (limit && (total > limit)) { + if (limit && (total > limit)) { return result; } diff --git a/server/routes/api.js b/server/routes/api.js index e60a7a84e..72b5c29e0 100644 --- a/server/routes/api.js +++ b/server/routes/api.js @@ -20,12 +20,7 @@ import logs from './logs'; import users from './users'; export default (storage) => { - const scriptManager = new ScriptManager(storage); - - // moving the managementApiClient middleware function here so that it - // can use the new version of the auth0 dep, not the one specified - // by the auth0-extension-express-tools library const managementApiClient = async function (req, res, next) { try { const handlerOptions = { @@ -34,12 +29,6 @@ export default (storage) => { clientSecret: config("AUTH0_CLIENT_SECRET"), }; - console.log({ - domain: config('AUTH0_DOMAIN'), - clientId: config('AUTH0_CLIENT_ID'), - clientSecret: config('AUTH0_CLIENT_SECRET') - }); - const isAdministrator = req.user && req.user.access_token && req.user.access_token.length; const options = !isAdministrator @@ -54,22 +43,15 @@ export default (storage) => { req.auth0 = managementClient; - console.log({ - "req.originalUrl": req.originalUrl, - "typeof req.auth0": typeof req.auth0, - }); - next(); return null; } catch (error) { next(error); } }; - const api = Router(); const getToken = req => _.get(req, 'headers.authorization', '').split(' ')[1]; - console.log({ stage: 5 }); - + const addExtraUserInfo = (token, user) => { global.daeUser = global.daeUser || {}; global.daeUser[user.sub] = global.daeUser[user.sub] || { exp: 0, token: '' }; @@ -86,12 +68,6 @@ export default (storage) => { if (!token) console.error('no token found'); - console.log({ - domain: config('AUTH0_DOMAIN'), - clientId: config('AUTH0_CLIENT_ID'), - clientSecret: config('AUTH0_CLIENT_SECRET') - }); - const promise = tools.managementApi.getClient({ domain: config('AUTH0_DOMAIN'), clientId: config('AUTH0_CLIENT_ID'), @@ -106,20 +82,10 @@ export default (storage) => { return user; }) ); - global.daeUser[user.sub] = promise; - return global.daeUser[user.sub]; }; - console.log({ stage: 8 }); - - console.log({ - "config('AUTH0_CUSTOM_DOMAIN')": config('AUTH0_CUSTOM_DOMAIN'), - "config('AUTH0_DOMAIN')": config('AUTH0_DOMAIN'), - "config('EXTENSION_CLIENT_ID')": config('EXTENSION_CLIENT_ID'), - }) - // Allow end users to authenticate. api.use(middlewares.authenticateUsers.optional({ domain: config('AUTH0_CUSTOM_DOMAIN') || config('AUTH0_DOMAIN'), @@ -129,16 +95,14 @@ export default (storage) => { const currentRequest = req; return addExtraUserInfo(getToken(req), req.user) .then((user) => { - - console.log({ user }); - currentRequest.user = user; - currentRequest.user.scope = getScopes(req.user); + var scopes = getScopes(req.user); + currentRequest.user.scope = scopes; return next(); }) .catch(next); } - }));); + })); // Allow dashboard admins to authenticate. api.use(middlewares.authenticateAdmins.optional({ credentialsRequired: false, @@ -149,9 +113,6 @@ export default (storage) => { const currentRequest = req; return addExtraUserInfo(getToken(req), req.user) .then((user) => { - - console.log({ user }); - currentRequest.user = user; currentRequest.user.scope = [ constants.AUDITOR_PERMISSION, constants.USER_PERMISSION, constants.OPERATOR_PERMISSION, constants.ADMIN_PERMISSION ]; return next(); @@ -167,18 +128,17 @@ export default (storage) => { res.setHeader('Expires', '0'); next(); }); -; api.use((req, res, next) => { const permission = (req.method.toLowerCase() === 'get') ? constants.AUDITOR_PERMISSION : constants.USER_PERMISSION; return requireScope(permission)(req, res, next); - });; - api.use('/applications', managementApiClient, applications());; - api.use('/connections', managementApiClient, connections(scriptManager));; - api.use('/scripts', requireScope(constants.ADMIN_PERMISSION), scripts(storage, scriptManager));; - api.use('/users', managementApiClient, users(storage, scriptManager));; - api.use('/logs', managementApiClient, logs(scriptManager));; - api.use('/me', me(scriptManager));; + }); + api.use('/applications', managementApiClient, applications()); + api.use('/connections', managementApiClient, connections(scriptManager)); + api.use('/scripts', requireScope(constants.ADMIN_PERMISSION), scripts(storage, scriptManager)); + api.use('/users', managementApiClient, users(storage, scriptManager)); + api.use('/logs', managementApiClient, logs(scriptManager)); + api.use('/me', me(scriptManager)); api.get('/settings', (req, res, next) => {; const settingsContext = { request: { @@ -186,13 +146,9 @@ export default (storage) => { }, locale: req.headers['dae-locale'] }; - scriptManager.execute('settings', settingsContext) .then(settings => res.json({ settings: settings || {} })) .catch(next); - }); -; return api; -} -; +}; diff --git a/server/routes/html.js b/server/routes/html.js index fa4240fbc..36a3d6e79 100644 --- a/server/routes/html.js +++ b/server/routes/html.js @@ -41,23 +41,9 @@ export default () => { const getLocale = (req) => { const basePath = urlHelpers.getBasePath(req); - // const pathname = url.parse(req.originalUrl).pathname; - - - logger.log({ level: "info", message: req.originalUrl }); - - // console.log(req); - - const url = new URL(`https://${req.headers.host}${req.originalUrl}`); - const pathname = url.pathname; - - console.log({ - basePath, - "req.originalUrl": req.originalUrl, - "req.headers.host": req.headers.host, - url: url ?? "no url", - pathname: pathname ?? "no pathname", - }); + logger.log({ level: "info", message: req.originalUrl }); + const url = new URL(`https://${req.headers.host}${req.originalUrl}`); + const pathname = url.pathname; const relativePath = pathname.replace(basePath, '').split('/'); const routes = [ 'api', @@ -81,18 +67,9 @@ export default () => { const locale = getLocale(req); const basePath = urlHelpers.getBasePath(req); - console.log({ - locale, - basePath, - }) - - if (req.url.indexOf('/login') !== 0) { res.cookie('dae-locale', locale); if (req.url.indexOf(`/${locale}`) !== 0) { - - console.log(`redirecting to: ${basePath}${locale}${req.url || '/login'}`); - return res.redirect(`${basePath}${locale}${req.url || '/login'}`); } } @@ -115,11 +92,6 @@ export default () => { const clientVersion = process.env.CLIENT_VERSION; const PR_NUMBER = process.env.PR_NUMBER; - console.log({ - clientVersion, - PR_NUMBER - }) - if (clientVersion) { const favIcon = config('FAVICON_PATH') || 'https://cdn.auth0.com/styleguide/4.6.13/lib/logos/img/favicon.png'; const cdnPath = config('CDN_PATH') || (