@@ -45,7 +45,7 @@ module.exports = ({ production = true }) => ({ | |||
require.resolve('./polyfills'), | |||
!production && require.resolve('react-error-overlay'), | |||
'./src/main/js/app/utils/setPublicPath.js', | |||
'./src/main/js/app/index.js' | |||
'./src/main/js/app/index.ts' | |||
].filter(Boolean), | |||
output: { | |||
path: paths.appBuild, | |||
@@ -150,11 +150,5 @@ module.exports = ({ production = true }) => ({ | |||
optimization: { | |||
splitChunks: { chunks: 'all' } | |||
}, | |||
performance: production | |||
? { | |||
hints: 'error', | |||
maxEntrypointSize: 600000, // recommended: 250kb | |||
maxAssetSize: 320000 // recommended: 250kb | |||
} | |||
: undefined | |||
performance: production ? { hints: 'error' } : undefined | |||
}); |
@@ -115,7 +115,7 @@ | |||
"ts-loader": "4.3.0", | |||
"typescript": "2.8.3", | |||
"typescript-eslint-parser": "15.0.0", | |||
"webpack": "4.8.1", | |||
"webpack": "4.15.1", | |||
"webpack-bundle-analyzer": "2.11.2", | |||
"webpack-dev-server": "3.1.4" | |||
}, |
@@ -17,11 +17,11 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
import { getJSON, parseJSON, request } from '../helpers/request'; | |||
import { BranchParameters } from '../app/types'; | |||
import { getJSON } from '../helpers/request'; | |||
import { AppState, BranchParameters } from '../app/types'; | |||
import throwGlobalError from '../app/utils/throwGlobalError'; | |||
export function getGlobalNavigation(): Promise<any> { | |||
export function getGlobalNavigation(): Promise<AppState> { | |||
return getJSON('/api/navigation/global'); | |||
} | |||
@@ -38,18 +38,3 @@ export function getMarketplaceNavigation(): Promise<{ serverId: string; ncloc: n | |||
export function getSettingsNavigation(): Promise<any> { | |||
return getJSON('/api/navigation/settings').catch(throwGlobalError); | |||
} | |||
export function tryGetGlobalNavigation(): Promise<any> { | |||
return request('/api/navigation/global') | |||
.submit() | |||
.then(response => { | |||
if (response.status >= 200 && response.status < 300) { | |||
return parseJSON(response); | |||
} else if (response.status === 401) { | |||
return {}; | |||
} else { | |||
return Promise.reject(response); | |||
} | |||
}) | |||
.catch(response => throwGlobalError({ response }).catch(() => Promise.resolve({}))); | |||
} |
@@ -21,32 +21,32 @@ import * as React from 'react'; | |||
import * as PropTypes from 'prop-types'; | |||
import { connect } from 'react-redux'; | |||
import Helmet from 'react-helmet'; | |||
import GlobalLoading from './GlobalLoading'; | |||
import { CurrentUser } from '../types'; | |||
import { fetchCurrentUser } from '../../store/users/actions'; | |||
import { fetchLanguages, fetchAppState } from '../../store/rootActions'; | |||
import { AppState, CurrentUser } from '../types'; | |||
import { fetchLanguages } from '../../store/rootActions'; | |||
import { fetchMyOrganizations } from '../../apps/account/organizations/actions'; | |||
import { getInstance, isSonarCloud } from '../../helpers/system'; | |||
import { lazyLoad } from '../../components/lazyLoad'; | |||
import { getCurrentUser, getAppState } from '../../store/rootReducer'; | |||
const PageTracker = lazyLoad(() => import('./PageTracker')); | |||
interface Props { | |||
children: JSX.Element; | |||
fetchAppState: () => Promise<any>; | |||
fetchCurrentUser: () => Promise<CurrentUser>; | |||
interface StateProps { | |||
appState: AppState | undefined; | |||
currentUser: CurrentUser | undefined; | |||
} | |||
interface DispatchProps { | |||
fetchLanguages: () => Promise<void>; | |||
fetchMyOrganizations: () => Promise<void>; | |||
} | |||
interface State { | |||
branchesEnabled: boolean; | |||
canAdmin: boolean; | |||
loading: boolean; | |||
organizationsEnabled: boolean; | |||
interface OwnProps { | |||
children: JSX.Element; | |||
} | |||
class App extends React.PureComponent<Props, State> { | |||
type Props = StateProps & DispatchProps & OwnProps; | |||
class App extends React.PureComponent<Props> { | |||
mounted = false; | |||
static childContextTypes = { | |||
@@ -55,66 +55,31 @@ class App extends React.PureComponent<Props, State> { | |||
organizationsEnabled: PropTypes.bool | |||
}; | |||
constructor(props: Props) { | |||
super(props); | |||
this.state = { | |||
branchesEnabled: false, | |||
canAdmin: false, | |||
loading: true, | |||
organizationsEnabled: false | |||
}; | |||
} | |||
getChildContext() { | |||
const { appState } = this.props; | |||
return { | |||
branchesEnabled: this.state.branchesEnabled, | |||
canAdmin: this.state.canAdmin, | |||
organizationsEnabled: this.state.organizationsEnabled | |||
branchesEnabled: (appState && appState.branchesEnabled) || false, | |||
canAdmin: (appState && appState.canAdmin) || false, | |||
organizationsEnabled: (appState && appState.organizationsEnabled) || false | |||
}; | |||
} | |||
componentDidMount() { | |||
this.mounted = true; | |||
this.props.fetchCurrentUser().then( | |||
currentUser => { | |||
Promise.all([this.fetchAppState(), this.props.fetchLanguages()]).then( | |||
([appState]) => { | |||
if (this.mounted) { | |||
if (appState.organizationsEnabled && currentUser.isLoggedIn) { | |||
this.props.fetchMyOrganizations(); | |||
} | |||
this.setState({ loading: false }); | |||
} | |||
}, | |||
() => {} | |||
); | |||
}, | |||
() => {} | |||
); | |||
this.props.fetchLanguages(); | |||
const { appState, currentUser } = this.props; | |||
if (appState && currentUser) { | |||
if (appState.organizationsEnabled && currentUser.isLoggedIn) { | |||
this.props.fetchMyOrganizations(); | |||
} | |||
} | |||
} | |||
componentWillUnmount() { | |||
this.mounted = false; | |||
} | |||
fetchAppState = () => { | |||
return this.props.fetchAppState().then(appState => { | |||
if (this.mounted) { | |||
this.setState({ | |||
branchesEnabled: appState.branchesEnabled, | |||
canAdmin: appState.canAdmin, | |||
organizationsEnabled: appState.organizationsEnabled | |||
}); | |||
} | |||
return appState; | |||
}); | |||
}; | |||
render() { | |||
if (this.state.loading) { | |||
return <GlobalLoading />; | |||
} | |||
return ( | |||
<> | |||
<Helmet defaultTitle={getInstance()} /> | |||
@@ -125,9 +90,14 @@ class App extends React.PureComponent<Props, State> { | |||
} | |||
} | |||
export default connect(null, { | |||
fetchAppState, | |||
fetchCurrentUser, | |||
const mapStateToProps = (state: any): StateProps => ({ | |||
appState: getAppState(state), | |||
currentUser: getCurrentUser(state) | |||
}); | |||
const mapDispatchToProps = ({ | |||
fetchLanguages, | |||
fetchMyOrganizations | |||
})(App as any); | |||
} as any) as DispatchProps; | |||
export default connect(mapStateToProps, mapDispatchToProps)(App); |
@@ -1,31 +0,0 @@ | |||
/* | |||
* SonarQube | |||
* Copyright (C) 2009-2018 SonarSource SA | |||
* mailto:info AT sonarsource DOT com | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
import * as React from 'react'; | |||
export default function GlobalLoading() { | |||
return ( | |||
<> | |||
<div className="global-loading"> | |||
<i className="spinner global-loading-spinner" /> | |||
<span className="global-loading-text">Loading...</span> | |||
</div> | |||
</> | |||
); | |||
} |
@@ -1,86 +0,0 @@ | |||
/* | |||
* SonarQube | |||
* Copyright (C) 2009-2018 SonarSource SA | |||
* mailto:info AT sonarsource DOT com | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
import * as React from 'react'; | |||
import { addLocaleData, IntlProvider, Locale } from 'react-intl'; | |||
import GlobalLoading from './GlobalLoading'; | |||
import { DEFAULT_LANGUAGE, requestMessages } from '../../helpers/l10n'; | |||
interface Props { | |||
children?: any; | |||
} | |||
interface State { | |||
loading: boolean; | |||
lang?: string; | |||
} | |||
export default class LocalizationContainer extends React.PureComponent<Props, State> { | |||
mounted = false; | |||
state: State = { loading: true }; | |||
componentDidMount() { | |||
this.mounted = true; | |||
requestMessages().then(this.bundleLoaded, this.bundleLoaded); | |||
} | |||
componentWillUnmount() { | |||
this.mounted = false; | |||
} | |||
bundleLoaded = (lang: string) => { | |||
const langToLoad = lang || DEFAULT_LANGUAGE; | |||
// No need to load english (default) bundle, it's coming with react-intl | |||
if (langToLoad !== DEFAULT_LANGUAGE) { | |||
import('react-intl/locale-data/' + langToLoad).then( | |||
intlBundle => this.updateLang(langToLoad, intlBundle), | |||
this.setDefaultLang | |||
); | |||
} else { | |||
this.setDefaultLang(); | |||
} | |||
}; | |||
setDefaultLang = () => { | |||
if (this.mounted) { | |||
this.setState({ loading: false, lang: DEFAULT_LANGUAGE }); | |||
} | |||
}; | |||
updateLang = (lang: string, intlBundle: Locale[]) => { | |||
if (this.mounted) { | |||
addLocaleData(intlBundle); | |||
this.setState({ loading: false, lang }); | |||
} | |||
}; | |||
render() { | |||
if (this.state.loading) { | |||
return <GlobalLoading />; | |||
} | |||
return ( | |||
<IntlProvider | |||
defaultLocale={this.state.lang || DEFAULT_LANGUAGE} | |||
locale={this.state.lang || DEFAULT_LANGUAGE}> | |||
{this.props.children} | |||
</IntlProvider> | |||
); | |||
} | |||
} |
@@ -1,28 +0,0 @@ | |||
/* | |||
* SonarQube | |||
* Copyright (C) 2009-2018 SonarSource SA | |||
* mailto:info AT sonarsource DOT com | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
import startReactApp from './utils/startReactApp'; | |||
import installExtensionsHandler from './utils/installExtensionsHandler'; | |||
import { installGlobal } from '../helpers/l10n'; | |||
// styles | |||
import './styles/sonar.css'; | |||
installGlobal(); | |||
startReactApp(); | |||
installExtensionsHandler(); |
@@ -0,0 +1,132 @@ | |||
/* | |||
* SonarQube | |||
* Copyright (C) 2009-2018 SonarSource SA | |||
* mailto:info AT sonarsource DOT com | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
import installExtensionsHandler from './utils/installExtensionsHandler'; | |||
import { installGlobal, DEFAULT_LANGUAGE, requestMessages } from '../helpers/l10n'; | |||
import { request, parseJSON } from '../helpers/request'; | |||
import { getSystemStatus } from '../helpers/system'; | |||
import './styles/sonar.css'; | |||
installGlobal(); | |||
if (isMainApp()) { | |||
installExtensionsHandler(); | |||
Promise.all([loadMessages(), loadUser(), loadAppState(), loadApp()]).then( | |||
([lang, user, appState, startReactApp]) => { | |||
startReactApp(lang, user, appState); | |||
}, | |||
error => { | |||
if (isResponse(error) && error.status === 401) { | |||
redirectToLogin(); | |||
} else { | |||
logError(error); | |||
} | |||
} | |||
); | |||
} else { | |||
// login, maintenance or setup pages | |||
Promise.all([loadMessages(), loadApp()]).then( | |||
([lang, startReactApp]) => { | |||
startReactApp(lang, undefined, undefined); | |||
}, | |||
error => { | |||
logError(error); | |||
} | |||
); | |||
} | |||
function loadMessages() { | |||
return requestMessages().then(setLanguage, setLanguage); | |||
} | |||
function loadLocaleData(langToLoad: string) { | |||
return Promise.all([import('react-intl/locale-data/' + langToLoad), import('react-intl')]).then( | |||
([intlBundle, intl]) => { | |||
intl.addLocaleData(intlBundle); | |||
} | |||
); | |||
} | |||
function setLanguage(lang: string) { | |||
const langToLoad = lang || DEFAULT_LANGUAGE; | |||
// No need to load english (default) bundle, it's coming with react-intl | |||
if (langToLoad !== DEFAULT_LANGUAGE) { | |||
return loadLocaleData(langToLoad).then(() => langToLoad, () => DEFAULT_LANGUAGE); | |||
} else { | |||
return DEFAULT_LANGUAGE; | |||
} | |||
} | |||
function loadUser() { | |||
return request('/api/users/current') | |||
.submit() | |||
.then(checkStatus) | |||
.then(parseJSON); | |||
} | |||
function loadAppState() { | |||
return request('/api/navigation/global') | |||
.submit() | |||
.then(checkStatus) | |||
.then(parseJSON); | |||
} | |||
function loadApp() { | |||
return import(/* webpackChunkName: 'app' */ './utils/startReactApp').then(i => i.default); | |||
} | |||
function checkStatus(response: Response) { | |||
return new Promise((resolve, reject) => { | |||
if (response.status >= 200 && response.status < 300) { | |||
resolve(response); | |||
} else { | |||
reject(response); | |||
} | |||
}); | |||
} | |||
function isResponse(error: any): error is Response { | |||
return typeof error.status === 'number'; | |||
} | |||
function redirectToLogin() { | |||
const returnTo = window.location.pathname + window.location.search + window.location.hash; | |||
window.location.href = `${getBaseUrl()}/sessions/new?return_to=${encodeURIComponent(returnTo)}`; | |||
} | |||
function logError(error: any) { | |||
// eslint-disable-next-line no-console | |||
console.error('Application failed to start!', error); | |||
} | |||
function isMainApp() { | |||
const { pathname } = window.location; | |||
return ( | |||
getSystemStatus() === 'UP' && | |||
!pathname.startsWith(`${getBaseUrl()}/sessions`) && | |||
!pathname.startsWith(`${getBaseUrl()}/maintenance`) && | |||
!pathname.startsWith(`${getBaseUrl()}/setup`) && | |||
!pathname.startsWith(`${getBaseUrl()}/markdown/help`) | |||
); | |||
} | |||
function getBaseUrl(): string { | |||
return (window as any).baseUrl; | |||
} |
@@ -25,6 +25,7 @@ export interface AppState { | |||
adminPages?: Extension[]; | |||
authenticationError?: boolean; | |||
authorizationError?: boolean; | |||
branchesEnabled?: boolean; | |||
canAdmin?: boolean; | |||
globalPages?: Extension[]; | |||
organizationsEnabled?: boolean; |
@@ -17,15 +17,25 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
// @flow | |||
import configureStore from '../../store/utils/configureStore'; | |||
import { Store } from 'redux'; | |||
import { AppState, CurrentUser } from '../types'; | |||
import { setAppState } from '../../store/appState/duck'; | |||
import rootReducer from '../../store/rootReducer'; | |||
import { receiveCurrentUser } from '../../store/users/actions'; | |||
import configureStore from '../../store/utils/configureStore'; | |||
let store; | |||
let store: Store<any>; | |||
const createStore = () => { | |||
const createStore = (currentUser?: CurrentUser, appState?: AppState) => { | |||
store = configureStore(rootReducer); | |||
if (currentUser) { | |||
store.dispatch(receiveCurrentUser(currentUser)); | |||
} | |||
if (appState) { | |||
store.dispatch(setAppState(appState)); | |||
} | |||
return store; | |||
}; | |||
export default () => (store ? store : createStore()); | |||
export default (currentUser?: CurrentUser, appState?: AppState) => | |||
store ? store : createStore(currentUser, appState); |
@@ -17,17 +17,16 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
// @flow | |||
const extensions = {}; | |||
const extensions: { [key: string]: Function } = {}; | |||
const registerExtension = (key /*: string */, start /*: Function */) => { | |||
const registerExtension = (key: string, start: Function) => { | |||
extensions[key] = start; | |||
}; | |||
export default () => { | |||
window.registerExtension = registerExtension; | |||
(window as any).registerExtension = registerExtension; | |||
}; | |||
export const getExtensionFromCache = (key /*: string */) => { | |||
export const getExtensionFromCache = (key: string) => { | |||
return extensions[key]; | |||
}; |
@@ -22,9 +22,9 @@ import React from 'react'; | |||
import { render } from 'react-dom'; | |||
import { Router, Route, IndexRoute, Redirect } from 'react-router'; | |||
import { Provider } from 'react-redux'; | |||
import { IntlProvider } from 'react-intl'; | |||
import getStore from './getStore'; | |||
import getHistory from './getHistory'; | |||
import LocalizationContainer from '../components/LocalizationContainer'; | |||
import MigrationContainer from '../components/MigrationContainer'; | |||
import App from '../components/App'; | |||
import GlobalContainer from '../components/GlobalContainer'; | |||
@@ -75,72 +75,72 @@ function handleUpdate() { | |||
} | |||
} | |||
const startReactApp = () => { | |||
const startReactApp = (lang, currentUser, appState) => { | |||
const el = document.getElementById('content'); | |||
const history = getHistory(); | |||
const store = getStore(); | |||
const store = getStore(currentUser, appState); | |||
render( | |||
<Provider store={store}> | |||
<Router history={history} onUpdate={handleUpdate}> | |||
<Route | |||
path="/account/issues" | |||
onEnter={(_, replace) => { | |||
replace({ pathname: '/issues', query: { myIssues: 'true', resolved: 'false' } }); | |||
}} | |||
/> | |||
<IntlProvider defaultLocale={lang} locale={lang}> | |||
<Router history={history} onUpdate={handleUpdate}> | |||
<Route | |||
path="/account/issues" | |||
onEnter={(_, replace) => { | |||
replace({ pathname: '/issues', query: { myIssues: 'true', resolved: 'false' } }); | |||
}} | |||
/> | |||
<Route | |||
path="/codingrules" | |||
onEnter={(nextState, replace) => { | |||
replace('/coding_rules' + window.location.hash); | |||
}} | |||
/> | |||
<Route | |||
path="/codingrules" | |||
onEnter={(nextState, replace) => { | |||
replace('/coding_rules' + window.location.hash); | |||
}} | |||
/> | |||
<Route | |||
path="/dashboard/index/:key" | |||
onEnter={(nextState, replace) => { | |||
replace({ pathname: '/dashboard', query: { id: nextState.params.key } }); | |||
}} | |||
/> | |||
<Route | |||
path="/dashboard/index/:key" | |||
onEnter={(nextState, replace) => { | |||
replace({ pathname: '/dashboard', query: { id: nextState.params.key } }); | |||
}} | |||
/> | |||
<Route | |||
path="/issues/search" | |||
onEnter={(nextState, replace) => { | |||
replace('/issues' + window.location.hash); | |||
}} | |||
/> | |||
<Route | |||
path="/issues/search" | |||
onEnter={(nextState, replace) => { | |||
replace('/issues' + window.location.hash); | |||
}} | |||
/> | |||
<Redirect from="/admin" to="/admin/settings" /> | |||
<Redirect from="/background_tasks" to="/admin/background_tasks" /> | |||
<Redirect from="/component/index" to="/component" /> | |||
<Redirect from="/component_issues" to="/project/issues" /> | |||
<Redirect from="/dashboard/index" to="/dashboard" /> | |||
<Redirect from="/governance" to="/portfolio" /> | |||
<Redirect from="/groups" to="/admin/groups" /> | |||
<Redirect from="/extension/governance/portfolios" to="/portfolios" /> | |||
<Redirect from="/metrics" to="/admin/custom_metrics" /> | |||
<Redirect from="/permission_templates" to="/admin/permission_templates" /> | |||
<Redirect from="/profiles/index" to="/profiles" /> | |||
<Redirect from="/projects_admin" to="/admin/projects_management" /> | |||
<Redirect from="/quality_gates/index" to="/quality_gates" /> | |||
<Redirect from="/roles/global" to="/admin/permissions" /> | |||
<Redirect from="/settings" to="/admin/settings" /> | |||
<Redirect from="/settings/encryption" to="/admin/settings/encryption" /> | |||
<Redirect from="/settings/index" to="/admin/settings" /> | |||
<Redirect from="/sessions/login" to="/sessions/new" /> | |||
<Redirect from="/system" to="/admin/system" /> | |||
<Redirect from="/system/index" to="/admin/system" /> | |||
<Redirect from="/view" to="/portfolio" /> | |||
<Redirect from="/users" to="/admin/users" /> | |||
<Redirect from="/admin" to="/admin/settings" /> | |||
<Redirect from="/background_tasks" to="/admin/background_tasks" /> | |||
<Redirect from="/component/index" to="/component" /> | |||
<Redirect from="/component_issues" to="/project/issues" /> | |||
<Redirect from="/dashboard/index" to="/dashboard" /> | |||
<Redirect from="/governance" to="/portfolio" /> | |||
<Redirect from="/groups" to="/admin/groups" /> | |||
<Redirect from="/extension/governance/portfolios" to="/portfolios" /> | |||
<Redirect from="/metrics" to="/admin/custom_metrics" /> | |||
<Redirect from="/permission_templates" to="/admin/permission_templates" /> | |||
<Redirect from="/profiles/index" to="/profiles" /> | |||
<Redirect from="/projects_admin" to="/admin/projects_management" /> | |||
<Redirect from="/quality_gates/index" to="/quality_gates" /> | |||
<Redirect from="/roles/global" to="/admin/permissions" /> | |||
<Redirect from="/settings" to="/admin/settings" /> | |||
<Redirect from="/settings/encryption" to="/admin/settings/encryption" /> | |||
<Redirect from="/settings/index" to="/admin/settings" /> | |||
<Redirect from="/sessions/login" to="/sessions/new" /> | |||
<Redirect from="/system" to="/admin/system" /> | |||
<Redirect from="/system/index" to="/admin/system" /> | |||
<Redirect from="/view" to="/portfolio" /> | |||
<Redirect from="/users" to="/admin/users" /> | |||
<Route | |||
path="markdown/help" | |||
component={lazyLoad(() => import('../components/MarkdownHelp'))} | |||
/> | |||
<Route | |||
path="markdown/help" | |||
component={lazyLoad(() => import('../components/MarkdownHelp'))} | |||
/> | |||
<Route component={LocalizationContainer}> | |||
<Route component={lazyLoad(() => import('../components/SimpleContainer'))}> | |||
<Route path="maintenance">{maintenanceRoutes}</Route> | |||
<Route path="setup">{setupRoutes}</Route> | |||
@@ -263,8 +263,8 @@ const startReactApp = () => { | |||
<Route path="*" component={lazyLoad(() => import('../components/NotFound'))} /> | |||
</Route> | |||
</Route> | |||
</Route> | |||
</Router> | |||
</Router> | |||
</IntlProvider> | |||
</Provider>, | |||
el | |||
); |
@@ -4,7 +4,7 @@ exports[`renders 1`] = ` | |||
<div | |||
className="page page-limited" | |||
> | |||
<Connect(SourceViewerBase) | |||
<Connect(LazyLoader) | |||
aroundLine={7} | |||
branchLike={ | |||
Object { |
@@ -18,11 +18,11 @@ | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
import * as React from 'react'; | |||
import { Link } from 'react-router'; | |||
import DeferredSpinner from '../../../components/common/DeferredSpinner'; | |||
import GlobalMessagesContainer from '../../../app/components/GlobalMessagesContainer'; | |||
import { SubmitButton } from '../../../components/ui/buttons'; | |||
import { translate } from '../../../helpers/l10n'; | |||
import { getBaseUrl } from '../../../helpers/urls'; | |||
import './LoginForm.css'; | |||
interface Props { | |||
@@ -129,9 +129,9 @@ export default class LoginForm extends React.PureComponent<Props, State> { | |||
<SubmitButton disabled={this.state.loading}> | |||
{translate('sessions.log_in')} | |||
</SubmitButton> | |||
<Link className="spacer-left" to="/"> | |||
<a className="spacer-left" href={`${getBaseUrl()}/`}> | |||
{translate('cancel')} | |||
</Link> | |||
</a> | |||
</div> | |||
</div> | |||
</form> |
@@ -76,14 +76,12 @@ exports[`expands more options 2`] = ` | |||
> | |||
sessions.log_in | |||
</SubmitButton> | |||
<Link | |||
<a | |||
className="spacer-left" | |||
onlyActiveOnIndex={false} | |||
style={Object {}} | |||
to="/" | |||
href="/" | |||
> | |||
cancel | |||
</Link> | |||
</a> | |||
</div> | |||
</div> | |||
</form> | |||
@@ -151,14 +149,12 @@ exports[`logs in with simple credentials 1`] = ` | |||
> | |||
sessions.log_in | |||
</SubmitButton> | |||
<Link | |||
<a | |||
className="spacer-left" | |||
onlyActiveOnIndex={false} | |||
style={Object {}} | |||
to="/" | |||
href="/" | |||
> | |||
cancel | |||
</Link> | |||
</a> | |||
</div> | |||
</div> | |||
</form> | |||
@@ -226,14 +222,12 @@ exports[`should display a spinner and disabled button while loading 1`] = ` | |||
> | |||
sessions.log_in | |||
</SubmitButton> | |||
<Link | |||
<a | |||
className="spacer-left" | |||
onlyActiveOnIndex={false} | |||
style={Object {}} | |||
to="/" | |||
href="/" | |||
> | |||
cancel | |||
</Link> | |||
</a> | |||
</div> | |||
</div> | |||
</form> |
@@ -18,8 +18,9 @@ | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
import { Dispatch } from 'redux'; | |||
import { connect } from 'react-redux'; | |||
import SourceViewerBase from './SourceViewerBase'; | |||
import { connect, Omit } from 'react-redux'; | |||
import { Props } from './SourceViewerBase'; | |||
import { lazyLoad } from '../lazyLoad'; | |||
import { SourceViewerFile } from '../../app/types'; | |||
import { receiveFavorites } from '../../store/favorites/duck'; | |||
@@ -44,4 +45,8 @@ const onReceiveComponent = (component: SourceViewerFile) => (dispatch: Dispatch< | |||
const mapDispatchToProps: DispatchProps = { onReceiveComponent }; | |||
export default connect(mapStateToProps, mapDispatchToProps)(SourceViewerBase); | |||
type OwnProps = Omit<Props, keyof DispatchProps>; | |||
export default connect<null, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)( | |||
lazyLoad(() => import(/* webpackPrefetch: true */ './SourceViewerBase')) | |||
); |
@@ -54,7 +54,7 @@ import './styles.css'; | |||
// TODO react-virtualized | |||
interface Props { | |||
export interface Props { | |||
aroundLine?: number; | |||
branchLike: BranchLike | undefined; | |||
component: string; |
@@ -28,7 +28,7 @@ exports[`should render 1`] = ` | |||
} | |||
} | |||
> | |||
<Connect(SourceViewerBase) | |||
<Connect(LazyLoader) | |||
component="foo" | |||
onLoaded={[Function]} | |||
/> |
@@ -165,10 +165,9 @@ export function checkStatus(response: Response): Promise<Response> { | |||
return new Promise((resolve, reject) => { | |||
if (checkApplicationVersion(response)) { | |||
if (response.status === 401) { | |||
// workaround cyclic dependencies | |||
const requireAuthentication = require('../app/utils/handleRequiredAuthentication').default; | |||
requireAuthentication(); | |||
reject(); | |||
import('../app/utils/handleRequiredAuthentication') | |||
.then(i => i.default()) | |||
.then(reject, reject); | |||
} else if (response.status >= 200 && response.status < 300) { | |||
resolve(response); | |||
} else { |
@@ -17,7 +17,6 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
export function save(key: string, value?: string, suffix?: string): void { | |||
try { | |||
const finalKey = suffix ? `${key}.${suffix}` : key; |
@@ -35,6 +35,3 @@ const finalCreateStore = compose(applyMiddleware(...middlewares), ...composed)(c | |||
export default function configureStore(rootReducer, initialState) { | |||
return finalCreateStore(rootReducer, initialState); | |||
} | |||
export const configureTestStore = (rootReducer, initialState) => | |||
createStore(rootReducer, initialState); |
@@ -182,115 +182,140 @@ | |||
version "16.0.29" | |||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.29.tgz#4eea6a8de9f40ca71d580ae7a9f3b4b77b368de8" | |||
"@webassemblyjs/ast@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.3.1.tgz#3081b4b3ff0af733aa5ba573af998f33711293f8" | |||
"@webassemblyjs/ast@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25" | |||
dependencies: | |||
"@webassemblyjs/helper-wasm-bytecode" "1.3.1" | |||
"@webassemblyjs/wast-parser" "1.3.1" | |||
webassemblyjs "1.3.1" | |||
"@webassemblyjs/helper-module-context" "1.5.13" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.5.13" | |||
"@webassemblyjs/wast-parser" "1.5.13" | |||
debug "^3.1.0" | |||
mamacro "^0.0.3" | |||
"@webassemblyjs/floating-point-hex-parser@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.3.1.tgz#82646903ba25c3e5d88dec41ecb4e4d770615bfc" | |||
"@webassemblyjs/floating-point-hex-parser@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298" | |||
"@webassemblyjs/helper-buffer@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.3.1.tgz#aa66bb6c274a7e5610d7468f94a2702186713bc6" | |||
"@webassemblyjs/helper-api-error@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59" | |||
"@webassemblyjs/helper-code-frame@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.3.1.tgz#b5eba87cf37992e8a62c402545aed87dfd02be83" | |||
"@webassemblyjs/helper-buffer@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e" | |||
dependencies: | |||
"@webassemblyjs/wast-printer" "1.3.1" | |||
debug "^3.1.0" | |||
"@webassemblyjs/helper-fsm@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.3.1.tgz#297113d09a9541613eaeb265d7f948c5e03eb0a2" | |||
"@webassemblyjs/helper-code-frame@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58" | |||
dependencies: | |||
"@webassemblyjs/wast-printer" "1.5.13" | |||
"@webassemblyjs/helper-wasm-bytecode@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.3.1.tgz#53b0308988e3a0cad836c83fc0801255906608f8" | |||
"@webassemblyjs/helper-fsm@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924" | |||
"@webassemblyjs/helper-wasm-section@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.3.1.tgz#3df13898e89a376ffb89439d216d9f0001bf9632" | |||
"@webassemblyjs/helper-module-context@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/helper-buffer" "1.3.1" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.3.1" | |||
"@webassemblyjs/wasm-gen" "1.3.1" | |||
debug "^3.1.0" | |||
mamacro "^0.0.3" | |||
"@webassemblyjs/leb128@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.3.1.tgz#e0cf1c585c72955637eeeabab1e2ab37c12c2338" | |||
dependencies: | |||
leb "^0.3.0" | |||
"@webassemblyjs/helper-wasm-bytecode@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747" | |||
"@webassemblyjs/validation@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/validation/-/validation-1.3.1.tgz#ed0129d7ccca7858a3f46e7e47a6889008547a39" | |||
"@webassemblyjs/helper-wasm-section@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/wasm-edit@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.3.1.tgz#a16ca4d9a12144b1b28d4e66ad1ad66ec65e479e" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/helper-buffer" "1.3.1" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.3.1" | |||
"@webassemblyjs/helper-wasm-section" "1.3.1" | |||
"@webassemblyjs/wasm-gen" "1.3.1" | |||
"@webassemblyjs/wasm-opt" "1.3.1" | |||
"@webassemblyjs/wasm-parser" "1.3.1" | |||
"@webassemblyjs/wast-printer" "1.3.1" | |||
"@webassemblyjs/ast" "1.5.13" | |||
"@webassemblyjs/helper-buffer" "1.5.13" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.5.13" | |||
"@webassemblyjs/wasm-gen" "1.5.13" | |||
debug "^3.1.0" | |||
"@webassemblyjs/wasm-gen@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.3.1.tgz#43263fc56a0570e0564e407bbcd4c02e85167398" | |||
"@webassemblyjs/ieee754@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.3.1" | |||
"@webassemblyjs/leb128" "1.3.1" | |||
ieee754 "^1.1.11" | |||
"@webassemblyjs/wasm-opt@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.3.1.tgz#172601dcdaaacd6b0b002df1252033198c65eceb" | |||
"@webassemblyjs/leb128@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/helper-buffer" "1.3.1" | |||
"@webassemblyjs/wasm-gen" "1.3.1" | |||
"@webassemblyjs/wasm-parser" "1.3.1" | |||
long "4.0.0" | |||
"@webassemblyjs/wasm-parser@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.3.1.tgz#76727be6c313a9b775170ed38a126558eed7e8ef" | |||
"@webassemblyjs/utf8@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469" | |||
"@webassemblyjs/wasm-edit@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.3.1" | |||
"@webassemblyjs/leb128" "1.3.1" | |||
"@webassemblyjs/wasm-parser" "1.3.1" | |||
webassemblyjs "1.3.1" | |||
"@webassemblyjs/ast" "1.5.13" | |||
"@webassemblyjs/helper-buffer" "1.5.13" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.5.13" | |||
"@webassemblyjs/helper-wasm-section" "1.5.13" | |||
"@webassemblyjs/wasm-gen" "1.5.13" | |||
"@webassemblyjs/wasm-opt" "1.5.13" | |||
"@webassemblyjs/wasm-parser" "1.5.13" | |||
"@webassemblyjs/wast-printer" "1.5.13" | |||
debug "^3.1.0" | |||
"@webassemblyjs/wast-parser@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.3.1.tgz#62b6eba09580477868dd394cee3e3f5c64e1f3f8" | |||
"@webassemblyjs/wasm-gen@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.5.13" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.5.13" | |||
"@webassemblyjs/ieee754" "1.5.13" | |||
"@webassemblyjs/leb128" "1.5.13" | |||
"@webassemblyjs/utf8" "1.5.13" | |||
"@webassemblyjs/wasm-opt@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/floating-point-hex-parser" "1.3.1" | |||
"@webassemblyjs/helper-code-frame" "1.3.1" | |||
"@webassemblyjs/helper-fsm" "1.3.1" | |||
"@webassemblyjs/ast" "1.5.13" | |||
"@webassemblyjs/helper-buffer" "1.5.13" | |||
"@webassemblyjs/wasm-gen" "1.5.13" | |||
"@webassemblyjs/wasm-parser" "1.5.13" | |||
debug "^3.1.0" | |||
"@webassemblyjs/wasm-parser@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.5.13" | |||
"@webassemblyjs/helper-api-error" "1.5.13" | |||
"@webassemblyjs/helper-wasm-bytecode" "1.5.13" | |||
"@webassemblyjs/ieee754" "1.5.13" | |||
"@webassemblyjs/leb128" "1.5.13" | |||
"@webassemblyjs/utf8" "1.5.13" | |||
"@webassemblyjs/wast-parser@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.5.13" | |||
"@webassemblyjs/floating-point-hex-parser" "1.5.13" | |||
"@webassemblyjs/helper-api-error" "1.5.13" | |||
"@webassemblyjs/helper-code-frame" "1.5.13" | |||
"@webassemblyjs/helper-fsm" "1.5.13" | |||
long "^3.2.0" | |||
webassemblyjs "1.3.1" | |||
mamacro "^0.0.3" | |||
"@webassemblyjs/wast-printer@1.3.1": | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.3.1.tgz#3e75b889e6f1ba2dfa854e4436b4287e7687e82c" | |||
"@webassemblyjs/wast-printer@1.5.13": | |||
version "1.5.13" | |||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/wast-parser" "1.3.1" | |||
"@webassemblyjs/ast" "1.5.13" | |||
"@webassemblyjs/wast-parser" "1.5.13" | |||
long "^3.2.0" | |||
abab@^1.0.3: | |||
@@ -334,6 +359,10 @@ acorn@^5.0.0, acorn@^5.1.2, acorn@^5.3.0, acorn@^5.5.0: | |||
version "5.5.3" | |||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" | |||
acorn@^5.6.2: | |||
version "5.7.1" | |||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" | |||
address@1.0.2: | |||
version "1.0.2" | |||
resolved "https://registry.yarnpkg.com/address/-/address-1.0.2.tgz#480081e82b587ba319459fef512f516fe03d58af" | |||
@@ -1782,9 +1811,11 @@ chownr@^1.0.1: | |||
version "1.0.1" | |||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" | |||
chrome-trace-event@^0.1.1: | |||
version "0.1.2" | |||
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz#90f36885d5345a50621332f0717b595883d5d982" | |||
chrome-trace-event@^1.0.0: | |||
version "1.0.0" | |||
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" | |||
dependencies: | |||
tslib "^1.9.0" | |||
ci-info@^1.0.0: | |||
version "1.1.1" | |||
@@ -2809,6 +2840,14 @@ enhanced-resolve@^4.0.0: | |||
memory-fs "^0.4.0" | |||
tapable "^1.0.0" | |||
enhanced-resolve@^4.1.0: | |||
version "4.1.0" | |||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" | |||
dependencies: | |||
graceful-fs "^4.1.2" | |||
memory-fs "^0.4.0" | |||
tapable "^1.0.0" | |||
entities@^1.1.1, entities@~1.1.1: | |||
version "1.1.1" | |||
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" | |||
@@ -4069,6 +4108,10 @@ icss-utils@^2.1.0: | |||
dependencies: | |||
postcss "^6.0.1" | |||
ieee754@^1.1.11: | |||
version "1.1.12" | |||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" | |||
ieee754@^1.1.4: | |||
version "1.1.8" | |||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" | |||
@@ -5107,6 +5150,10 @@ jsesc@~0.5.0: | |||
version "0.5.0" | |||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" | |||
json-parse-better-errors@^1.0.2: | |||
version "1.0.2" | |||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" | |||
json-schema-traverse@^0.3.0: | |||
version "0.3.1" | |||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" | |||
@@ -5210,10 +5257,6 @@ lcid@^1.0.0: | |||
dependencies: | |||
invert-kv "^1.0.0" | |||
leb@^0.3.0: | |||
version "0.3.0" | |||
resolved "https://registry.yarnpkg.com/leb/-/leb-0.3.0.tgz#32bee9fad168328d6aea8522d833f4180eed1da3" | |||
left-pad@^1.2.0: | |||
version "1.2.0" | |||
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" | |||
@@ -5420,6 +5463,10 @@ loglevelnext@^1.0.1: | |||
version "1.0.3" | |||
resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.3.tgz#0f69277e73bbbf2cd61b94d82313216bf87ac66e" | |||
long@4.0.0: | |||
version "4.0.0" | |||
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" | |||
long@^3.2.0: | |||
version "3.2.0" | |||
resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" | |||
@@ -5472,6 +5519,10 @@ makeerror@1.0.x: | |||
dependencies: | |||
tmpl "1.0.x" | |||
mamacro@^0.0.3: | |||
version "0.0.3" | |||
resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" | |||
map-cache@^0.2.2: | |||
version "0.2.2" | |||
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" | |||
@@ -8359,6 +8410,10 @@ ts-loader@4.3.0: | |||
micromatch "^3.1.4" | |||
semver "^5.0.1" | |||
tslib@^1.9.0: | |||
version "1.9.3" | |||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" | |||
tty-browserify@0.0.0: | |||
version "0.0.0" | |||
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" | |||
@@ -8721,16 +8776,6 @@ wbuf@^1.1.0, wbuf@^1.7.2: | |||
dependencies: | |||
minimalistic-assert "^1.0.0" | |||
webassemblyjs@1.3.1: | |||
version "1.3.1" | |||
resolved "https://registry.yarnpkg.com/webassemblyjs/-/webassemblyjs-1.3.1.tgz#2bb8ebc724d0fe09b9562ab20e32ce3f5bac5c74" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/validation" "1.3.1" | |||
"@webassemblyjs/wasm-parser" "1.3.1" | |||
"@webassemblyjs/wast-parser" "1.3.1" | |||
long "^3.2.0" | |||
webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: | |||
version "4.0.2" | |||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" | |||
@@ -8813,20 +8858,23 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0: | |||
source-list-map "^2.0.0" | |||
source-map "~0.6.1" | |||
webpack@4.8.1: | |||
version "4.8.1" | |||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.8.1.tgz#59e38f99f2751c931dd09a035aba7bec4b5f916e" | |||
webpack@4.15.1: | |||
version "4.15.1" | |||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.15.1.tgz#dc716779a3b88827c369f18c71a6137fa7e582fd" | |||
dependencies: | |||
"@webassemblyjs/ast" "1.3.1" | |||
"@webassemblyjs/wasm-edit" "1.3.1" | |||
"@webassemblyjs/wasm-parser" "1.3.1" | |||
acorn "^5.0.0" | |||
"@webassemblyjs/ast" "1.5.13" | |||
"@webassemblyjs/helper-module-context" "1.5.13" | |||
"@webassemblyjs/wasm-edit" "1.5.13" | |||
"@webassemblyjs/wasm-opt" "1.5.13" | |||
"@webassemblyjs/wasm-parser" "1.5.13" | |||
acorn "^5.6.2" | |||
acorn-dynamic-import "^3.0.0" | |||
ajv "^6.1.0" | |||
ajv-keywords "^3.1.0" | |||
chrome-trace-event "^0.1.1" | |||
enhanced-resolve "^4.0.0" | |||
chrome-trace-event "^1.0.0" | |||
enhanced-resolve "^4.1.0" | |||
eslint-scope "^3.7.1" | |||
json-parse-better-errors "^1.0.2" | |||
loader-runner "^2.3.0" | |||
loader-utils "^1.1.0" | |||
memory-fs "~0.4.1" |