Skip to content

Commit 27280d3

Browse files
fix: review
1 parent ea5247e commit 27280d3

File tree

9 files changed

+60
-114
lines changed

9 files changed

+60
-114
lines changed

config-overrides.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ const path = require('path');
22

33
const MiniCSSExtractPlugin = require('mini-css-extract-plugin');
44
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
5+
const webpack = require('webpack');
56
const srcRoot = path.resolve(__dirname, 'src');
67
const uiKitRoot = path.resolve(__dirname, 'node_modules/@gravity-ui/uikit');
78
const antlr4C3Root = path.resolve(__dirname, 'node_modules/antlr4-c3');
89
const websqlRoot = path.resolve(__dirname, 'node_modules/@gravity-ui/websql-autocomplete');
910
const antlr4ngRoot = path.resolve(__dirname, 'node_modules/antlr4ng');
1011
const uiKitIconsRoot = path.resolve(__dirname, 'node_modules/@gravity-ui/icons');
1112

13+
const packageJson = require('./package.json');
14+
1215
module.exports = {
1316
webpack: (config, env) => {
1417
const oneOfRule = config.module.rules.find((r) => r.oneOf);
@@ -45,6 +48,13 @@ module.exports = {
4548
}),
4649
);
4750

51+
// Add DefinePlugin to expose just the version
52+
config.plugins.push(
53+
new webpack.DefinePlugin({
54+
'process.env.UI_VERSION': JSON.stringify(packageJson.version),
55+
}),
56+
);
57+
4858
const cssExtractPlugin = config.plugins.find((p) => p instanceof MiniCSSExtractPlugin);
4959
if (cssExtractPlugin) {
5060
cssExtractPlugin.options.ignoreOrder = true;

package-lock.json

Lines changed: 7 additions & 55 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,8 @@
164164
"source-map-explorer": "^2.5.3",
165165
"stylelint": "^15.11.0",
166166
"ts-jest": "^29.2.5",
167-
"typescript": "^5.7.3"
167+
"typescript": "^5.7.3",
168+
"webpack": "^5.98.0"
168169
},
169170
"peerDependencies": {
170171
"monaco-yql-languages": ">=1.3.0",

src/components/ErrorBoundary/ErrorBoundary.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ function ErrorStack({stack}: {stack?: string}) {
105105

106106
const stackToDisplay = prepareErrorStack(stack, {
107107
trim: false,
108-
maxLength: undefined,
108+
maxLines: undefined,
109109
});
110110

111111
return (

src/components/ErrorBoundary/__tests__/prepareErrorStack.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ describe('prepareErrorStack', () => {
3636
} as Window & typeof globalThis;
3737
});
3838

39-
expect(prepareErrorStack(stack, {trim: false, maxLength: undefined})).toBe(preparedStack);
39+
expect(prepareErrorStack(stack, {trim: false, maxLines: undefined})).toBe(preparedStack);
4040

4141
windowSpy.mockRestore();
4242
});
4343

