Skip to content

Commit c6be6c0

Browse files
authored
[kibanaUtils] Don't import full semver client side (elastic#114986)
1 parent 27c7c6f commit c6be6c0

File tree

25 files changed

+119
-104
lines changed

25 files changed

+119
-104
lines changed

.eslintrc.js

+90-75
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,78 @@ const DEV_PATTERNS = [
156156
'x-pack/plugins/*/server/scripts/**/*',
157157
];
158158

159+
/** Restricted imports with suggested alternatives */
160+
const RESTRICTED_IMPORTS = [
161+
{
162+
name: 'lodash',
163+
importNames: ['set', 'setWith'],
164+
message: 'Please use @elastic/safer-lodash-set instead',
165+
},
166+
{
167+
name: 'lodash.set',
168+
message: 'Please use @elastic/safer-lodash-set instead',
169+
},
170+
{
171+
name: 'lodash.setwith',
172+
message: 'Please use @elastic/safer-lodash-set instead',
173+
},
174+
{
175+
name: 'lodash/set',
176+
message: 'Please use @elastic/safer-lodash-set instead',
177+
},
178+
{
179+
name: 'lodash/setWith',
180+
message: 'Please use @elastic/safer-lodash-set instead',
181+
},
182+
{
183+
name: 'lodash/fp',
184+
importNames: ['set', 'setWith', 'assoc', 'assocPath'],
185+
message: 'Please use @elastic/safer-lodash-set instead',
186+
},
187+
{
188+
name: 'lodash/fp/set',
189+
message: 'Please use @elastic/safer-lodash-set instead',
190+
},
191+
{
192+
name: 'lodash/fp/setWith',
193+
message: 'Please use @elastic/safer-lodash-set instead',
194+
},
195+
{
196+
name: 'lodash/fp/assoc',
197+
message: 'Please use @elastic/safer-lodash-set instead',
198+
},
199+
{
200+
name: 'lodash/fp/assocPath',
201+
message: 'Please use @elastic/safer-lodash-set instead',
202+
},
203+
{
204+
name: 'lodash',
205+
importNames: ['template'],
206+
message: 'lodash.template is unsafe, and not compatible with our content security policy.',
207+
},
208+
{
209+
name: 'lodash.template',
210+
message: 'lodash.template is unsafe, and not compatible with our content security policy.',
211+
},
212+
{
213+
name: 'lodash/template',
214+
message: 'lodash.template is unsafe, and not compatible with our content security policy.',
215+
},
216+
{
217+
name: 'lodash/fp',
218+
importNames: ['template'],
219+
message: 'lodash.template is unsafe, and not compatible with our content security policy.',
220+
},
221+
{
222+
name: 'lodash/fp/template',
223+
message: 'lodash.template is unsafe, and not compatible with our content security policy.',
224+
},
225+
{
226+
name: 'react-use',
227+
message: 'Please use react-use/lib/{method} instead.',
228+
},
229+
];
230+
159231
module.exports = {
160232
root: true,
161233

@@ -668,81 +740,7 @@ module.exports = {
668740
'no-restricted-imports': [
669741
2,
670742
{
671-
paths: [
672-
{
673-
name: 'lodash',
674-
importNames: ['set', 'setWith'],
675-
message: 'Please use @elastic/safer-lodash-set instead',
676-
},
677-
{
678-
name: 'lodash.set',
679-
message: 'Please use @elastic/safer-lodash-set instead',
680-
},
681-
{
682-
name: 'lodash.setwith',
683-
message: 'Please use @elastic/safer-lodash-set instead',
684-
},
685-
{
686-
name: 'lodash/set',
687-
message: 'Please use @elastic/safer-lodash-set instead',
688-
},
689-
{
690-
name: 'lodash/setWith',
691-
message: 'Please use @elastic/safer-lodash-set instead',
692-
},
693-
{
694-
name: 'lodash/fp',
695-
importNames: ['set', 'setWith', 'assoc', 'assocPath'],
696-
message: 'Please use @elastic/safer-lodash-set instead',
697-
},
698-
{
699-
name: 'lodash/fp/set',
700-
message: 'Please use @elastic/safer-lodash-set instead',
701-
},
702-
{
703-
name: 'lodash/fp/setWith',
704-
message: 'Please use @elastic/safer-lodash-set instead',
705-
},
706-
{
707-
name: 'lodash/fp/assoc',
708-
message: 'Please use @elastic/safer-lodash-set instead',
709-
},
710-
{
711-
name: 'lodash/fp/assocPath',
712-
message: 'Please use @elastic/safer-lodash-set instead',
713-
},
714-
{
715-
name: 'lodash',
716-
importNames: ['template'],
717-
message:
718-
'lodash.template is unsafe, and not compatible with our content security policy.',
719-
},
720-
{
721-
name: 'lodash.template',
722-
message:
723-
'lodash.template is unsafe, and not compatible with our content security policy.',
724-
},
725-
{
726-
name: 'lodash/template',
727-
message:
728-
'lodash.template is unsafe, and not compatible with our content security policy.',
729-
},
730-
{
731-
name: 'lodash/fp',
732-
importNames: ['template'],
733-
message:
734-
'lodash.template is unsafe, and not compatible with our content security policy.',
735-
},
736-
{
737-
name: 'lodash/fp/template',
738-
message:
739-
'lodash.template is unsafe, and not compatible with our content security policy.',
740-
},
741-
{
742-
name: 'react-use',
743-
message: 'Please use react-use/lib/{method} instead.',
744-
},
745-
],
743+
paths: RESTRICTED_IMPORTS,
746744
},
747745
],
748746
'no-restricted-modules': [
@@ -835,6 +833,23 @@ module.exports = {
835833
],
836834
},
837835
},
836+
{
837+
files: ['**/common/**/*.{js,mjs,ts,tsx}', '**/public/**/*.{js,mjs,ts,tsx}'],
838+
rules: {
839+
'no-restricted-imports': [
840+
2,
841+
{
842+
paths: [
843+
...RESTRICTED_IMPORTS,
844+
{
845+
name: 'semver',
846+
message: 'Please use "semver/*/{function}" instead',
847+
},
848+
],
849+
},
850+
],
851+
},
852+
},
838853

839854
/**
840855
* APM and Observability overrides

packages/kbn-optimizer/limits.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pageLoadAssetSize:
88
console: 46091
99
core: 435325
1010
crossClusterReplication: 65408
11-
dashboard: 374194
11+
dashboard: 186763
1212
dashboardEnhanced: 65646
1313
devTools: 38637
1414
discover: 99999
@@ -99,7 +99,7 @@ pageLoadAssetSize:
9999
expressionMetricVis: 23121
100100
visTypeMetric: 23332
101101
bfetch: 22837
102-
kibanaUtils: 97808
102+
kibanaUtils: 79713
103103
data: 491273
104104
dataViews: 41532
105105
expressions: 140958

src/plugins/dashboard/common/saved_dashboard_references.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* in compliance with, at your election, the Elastic License 2.0 or the Server
66
* Side Public License, v 1.
77
*/
8-
import Semver from 'semver';
8+
import semverGt from 'semver/functions/gt';
99
import { SavedObjectAttributes, SavedObjectReference } from '../../../core/types';
1010
import { DashboardContainerStateWithType, DashboardPanelState } from './types';
1111
import { EmbeddablePersistableStateService } from '../../embeddable/common/types';
@@ -23,7 +23,7 @@ export interface SavedObjectAttributesAndReferences {
2323
}
2424

2525
const isPre730Panel = (panel: Record<string, string>): boolean => {
26-
return 'version' in panel ? Semver.gt('7.3.0', panel.version) : true;
26+
return 'version' in panel ? semverGt('7.3.0', panel.version) : true;
2727
};
2828

2929
function dashboardAttributesToState(attributes: SavedObjectAttributes): {

src/plugins/kibana_utils/common/persistable_state/migrate_to_latest.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Side Public License, v 1.
77
*/
88

9-
import { compare } from 'semver';
9+
import compare from 'semver/functions/compare';
1010
import { SerializableRecord } from '@kbn/utility-types';
1111
import { VersionedState, MigrateFunctionsObject } from './types';
1212

x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import React, { useCallback, useMemo } from 'react';
99
import { EuiText, EuiButton, EuiSpacer } from '@elastic/eui';
1010
import { FormattedMessage } from '@kbn/i18n/react';
1111
import { i18n } from '@kbn/i18n';
12-
import semver from 'semver';
12+
import semverMajor from 'semver/functions/major';
13+
import semverMinor from 'semver/functions/minor';
14+
import semverPatch from 'semver/functions/patch';
1315

1416
import type { AgentPolicy } from '../../types';
1517
import { useKibanaVersion } from '../../hooks';
@@ -21,9 +23,7 @@ export const DownloadStep = () => {
2123
const kibanaVersion = useKibanaVersion();
2224
const kibanaVersionURLString = useMemo(
2325
() =>
24-
`${semver.major(kibanaVersion)}-${semver.minor(kibanaVersion)}-${semver.patch(
25-
kibanaVersion
26-
)}`,
26+
`${semverMajor(kibanaVersion)}-${semverMinor(kibanaVersion)}-${semverPatch(kibanaVersion)}`,
2727
[kibanaVersion]
2828
);
2929
return {

x-pack/plugins/index_management/__jest__/client_integration/helpers/setup_environment.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import React from 'react';
99
import axios from 'axios';
1010
import axiosXhrAdapter from 'axios/lib/adapters/xhr';
1111
import { merge } from 'lodash';
12-
import { SemVer } from 'semver';
12+
import SemVer from 'semver/classes/semver';
1313

1414
import {
1515
notificationServiceMock,

x-pack/plugins/index_management/public/application/app_context.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import React, { createContext, useContext } from 'react';
99
import { ScopedHistory } from 'kibana/public';
10-
import { SemVer } from 'semver';
10+
import SemVer from 'semver/classes/semver';
1111
import { ManagementAppMountParams } from 'src/plugins/management/public';
1212
import { UsageCollectionSetup } from 'src/plugins/usage_collection/public';
1313

x-pack/plugins/index_management/public/application/components/mappings_editor/__jest__/client_integration/helpers/setup_environment.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import React from 'react';
9-
import { SemVer } from 'semver';
9+
import SemVer from 'semver/classes/semver';
1010

1111
/* eslint-disable-next-line @kbn/eslint/no-restricted-paths */
1212
import '../../../../../../../../../../src/plugins/es_ui_shared/public/components/code_editor/jest_mock';

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/edit_field/edit_field.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
EuiSpacer,
2020
EuiCallOut,
2121
} from '@elastic/eui';
22-
import { SemVer } from 'semver';
22+
import SemVer from 'semver/classes/semver';
2323

2424
import { documentationService } from '../../../../../../services/documentation';
2525
import { Form, FormHook, FormDataProvider } from '../../../../shared_imports';

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/boolean_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import React from 'react';
9-
import { SemVer } from 'semver';
9+
import SemVer from 'semver/classes/semver';
1010

1111
import { i18n } from '@kbn/i18n';
1212

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/date_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import React from 'react';
9-
import { SemVer } from 'semver';
9+
import SemVer from 'semver/classes/semver';
1010
import { i18n } from '@kbn/i18n';
1111

1212
import { NormalizedField, Field as FieldType } from '../../../../types';

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/flattened_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import React from 'react';
99
import { i18n } from '@kbn/i18n';
10-
import { SemVer } from 'semver';
10+
import SemVer from 'semver/classes/semver';
1111

1212
import { NormalizedField, Field as FieldType } from '../../../../types';
1313
import { UseField, Field } from '../../../../shared_imports';

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import { ComponentType } from 'react';
9-
import { SemVer } from 'semver';
9+
import SemVer from 'semver/classes/semver';
1010

1111
import { MainType, SubType, DataType, NormalizedField, NormalizedFields } from '../../../../types';
1212

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/ip_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import React from 'react';
9-
import { SemVer } from 'semver';
9+
import SemVer from 'semver/classes/semver';
1010

1111
import { NormalizedField, Field as FieldType } from '../../../../types';
1212
import { getFieldConfig } from '../../../../lib';

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/keyword_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import React from 'react';
9-
import { SemVer } from 'semver';
9+
import SemVer from 'semver/classes/semver';
1010
import { i18n } from '@kbn/i18n';
1111

1212
import { documentationService } from '../../../../../../services/documentation';

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/numeric_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import React from 'react';
99
import { i18n } from '@kbn/i18n';
10-
import { SemVer } from 'semver';
10+
import SemVer from 'semver/classes/semver';
1111

1212
import { NormalizedField, Field as FieldType, ComboBoxOption } from '../../../../types';
1313
import { getFieldConfig } from '../../../../lib';

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/range_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import React from 'react';
9-
import { SemVer } from 'semver';
9+
import SemVer from 'semver/classes/semver';
1010

1111
import {
1212
NormalizedField,

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/text_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import React from 'react';
99
import { EuiSpacer, EuiDualRange, EuiFormRow, EuiCallOut } from '@elastic/eui';
1010
import { i18n } from '@kbn/i18n';
11-
import { SemVer } from 'semver';
11+
import SemVer from 'semver/classes/semver';
1212

1313
import { documentationService } from '../../../../../../services/documentation';
1414
import { NormalizedField, Field as FieldType } from '../../../../types';

x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/token_count_type.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import React from 'react';
9-
import { SemVer } from 'semver';
9+
import SemVer from 'semver/classes/semver';
1010
import { i18n } from '@kbn/i18n';
1111

1212
import { documentationService } from '../../../../../../services/documentation';

x-pack/plugins/index_management/public/application/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import React from 'react';
99
import { Provider } from 'react-redux';
1010
import { render, unmountComponentAtNode } from 'react-dom';
11-
import { SemVer } from 'semver';
11+
import SemVer from 'semver/classes/semver';
1212

1313
import { CoreStart, CoreSetup } from '../../../../../src/core/public';
1414

x-pack/plugins/index_management/public/application/lib/indices.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* 2.0; you may not use this file except in compliance with the Elastic License
55
* 2.0.
66
*/
7-
import { SemVer } from 'semver';
7+
import SemVer from 'semver/classes/semver';
88

99
import { MAJOR_VERSION } from '../../../common';
1010
import { Index } from '../../../common';

0 commit comments

Comments
 (0)