aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web
diff options
context:
space:
mode:
authorStas Vilchik <stas.vilchik@sonarsource.com>2018-07-10 14:41:16 +0200
committerSonarTech <sonartech@sonarsource.com>2018-07-10 20:21:20 +0200
commitf09ee6b610528aa37b7b51be395c93524cebae8f (patch)
treec1ec210eb18ce9ae6a86b5c68f10ceef9dfcab50 /server/sonar-web
parent4e9feaddc45af56194e90e941d591bc465add571 (diff)
downloadsonarqube-f09ee6b610528aa37b7b51be395c93524cebae8f.tar.gz
sonarqube-f09ee6b610528aa37b7b51be395c93524cebae8f.zip
load web app asynchronously (#493)
Diffstat (limited to 'server/sonar-web')
-rw-r--r--server/sonar-web/config/webpack.config.js10
-rw-r--r--server/sonar-web/package.json2
-rw-r--r--server/sonar-web/src/main/js/api/nav.ts21
-rw-r--r--server/sonar-web/src/main/js/app/components/App.tsx98
-rw-r--r--server/sonar-web/src/main/js/app/components/GlobalLoading.tsx31
-rw-r--r--server/sonar-web/src/main/js/app/components/LocalizationContainer.tsx86
-rw-r--r--server/sonar-web/src/main/js/app/index.js28
-rw-r--r--server/sonar-web/src/main/js/app/index.ts132
-rw-r--r--server/sonar-web/src/main/js/app/types.ts1
-rw-r--r--server/sonar-web/src/main/js/app/utils/getStore.ts (renamed from server/sonar-web/src/main/js/app/utils/getStore.js)20
-rw-r--r--server/sonar-web/src/main/js/app/utils/installExtensionsHandler.ts (renamed from server/sonar-web/src/main/js/app/utils/installExtensionsHandler.js)9
-rw-r--r--server/sonar-web/src/main/js/app/utils/startReactApp.js114
-rw-r--r--server/sonar-web/src/main/js/apps/component/components/__tests__/__snapshots__/App-test.tsx.snap2
-rw-r--r--server/sonar-web/src/main/js/apps/sessions/components/LoginForm.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/sessions/components/__tests__/__snapshots__/LoginForm-test.tsx.snap24
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx11
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceComponentViewer-test.tsx.snap2
-rw-r--r--server/sonar-web/src/main/js/helpers/request.ts7
-rw-r--r--server/sonar-web/src/main/js/helpers/storage.ts1
-rw-r--r--server/sonar-web/src/main/js/store/utils/configureStore.js3
-rw-r--r--server/sonar-web/yarn.lock270
22 files changed, 434 insertions, 446 deletions
diff --git a/server/sonar-web/config/webpack.config.js b/server/sonar-web/config/webpack.config.js
index 9030b4b41eb..c240dbd623c 100644
--- a/server/sonar-web/config/webpack.config.js
+++ b/server/sonar-web/config/webpack.config.js
@@ -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
});
diff --git a/server/sonar-web/package.json b/server/sonar-web/package.json
index 0d67511cec5..9d91aa58460 100644
--- a/server/sonar-web/package.json
+++ b/server/sonar-web/package.json
@@ -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"
},
diff --git a/server/sonar-web/src/main/js/api/nav.ts b/server/sonar-web/src/main/js/api/nav.ts
index 1313c73972e..e5af1bb7e91 100644
--- a/server/sonar-web/src/main/js/api/nav.ts
+++ b/server/sonar-web/src/main/js/api/nav.ts
@@ -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({})));
-}
diff --git a/server/sonar-web/src/main/js/app/components/App.tsx b/server/sonar-web/src/main/js/app/components/App.tsx
index 91c65cc4e6c..dca11f0b8eb 100644
--- a/server/sonar-web/src/main/js/app/components/App.tsx
+++ b/server/sonar-web/src/main/js/app/components/App.tsx
@@ -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);
diff --git a/server/sonar-web/src/main/js/app/components/GlobalLoading.tsx b/server/sonar-web/src/main/js/app/components/GlobalLoading.tsx
deleted file mode 100644
index 8ae81282526..00000000000
--- a/server/sonar-web/src/main/js/app/components/GlobalLoading.tsx
+++ /dev/null
@@ -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>
- </>
- );
-}
diff --git a/server/sonar-web/src/main/js/app/components/LocalizationContainer.tsx b/server/sonar-web/src/main/js/app/components/LocalizationContainer.tsx
deleted file mode 100644
index 22c457bf7ea..00000000000
--- a/server/sonar-web/src/main/js/app/components/LocalizationContainer.tsx
+++ /dev/null
@@ -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>
- );
- }
-}
diff --git a/server/sonar-web/src/main/js/app/index.js b/server/sonar-web/src/main/js/app/index.js
deleted file mode 100644
index 6fe8aa8dc40..00000000000
--- a/server/sonar-web/src/main/js/app/index.js
+++ /dev/null
@@ -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();
diff --git a/server/sonar-web/src/main/js/app/index.ts b/server/sonar-web/src/main/js/app/index.ts
new file mode 100644
index 00000000000..f1bb44ebaba
--- /dev/null
+++ b/server/sonar-web/src/main/js/app/index.ts
@@ -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;
+}
diff --git a/server/sonar-web/src/main/js/app/types.ts b/server/sonar-web/src/main/js/app/types.ts
index 03ddcc4e356..97168176c94 100644
--- a/server/sonar-web/src/main/js/app/types.ts
+++ b/server/sonar-web/src/main/js/app/types.ts
@@ -25,6 +25,7 @@ export interface AppState {
adminPages?: Extension[];
authenticationError?: boolean;
authorizationError?: boolean;
+ branchesEnabled?: boolean;
canAdmin?: boolean;
globalPages?: Extension[];
organizationsEnabled?: boolean;
diff --git a/server/sonar-web/src/main/js/app/utils/getStore.js b/server/sonar-web/src/main/js/app/utils/getStore.ts
index 00cc9a013c6..477fc5a57b4 100644
--- a/server/sonar-web/src/main/js/app/utils/getStore.js
+++ b/server/sonar-web/src/main/js/app/utils/getStore.ts
@@ -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);
diff --git a/server/sonar-web/src/main/js/app/utils/installExtensionsHandler.js b/server/sonar-web/src/main/js/app/utils/installExtensionsHandler.ts
index d9800fbe554..9ddc6d1d3e2 100644
--- a/server/sonar-web/src/main/js/app/utils/installExtensionsHandler.js
+++ b/server/sonar-web/src/main/js/app/utils/installExtensionsHandler.ts
@@ -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];
};
diff --git a/server/sonar-web/src/main/js/app/utils/startReactApp.js b/server/sonar-web/src/main/js/app/utils/startReactApp.js
index e092a6c13eb..97e9845a344 100644
--- a/server/sonar-web/src/main/js/app/utils/startReactApp.js
+++ b/server/sonar-web/src/main/js/app/utils/startReactApp.js
@@ -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
);
diff --git a/server/sonar-web/src/main/js/apps/component/components/__tests__/__snapshots__/App-test.tsx.snap b/server/sonar-web/src/main/js/apps/component/components/__tests__/__snapshots__/App-test.tsx.snap
index f5dd7e1a6ce..c513d6b7a6d 100644
--- a/server/sonar-web/src/main/js/apps/component/components/__tests__/__snapshots__/App-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/component/components/__tests__/__snapshots__/App-test.tsx.snap
@@ -4,7 +4,7 @@ exports[`renders 1`] = `
<div
className="page page-limited"
>
- <Connect(SourceViewerBase)
+ <Connect(LazyLoader)
aroundLine={7}
branchLike={
Object {
diff --git a/server/sonar-web/src/main/js/apps/sessions/components/LoginForm.tsx b/server/sonar-web/src/main/js/apps/sessions/components/LoginForm.tsx
index ab0cecf826e..6d322c62ac4 100644
--- a/server/sonar-web/src/main/js/apps/sessions/components/LoginForm.tsx
+++ b/server/sonar-web/src/main/js/apps/sessions/components/LoginForm.tsx
@@ -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>
diff --git a/server/sonar-web/src/main/js/apps/sessions/components/__tests__/__snapshots__/LoginForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/sessions/components/__tests__/__snapshots__/LoginForm-test.tsx.snap
index aa19aded41e..4790486f71e 100644
--- a/server/sonar-web/src/main/js/apps/sessions/components/__tests__/__snapshots__/LoginForm-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/sessions/components/__tests__/__snapshots__/LoginForm-test.tsx.snap
@@ -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>
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx
index 3b40ed80dae..2e0a1c2daf8 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx
@@ -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'))
+);
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
index c0e9326f5e8..826cd8781a8 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
@@ -54,7 +54,7 @@ import './styles.css';
// TODO react-virtualized
-interface Props {
+export interface Props {
aroundLine?: number;
branchLike: BranchLike | undefined;
component: string;
diff --git a/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceComponentViewer-test.tsx.snap b/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceComponentViewer-test.tsx.snap
index 221000a98f5..7453ffec082 100644
--- a/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceComponentViewer-test.tsx.snap
+++ b/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceComponentViewer-test.tsx.snap
@@ -28,7 +28,7 @@ exports[`should render 1`] = `
}
}
>
- <Connect(SourceViewerBase)
+ <Connect(LazyLoader)
component="foo"
onLoaded={[Function]}
/>
diff --git a/server/sonar-web/src/main/js/helpers/request.ts b/server/sonar-web/src/main/js/helpers/request.ts
index 682b86d22fe..1ae4d87dc5a 100644
--- a/server/sonar-web/src/main/js/helpers/request.ts
+++ b/server/sonar-web/src/main/js/helpers/request.ts
@@ -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 {
diff --git a/server/sonar-web/src/main/js/helpers/storage.ts b/server/sonar-web/src/main/js/helpers/storage.ts
index d4cb6082856..af72c31ba82 100644
--- a/server/sonar-web/src/main/js/helpers/storage.ts
+++ b/server/sonar-web/src/main/js/helpers/storage.ts
@@ -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;
diff --git a/server/sonar-web/src/main/js/store/utils/configureStore.js b/server/sonar-web/src/main/js/store/utils/configureStore.js
index 48da487316e..a41ada6d570 100644
--- a/server/sonar-web/src/main/js/store/utils/configureStore.js
+++ b/server/sonar-web/src/main/js/store/utils/configureStore.js
@@ -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);
diff --git a/server/sonar-web/yarn.lock b/server/sonar-web/yarn.lock
index 33dd4edc00b..eba63961f78 100644
--- a/server/sonar-web/yarn.lock
+++ b/server/sonar-web/yarn.lock
@@ -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"