44-
test('Limit trace to maxLenght', () => {
44+
test('Limit trace to maxLines', () => {
4545
const stack = `TypeError: Cannot read properties of null (reading 'hello')
4646
at Content (/static/js/bundle.js:4725:8)
4747
at renderWithHooks (/static/js/bundle.js:98993:22)
@@ -59,7 +59,7 @@ describe('prepareErrorStack', () => {
5959
at renderWithHooks (/static/js/bundle.js:98993:22)
6060
at mountIndeterminateComponent (/static/js/bundle.js:102964:17)`;
6161

62-
expect(prepareErrorStack(stack, {trim: false, maxLength: 3})).toBe(preparedStack);
62+
expect(prepareErrorStack(stack, {trim: false, maxLines: 3})).toBe(preparedStack);
6363
});
6464

6565
test('Trims data if needed', () => {
Lines changed: 16 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,22 @@
1+
import {prepareErrorMessage} from '../../utils/prepareErrorMessage';
2+
13
export async function collectDiagnosticsData(error: Error) {
2-
return await Promise.all([getUiVersion(), getBackendVersion()]).then(
3-
([uiVersion, backendVersion]) => {
4-
return {
5-
location: window.location.href,
6-
userAgent: navigator.userAgent,
7-
error: {
8-
message: prepareErrorMessage(error),
9-
stack: prepareErrorStack(error.stack, {trim: true, maxLength: 10}),
10-
},
11-
uiVersion,
12-
backendVersion,
13-
};
14-
},
15-
);
4+
return await getBackendVersion().then((backendVersion) => {
5+
return {
6+
location: window.location.href,
7+
userAgent: navigator.userAgent,
8+
error: {
9+
message: prepareErrorMessage(error),
10+
stack: prepareErrorStack(error.stack, {trim: true, maxLines: 10}),
11+
},
12+
uiVersion: process.env.UI_VERSION,
13+
backendVersion,
14+
};
15+
});
1616
}
1717

1818
export type DiagnosticsData = Awaited<ReturnType<typeof collectDiagnosticsData>>;
1919

20-
// Error could happen on app init, while modules not inited
21-
// Import in try catch blocks to prevent any errors with error data collection
22-
async function getUiVersion() {
23-
try {
24-
const packageJson = await import('../../../package.json');
25-
return packageJson.version;
26-
} catch (error) {
27-
return {error: prepareErrorMessage(error)};
28-
}
29-
}
30-
3120
async function getBackendVersion() {
3221
try {
3322
// node_id=. returns data about node that fullfills request
@@ -40,19 +29,9 @@ async function getBackendVersion() {
4029
}
4130
}
4231

43-
function prepareErrorMessage(error: unknown) {
44-
if (error) {
45-
if (typeof error === 'object' && 'message' in error && typeof error.message === 'string') {
46-
return error.message;
47-
}
48-
}
49-
50-
return '';
51-
}
52-
5332
export function prepareErrorStack(
5433
stack?: string,
55-
{trim = true, maxLength}: {trim?: boolean; maxLength?: number} = {},
34+
{trim = true, maxLines}: {trim?: boolean; maxLines?: number} = {},
5635
) {
5736
return (
5837
stack
@@ -73,7 +52,7 @@ export function prepareErrorStack(
7352
return preparedLine;
7453
})
7554
// Do not slice first row
76-
.slice(0, maxLength ? maxLength + 1 : undefined)
55+
.slice(0, maxLines ? maxLines + 1 : undefined)
7756
.join('\n')
7857
);
7958
}
Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import {prepareErrorMessage} from '../../../utils/prepareErrorMessage';
12
import i18n from '../i18n';
23

34
interface ResponseErrorProps {
@@ -11,19 +12,7 @@ export const ResponseError = ({
1112
className,
1213
defaultMessage = i18n('responseError.defaultMessage'),
1314
}: ResponseErrorProps) => {
14-
let statusText = '';
15+
const message = prepareErrorMessage(error) || defaultMessage;
1516

16-
if (error && typeof error === 'string') {
17-
statusText = error;
18-
}
19-
if (error && typeof error === 'object') {
20-
if ('data' in error && typeof error.data === 'string') {
21-
statusText = error.data;
22-
} else if ('statusText' in error && typeof error.statusText === 'string') {
23-
statusText = error.statusText;
24-
} else if ('message' in error && typeof error.message === 'string') {
25-
statusText = error.message;
26-
}
27-
}
28-
return <div className={`error ${className}`}>{statusText || defaultMessage}</div>;
17+
return <div className={`error ${className}`}>{message}</div>;
2918
};

src/containers/UserSettings/settings.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ import {Lang, defaultLang} from '../../utils/i18n';
2121
import type {SettingProps, SettingsInfoFieldProps} from './Setting';
2222
import i18n from './i18n';
2323

24-
import packageJson from '../../../package.json';
25-
2624
export interface SettingsSection {
2725
id: string;
2826
title: string;
@@ -143,7 +141,7 @@ export const autocompleteOnEnterSetting: SettingProps = {
143141
export const interfaceVersionInfoField: SettingsInfoFieldProps = {
144142
title: i18n('settings.about.interfaceVersionInfoField.title'),
145143
type: 'info',
146-
content: packageJson.version,
144+
content: process.env.UI_VERSION,
147145
};
148146

149147
export const appearanceSection: SettingsSection = {

src/utils/prepareErrorMessage.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export function prepareErrorMessage(error: unknown) {
2+
if (error && typeof error === 'string') {
3+
return error;
4+
}
5+
6+
if (error && typeof error === 'object') {
7+
if ('data' in error && typeof error.data === 'string') {
8+
return error.data;
9+
} else if ('statusText' in error && typeof error.statusText === 'string') {
10+
return error.statusText;
11+
} else if ('message' in error && typeof error.message === 'string') {
12+
return error.message;
13+
}
14+
}
15+
16+
return '';
17+
}

0 commit comments

Comments
 (0)