From ba88a2b3b7078bb33d68894ace35fd74b5951067 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 3 Sep 2021 06:34:19 -0400 Subject: [PATCH 01/32] [TSVB] Add migration script for 'drop_last_bucket' value (#110782) (#110956) * [TSVB] Add migration script for 'drop_last_bucket' value * Update visualization_saved_object_migrations.test.ts * fix PR comments Co-authored-by: Alexey Antonov --- .../visualize_embeddable_factory.ts | 15 +++- .../visualization_common_migrations.ts | 21 +++++ ...ualization_saved_object_migrations.test.ts | 81 +++++++++++++++++++ .../visualization_saved_object_migrations.ts | 21 ++++- 4 files changed, 136 insertions(+), 2 deletions(-) diff --git a/src/plugins/visualizations/server/embeddable/visualize_embeddable_factory.ts b/src/plugins/visualizations/server/embeddable/visualize_embeddable_factory.ts index 043f6195cf7b4..43a8ab3d507d8 100644 --- a/src/plugins/visualizations/server/embeddable/visualize_embeddable_factory.ts +++ b/src/plugins/visualizations/server/embeddable/visualize_embeddable_factory.ts @@ -16,6 +16,7 @@ import { commonMigrateVislibPie, commonAddEmptyValueColorRule, commonMigrateTagCloud, + commonAddDropLastBucketIntoTSVBModel, } from '../migrations/visualization_common_migrations'; const byValueAddSupportOfDualIndexSelectionModeInTSVB = (state: SerializableRecord) => { @@ -32,6 +33,13 @@ const byValueHideTSVBLastValueIndicator = (state: SerializableRecord) => { }; }; +const byValueAddDropLastBucketIntoTSVBModel = (state: SerializableRecord) => { + return { + ...state, + savedVis: commonAddDropLastBucketIntoTSVBModel(state.savedVis), + }; +}; + const byValueRemoveDefaultIndexPatternAndTimeFieldFromTSVBModel = (state: SerializableRecord) => { return { ...state, @@ -72,7 +80,12 @@ export const visualizeEmbeddableFactory = (): EmbeddableRegistryDefinition => { byValueRemoveDefaultIndexPatternAndTimeFieldFromTSVBModel )(state), '7.14.0': (state) => - flow(byValueAddEmptyValueColorRule, byValueMigrateVislibPie, byValueMigrateTagcloud)(state), + flow( + byValueAddEmptyValueColorRule, + byValueMigrateVislibPie, + byValueMigrateTagcloud, + byValueAddDropLastBucketIntoTSVBModel + )(state), }, }; }; diff --git a/src/plugins/visualizations/server/migrations/visualization_common_migrations.ts b/src/plugins/visualizations/server/migrations/visualization_common_migrations.ts index 17b1470a40062..2503ac2c54b12 100644 --- a/src/plugins/visualizations/server/migrations/visualization_common_migrations.ts +++ b/src/plugins/visualizations/server/migrations/visualization_common_migrations.ts @@ -20,6 +20,27 @@ export const commonAddSupportOfDualIndexSelectionModeInTSVB = (visState: any) => return visState; }; +export const commonAddDropLastBucketIntoTSVBModel = (visState: any) => { + if (visState && visState.type === 'metrics') { + return { + ...visState, + params: { + ...visState.params, + series: visState.params?.series?.map((s: any) => + s.override_index_pattern + ? { + ...s, + series_drop_last_bucket: s.series_drop_last_bucket ?? 1, + } + : s + ), + drop_last_bucket: visState.params.drop_last_bucket ?? 1, + }, + }; + } + return visState; +}; + export const commonHideTSVBLastValueIndicator = (visState: any) => { if (visState && visState.type === 'metrics' && visState.params.type !== 'timeseries') { return { diff --git a/src/plugins/visualizations/server/migrations/visualization_saved_object_migrations.test.ts b/src/plugins/visualizations/server/migrations/visualization_saved_object_migrations.test.ts index 869a9add89066..00c7e26715e6c 100644 --- a/src/plugins/visualizations/server/migrations/visualization_saved_object_migrations.test.ts +++ b/src/plugins/visualizations/server/migrations/visualization_saved_object_migrations.test.ts @@ -2115,6 +2115,87 @@ describe('migration visualization', () => { }); }); + describe('7.14.0 tsvb - add drop last bucket into TSVB model', () => { + const migrate = (doc: any) => + visualizationSavedObjectTypeMigrations['7.14.0']( + doc as Parameters[0], + savedObjectMigrationContext + ); + + const createTestDocWithType = (params: any) => ({ + attributes: { + title: 'My Vis', + description: 'This is my super cool vis.', + visState: `{ + "type":"metrics", + "params": ${JSON.stringify(params)} + }`, + }, + }); + + it('should add "drop_last_bucket" into model if it not exist', () => { + const params = {}; + const migratedTestDoc = migrate(createTestDocWithType(params)); + const { params: migratedParams } = JSON.parse(migratedTestDoc.attributes.visState); + + expect(migratedParams).toMatchInlineSnapshot(` + Object { + "drop_last_bucket": 1, + } + `); + }); + + it('should add "series_drop_last_bucket" into model if it not exist', () => { + const params = { + series: [ + { + override_index_pattern: 1, + }, + { + override_index_pattern: 1, + }, + { override_index_pattern: 0 }, + {}, + { + override_index_pattern: 1, + series_drop_last_bucket: 0, + }, + { + override_index_pattern: 1, + series_drop_last_bucket: 1, + }, + ], + }; + const migratedTestDoc = migrate(createTestDocWithType(params)); + const { params: migratedParams } = JSON.parse(migratedTestDoc.attributes.visState); + + expect(migratedParams.series).toMatchInlineSnapshot(` + Array [ + Object { + "override_index_pattern": 1, + "series_drop_last_bucket": 1, + }, + Object { + "override_index_pattern": 1, + "series_drop_last_bucket": 1, + }, + Object { + "override_index_pattern": 0, + }, + Object {}, + Object { + "override_index_pattern": 1, + "series_drop_last_bucket": 0, + }, + Object { + "override_index_pattern": 1, + "series_drop_last_bucket": 1, + }, + ] + `); + }); + }); + describe('7.14.0 update pie visualization defaults', () => { const migrate = (doc: any) => visualizationSavedObjectTypeMigrations['7.14.0']( diff --git a/src/plugins/visualizations/server/migrations/visualization_saved_object_migrations.ts b/src/plugins/visualizations/server/migrations/visualization_saved_object_migrations.ts index 1f50e26ea9ec1..fd08ecd748668 100644 --- a/src/plugins/visualizations/server/migrations/visualization_saved_object_migrations.ts +++ b/src/plugins/visualizations/server/migrations/visualization_saved_object_migrations.ts @@ -18,6 +18,7 @@ import { commonMigrateVislibPie, commonAddEmptyValueColorRule, commonMigrateTagCloud, + commonAddDropLastBucketIntoTSVBModel, } from './visualization_common_migrations'; const migrateIndexPattern: SavedObjectMigrationFn = (doc) => { @@ -945,6 +946,23 @@ const hideTSVBLastValueIndicator: SavedObjectMigrationFn = (doc) => { return doc; }; +const addDropLastBucketIntoTSVBModel: SavedObjectMigrationFn = (doc) => { + try { + const visState = JSON.parse(doc.attributes.visState); + const newVisState = commonAddDropLastBucketIntoTSVBModel(visState); + return { + ...doc, + attributes: { + ...doc.attributes, + visState: JSON.stringify(newVisState), + }, + }; + } catch (e) { + // Let it go, the data is invalid and we'll leave it as is + } + return doc; +}; + const removeDefaultIndexPatternAndTimeFieldFromTSVBModel: SavedObjectMigrationFn = ( doc ) => { @@ -1100,6 +1118,7 @@ export const visualizationSavedObjectTypeMigrations = { addEmptyValueColorRule, migrateVislibPie, migrateTagCloud, - replaceIndexPatternReference + replaceIndexPatternReference, + addDropLastBucketIntoTSVBModel ), }; From c13f6ad381fa64d14a9bb7a715d6ab3f90b142c0 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Fri, 3 Sep 2021 13:47:26 +0300 Subject: [PATCH 02/32] Move to vis_types folder part 2 (#110574) (#111092) * Move to vis_types folder part 2 * fix jest tests * do some tests * revert * Test Tiago's fix Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> # Conflicts: # .github/CODEOWNERS --- .i18nrc.json | 6 ++-- api_docs/core.json | 8 ++--- api_docs/data.json | 20 ++++++------ api_docs/deprecations_by_plugin.mdx | 14 ++++----- api_docs/vis_type_vega.json | 4 +-- docs/developer/plugin-list.asciidoc | 6 ++-- src/plugins/vis_type_metric/tsconfig.json | 20 ------------ src/plugins/vis_type_tagcloud/tsconfig.json | 23 -------------- src/plugins/vis_type_vega/tsconfig.json | 31 ------------------- .../metric}/config.ts | 0 .../metric}/jest.config.js | 4 +-- .../metric}/kibana.json | 0 .../__snapshots__/metric_vis_fn.test.ts.snap | 0 .../public/__snapshots__/to_ast.test.ts.snap | 0 .../metric_vis_component.test.tsx.snap | 0 .../metric}/public/components/metric_vis.scss | 0 .../components/metric_vis_component.test.tsx | 0 .../components/metric_vis_component.tsx | 10 +++--- .../public/components/metric_vis_options.tsx | 4 +-- .../components/metric_vis_value.test.tsx | 0 .../public/components/metric_vis_value.tsx | 0 .../metric}/public/index.ts | 0 .../metric}/public/metric_vis_fn.test.ts | 4 +-- .../metric}/public/metric_vis_fn.ts | 6 ++-- .../metric}/public/metric_vis_renderer.tsx | 4 +-- .../metric}/public/metric_vis_type.ts | 6 ++-- .../metric}/public/plugin.ts | 8 ++--- .../metric}/public/services.ts | 4 +-- .../metric}/public/to_ast.test.ts | 0 .../metric}/public/to_ast.ts | 6 ++-- .../metric}/public/types.ts | 6 ++-- .../metric}/server/index.ts | 0 src/plugins/vis_types/metric/tsconfig.json | 20 ++++++++++++ .../tagcloud}/config.ts | 0 .../tagcloud}/jest.config.js | 4 +-- .../tagcloud}/kibana.json | 0 .../public/__snapshots__/to_ast.test.ts.snap | 0 .../public/components/collections.ts | 0 .../components/get_tag_cloud_options.tsx | 0 .../public/components/tag_cloud_options.tsx | 8 ++--- .../tagcloud}/public/index.ts | 0 .../tagcloud}/public/plugin.ts | 4 +-- .../tagcloud}/public/tag_cloud_type.ts | 4 +-- .../tagcloud}/public/to_ast.test.ts | 2 +- .../tagcloud}/public/to_ast.ts | 6 ++-- .../tagcloud}/public/types.ts | 4 +-- .../tagcloud}/server/index.ts | 0 src/plugins/vis_types/tagcloud/tsconfig.json | 23 ++++++++++++++ .../vega}/config.ts | 0 .../vega}/jest.config.js | 4 +-- .../vega}/kibana.json | 0 .../vega_visualization.test.js.snap | 0 .../components/experimental_map_vis_info.tsx | 2 +- .../public/components/vega_actions_menu.tsx | 0 .../vega}/public/components/vega_editor.scss | 0 .../public/components/vega_help_menu.tsx | 0 .../vega}/public/components/vega_vis.scss | 0 .../public/components/vega_vis_component.tsx | 0 .../public/components/vega_vis_editor.tsx | 2 +- .../components/vega_vis_editor_lazy.tsx | 0 .../public/data_model/ems_file_parser.ts | 2 +- .../public/data_model/es_query_parser.test.js | 0 .../public/data_model/es_query_parser.ts | 0 .../public/data_model/search_api.test.ts | 4 +-- .../vega}/public/data_model/search_api.ts | 6 ++-- .../public/data_model/time_cache.test.js | 0 .../vega}/public/data_model/time_cache.ts | 4 +-- .../vega}/public/data_model/types.ts | 0 .../vega}/public/data_model/url_parser.ts | 0 .../vega}/public/data_model/utils.ts | 0 .../public/data_model/vega_parser.test.js | 0 .../vega}/public/data_model/vega_parser.ts | 2 +- .../vega}/public/default.spec.hjson | 0 .../vega}/public/default_spec.ts | 0 .../vega}/public/index.ts | 0 .../public/lib/extract_index_pattern.test.ts | 2 +- .../vega}/public/lib/extract_index_pattern.ts | 2 +- .../public/lib/vega_state_restorer.test.ts | 0 .../vega}/public/lib/vega_state_restorer.ts | 0 .../vega}/public/plugin.ts | 12 +++---- .../vega}/public/services.ts | 4 +-- .../vega}/public/test_utils/default.spec.json | 0 .../vega}/public/test_utils/vega_graph.json | 0 .../public/test_utils/vega_map_test.json | 0 .../public/test_utils/vegalite_graph.json | 0 .../vega}/public/to_ast.ts | 4 +-- .../vega}/public/vega_fn.ts | 10 ++++-- .../vega_inspector/components/data_viewer.tsx | 0 .../public/vega_inspector/components/index.ts | 0 .../components/inspector_data_grid.tsx | 0 .../components/signal_viewer.tsx | 0 .../vega_inspector/components/spec_viewer.tsx | 2 +- .../vega}/public/vega_inspector/index.ts | 0 .../public/vega_inspector/vega_adapter.ts | 0 .../vega_inspector/vega_data_inspector.scss | 0 .../vega_inspector/vega_data_inspector.tsx | 2 +- .../public/vega_inspector/vega_inspector.tsx | 4 +-- .../vega}/public/vega_request_handler.ts | 2 +- .../vega}/public/vega_type.ts | 4 +-- .../public/vega_view/vega_base_view.d.ts | 0 .../vega}/public/vega_view/vega_base_view.js | 2 +- .../vega_view/vega_map_view/constants.ts | 2 +- .../vega_view/vega_map_view/layers/index.ts | 0 .../layers/tms_raster_layer.test.ts | 0 .../vega_map_view/layers/tms_raster_layer.ts | 0 .../vega_view/vega_map_view/layers/types.ts | 0 .../vega_map_view/layers/vega_layer.test.ts | 0 .../vega_map_view/layers/vega_layer.ts | 0 .../map_service_settings.test.ts | 2 +- .../vega_map_view/map_service_settings.ts | 2 +- .../vega_view/vega_map_view/utils/index.ts | 0 .../utils/validation_helper.test.ts | 0 .../vega_map_view/utils/validation_helper.ts | 0 .../vega_map_view/utils/vsi_helper.test.ts | 0 .../vega_map_view/utils/vsi_helper.ts | 0 .../vega_map_view/vega_map_view.scss | 0 .../vega_view/vega_map_view/view.test.ts | 6 ++-- .../public/vega_view/vega_map_view/view.ts | 0 .../vega}/public/vega_view/vega_tooltip.js | 0 .../vega}/public/vega_view/vega_view.d.ts | 0 .../vega}/public/vega_view/vega_view.js | 0 .../vega}/public/vega_vis_renderer.tsx | 2 +- .../vega}/public/vega_visualization.test.js | 4 +-- .../vega}/public/vega_visualization.ts | 0 .../vega}/server/index.ts | 0 .../vega}/server/plugin.ts | 2 +- .../vega}/server/types.ts | 4 +-- .../get_usage_collector.mock.ts | 0 .../get_usage_collector.test.ts | 6 ++-- .../usage_collector/get_usage_collector.ts | 7 +++-- .../vega}/server/usage_collector/index.ts | 0 .../register_vega_collector.test.ts | 4 +-- .../register_vega_collector.ts | 2 +- src/plugins/vis_types/vega/tsconfig.json | 31 +++++++++++++++++++ 134 files changed, 213 insertions(+), 206 deletions(-) delete mode 100644 src/plugins/vis_type_metric/tsconfig.json delete mode 100644 src/plugins/vis_type_tagcloud/tsconfig.json delete mode 100644 src/plugins/vis_type_vega/tsconfig.json rename src/plugins/{vis_type_metric => vis_types/metric}/config.ts (100%) rename src/plugins/{vis_type_vega => vis_types/metric}/jest.config.js (83%) rename src/plugins/{vis_type_metric => vis_types/metric}/kibana.json (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/__snapshots__/metric_vis_fn.test.ts.snap (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/__snapshots__/to_ast.test.ts.snap (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/components/__snapshots__/metric_vis_component.test.tsx.snap (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/components/metric_vis.scss (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/components/metric_vis_component.test.tsx (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/components/metric_vis_component.tsx (95%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/components/metric_vis_options.tsx (98%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/components/metric_vis_value.test.tsx (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/components/metric_vis_value.tsx (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/index.ts (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/metric_vis_fn.test.ts (90%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/metric_vis_fn.ts (97%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/metric_vis_renderer.tsx (88%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/metric_vis_type.ts (93%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/plugin.ts (86%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/services.ts (79%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/to_ast.test.ts (100%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/to_ast.ts (97%) rename src/plugins/{vis_type_metric => vis_types/metric}/public/types.ts (84%) rename src/plugins/{vis_type_metric => vis_types/metric}/server/index.ts (100%) create mode 100644 src/plugins/vis_types/metric/tsconfig.json rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/config.ts (100%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/jest.config.js (84%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/kibana.json (100%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/__snapshots__/to_ast.test.ts.snap (100%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/components/collections.ts (100%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/components/get_tag_cloud_options.tsx (100%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/components/tag_cloud_options.tsx (92%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/index.ts (100%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/plugin.ts (91%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/tag_cloud_type.ts (94%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/to_ast.test.ts (97%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/to_ast.ts (95%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/public/types.ts (85%) rename src/plugins/{vis_type_tagcloud => vis_types/tagcloud}/server/index.ts (100%) create mode 100644 src/plugins/vis_types/tagcloud/tsconfig.json rename src/plugins/{vis_type_vega => vis_types/vega}/config.ts (100%) rename src/plugins/{vis_type_metric => vis_types/vega}/jest.config.js (83%) rename src/plugins/{vis_type_vega => vis_types/vega}/kibana.json (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/__snapshots__/vega_visualization.test.js.snap (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/components/experimental_map_vis_info.tsx (96%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/components/vega_actions_menu.tsx (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/components/vega_editor.scss (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/components/vega_help_menu.tsx (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/components/vega_vis.scss (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/components/vega_vis_component.tsx (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/components/vega_vis_editor.tsx (97%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/components/vega_vis_editor_lazy.tsx (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/ems_file_parser.ts (97%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/es_query_parser.test.js (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/es_query_parser.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/search_api.test.ts (95%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/search_api.ts (95%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/time_cache.test.js (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/time_cache.ts (95%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/types.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/url_parser.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/utils.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/vega_parser.test.js (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/data_model/vega_parser.ts (99%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/default.spec.hjson (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/default_spec.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/index.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/lib/extract_index_pattern.test.ts (97%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/lib/extract_index_pattern.ts (94%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/lib/vega_state_restorer.test.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/lib/vega_state_restorer.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/plugin.ts (89%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/services.ts (91%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/test_utils/default.spec.json (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/test_utils/vega_graph.json (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/test_utils/vega_map_test.json (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/test_utils/vegalite_graph.json (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/to_ast.ts (90%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_fn.ts (89%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/components/data_viewer.tsx (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/components/index.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/components/inspector_data_grid.tsx (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/components/signal_viewer.tsx (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/components/spec_viewer.tsx (97%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/index.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/vega_adapter.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/vega_data_inspector.scss (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/vega_data_inspector.tsx (96%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_inspector/vega_inspector.tsx (94%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_request_handler.ts (96%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_type.ts (95%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_base_view.d.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_base_view.js (99%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/constants.ts (94%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/layers/index.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/layers/tms_raster_layer.test.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/layers/tms_raster_layer.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/layers/types.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/layers/vega_layer.test.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/layers/vega_layer.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/map_service_settings.test.ts (98%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/map_service_settings.ts (97%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/utils/index.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/utils/validation_helper.test.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/utils/validation_helper.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/utils/vsi_helper.test.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/utils/vsi_helper.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/vega_map_view.scss (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/view.test.ts (97%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_map_view/view.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_tooltip.js (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_view.d.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_view/vega_view.js (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_vis_renderer.tsx (94%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_visualization.test.js (97%) rename src/plugins/{vis_type_vega => vis_types/vega}/public/vega_visualization.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/index.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/plugin.ts (97%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/types.ts (87%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/usage_collector/get_usage_collector.mock.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/usage_collector/get_usage_collector.test.ts (94%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/usage_collector/get_usage_collector.ts (95%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/usage_collector/index.ts (100%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/usage_collector/register_vega_collector.test.ts (95%) rename src/plugins/{vis_type_vega => vis_types/vega}/server/usage_collector/register_vega_collector.ts (93%) create mode 100644 src/plugins/vis_types/vega/tsconfig.json diff --git a/.i18nrc.json b/.i18nrc.json index 65a2e150c3c62..12f6fb6370017 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -62,11 +62,11 @@ "uiActions": "src/plugins/ui_actions", "visDefaultEditor": "src/plugins/vis_default_editor", "visTypeMarkdown": "src/plugins/vis_type_markdown", - "visTypeMetric": "src/plugins/vis_type_metric", + "visTypeMetric": "src/plugins/vis_types/metric", "visTypeTable": "src/plugins/vis_type_table", - "visTypeTagCloud": "src/plugins/vis_type_tagcloud", + "visTypeTagCloud": "src/plugins/vis_types/tagcloud", "visTypeTimeseries": "src/plugins/vis_type_timeseries", - "visTypeVega": "src/plugins/vis_type_vega", + "visTypeVega": "src/plugins/vis_types/vega", "visTypeVislib": "src/plugins/vis_types/vislib", "visTypeXy": "src/plugins/vis_types/xy", "visTypePie": "src/plugins/vis_types/pie", diff --git a/api_docs/core.json b/api_docs/core.json index 29af41d76f075..e66f83b3ecbcd 100644 --- a/api_docs/core.json +++ b/api_docs/core.json @@ -1125,7 +1125,7 @@ "references": [ { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/plugin.ts" + "path": "src/plugins/vis_types/vega/public/plugin.ts" } ] }, @@ -1423,15 +1423,15 @@ }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/data_model/search_api.ts" + "path": "src/plugins/vis_types/vega/public/data_model/search_api.ts" }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/plugin.ts" + "path": "src/plugins/vis_types/vega/public/plugin.ts" }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/target/types/public/data_model/search_api.d.ts" + "path": "src/plugins/vis_types/vega/target/types/public/data_model/search_api.d.ts" } ] } diff --git a/api_docs/data.json b/api_docs/data.json index be8cd141524e2..0a9d61be6102e 100644 --- a/api_docs/data.json +++ b/api_docs/data.json @@ -16235,11 +16235,11 @@ }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" }, { "plugin": "dashboard", @@ -20354,15 +20354,15 @@ }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" } ], "children": [ @@ -22474,7 +22474,7 @@ }, { "plugin": "visTypeMetric", - "path": "src/plugins/vis_type_metric/public/plugin.ts" + "path": "src/plugins/vis_types/metric/public/plugin.ts" }, { "plugin": "visTypeTable", @@ -30651,11 +30651,11 @@ }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" }, { "plugin": "dashboard", @@ -37100,11 +37100,11 @@ }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" }, { "plugin": "visTypeVega", - "path": "src/plugins/vis_type_vega/public/vega_request_handler.ts" + "path": "src/plugins/vis_types/vega/public/vega_request_handler.ts" }, { "plugin": "dashboard", diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index cbfe59e18ce16..59547b7f0138e 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -709,7 +709,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [plugin.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_metric/public/plugin.ts#:~:text=fieldFormats) | - | +| | [plugin.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/metric/public/plugin.ts#:~:text=fieldFormats) | - | @@ -768,12 +768,12 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=esQuery), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=esQuery), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=esQuery) | 8.1 | -| | [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=Filter), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=Filter) | 8.1 | -| | [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=Filter), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=Filter) | 8.1 | -| | [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=Filter), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/vega_request_handler.ts#:~:text=Filter) | 8.1 | -| | [plugin.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/plugin.ts#:~:text=injectedMetadata) | - | -| | [search_api.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/data_model/search_api.ts#:~:text=injectedMetadata), [plugin.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/public/plugin.ts#:~:text=injectedMetadata), [search_api.d.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_type_vega/target/types/public/data_model/search_api.d.ts#:~:text=injectedMetadata) | - | +| | [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=esQuery), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=esQuery), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=esQuery) | 8.1 | +| | [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=Filter), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=Filter) | 8.1 | +| | [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=Filter), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=Filter) | 8.1 | +| | [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=Filter), [vega_request_handler.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/vega_request_handler.ts#:~:text=Filter) | 8.1 | +| | [plugin.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/plugin.ts#:~:text=injectedMetadata) | - | +| | [search_api.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/data_model/search_api.ts#:~:text=injectedMetadata), [plugin.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/public/plugin.ts#:~:text=injectedMetadata), [search_api.d.ts](https://github.com/elastic/kibana/tree/master/src/plugins/vis_types/vega/target/types/public/data_model/search_api.d.ts#:~:text=injectedMetadata) | - | diff --git a/api_docs/vis_type_vega.json b/api_docs/vis_type_vega.json index 88a5bda07a2f2..1ecbc7c48f289 100644 --- a/api_docs/vis_type_vega.json +++ b/api_docs/vis_type_vega.json @@ -22,7 +22,7 @@ "tags": [], "label": "VisTypeVegaPluginStart", "description": [], - "path": "src/plugins/vis_type_vega/server/types.ts", + "path": "src/plugins/vis_types/vega/server/types.ts", "deprecated": false, "children": [], "lifecycle": "start", @@ -35,7 +35,7 @@ "tags": [], "label": "VisTypeVegaPluginSetup", "description": [], - "path": "src/plugins/vis_type_vega/server/types.ts", + "path": "src/plugins/vis_types/vega/server/types.ts", "deprecated": false, "children": [], "lifecycle": "setup", diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 87db0e0d17028..5aa70d71183cb 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -290,7 +290,7 @@ The plugin exposes the static DefaultEditorController class to consume. |The markdown visualization that can be used to place text panels on dashboards. -|{kib-repo}blob/{branch}/src/plugins/vis_type_metric[visTypeMetric] +|{kib-repo}blob/{branch}/src/plugins/vis_types/metric[visTypeMetric] |WARNING: Missing README. @@ -302,7 +302,7 @@ The plugin exposes the static DefaultEditorController class to consume. |Contains the data table visualization, that allows presenting data in a simple table format. -|{kib-repo}blob/{branch}/src/plugins/vis_type_tagcloud[visTypeTagcloud] +|{kib-repo}blob/{branch}/src/plugins/vis_types/tagcloud[visTypeTagcloud] |WARNING: Missing README. @@ -314,7 +314,7 @@ The plugin exposes the static DefaultEditorController class to consume. |WARNING: Missing README. -|{kib-repo}blob/{branch}/src/plugins/vis_type_vega[visTypeVega] +|{kib-repo}blob/{branch}/src/plugins/vis_types/vega[visTypeVega] |WARNING: Missing README. diff --git a/src/plugins/vis_type_metric/tsconfig.json b/src/plugins/vis_type_metric/tsconfig.json deleted file mode 100644 index e430ec2460796..0000000000000 --- a/src/plugins/vis_type_metric/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true - }, - "include": ["public/**/*", "server/**/*", "*.ts"], - "references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../visualizations/tsconfig.json" }, - { "path": "../charts/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../vis_default_editor/tsconfig.json" }, - { "path": "../field_formats/tsconfig.json" } - ] -} diff --git a/src/plugins/vis_type_tagcloud/tsconfig.json b/src/plugins/vis_type_tagcloud/tsconfig.json deleted file mode 100644 index 043eed06c6bcb..0000000000000 --- a/src/plugins/vis_type_tagcloud/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true - }, - "include": [ - "public/**/*", - "server/**/*", - "*.ts" - ], - "references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../visualizations/tsconfig.json" }, - { "path": "../charts/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../vis_default_editor/tsconfig.json" }, - ] -} diff --git a/src/plugins/vis_type_vega/tsconfig.json b/src/plugins/vis_type_vega/tsconfig.json deleted file mode 100644 index 62bdd0262b4a5..0000000000000 --- a/src/plugins/vis_type_vega/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, - "strictNullChecks": false - }, - "include": [ - "server/**/*", - "public/**/*", - "*.ts", - // have to declare *.json explicitly due to https://github.com/microsoft/TypeScript/issues/25636 - "public/test_utils/vega_map_test.json" - ], - "references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../visualizations/tsconfig.json" }, - { "path": "../maps_ems/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../inspector/tsconfig.json" }, - { "path": "../home/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../vis_default_editor/tsconfig.json" }, - { "path": "../es_ui_shared/tsconfig.json" }, - ] -} diff --git a/src/plugins/vis_type_metric/config.ts b/src/plugins/vis_types/metric/config.ts similarity index 100% rename from src/plugins/vis_type_metric/config.ts rename to src/plugins/vis_types/metric/config.ts diff --git a/src/plugins/vis_type_vega/jest.config.js b/src/plugins/vis_types/metric/jest.config.js similarity index 83% rename from src/plugins/vis_type_vega/jest.config.js rename to src/plugins/vis_types/metric/jest.config.js index c3e2ea5203364..a84929a3805b8 100644 --- a/src/plugins/vis_type_vega/jest.config.js +++ b/src/plugins/vis_types/metric/jest.config.js @@ -8,6 +8,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../..', - roots: ['/src/plugins/vis_type_vega'], + rootDir: '../../../..', + roots: ['/src/plugins/vis_types/metric'], }; diff --git a/src/plugins/vis_type_metric/kibana.json b/src/plugins/vis_types/metric/kibana.json similarity index 100% rename from src/plugins/vis_type_metric/kibana.json rename to src/plugins/vis_types/metric/kibana.json diff --git a/src/plugins/vis_type_metric/public/__snapshots__/metric_vis_fn.test.ts.snap b/src/plugins/vis_types/metric/public/__snapshots__/metric_vis_fn.test.ts.snap similarity index 100% rename from src/plugins/vis_type_metric/public/__snapshots__/metric_vis_fn.test.ts.snap rename to src/plugins/vis_types/metric/public/__snapshots__/metric_vis_fn.test.ts.snap diff --git a/src/plugins/vis_type_metric/public/__snapshots__/to_ast.test.ts.snap b/src/plugins/vis_types/metric/public/__snapshots__/to_ast.test.ts.snap similarity index 100% rename from src/plugins/vis_type_metric/public/__snapshots__/to_ast.test.ts.snap rename to src/plugins/vis_types/metric/public/__snapshots__/to_ast.test.ts.snap diff --git a/src/plugins/vis_type_metric/public/components/__snapshots__/metric_vis_component.test.tsx.snap b/src/plugins/vis_types/metric/public/components/__snapshots__/metric_vis_component.test.tsx.snap similarity index 100% rename from src/plugins/vis_type_metric/public/components/__snapshots__/metric_vis_component.test.tsx.snap rename to src/plugins/vis_types/metric/public/components/__snapshots__/metric_vis_component.test.tsx.snap diff --git a/src/plugins/vis_type_metric/public/components/metric_vis.scss b/src/plugins/vis_types/metric/public/components/metric_vis.scss similarity index 100% rename from src/plugins/vis_type_metric/public/components/metric_vis.scss rename to src/plugins/vis_types/metric/public/components/metric_vis.scss diff --git a/src/plugins/vis_type_metric/public/components/metric_vis_component.test.tsx b/src/plugins/vis_types/metric/public/components/metric_vis_component.test.tsx similarity index 100% rename from src/plugins/vis_type_metric/public/components/metric_vis_component.test.tsx rename to src/plugins/vis_types/metric/public/components/metric_vis_component.test.tsx diff --git a/src/plugins/vis_type_metric/public/components/metric_vis_component.tsx b/src/plugins/vis_types/metric/public/components/metric_vis_component.tsx similarity index 95% rename from src/plugins/vis_type_metric/public/components/metric_vis_component.tsx rename to src/plugins/vis_types/metric/public/components/metric_vis_component.tsx index 87ca902f6c090..c3735bdc0d79a 100644 --- a/src/plugins/vis_type_metric/public/components/metric_vis_component.tsx +++ b/src/plugins/vis_types/metric/public/components/metric_vis_component.tsx @@ -11,13 +11,13 @@ import React, { Component } from 'react'; import { isColorDark } from '@elastic/eui'; import { MetricVisValue } from './metric_vis_value'; import { Input } from '../metric_vis_fn'; -import type { FieldFormatsContentType, IFieldFormat } from '../../../field_formats/common'; -import { Datatable } from '../../../expressions/public'; -import { getHeatmapColors } from '../../../charts/public'; +import type { FieldFormatsContentType, IFieldFormat } from '../../../../field_formats/common'; +import { Datatable } from '../../../../expressions/public'; +import { getHeatmapColors } from '../../../../charts/public'; import { VisParams, MetricVisMetric } from '../types'; import { getFormatService } from '../services'; -import { SchemaConfig } from '../../../visualizations/public'; -import { Range } from '../../../expressions/public'; +import { SchemaConfig } from '../../../../visualizations/public'; +import { Range } from '../../../../expressions/public'; import './metric_vis.scss'; diff --git a/src/plugins/vis_type_metric/public/components/metric_vis_options.tsx b/src/plugins/vis_types/metric/public/components/metric_vis_options.tsx similarity index 98% rename from src/plugins/vis_type_metric/public/components/metric_vis_options.tsx rename to src/plugins/vis_types/metric/public/components/metric_vis_options.tsx index 5c6c4bf95b4f2..22152b331a907 100644 --- a/src/plugins/vis_type_metric/public/components/metric_vis_options.tsx +++ b/src/plugins/vis_types/metric/public/components/metric_vis_options.tsx @@ -27,8 +27,8 @@ import { ColorSchemaOptions, RangeOption, PercentageModeOption, -} from '../../../vis_default_editor/public'; -import { ColorMode, colorSchemas } from '../../../charts/public'; +} from '../../../../vis_default_editor/public'; +import { ColorMode, colorSchemas } from '../../../../charts/public'; import { MetricVisParam, VisParams } from '../types'; const metricColorMode = [ diff --git a/src/plugins/vis_type_metric/public/components/metric_vis_value.test.tsx b/src/plugins/vis_types/metric/public/components/metric_vis_value.test.tsx similarity index 100% rename from src/plugins/vis_type_metric/public/components/metric_vis_value.test.tsx rename to src/plugins/vis_types/metric/public/components/metric_vis_value.test.tsx diff --git a/src/plugins/vis_type_metric/public/components/metric_vis_value.tsx b/src/plugins/vis_types/metric/public/components/metric_vis_value.tsx similarity index 100% rename from src/plugins/vis_type_metric/public/components/metric_vis_value.tsx rename to src/plugins/vis_types/metric/public/components/metric_vis_value.tsx diff --git a/src/plugins/vis_type_metric/public/index.ts b/src/plugins/vis_types/metric/public/index.ts similarity index 100% rename from src/plugins/vis_type_metric/public/index.ts rename to src/plugins/vis_types/metric/public/index.ts diff --git a/src/plugins/vis_type_metric/public/metric_vis_fn.test.ts b/src/plugins/vis_types/metric/public/metric_vis_fn.test.ts similarity index 90% rename from src/plugins/vis_type_metric/public/metric_vis_fn.test.ts rename to src/plugins/vis_types/metric/public/metric_vis_fn.test.ts index 432b1f2fe02b7..3844c0f21ed05 100644 --- a/src/plugins/vis_type_metric/public/metric_vis_fn.test.ts +++ b/src/plugins/vis_types/metric/public/metric_vis_fn.test.ts @@ -7,8 +7,8 @@ */ import { createMetricVisFn } from './metric_vis_fn'; -import { functionWrapper } from '../../expressions/common/expression_functions/specs/tests/utils'; -import { Datatable } from '../../expressions/common/expression_types/specs'; +import { functionWrapper } from '../../../expressions/common/expression_functions/specs/tests/utils'; +import { Datatable } from '../../../expressions/common/expression_types/specs'; describe('interpreter/functions#metric', () => { const fn = functionWrapper(createMetricVisFn()); diff --git a/src/plugins/vis_type_metric/public/metric_vis_fn.ts b/src/plugins/vis_types/metric/public/metric_vis_fn.ts similarity index 97% rename from src/plugins/vis_type_metric/public/metric_vis_fn.ts rename to src/plugins/vis_types/metric/public/metric_vis_fn.ts index ab62c3e941e28..9a144defed4e7 100644 --- a/src/plugins/vis_type_metric/public/metric_vis_fn.ts +++ b/src/plugins/vis_types/metric/public/metric_vis_fn.ts @@ -14,10 +14,10 @@ import { Range, Render, Style, -} from '../../expressions/public'; +} from '../../../expressions/public'; import { visType, DimensionsVisParam, VisParams } from './types'; -import { prepareLogTable, Dimension } from '../../visualizations/public'; -import { ColorSchemas, vislibColorMaps, ColorMode } from '../../charts/public'; +import { prepareLogTable, Dimension } from '../../../visualizations/public'; +import { ColorSchemas, vislibColorMaps, ColorMode } from '../../../charts/public'; export type Input = Datatable; diff --git a/src/plugins/vis_type_metric/public/metric_vis_renderer.tsx b/src/plugins/vis_types/metric/public/metric_vis_renderer.tsx similarity index 88% rename from src/plugins/vis_type_metric/public/metric_vis_renderer.tsx rename to src/plugins/vis_types/metric/public/metric_vis_renderer.tsx index 0fc904a325a99..0bd2efbfe2efb 100644 --- a/src/plugins/vis_type_metric/public/metric_vis_renderer.tsx +++ b/src/plugins/vis_types/metric/public/metric_vis_renderer.tsx @@ -9,8 +9,8 @@ import React, { lazy } from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; -import { VisualizationContainer } from '../../visualizations/public'; -import { ExpressionRenderDefinition } from '../../expressions/common/expression_renderers'; +import { VisualizationContainer } from '../../../visualizations/public'; +import { ExpressionRenderDefinition } from '../../../expressions/common/expression_renderers'; import { MetricVisRenderValue } from './metric_vis_fn'; // @ts-ignore const MetricVisComponent = lazy(() => import('./components/metric_vis_component')); diff --git a/src/plugins/vis_type_metric/public/metric_vis_type.ts b/src/plugins/vis_types/metric/public/metric_vis_type.ts similarity index 93% rename from src/plugins/vis_type_metric/public/metric_vis_type.ts rename to src/plugins/vis_types/metric/public/metric_vis_type.ts index 382ef925c5282..9fc3856ba0edf 100644 --- a/src/plugins/vis_type_metric/public/metric_vis_type.ts +++ b/src/plugins/vis_types/metric/public/metric_vis_type.ts @@ -8,9 +8,9 @@ import { i18n } from '@kbn/i18n'; import { MetricVisOptions } from './components/metric_vis_options'; -import { ColorSchemas, ColorMode } from '../../charts/public'; -import { VisTypeDefinition } from '../../visualizations/public'; -import { AggGroupNames } from '../../data/public'; +import { ColorSchemas, ColorMode } from '../../../charts/public'; +import { VisTypeDefinition } from '../../../visualizations/public'; +import { AggGroupNames } from '../../../data/public'; import { toExpressionAst } from './to_ast'; import { VisParams } from './types'; diff --git a/src/plugins/vis_type_metric/public/plugin.ts b/src/plugins/vis_types/metric/public/plugin.ts similarity index 86% rename from src/plugins/vis_type_metric/public/plugin.ts rename to src/plugins/vis_types/metric/public/plugin.ts index 051a10eb3c72f..205c02d8e9c3b 100644 --- a/src/plugins/vis_type_metric/public/plugin.ts +++ b/src/plugins/vis_types/metric/public/plugin.ts @@ -7,13 +7,13 @@ */ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'kibana/public'; -import { Plugin as ExpressionsPublicPlugin } from '../../expressions/public'; -import { VisualizationsSetup } from '../../visualizations/public'; +import { Plugin as ExpressionsPublicPlugin } from '../../../expressions/public'; +import { VisualizationsSetup } from '../../../visualizations/public'; import { createMetricVisFn } from './metric_vis_fn'; import { createMetricVisTypeDefinition } from './metric_vis_type'; -import { ChartsPluginSetup } from '../../charts/public'; -import { DataPublicPluginStart } from '../../data/public'; +import { ChartsPluginSetup } from '../../../charts/public'; +import { DataPublicPluginStart } from '../../../data/public'; import { setFormatService } from './services'; import { ConfigSchema } from '../config'; import { metricVisRenderer } from './metric_vis_renderer'; diff --git a/src/plugins/vis_type_metric/public/services.ts b/src/plugins/vis_types/metric/public/services.ts similarity index 79% rename from src/plugins/vis_type_metric/public/services.ts rename to src/plugins/vis_types/metric/public/services.ts index 96d6b0f7a1cd3..e705513675e71 100644 --- a/src/plugins/vis_type_metric/public/services.ts +++ b/src/plugins/vis_types/metric/public/services.ts @@ -6,8 +6,8 @@ * Side Public License, v 1. */ -import { createGetterSetter } from '../../kibana_utils/common'; -import { DataPublicPluginStart } from '../../data/public'; +import { createGetterSetter } from '../../../kibana_utils/common'; +import { DataPublicPluginStart } from '../../../data/public'; export const [getFormatService, setFormatService] = createGetterSetter< DataPublicPluginStart['fieldFormats'] diff --git a/src/plugins/vis_type_metric/public/to_ast.test.ts b/src/plugins/vis_types/metric/public/to_ast.test.ts similarity index 100% rename from src/plugins/vis_type_metric/public/to_ast.test.ts rename to src/plugins/vis_types/metric/public/to_ast.test.ts diff --git a/src/plugins/vis_type_metric/public/to_ast.ts b/src/plugins/vis_types/metric/public/to_ast.ts similarity index 97% rename from src/plugins/vis_type_metric/public/to_ast.ts rename to src/plugins/vis_types/metric/public/to_ast.ts index ec9c2b3b0157e..10c782c9a50fb 100644 --- a/src/plugins/vis_type_metric/public/to_ast.ts +++ b/src/plugins/vis_types/metric/public/to_ast.ts @@ -7,13 +7,13 @@ */ import { get } from 'lodash'; -import { getVisSchemas, SchemaConfig, VisToExpressionAst } from '../../visualizations/public'; -import { buildExpression, buildExpressionFunction } from '../../expressions/public'; +import { getVisSchemas, SchemaConfig, VisToExpressionAst } from '../../../visualizations/public'; +import { buildExpression, buildExpressionFunction } from '../../../expressions/public'; import { MetricVisExpressionFunctionDefinition } from './metric_vis_fn'; import { EsaggsExpressionFunctionDefinition, IndexPatternLoadExpressionFunctionDefinition, -} from '../../data/public'; +} from '../../../data/public'; import { VisParams } from './types'; const prepareDimension = (params: SchemaConfig) => { diff --git a/src/plugins/vis_type_metric/public/types.ts b/src/plugins/vis_types/metric/public/types.ts similarity index 84% rename from src/plugins/vis_type_metric/public/types.ts rename to src/plugins/vis_types/metric/public/types.ts index 45b8e17425891..1baaa25959f31 100644 --- a/src/plugins/vis_type_metric/public/types.ts +++ b/src/plugins/vis_types/metric/public/types.ts @@ -6,9 +6,9 @@ * Side Public License, v 1. */ -import { Range } from '../../expressions/public'; -import { SchemaConfig } from '../../visualizations/public'; -import { ColorMode, Labels, Style, ColorSchemas } from '../../charts/public'; +import { Range } from '../../../expressions/public'; +import { SchemaConfig } from '../../../visualizations/public'; +import { ColorMode, Labels, Style, ColorSchemas } from '../../../charts/public'; export const visType = 'metric'; diff --git a/src/plugins/vis_type_metric/server/index.ts b/src/plugins/vis_types/metric/server/index.ts similarity index 100% rename from src/plugins/vis_type_metric/server/index.ts rename to src/plugins/vis_types/metric/server/index.ts diff --git a/src/plugins/vis_types/metric/tsconfig.json b/src/plugins/vis_types/metric/tsconfig.json new file mode 100644 index 0000000000000..e8c878425ff70 --- /dev/null +++ b/src/plugins/vis_types/metric/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true + }, + "include": ["public/**/*", "server/**/*", "*.ts"], + "references": [ + { "path": "../../../core/tsconfig.json" }, + { "path": "../../data/tsconfig.json" }, + { "path": "../../visualizations/tsconfig.json" }, + { "path": "../../charts/tsconfig.json" }, + { "path": "../../expressions/tsconfig.json" }, + { "path": "../../kibana_utils/tsconfig.json" }, + { "path": "../../vis_default_editor/tsconfig.json" }, + { "path": "../../field_formats/tsconfig.json" } + ] +} diff --git a/src/plugins/vis_type_tagcloud/config.ts b/src/plugins/vis_types/tagcloud/config.ts similarity index 100% rename from src/plugins/vis_type_tagcloud/config.ts rename to src/plugins/vis_types/tagcloud/config.ts diff --git a/src/plugins/vis_type_tagcloud/jest.config.js b/src/plugins/vis_types/tagcloud/jest.config.js similarity index 84% rename from src/plugins/vis_type_tagcloud/jest.config.js rename to src/plugins/vis_types/tagcloud/jest.config.js index 3d24c536792bb..20dfd8ad0d11c 100644 --- a/src/plugins/vis_type_tagcloud/jest.config.js +++ b/src/plugins/vis_types/tagcloud/jest.config.js @@ -8,7 +8,7 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../..', - roots: ['/src/plugins/vis_type_tagcloud'], + rootDir: '../../../..', + roots: ['/src/plugins/vis_types/tagcloud'], testRunner: 'jasmine2', }; diff --git a/src/plugins/vis_type_tagcloud/kibana.json b/src/plugins/vis_types/tagcloud/kibana.json similarity index 100% rename from src/plugins/vis_type_tagcloud/kibana.json rename to src/plugins/vis_types/tagcloud/kibana.json diff --git a/src/plugins/vis_type_tagcloud/public/__snapshots__/to_ast.test.ts.snap b/src/plugins/vis_types/tagcloud/public/__snapshots__/to_ast.test.ts.snap similarity index 100% rename from src/plugins/vis_type_tagcloud/public/__snapshots__/to_ast.test.ts.snap rename to src/plugins/vis_types/tagcloud/public/__snapshots__/to_ast.test.ts.snap diff --git a/src/plugins/vis_type_tagcloud/public/components/collections.ts b/src/plugins/vis_types/tagcloud/public/components/collections.ts similarity index 100% rename from src/plugins/vis_type_tagcloud/public/components/collections.ts rename to src/plugins/vis_types/tagcloud/public/components/collections.ts diff --git a/src/plugins/vis_type_tagcloud/public/components/get_tag_cloud_options.tsx b/src/plugins/vis_types/tagcloud/public/components/get_tag_cloud_options.tsx similarity index 100% rename from src/plugins/vis_type_tagcloud/public/components/get_tag_cloud_options.tsx rename to src/plugins/vis_types/tagcloud/public/components/get_tag_cloud_options.tsx diff --git a/src/plugins/vis_type_tagcloud/public/components/tag_cloud_options.tsx b/src/plugins/vis_types/tagcloud/public/components/tag_cloud_options.tsx similarity index 92% rename from src/plugins/vis_type_tagcloud/public/components/tag_cloud_options.tsx rename to src/plugins/vis_types/tagcloud/public/components/tag_cloud_options.tsx index 6682799a8038a..ff5f1e6edd6f8 100644 --- a/src/plugins/vis_type_tagcloud/public/components/tag_cloud_options.tsx +++ b/src/plugins/vis_types/tagcloud/public/components/tag_cloud_options.tsx @@ -9,10 +9,10 @@ import React, { useState, useEffect } from 'react'; import { EuiPanel } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { PaletteRegistry } from '../../../charts/public'; -import { VisEditorOptionsProps } from '../../../visualizations/public'; -import { SelectOption, SwitchOption, PalettePicker } from '../../../vis_default_editor/public'; -import { ValidatedDualRange } from '../../../kibana_react/public'; +import type { PaletteRegistry } from '../../../../charts/public'; +import { VisEditorOptionsProps } from '../../../../visualizations/public'; +import { SelectOption, SwitchOption, PalettePicker } from '../../../../vis_default_editor/public'; +import { ValidatedDualRange } from '../../../../kibana_react/public'; import { TagCloudVisParams, TagCloudTypeProps } from '../types'; import { collections } from './collections'; diff --git a/src/plugins/vis_type_tagcloud/public/index.ts b/src/plugins/vis_types/tagcloud/public/index.ts similarity index 100% rename from src/plugins/vis_type_tagcloud/public/index.ts rename to src/plugins/vis_types/tagcloud/public/index.ts diff --git a/src/plugins/vis_type_tagcloud/public/plugin.ts b/src/plugins/vis_types/tagcloud/public/plugin.ts similarity index 91% rename from src/plugins/vis_type_tagcloud/public/plugin.ts rename to src/plugins/vis_types/tagcloud/public/plugin.ts index 06e1c516d9e61..cc99480de7099 100644 --- a/src/plugins/vis_type_tagcloud/public/plugin.ts +++ b/src/plugins/vis_types/tagcloud/public/plugin.ts @@ -7,8 +7,8 @@ */ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'kibana/public'; -import { VisualizationsSetup } from '../../visualizations/public'; -import { ChartsPluginSetup } from '../../charts/public'; +import { VisualizationsSetup } from '../../../visualizations/public'; +import { ChartsPluginSetup } from '../../../charts/public'; import { getTagCloudVisTypeDefinition } from './tag_cloud_type'; import { ConfigSchema } from '../config'; diff --git a/src/plugins/vis_type_tagcloud/public/tag_cloud_type.ts b/src/plugins/vis_types/tagcloud/public/tag_cloud_type.ts similarity index 94% rename from src/plugins/vis_type_tagcloud/public/tag_cloud_type.ts rename to src/plugins/vis_types/tagcloud/public/tag_cloud_type.ts index b3ab5cd3d7af7..a193a7fecc1fd 100644 --- a/src/plugins/vis_type_tagcloud/public/tag_cloud_type.ts +++ b/src/plugins/vis_types/tagcloud/public/tag_cloud_type.ts @@ -7,8 +7,8 @@ */ import { i18n } from '@kbn/i18n'; -import { AggGroupNames } from '../../data/public'; -import { VIS_EVENT_TO_TRIGGER } from '../../visualizations/public'; +import { AggGroupNames } from '../../../data/public'; +import { VIS_EVENT_TO_TRIGGER } from '../../../visualizations/public'; import { getTagCloudOptions } from './components/get_tag_cloud_options'; import { toExpressionAst } from './to_ast'; diff --git a/src/plugins/vis_type_tagcloud/public/to_ast.test.ts b/src/plugins/vis_types/tagcloud/public/to_ast.test.ts similarity index 97% rename from src/plugins/vis_type_tagcloud/public/to_ast.test.ts rename to src/plugins/vis_types/tagcloud/public/to_ast.test.ts index 4da9c525a4f93..c70448ab113cb 100644 --- a/src/plugins/vis_type_tagcloud/public/to_ast.test.ts +++ b/src/plugins/vis_types/tagcloud/public/to_ast.test.ts @@ -30,7 +30,7 @@ const mockSchemas = { ], }; -jest.mock('../../visualizations/public', () => ({ +jest.mock('../../../visualizations/public', () => ({ getVisSchemas: () => mockSchemas, })); diff --git a/src/plugins/vis_type_tagcloud/public/to_ast.ts b/src/plugins/vis_types/tagcloud/public/to_ast.ts similarity index 95% rename from src/plugins/vis_type_tagcloud/public/to_ast.ts rename to src/plugins/vis_types/tagcloud/public/to_ast.ts index c8810aa0397ee..b5256c586d1da 100644 --- a/src/plugins/vis_type_tagcloud/public/to_ast.ts +++ b/src/plugins/vis_types/tagcloud/public/to_ast.ts @@ -9,9 +9,9 @@ import { EsaggsExpressionFunctionDefinition, IndexPatternLoadExpressionFunctionDefinition, -} from '../../data/public'; -import { buildExpression, buildExpressionFunction } from '../../expressions/public'; -import { getVisSchemas, SchemaConfig, VisToExpressionAst } from '../../visualizations/public'; +} from '../../../data/public'; +import { buildExpression, buildExpressionFunction } from '../../../expressions/public'; +import { getVisSchemas, SchemaConfig, VisToExpressionAst } from '../../../visualizations/public'; import { TagCloudVisParams } from './types'; const prepareDimension = (params: SchemaConfig) => { diff --git a/src/plugins/vis_type_tagcloud/public/types.ts b/src/plugins/vis_types/tagcloud/public/types.ts similarity index 85% rename from src/plugins/vis_type_tagcloud/public/types.ts rename to src/plugins/vis_types/tagcloud/public/types.ts index d855ae5ab65c6..28a7c6506eb31 100644 --- a/src/plugins/vis_type_tagcloud/public/types.ts +++ b/src/plugins/vis_types/tagcloud/public/types.ts @@ -5,8 +5,8 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import type { ChartsPluginSetup, PaletteOutput } from '../../charts/public'; -import type { SerializedFieldFormat } from '../../expressions/public'; +import type { ChartsPluginSetup, PaletteOutput } from '../../../charts/public'; +import type { SerializedFieldFormat } from '../../../expressions/public'; interface Dimension { accessor: number; diff --git a/src/plugins/vis_type_tagcloud/server/index.ts b/src/plugins/vis_types/tagcloud/server/index.ts similarity index 100% rename from src/plugins/vis_type_tagcloud/server/index.ts rename to src/plugins/vis_types/tagcloud/server/index.ts diff --git a/src/plugins/vis_types/tagcloud/tsconfig.json b/src/plugins/vis_types/tagcloud/tsconfig.json new file mode 100644 index 0000000000000..4087f9f04c92b --- /dev/null +++ b/src/plugins/vis_types/tagcloud/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true + }, + "include": [ + "public/**/*", + "server/**/*", + "*.ts" + ], + "references": [ + { "path": "../../../core/tsconfig.json" }, + { "path": "../../data/tsconfig.json" }, + { "path": "../../expressions/tsconfig.json" }, + { "path": "../../visualizations/tsconfig.json" }, + { "path": "../../charts/tsconfig.json" }, + { "path": "../../kibana_react/tsconfig.json" }, + { "path": "../../vis_default_editor/tsconfig.json" }, + ] +} diff --git a/src/plugins/vis_type_vega/config.ts b/src/plugins/vis_types/vega/config.ts similarity index 100% rename from src/plugins/vis_type_vega/config.ts rename to src/plugins/vis_types/vega/config.ts diff --git a/src/plugins/vis_type_metric/jest.config.js b/src/plugins/vis_types/vega/jest.config.js similarity index 83% rename from src/plugins/vis_type_metric/jest.config.js rename to src/plugins/vis_types/vega/jest.config.js index 3029320d2e4d4..d7e1653e891a5 100644 --- a/src/plugins/vis_type_metric/jest.config.js +++ b/src/plugins/vis_types/vega/jest.config.js @@ -8,6 +8,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../..', - roots: ['/src/plugins/vis_type_metric'], + rootDir: '../../../..', + roots: ['/src/plugins/vis_types/vega'], }; diff --git a/src/plugins/vis_type_vega/kibana.json b/src/plugins/vis_types/vega/kibana.json similarity index 100% rename from src/plugins/vis_type_vega/kibana.json rename to src/plugins/vis_types/vega/kibana.json diff --git a/src/plugins/vis_type_vega/public/__snapshots__/vega_visualization.test.js.snap b/src/plugins/vis_types/vega/public/__snapshots__/vega_visualization.test.js.snap similarity index 100% rename from src/plugins/vis_type_vega/public/__snapshots__/vega_visualization.test.js.snap rename to src/plugins/vis_types/vega/public/__snapshots__/vega_visualization.test.js.snap diff --git a/src/plugins/vis_type_vega/public/components/experimental_map_vis_info.tsx b/src/plugins/vis_types/vega/public/components/experimental_map_vis_info.tsx similarity index 96% rename from src/plugins/vis_type_vega/public/components/experimental_map_vis_info.tsx rename to src/plugins/vis_types/vega/public/components/experimental_map_vis_info.tsx index ca0cb0f0ff797..2de6eb490196c 100644 --- a/src/plugins/vis_type_vega/public/components/experimental_map_vis_info.tsx +++ b/src/plugins/vis_types/vega/public/components/experimental_map_vis_info.tsx @@ -10,7 +10,7 @@ import { parse } from 'hjson'; import React from 'react'; import { EuiCallOut, EuiLink } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { Vis } from '../../../visualizations/public'; +import { Vis } from '../../../../visualizations/public'; function ExperimentalMapLayerInfo() { const title = ( diff --git a/src/plugins/vis_type_vega/public/components/vega_actions_menu.tsx b/src/plugins/vis_types/vega/public/components/vega_actions_menu.tsx similarity index 100% rename from src/plugins/vis_type_vega/public/components/vega_actions_menu.tsx rename to src/plugins/vis_types/vega/public/components/vega_actions_menu.tsx diff --git a/src/plugins/vis_type_vega/public/components/vega_editor.scss b/src/plugins/vis_types/vega/public/components/vega_editor.scss similarity index 100% rename from src/plugins/vis_type_vega/public/components/vega_editor.scss rename to src/plugins/vis_types/vega/public/components/vega_editor.scss diff --git a/src/plugins/vis_type_vega/public/components/vega_help_menu.tsx b/src/plugins/vis_types/vega/public/components/vega_help_menu.tsx similarity index 100% rename from src/plugins/vis_type_vega/public/components/vega_help_menu.tsx rename to src/plugins/vis_types/vega/public/components/vega_help_menu.tsx diff --git a/src/plugins/vis_type_vega/public/components/vega_vis.scss b/src/plugins/vis_types/vega/public/components/vega_vis.scss similarity index 100% rename from src/plugins/vis_type_vega/public/components/vega_vis.scss rename to src/plugins/vis_types/vega/public/components/vega_vis.scss diff --git a/src/plugins/vis_type_vega/public/components/vega_vis_component.tsx b/src/plugins/vis_types/vega/public/components/vega_vis_component.tsx similarity index 100% rename from src/plugins/vis_type_vega/public/components/vega_vis_component.tsx rename to src/plugins/vis_types/vega/public/components/vega_vis_component.tsx diff --git a/src/plugins/vis_type_vega/public/components/vega_vis_editor.tsx b/src/plugins/vis_types/vega/public/components/vega_vis_editor.tsx similarity index 97% rename from src/plugins/vis_type_vega/public/components/vega_vis_editor.tsx rename to src/plugins/vis_types/vega/public/components/vega_vis_editor.tsx index 9150b31343799..d2f586eac9885 100644 --- a/src/plugins/vis_type_vega/public/components/vega_vis_editor.tsx +++ b/src/plugins/vis_types/vega/public/components/vega_vis_editor.tsx @@ -13,7 +13,7 @@ import 'brace/mode/hjson'; import { i18n } from '@kbn/i18n'; import { VisEditorOptionsProps } from 'src/plugins/visualizations/public'; -import { EuiCodeEditor } from '../../../es_ui_shared/public'; +import { EuiCodeEditor } from '../../../../es_ui_shared/public'; import { getNotifications } from '../services'; import { VisParams } from '../vega_fn'; import { VegaHelpMenu } from './vega_help_menu'; diff --git a/src/plugins/vis_type_vega/public/components/vega_vis_editor_lazy.tsx b/src/plugins/vis_types/vega/public/components/vega_vis_editor_lazy.tsx similarity index 100% rename from src/plugins/vis_type_vega/public/components/vega_vis_editor_lazy.tsx rename to src/plugins/vis_types/vega/public/components/vega_vis_editor_lazy.tsx diff --git a/src/plugins/vis_type_vega/public/data_model/ems_file_parser.ts b/src/plugins/vis_types/vega/public/data_model/ems_file_parser.ts similarity index 97% rename from src/plugins/vis_type_vega/public/data_model/ems_file_parser.ts rename to src/plugins/vis_types/vega/public/data_model/ems_file_parser.ts index c79ebe02c0d3f..3001da2008e40 100644 --- a/src/plugins/vis_type_vega/public/data_model/ems_file_parser.ts +++ b/src/plugins/vis_types/vega/public/data_model/ems_file_parser.ts @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; // @ts-ignore import { bypassExternalUrlCheck } from '../vega_view/vega_base_view'; -import { IServiceSettings, FileLayer } from '../../../maps_ems/public'; +import { IServiceSettings, FileLayer } from '../../../../maps_ems/public'; import { Data, UrlObject, EmsQueryRequest } from './types'; /** diff --git a/src/plugins/vis_type_vega/public/data_model/es_query_parser.test.js b/src/plugins/vis_types/vega/public/data_model/es_query_parser.test.js similarity index 100% rename from src/plugins/vis_type_vega/public/data_model/es_query_parser.test.js rename to src/plugins/vis_types/vega/public/data_model/es_query_parser.test.js diff --git a/src/plugins/vis_type_vega/public/data_model/es_query_parser.ts b/src/plugins/vis_types/vega/public/data_model/es_query_parser.ts similarity index 100% rename from src/plugins/vis_type_vega/public/data_model/es_query_parser.ts rename to src/plugins/vis_types/vega/public/data_model/es_query_parser.ts diff --git a/src/plugins/vis_type_vega/public/data_model/search_api.test.ts b/src/plugins/vis_types/vega/public/data_model/search_api.test.ts similarity index 95% rename from src/plugins/vis_type_vega/public/data_model/search_api.test.ts rename to src/plugins/vis_types/vega/public/data_model/search_api.test.ts index d0739453e43ec..27dc1627ae229 100644 --- a/src/plugins/vis_type_vega/public/data_model/search_api.test.ts +++ b/src/plugins/vis_types/vega/public/data_model/search_api.test.ts @@ -7,9 +7,9 @@ */ import { extendSearchParamsWithRuntimeFields } from './search_api'; -import { dataPluginMock } from '../../../data/public/mocks'; +import { dataPluginMock } from '../../../../data/public/mocks'; -import { getSearchParamsFromRequest, DataPublicPluginStart } from '../../../data/public'; +import { getSearchParamsFromRequest, DataPublicPluginStart } from '../../../../data/public'; const mockComputedFields = ( dataStart: DataPublicPluginStart, diff --git a/src/plugins/vis_type_vega/public/data_model/search_api.ts b/src/plugins/vis_types/vega/public/data_model/search_api.ts similarity index 95% rename from src/plugins/vis_type_vega/public/data_model/search_api.ts rename to src/plugins/vis_types/vega/public/data_model/search_api.ts index efdbf96e54f05..e00cf647930a8 100644 --- a/src/plugins/vis_type_vega/public/data_model/search_api.ts +++ b/src/plugins/vis_types/vega/public/data_model/search_api.ts @@ -14,10 +14,10 @@ import { SearchRequest, DataPublicPluginStart, IEsSearchResponse, -} from '../../../data/public'; -import { search as dataPluginSearch } from '../../../data/public'; +} from '../../../../data/public'; +import { search as dataPluginSearch } from '../../../../data/public'; import type { VegaInspectorAdapters } from '../vega_inspector'; -import type { RequestResponder } from '../../../inspector/public'; +import type { RequestResponder } from '../../../../inspector/public'; /** @internal **/ export const extendSearchParamsWithRuntimeFields = async ( diff --git a/src/plugins/vis_type_vega/public/data_model/time_cache.test.js b/src/plugins/vis_types/vega/public/data_model/time_cache.test.js similarity index 100% rename from src/plugins/vis_type_vega/public/data_model/time_cache.test.js rename to src/plugins/vis_types/vega/public/data_model/time_cache.test.js diff --git a/src/plugins/vis_type_vega/public/data_model/time_cache.ts b/src/plugins/vis_types/vega/public/data_model/time_cache.ts similarity index 95% rename from src/plugins/vis_type_vega/public/data_model/time_cache.ts rename to src/plugins/vis_types/vega/public/data_model/time_cache.ts index 13c01b5fe83bc..cc9619e143437 100644 --- a/src/plugins/vis_type_vega/public/data_model/time_cache.ts +++ b/src/plugins/vis_types/vega/public/data_model/time_cache.ts @@ -6,8 +6,8 @@ * Side Public License, v 1. */ -import { TimefilterContract } from '../../../data/public'; -import { TimeRange } from '../../../data/common'; +import { TimefilterContract } from '../../../../data/public'; +import { TimeRange } from '../../../../data/common'; import { CacheBounds } from './types'; /** diff --git a/src/plugins/vis_type_vega/public/data_model/types.ts b/src/plugins/vis_types/vega/public/data_model/types.ts similarity index 100% rename from src/plugins/vis_type_vega/public/data_model/types.ts rename to src/plugins/vis_types/vega/public/data_model/types.ts diff --git a/src/plugins/vis_type_vega/public/data_model/url_parser.ts b/src/plugins/vis_types/vega/public/data_model/url_parser.ts similarity index 100% rename from src/plugins/vis_type_vega/public/data_model/url_parser.ts rename to src/plugins/vis_types/vega/public/data_model/url_parser.ts diff --git a/src/plugins/vis_type_vega/public/data_model/utils.ts b/src/plugins/vis_types/vega/public/data_model/utils.ts similarity index 100% rename from src/plugins/vis_type_vega/public/data_model/utils.ts rename to src/plugins/vis_types/vega/public/data_model/utils.ts diff --git a/src/plugins/vis_type_vega/public/data_model/vega_parser.test.js b/src/plugins/vis_types/vega/public/data_model/vega_parser.test.js similarity index 100% rename from src/plugins/vis_type_vega/public/data_model/vega_parser.test.js rename to src/plugins/vis_types/vega/public/data_model/vega_parser.test.js diff --git a/src/plugins/vis_type_vega/public/data_model/vega_parser.ts b/src/plugins/vis_types/vega/public/data_model/vega_parser.ts similarity index 99% rename from src/plugins/vis_type_vega/public/data_model/vega_parser.ts rename to src/plugins/vis_types/vega/public/data_model/vega_parser.ts index 95b3b573a6bfa..d59ae46e7cb79 100644 --- a/src/plugins/vis_type_vega/public/data_model/vega_parser.ts +++ b/src/plugins/vis_types/vega/public/data_model/vega_parser.ts @@ -22,7 +22,7 @@ import { EmsFileParser } from './ems_file_parser'; import { UrlParser } from './url_parser'; import { SearchAPI } from './search_api'; import { TimeCache } from './time_cache'; -import { IServiceSettings } from '../../../maps_ems/public'; +import { IServiceSettings } from '../../../../maps_ems/public'; import { Bool, Data, diff --git a/src/plugins/vis_type_vega/public/default.spec.hjson b/src/plugins/vis_types/vega/public/default.spec.hjson similarity index 100% rename from src/plugins/vis_type_vega/public/default.spec.hjson rename to src/plugins/vis_types/vega/public/default.spec.hjson diff --git a/src/plugins/vis_type_vega/public/default_spec.ts b/src/plugins/vis_types/vega/public/default_spec.ts similarity index 100% rename from src/plugins/vis_type_vega/public/default_spec.ts rename to src/plugins/vis_types/vega/public/default_spec.ts diff --git a/src/plugins/vis_type_vega/public/index.ts b/src/plugins/vis_types/vega/public/index.ts similarity index 100% rename from src/plugins/vis_type_vega/public/index.ts rename to src/plugins/vis_types/vega/public/index.ts diff --git a/src/plugins/vis_type_vega/public/lib/extract_index_pattern.test.ts b/src/plugins/vis_types/vega/public/lib/extract_index_pattern.test.ts similarity index 97% rename from src/plugins/vis_type_vega/public/lib/extract_index_pattern.test.ts rename to src/plugins/vis_types/vega/public/lib/extract_index_pattern.test.ts index 6feb8fce9c5a3..39aadc009b93c 100644 --- a/src/plugins/vis_type_vega/public/lib/extract_index_pattern.test.ts +++ b/src/plugins/vis_types/vega/public/lib/extract_index_pattern.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { dataPluginMock } from '../../../data/public/mocks'; +import { dataPluginMock } from '../../../../data/public/mocks'; import { extractIndexPatternsFromSpec } from './extract_index_pattern'; import { setData } from '../services'; diff --git a/src/plugins/vis_type_vega/public/lib/extract_index_pattern.ts b/src/plugins/vis_types/vega/public/lib/extract_index_pattern.ts similarity index 94% rename from src/plugins/vis_type_vega/public/lib/extract_index_pattern.ts rename to src/plugins/vis_types/vega/public/lib/extract_index_pattern.ts index 81f30ca9bbe2c..0d25db665ce7f 100644 --- a/src/plugins/vis_type_vega/public/lib/extract_index_pattern.ts +++ b/src/plugins/vis_types/vega/public/lib/extract_index_pattern.ts @@ -10,7 +10,7 @@ import { flatten } from 'lodash'; import { getData } from '../services'; import type { Data, VegaSpec } from '../data_model/types'; -import type { IndexPattern } from '../../../data/public'; +import type { IndexPattern } from '../../../../data/public'; export const extractIndexPatternsFromSpec = async (spec: VegaSpec) => { const { indexPatterns } = getData(); diff --git a/src/plugins/vis_type_vega/public/lib/vega_state_restorer.test.ts b/src/plugins/vis_types/vega/public/lib/vega_state_restorer.test.ts similarity index 100% rename from src/plugins/vis_type_vega/public/lib/vega_state_restorer.test.ts rename to src/plugins/vis_types/vega/public/lib/vega_state_restorer.test.ts diff --git a/src/plugins/vis_type_vega/public/lib/vega_state_restorer.ts b/src/plugins/vis_types/vega/public/lib/vega_state_restorer.ts similarity index 100% rename from src/plugins/vis_type_vega/public/lib/vega_state_restorer.ts rename to src/plugins/vis_types/vega/public/lib/vega_state_restorer.ts diff --git a/src/plugins/vis_type_vega/public/plugin.ts b/src/plugins/vis_types/vega/public/plugin.ts similarity index 89% rename from src/plugins/vis_type_vega/public/plugin.ts rename to src/plugins/vis_types/vega/public/plugin.ts index f935362d21604..942c1673ad202 100644 --- a/src/plugins/vis_type_vega/public/plugin.ts +++ b/src/plugins/vis_types/vega/public/plugin.ts @@ -6,11 +6,11 @@ * Side Public License, v 1. */ -import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../core/public'; -import { Plugin as ExpressionsPublicPlugin } from '../../expressions/public'; -import { DataPublicPluginSetup, DataPublicPluginStart } from '../../data/public'; -import { VisualizationsSetup } from '../../visualizations/public'; -import { Setup as InspectorSetup } from '../../inspector/public'; +import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../../core/public'; +import { Plugin as ExpressionsPublicPlugin } from '../../../expressions/public'; +import { DataPublicPluginSetup, DataPublicPluginStart } from '../../../data/public'; +import { VisualizationsSetup } from '../../../visualizations/public'; +import { Setup as InspectorSetup } from '../../../inspector/public'; import { setNotifications, @@ -24,7 +24,7 @@ import { import { createVegaFn } from './vega_fn'; import { createVegaTypeDefinition } from './vega_type'; -import { IServiceSettings, MapsEmsPluginSetup } from '../../maps_ems/public'; +import { IServiceSettings, MapsEmsPluginSetup } from '../../../maps_ems/public'; import { ConfigSchema } from '../config'; import { getVegaInspectorView } from './vega_inspector'; diff --git a/src/plugins/vis_type_vega/public/services.ts b/src/plugins/vis_types/vega/public/services.ts similarity index 91% rename from src/plugins/vis_type_vega/public/services.ts rename to src/plugins/vis_types/vega/public/services.ts index f67fe4794e783..1cdb24ff7b02c 100644 --- a/src/plugins/vis_type_vega/public/services.ts +++ b/src/plugins/vis_types/vega/public/services.ts @@ -8,8 +8,8 @@ import { CoreStart, NotificationsStart, IUiSettingsClient, DocLinksStart } from 'src/core/public'; -import { DataPublicPluginStart } from '../../data/public'; -import { createGetterSetter } from '../../kibana_utils/public'; +import { DataPublicPluginStart } from '../../../data/public'; +import { createGetterSetter } from '../../../kibana_utils/public'; import { MapServiceSettings } from './vega_view/vega_map_view/map_service_settings'; export const [getData, setData] = createGetterSetter('Data'); diff --git a/src/plugins/vis_type_vega/public/test_utils/default.spec.json b/src/plugins/vis_types/vega/public/test_utils/default.spec.json similarity index 100% rename from src/plugins/vis_type_vega/public/test_utils/default.spec.json rename to src/plugins/vis_types/vega/public/test_utils/default.spec.json diff --git a/src/plugins/vis_type_vega/public/test_utils/vega_graph.json b/src/plugins/vis_types/vega/public/test_utils/vega_graph.json similarity index 100% rename from src/plugins/vis_type_vega/public/test_utils/vega_graph.json rename to src/plugins/vis_types/vega/public/test_utils/vega_graph.json diff --git a/src/plugins/vis_type_vega/public/test_utils/vega_map_test.json b/src/plugins/vis_types/vega/public/test_utils/vega_map_test.json similarity index 100% rename from src/plugins/vis_type_vega/public/test_utils/vega_map_test.json rename to src/plugins/vis_types/vega/public/test_utils/vega_map_test.json diff --git a/src/plugins/vis_type_vega/public/test_utils/vegalite_graph.json b/src/plugins/vis_types/vega/public/test_utils/vegalite_graph.json similarity index 100% rename from src/plugins/vis_type_vega/public/test_utils/vegalite_graph.json rename to src/plugins/vis_types/vega/public/test_utils/vegalite_graph.json diff --git a/src/plugins/vis_type_vega/public/to_ast.ts b/src/plugins/vis_types/vega/public/to_ast.ts similarity index 90% rename from src/plugins/vis_type_vega/public/to_ast.ts rename to src/plugins/vis_types/vega/public/to_ast.ts index 8f0bd952bc54e..f9ff7effafe49 100644 --- a/src/plugins/vis_type_vega/public/to_ast.ts +++ b/src/plugins/vis_types/vega/public/to_ast.ts @@ -6,8 +6,8 @@ * Side Public License, v 1. */ -import { buildExpression, buildExpressionFunction } from '../../expressions/public'; -import { Vis } from '../../visualizations/public'; +import { buildExpression, buildExpressionFunction } from '../../../expressions/public'; +import { Vis } from '../../../visualizations/public'; import { VegaExpressionFunctionDefinition, VisParams } from './vega_fn'; export const toExpressionAst = (vis: Vis) => { diff --git a/src/plugins/vis_type_vega/public/vega_fn.ts b/src/plugins/vis_types/vega/public/vega_fn.ts similarity index 89% rename from src/plugins/vis_type_vega/public/vega_fn.ts rename to src/plugins/vis_types/vega/public/vega_fn.ts index 775bd2623028b..cbdc131ab7e2a 100644 --- a/src/plugins/vis_type_vega/public/vega_fn.ts +++ b/src/plugins/vis_types/vega/public/vega_fn.ts @@ -8,12 +8,16 @@ import { get } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { ExecutionContextSearch } from '../../data/public'; -import { ExecutionContext, ExpressionFunctionDefinition, Render } from '../../expressions/public'; +import { ExecutionContextSearch } from '../../../data/public'; +import { + ExecutionContext, + ExpressionFunctionDefinition, + Render, +} from '../../../expressions/public'; import { VegaVisualizationDependencies } from './plugin'; import { createVegaRequestHandler } from './vega_request_handler'; import { VegaInspectorAdapters } from './vega_inspector/index'; -import { KibanaContext, TimeRange, Query } from '../../data/public'; +import { KibanaContext, TimeRange, Query } from '../../../data/public'; import { VegaParser } from './data_model/vega_parser'; type Input = KibanaContext | { type: 'null' }; diff --git a/src/plugins/vis_type_vega/public/vega_inspector/components/data_viewer.tsx b/src/plugins/vis_types/vega/public/vega_inspector/components/data_viewer.tsx similarity index 100% rename from src/plugins/vis_type_vega/public/vega_inspector/components/data_viewer.tsx rename to src/plugins/vis_types/vega/public/vega_inspector/components/data_viewer.tsx diff --git a/src/plugins/vis_type_vega/public/vega_inspector/components/index.ts b/src/plugins/vis_types/vega/public/vega_inspector/components/index.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_inspector/components/index.ts rename to src/plugins/vis_types/vega/public/vega_inspector/components/index.ts diff --git a/src/plugins/vis_type_vega/public/vega_inspector/components/inspector_data_grid.tsx b/src/plugins/vis_types/vega/public/vega_inspector/components/inspector_data_grid.tsx similarity index 100% rename from src/plugins/vis_type_vega/public/vega_inspector/components/inspector_data_grid.tsx rename to src/plugins/vis_types/vega/public/vega_inspector/components/inspector_data_grid.tsx diff --git a/src/plugins/vis_type_vega/public/vega_inspector/components/signal_viewer.tsx b/src/plugins/vis_types/vega/public/vega_inspector/components/signal_viewer.tsx similarity index 100% rename from src/plugins/vis_type_vega/public/vega_inspector/components/signal_viewer.tsx rename to src/plugins/vis_types/vega/public/vega_inspector/components/signal_viewer.tsx diff --git a/src/plugins/vis_type_vega/public/vega_inspector/components/spec_viewer.tsx b/src/plugins/vis_types/vega/public/vega_inspector/components/spec_viewer.tsx similarity index 97% rename from src/plugins/vis_type_vega/public/vega_inspector/components/spec_viewer.tsx rename to src/plugins/vis_types/vega/public/vega_inspector/components/spec_viewer.tsx index 135c23b21d7d4..9c13857076d8b 100644 --- a/src/plugins/vis_type_vega/public/vega_inspector/components/spec_viewer.tsx +++ b/src/plugins/vis_types/vega/public/vega_inspector/components/spec_viewer.tsx @@ -19,7 +19,7 @@ import { CommonProps, } from '@elastic/eui'; import { VegaAdapter } from '../vega_adapter'; -import { CodeEditor } from '../../../../kibana_react/public'; +import { CodeEditor } from '../../../../../kibana_react/public'; interface SpecViewerProps extends CommonProps { vegaAdapter: VegaAdapter; diff --git a/src/plugins/vis_type_vega/public/vega_inspector/index.ts b/src/plugins/vis_types/vega/public/vega_inspector/index.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_inspector/index.ts rename to src/plugins/vis_types/vega/public/vega_inspector/index.ts diff --git a/src/plugins/vis_type_vega/public/vega_inspector/vega_adapter.ts b/src/plugins/vis_types/vega/public/vega_inspector/vega_adapter.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_inspector/vega_adapter.ts rename to src/plugins/vis_types/vega/public/vega_inspector/vega_adapter.ts diff --git a/src/plugins/vis_type_vega/public/vega_inspector/vega_data_inspector.scss b/src/plugins/vis_types/vega/public/vega_inspector/vega_data_inspector.scss similarity index 100% rename from src/plugins/vis_type_vega/public/vega_inspector/vega_data_inspector.scss rename to src/plugins/vis_types/vega/public/vega_inspector/vega_data_inspector.scss diff --git a/src/plugins/vis_type_vega/public/vega_inspector/vega_data_inspector.tsx b/src/plugins/vis_types/vega/public/vega_inspector/vega_data_inspector.tsx similarity index 96% rename from src/plugins/vis_type_vega/public/vega_inspector/vega_data_inspector.tsx rename to src/plugins/vis_types/vega/public/vega_inspector/vega_data_inspector.tsx index 497c8a9ed1af3..75618df307150 100644 --- a/src/plugins/vis_type_vega/public/vega_inspector/vega_data_inspector.tsx +++ b/src/plugins/vis_types/vega/public/vega_inspector/vega_data_inspector.tsx @@ -14,7 +14,7 @@ import { EuiTabbedContent } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { VegaInspectorAdapters } from './vega_inspector'; import { DataViewer, SignalViewer, SpecViewer } from './components'; -import { InspectorViewProps } from '../../../inspector/public'; +import { InspectorViewProps } from '../../../../inspector/public'; export type VegaDataInspectorProps = InspectorViewProps; diff --git a/src/plugins/vis_type_vega/public/vega_inspector/vega_inspector.tsx b/src/plugins/vis_types/vega/public/vega_inspector/vega_inspector.tsx similarity index 94% rename from src/plugins/vis_type_vega/public/vega_inspector/vega_inspector.tsx rename to src/plugins/vis_types/vega/public/vega_inspector/vega_inspector.tsx index e02ae780acab1..1ca95b84f53ae 100644 --- a/src/plugins/vis_type_vega/public/vega_inspector/vega_inspector.tsx +++ b/src/plugins/vis_types/vega/public/vega_inspector/vega_inspector.tsx @@ -11,8 +11,8 @@ import { EuiLoadingSpinner } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { IUiSettingsClient } from 'kibana/public'; -import { KibanaContextProvider } from '../../../kibana_react/public'; -import { Adapters, RequestAdapter, InspectorViewDescription } from '../../../inspector/public'; +import { KibanaContextProvider } from '../../../../kibana_react/public'; +import { Adapters, RequestAdapter, InspectorViewDescription } from '../../../../inspector/public'; import { VegaAdapter } from './vega_adapter'; import type { VegaDataInspectorProps } from './vega_data_inspector'; diff --git a/src/plugins/vis_type_vega/public/vega_request_handler.ts b/src/plugins/vis_types/vega/public/vega_request_handler.ts similarity index 96% rename from src/plugins/vis_type_vega/public/vega_request_handler.ts rename to src/plugins/vis_types/vega/public/vega_request_handler.ts index 4f07785f43c4f..2ae7169c2f732 100644 --- a/src/plugins/vis_type_vega/public/vega_request_handler.ts +++ b/src/plugins/vis_types/vega/public/vega_request_handler.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ import type { KibanaExecutionContext } from 'src/core/public'; -import { Filter, esQuery, TimeRange, Query } from '../../data/public'; +import { Filter, esQuery, TimeRange, Query } from '../../../data/public'; import { SearchAPI } from './data_model/search_api'; import { TimeCache } from './data_model/time_cache'; diff --git a/src/plugins/vis_type_vega/public/vega_type.ts b/src/plugins/vis_types/vega/public/vega_type.ts similarity index 95% rename from src/plugins/vis_type_vega/public/vega_type.ts rename to src/plugins/vis_types/vega/public/vega_type.ts index 902f79d03e680..74899f5cfb3a4 100644 --- a/src/plugins/vis_type_vega/public/vega_type.ts +++ b/src/plugins/vis_types/vega/public/vega_type.ts @@ -9,8 +9,8 @@ import { i18n } from '@kbn/i18n'; import { parse } from 'hjson'; -import { DefaultEditorSize } from '../../vis_default_editor/public'; -import { VIS_EVENT_TO_TRIGGER, VisGroups, VisTypeDefinition } from '../../visualizations/public'; +import { DefaultEditorSize } from '../../../vis_default_editor/public'; +import { VIS_EVENT_TO_TRIGGER, VisGroups, VisTypeDefinition } from '../../../visualizations/public'; import { getDefaultSpec } from './default_spec'; import { extractIndexPatternsFromSpec } from './lib/extract_index_pattern'; diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_base_view.d.ts b/src/plugins/vis_types/vega/public/vega_view/vega_base_view.d.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_base_view.d.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_base_view.d.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_base_view.js b/src/plugins/vis_types/vega/public/vega_view/vega_base_view.js similarity index 99% rename from src/plugins/vis_type_vega/public/vega_view/vega_base_view.js rename to src/plugins/vis_types/vega/public/vega_view/vega_base_view.js index 0cf3f16c3d20c..a41197293bbdc 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_base_view.js +++ b/src/plugins/vis_types/vega/public/vega_view/vega_base_view.js @@ -16,7 +16,7 @@ import { Utils } from '../data_model/utils'; import { euiPaletteColorBlind } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { TooltipHandler } from './vega_tooltip'; -import { esFilters } from '../../../data/public'; +import { esFilters } from '../../../../data/public'; import { getEnableExternalUrls, getData } from '../services'; import { extractIndexPatternsFromSpec } from '../lib/extract_index_pattern'; diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/constants.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/constants.ts similarity index 94% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/constants.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/constants.ts index 04957fda5b8ff..a2a3cd464276f 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/constants.ts +++ b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/constants.ts @@ -7,7 +7,7 @@ */ import type { Style } from '@kbn/mapbox-gl'; -import { TMS_IN_YML_ID } from '../../../../maps_ems/public'; +import { TMS_IN_YML_ID } from '../../../../../maps_ems/public'; export const vegaLayerId = 'vega'; export const userConfiguredLayerId = TMS_IN_YML_ID; diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/index.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/index.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/index.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/index.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/tms_raster_layer.test.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/tms_raster_layer.test.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/tms_raster_layer.test.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/tms_raster_layer.test.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/tms_raster_layer.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/tms_raster_layer.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/tms_raster_layer.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/tms_raster_layer.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/types.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/types.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/types.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/types.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.test.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/vega_layer.test.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.test.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/vega_layer.test.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/vega_layer.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/layers/vega_layer.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/map_service_settings.test.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/map_service_settings.test.ts similarity index 98% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/map_service_settings.test.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/map_service_settings.test.ts index c459220d4aa86..95fee2ea3820d 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/map_service_settings.test.ts +++ b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/map_service_settings.test.ts @@ -10,7 +10,7 @@ import { get } from 'lodash'; import { uiSettingsServiceMock } from 'src/core/public/mocks'; import { MapServiceSettings, getAttributionsForTmsService } from './map_service_settings'; -import type { MapsEmsConfig } from '../../../../maps_ems/public'; +import type { MapsEmsConfig } from '../../../../../maps_ems/public'; import { EMSClient, TMSService } from '@elastic/ems-client'; import { setUISettings } from '../../services'; diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/map_service_settings.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/map_service_settings.ts similarity index 97% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/map_service_settings.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/map_service_settings.ts index 8874db7737a4e..3399d0628ad65 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/map_service_settings.ts +++ b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/map_service_settings.ts @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import type { EMSClient, TMSService } from '@elastic/ems-client'; import { getUISettings } from '../../services'; import { userConfiguredLayerId } from './constants'; -import type { MapsEmsConfig } from '../../../../maps_ems/public'; +import type { MapsEmsConfig } from '../../../../../maps_ems/public'; type EmsClientConfig = ConstructorParameters[0]; diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/index.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/index.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/index.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/index.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/validation_helper.test.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/validation_helper.test.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/validation_helper.test.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/validation_helper.test.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/validation_helper.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/validation_helper.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/validation_helper.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/validation_helper.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/vsi_helper.test.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/vsi_helper.test.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/vsi_helper.test.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/vsi_helper.test.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/vsi_helper.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/vsi_helper.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/utils/vsi_helper.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/utils/vsi_helper.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/vega_map_view.scss b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/vega_map_view.scss similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/vega_map_view.scss rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/vega_map_view.scss diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.test.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts similarity index 97% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.test.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts index 17a098649ebbf..e4bf4977094fd 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.test.ts +++ b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts @@ -15,9 +15,9 @@ import { VegaParser } from '../../data_model/vega_parser'; import { TimeCache } from '../../data_model/time_cache'; import { SearchAPI } from '../../data_model/search_api'; import vegaMap from '../../test_utils/vega_map_test.json'; -import { coreMock } from '../../../../../core/public/mocks'; -import { dataPluginMock } from '../../../../data/public/mocks'; -import type { IServiceSettings, MapsEmsConfig } from '../../../../maps_ems/public'; +import { coreMock } from '../../../../../../core/public/mocks'; +import { dataPluginMock } from '../../../../../data/public/mocks'; +import type { IServiceSettings, MapsEmsConfig } from '../../../../../maps_ems/public'; import { MapServiceSettings } from './map_service_settings'; import { userConfiguredLayerId } from './constants'; import { diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_tooltip.js b/src/plugins/vis_types/vega/public/vega_view/vega_tooltip.js similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_tooltip.js rename to src/plugins/vis_types/vega/public/vega_view/vega_tooltip.js diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_view.d.ts b/src/plugins/vis_types/vega/public/vega_view/vega_view.d.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_view.d.ts rename to src/plugins/vis_types/vega/public/vega_view/vega_view.d.ts diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_view.js b/src/plugins/vis_types/vega/public/vega_view/vega_view.js similarity index 100% rename from src/plugins/vis_type_vega/public/vega_view/vega_view.js rename to src/plugins/vis_types/vega/public/vega_view/vega_view.js diff --git a/src/plugins/vis_type_vega/public/vega_vis_renderer.tsx b/src/plugins/vis_types/vega/public/vega_vis_renderer.tsx similarity index 94% rename from src/plugins/vis_type_vega/public/vega_vis_renderer.tsx rename to src/plugins/vis_types/vega/public/vega_vis_renderer.tsx index 0d9ba493281fa..77af6dfdcf042 100644 --- a/src/plugins/vis_type_vega/public/vega_vis_renderer.tsx +++ b/src/plugins/vis_types/vega/public/vega_vis_renderer.tsx @@ -10,7 +10,7 @@ import React, { lazy } from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import { ExpressionRenderDefinition } from 'src/plugins/expressions'; -import { VisualizationContainer } from '../../visualizations/public'; +import { VisualizationContainer } from '../../../visualizations/public'; import { VegaVisualizationDependencies } from './plugin'; import { RenderValue } from './vega_fn'; const VegaVisComponent = lazy(() => import('./components/vega_vis_component')); diff --git a/src/plugins/vis_type_vega/public/vega_visualization.test.js b/src/plugins/vis_types/vega/public/vega_visualization.test.js similarity index 97% rename from src/plugins/vis_type_vega/public/vega_visualization.test.js rename to src/plugins/vis_types/vega/public/vega_visualization.test.js index ba1121b8894e0..8c47b2fdfd7c0 100644 --- a/src/plugins/vis_type_vega/public/vega_visualization.test.js +++ b/src/plugins/vis_types/vega/public/vega_visualization.test.js @@ -19,8 +19,8 @@ import { VegaParser } from './data_model/vega_parser'; import { SearchAPI } from './data_model/search_api'; import { setInjectedVars, setData, setNotifications } from './services'; -import { coreMock } from '../../../core/public/mocks'; -import { dataPluginMock } from '../../data/public/mocks'; +import { coreMock } from '../../../../core/public/mocks'; +import { dataPluginMock } from '../../../data/public/mocks'; jest.mock('./default_spec', () => ({ getDefaultSpec: () => jest.requireActual('./test_utils/default.spec.json'), diff --git a/src/plugins/vis_type_vega/public/vega_visualization.ts b/src/plugins/vis_types/vega/public/vega_visualization.ts similarity index 100% rename from src/plugins/vis_type_vega/public/vega_visualization.ts rename to src/plugins/vis_types/vega/public/vega_visualization.ts diff --git a/src/plugins/vis_type_vega/server/index.ts b/src/plugins/vis_types/vega/server/index.ts similarity index 100% rename from src/plugins/vis_type_vega/server/index.ts rename to src/plugins/vis_types/vega/server/index.ts diff --git a/src/plugins/vis_type_vega/server/plugin.ts b/src/plugins/vis_types/vega/server/plugin.ts similarity index 97% rename from src/plugins/vis_type_vega/server/plugin.ts rename to src/plugins/vis_types/vega/server/plugin.ts index b884dcd1a1d15..51a783456d6b2 100644 --- a/src/plugins/vis_type_vega/server/plugin.ts +++ b/src/plugins/vis_types/vega/server/plugin.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../core/server'; +import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../../core/server'; import { registerVegaUsageCollector } from './usage_collector'; import { ConfigObservable, diff --git a/src/plugins/vis_type_vega/server/types.ts b/src/plugins/vis_types/vega/server/types.ts similarity index 87% rename from src/plugins/vis_type_vega/server/types.ts rename to src/plugins/vis_types/vega/server/types.ts index affd93dedb8ca..626d22b59181a 100644 --- a/src/plugins/vis_type_vega/server/types.ts +++ b/src/plugins/vis_types/vega/server/types.ts @@ -8,8 +8,8 @@ import { Observable } from 'rxjs'; import { SharedGlobalConfig } from 'kibana/server'; -import { HomeServerPluginSetup } from '../../home/server'; -import { UsageCollectionSetup } from '../../usage_collection/server'; +import { HomeServerPluginSetup } from '../../../home/server'; +import { UsageCollectionSetup } from '../../../usage_collection/server'; export type ConfigObservable = Observable; diff --git a/src/plugins/vis_type_vega/server/usage_collector/get_usage_collector.mock.ts b/src/plugins/vis_types/vega/server/usage_collector/get_usage_collector.mock.ts similarity index 100% rename from src/plugins/vis_type_vega/server/usage_collector/get_usage_collector.mock.ts rename to src/plugins/vis_types/vega/server/usage_collector/get_usage_collector.mock.ts diff --git a/src/plugins/vis_type_vega/server/usage_collector/get_usage_collector.test.ts b/src/plugins/vis_types/vega/server/usage_collector/get_usage_collector.test.ts similarity index 94% rename from src/plugins/vis_type_vega/server/usage_collector/get_usage_collector.test.ts rename to src/plugins/vis_types/vega/server/usage_collector/get_usage_collector.test.ts index 82aba087dedc1..aa1b8e447bbca 100644 --- a/src/plugins/vis_type_vega/server/usage_collector/get_usage_collector.test.ts +++ b/src/plugins/vis_types/vega/server/usage_collector/get_usage_collector.test.ts @@ -7,9 +7,9 @@ */ import { getStats } from './get_usage_collector'; -import { createCollectorFetchContextMock } from '../../../usage_collection/server/mocks'; -import type { HomeServerPluginSetup } from '../../../home/server'; -import type { SavedObjectsClientContract } from '../../../../core/server'; +import { createCollectorFetchContextMock } from '../../../../usage_collection/server/mocks'; +import type { HomeServerPluginSetup } from '../../../../home/server'; +import type { SavedObjectsClientContract } from '../../../../../core/server'; const mockedSavedObjects = [ // vega-lite lib spec diff --git a/src/plugins/vis_type_vega/server/usage_collector/get_usage_collector.ts b/src/plugins/vis_types/vega/server/usage_collector/get_usage_collector.ts similarity index 95% rename from src/plugins/vis_type_vega/server/usage_collector/get_usage_collector.ts rename to src/plugins/vis_types/vega/server/usage_collector/get_usage_collector.ts index ae99021745a0c..67fcb742c4240 100644 --- a/src/plugins/vis_type_vega/server/usage_collector/get_usage_collector.ts +++ b/src/plugins/vis_types/vega/server/usage_collector/get_usage_collector.ts @@ -8,8 +8,11 @@ import { parse } from 'hjson'; -import type { SavedObjectsClientContract, SavedObjectsFindResult } from '../../../../core/server'; -import type { SavedVisState } from '../../../visualizations/common'; +import type { + SavedObjectsClientContract, + SavedObjectsFindResult, +} from '../../../../../core/server'; +import type { SavedVisState } from '../../../../visualizations/common'; import type { VegaSavedObjectAttributes, VisTypeVegaPluginSetupDependencies } from '../types'; type UsageCollectorDependencies = Pick; diff --git a/src/plugins/vis_type_vega/server/usage_collector/index.ts b/src/plugins/vis_types/vega/server/usage_collector/index.ts similarity index 100% rename from src/plugins/vis_type_vega/server/usage_collector/index.ts rename to src/plugins/vis_types/vega/server/usage_collector/index.ts diff --git a/src/plugins/vis_type_vega/server/usage_collector/register_vega_collector.test.ts b/src/plugins/vis_types/vega/server/usage_collector/register_vega_collector.test.ts similarity index 95% rename from src/plugins/vis_type_vega/server/usage_collector/register_vega_collector.test.ts rename to src/plugins/vis_types/vega/server/usage_collector/register_vega_collector.test.ts index fc488540293ad..137dd2f17375c 100644 --- a/src/plugins/vis_type_vega/server/usage_collector/register_vega_collector.test.ts +++ b/src/plugins/vis_types/vega/server/usage_collector/register_vega_collector.test.ts @@ -9,11 +9,11 @@ import { createUsageCollectionSetupMock, createCollectorFetchContextMock, -} from '../../../usage_collection/server/mocks'; +} from '../../../../usage_collection/server/mocks'; import { mockStats, mockGetStats } from './get_usage_collector.mock'; import { registerVegaUsageCollector } from './register_vega_collector'; -import type { HomeServerPluginSetup } from '../../../home/server'; +import type { HomeServerPluginSetup } from '../../../../home/server'; import type { ConfigObservable } from '../types'; describe('registerVegaUsageCollector', () => { diff --git a/src/plugins/vis_type_vega/server/usage_collector/register_vega_collector.ts b/src/plugins/vis_types/vega/server/usage_collector/register_vega_collector.ts similarity index 93% rename from src/plugins/vis_type_vega/server/usage_collector/register_vega_collector.ts rename to src/plugins/vis_types/vega/server/usage_collector/register_vega_collector.ts index ef65b58a8315b..27af5aa57e38b 100644 --- a/src/plugins/vis_type_vega/server/usage_collector/register_vega_collector.ts +++ b/src/plugins/vis_types/vega/server/usage_collector/register_vega_collector.ts @@ -7,7 +7,7 @@ */ import { getStats, VegaUsage } from './get_usage_collector'; -import type { UsageCollectionSetup } from '../../../usage_collection/server'; +import type { UsageCollectionSetup } from '../../../../usage_collection/server'; import type { ConfigObservable, VisTypeVegaPluginSetupDependencies } from '../types'; export function registerVegaUsageCollector( diff --git a/src/plugins/vis_types/vega/tsconfig.json b/src/plugins/vis_types/vega/tsconfig.json new file mode 100644 index 0000000000000..ed7690ac70d1a --- /dev/null +++ b/src/plugins/vis_types/vega/tsconfig.json @@ -0,0 +1,31 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true, + "strictNullChecks": false + }, + "include": [ + "server/**/*", + "public/**/*", + "*.ts", + // have to declare *.json explicitly due to https://github.com/microsoft/TypeScript/issues/25636 + "public/test_utils/vega_map_test.json" + ], + "references": [ + { "path": "../../../core/tsconfig.json" }, + { "path": "../../data/tsconfig.json" }, + { "path": "../../visualizations/tsconfig.json" }, + { "path": "../../maps_ems/tsconfig.json" }, + { "path": "../../expressions/tsconfig.json" }, + { "path": "../../inspector/tsconfig.json" }, + { "path": "../../home/tsconfig.json" }, + { "path": "../../usage_collection/tsconfig.json" }, + { "path": "../../kibana_utils/tsconfig.json" }, + { "path": "../../kibana_react/tsconfig.json" }, + { "path": "../../vis_default_editor/tsconfig.json" }, + { "path": "../../es_ui_shared/tsconfig.json" }, + ] +} From 93dfcc6be37151f68aacc3ca67fb1ee65237b8a3 Mon Sep 17 00:00:00 2001 From: Rudolf Meijering Date: Fri, 3 Sep 2021 13:36:13 +0200 Subject: [PATCH 03/32] [7.x] Migrationsv2: limit batch sizes to migrations.batchSizeBytes (= 100mb by default) (#109540) (#110967) * Migrationsv2: limit batch sizes to migrations.batchSizeBytes (= 100mb by default) (#109540) * Fix logging for existing integration test * First stab at limiting batches to batchSizeBytes * Fix tests * Fix batch size calculation, NDJSON needs to be terminated by an empty line * Integration tests * Fix type failures * rename migration integration tests and log files to be consistent & more descriptive * Review feedback * Remove duplication of fatal error reasons * migrations.maxBatchSizeBytes to docker environment vars * docs for migrations.maxBatchSizeBytes # Conflicts: # src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_unknown_types.test.ts # src/core/server/saved_objects/migrationsv2/integration_tests/migration_from_v1.test.ts * Fix tests on 7.x being off by one byte Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- docs/setup/settings.asciidoc | 5 +- .../migrations/kibana/kibana_migrator.mock.ts | 2 + .../migrations/kibana/kibana_migrator.test.ts | 2 + .../saved_objects/migrationsv2/README.md | 3 + .../bulk_overwrite_transformed_documents.ts | 43 ++++-- .../migrationsv2/initial_state.test.ts | 3 + .../migrationsv2/initial_state.ts | 1 + ..._100k.test.ts => 7.7.2_xpack_100k.test.ts} | 11 +- ....ts => 7_13_0_failed_action_tasks.test.ts} | 2 +- ...t.ts => 7_13_0_transform_failures.test.ts} | 2 +- ...s.test.ts => 7_13_0_unknown_types.test.ts} | 42 +++-- .../7.14.0_xpack_sample_saved_objects.zip | Bin 0 -> 4619738 bytes .../batch_size_bytes.test.ts | 145 ++++++++++++++++++ ...ze_bytes_exceeds_es_content_length.test.ts | 117 ++++++++++++++ .../integration_tests/cleanup.test.ts | 2 +- ....test.ts => collects_corrupt_docs.test.ts} | 2 +- .../corrupt_outdated_docs.test.ts | 2 +- ...tion.test.ts => migration_from_v1.test.ts} | 3 +- .../integration_tests/outdated_docs.test.ts | 2 +- .../integration_tests/rewriting_id.test.ts | 2 +- .../migrations_state_action_machine.test.ts | 15 +- .../migrations_state_action_machine.ts | 20 ++- .../migrationsv2/model/create_batches.test.ts | 63 ++++++++ .../migrationsv2/model/create_batches.ts | 66 ++++++++ .../migrationsv2/model/model.test.ts | 79 ++++++++-- .../saved_objects/migrationsv2/model/model.ts | 108 ++++++++++--- .../server/saved_objects/migrationsv2/next.ts | 4 +- .../migrationsv2/test_helpers/retry.test.ts | 57 +++++++ .../migrationsv2/test_helpers/retry_async.ts | 30 ++++ .../saved_objects/migrationsv2/types.ts | 34 ++-- .../saved_objects/saved_objects_config.ts | 1 + .../resources/base/bin/kibana-docker | 1 + 32 files changed, 765 insertions(+), 104 deletions(-) rename src/core/server/saved_objects/migrationsv2/integration_tests/{migration_7.7.2_xpack_100k.test.ts => 7.7.2_xpack_100k.test.ts} (94%) rename src/core/server/saved_objects/migrationsv2/integration_tests/{migration_7_13_0_failed_action_tasks.test.ts => 7_13_0_failed_action_tasks.test.ts} (99%) rename src/core/server/saved_objects/migrationsv2/integration_tests/{migration_7_13_0_transform_failures.test.ts => 7_13_0_transform_failures.test.ts} (99%) rename src/core/server/saved_objects/migrationsv2/integration_tests/{migration_7_13_0_unknown_types.test.ts => 7_13_0_unknown_types.test.ts} (86%) create mode 100644 src/core/server/saved_objects/migrationsv2/integration_tests/archives/7.14.0_xpack_sample_saved_objects.zip create mode 100644 src/core/server/saved_objects/migrationsv2/integration_tests/batch_size_bytes.test.ts create mode 100644 src/core/server/saved_objects/migrationsv2/integration_tests/batch_size_bytes_exceeds_es_content_length.test.ts rename src/core/server/saved_objects/migrationsv2/integration_tests/{type_migration_failure.test.ts => collects_corrupt_docs.test.ts} (98%) rename src/core/server/saved_objects/migrationsv2/integration_tests/{migration.test.ts => migration_from_v1.test.ts} (98%) create mode 100644 src/core/server/saved_objects/migrationsv2/model/create_batches.test.ts create mode 100644 src/core/server/saved_objects/migrationsv2/model/create_batches.ts create mode 100644 src/core/server/saved_objects/migrationsv2/test_helpers/retry.test.ts create mode 100644 src/core/server/saved_objects/migrationsv2/test_helpers/retry_async.ts diff --git a/docs/setup/settings.asciidoc b/docs/setup/settings.asciidoc index f2aa7fe863b83..e8d0b4b593c3f 100644 --- a/docs/setup/settings.asciidoc +++ b/docs/setup/settings.asciidoc @@ -488,7 +488,10 @@ override this parameter to use their own Tile Map Service. For example: `"https://tiles.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana"` | `migrations.batchSize:` - | Defines the number of documents migrated at a time. The higher the value, the faster the Saved Objects migration process performs at the cost of higher memory consumption. If the migration fails due to a `circuit_breaking_exception`, set a smaller `batchSize` value. *Default: `1000`* + | Defines the number of documents migrated at a time. The higher the value, the faster the Saved Objects migration process performs at the cost of higher memory consumption. If upgrade migrations results in {kib} crashing with an out of memory exception or fails due to an Elasticsearch `circuit_breaking_exception`, use a smaller `batchSize` value to reduce the memory pressure. *Default: `1000`* + + | `migrations.maxBatchSizeBytes:` + | Defines the maximum payload size for indexing batches of upgraded saved objects to avoid migrations failing due to a 413 Request Entity Too Large response from Elasticsearch. This value should be lower than or equal to your Elasticsearch cluster's `http.max_content_length` configuration option. *Default: `100mb`* | `migrations.enableV2:` | experimental[]. Enables the new Saved Objects migration algorithm. For information about the migration algorithm, refer to <>. When `migrations v2` is stable, the setting will be removed in an upcoming release without any further notice. Setting the value to `false` causes {kib} to use the legacy migration algorithm, which shipped in 7.11 and earlier versions. *Default: `true`* diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.mock.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.mock.ts index 530203e659086..9471bbc1b87a6 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.mock.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.mock.ts @@ -11,6 +11,7 @@ import { buildActiveMappings } from '../core'; const { mergeTypes } = jest.requireActual('./kibana_migrator'); import { SavedObjectsType } from '../../types'; import { BehaviorSubject } from 'rxjs'; +import { ByteSizeValue } from '@kbn/config-schema'; const defaultSavedObjectTypes: SavedObjectsType[] = [ { @@ -37,6 +38,7 @@ const createMigrator = ( kibanaVersion: '8.0.0-testing', soMigrationsConfig: { batchSize: 100, + maxBatchSizeBytes: ByteSizeValue.parse('30kb'), scrollDuration: '15m', pollInterval: 1500, skip: false, diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts index d0cc52f2dd9bd..6e10349f4b57c 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts @@ -15,6 +15,7 @@ import { loggingSystemMock } from '../../../logging/logging_system.mock'; import { SavedObjectTypeRegistry } from '../../saved_objects_type_registry'; import { SavedObjectsType } from '../../types'; import { DocumentMigrator } from '../core/document_migrator'; +import { ByteSizeValue } from '@kbn/config-schema'; jest.mock('../core/document_migrator', () => { return { // Create a mock for spying on the constructor @@ -396,6 +397,7 @@ const mockOptions = ({ enableV2 }: { enableV2: boolean } = { enableV2: false }) } as KibanaMigratorOptions['kibanaConfig'], soMigrationsConfig: { batchSize: 20, + maxBatchSizeBytes: ByteSizeValue.parse('20mb'), pollInterval: 20000, scrollDuration: '10m', skip: false, diff --git a/src/core/server/saved_objects/migrationsv2/README.md b/src/core/server/saved_objects/migrationsv2/README.md index 5bdc548987842..5121e66052f40 100644 --- a/src/core/server/saved_objects/migrationsv2/README.md +++ b/src/core/server/saved_objects/migrationsv2/README.md @@ -316,7 +316,10 @@ completed this step: - temp index has a write block - temp index is not found ### New control state +1. If `currentBatch` is the last batch in `transformedDocBatches` → `REINDEX_SOURCE_TO_TEMP_READ` +2. If there are more batches left in `transformedDocBatches` + → `REINDEX_SOURCE_TO_TEMP_INDEX_BULK` ## REINDEX_SOURCE_TO_TEMP_CLOSE_PIT ### Next action diff --git a/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.ts b/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.ts index 4217ca599297a..82f642b928058 100644 --- a/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.ts +++ b/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.ts @@ -23,6 +23,27 @@ import type { IndexNotFound, } from './index'; +/** + * Given a document and index, creates a valid body for the Bulk API. + */ +export const createBulkOperationBody = (doc: SavedObjectsRawDoc, index: string) => { + return [ + { + index: { + _index: index, + _id: doc._id, + // overwrite existing documents + op_type: 'index', + // use optimistic concurrency control to ensure that outdated + // documents are only overwritten once with the latest version + if_seq_no: doc._seq_no, + if_primary_term: doc._primary_term, + }, + }, + doc._source, + ]; +}; + /** @internal */ export interface BulkOverwriteTransformedDocumentsParams { client: ElasticsearchClient; @@ -47,6 +68,10 @@ export const bulkOverwriteTransformedDocuments = ({ | RequestEntityTooLargeException, 'bulk_index_succeeded' > => () => { + const body = transformedDocs.flatMap((doc) => { + return createBulkOperationBody(doc, index); + }); + return client .bulk({ // Because we only add aliases in the MARK_VERSION_INDEX_READY step we @@ -60,23 +85,7 @@ export const bulkOverwriteTransformedDocuments = ({ wait_for_active_shards: WAIT_FOR_ALL_SHARDS_TO_BE_ACTIVE, refresh, filter_path: ['items.*.error'], - body: transformedDocs.flatMap((doc) => { - return [ - { - index: { - _index: index, - _id: doc._id, - // overwrite existing documents - op_type: 'index', - // use optimistic concurrency control to ensure that outdated - // documents are only overwritten once with the latest version - if_seq_no: doc._seq_no, - if_primary_term: doc._primary_term, - }, - }, - doc._source, - ]; - }), + body, }) .then((res) => { // Filter out version_conflict_engine_exception since these just mean diff --git a/src/core/server/saved_objects/migrationsv2/initial_state.test.ts b/src/core/server/saved_objects/migrationsv2/initial_state.test.ts index 4066efeb65de0..26ba129cbeab4 100644 --- a/src/core/server/saved_objects/migrationsv2/initial_state.test.ts +++ b/src/core/server/saved_objects/migrationsv2/initial_state.test.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { ByteSizeValue } from '@kbn/config-schema'; import * as Option from 'fp-ts/Option'; import { SavedObjectsMigrationConfigType } from '../saved_objects_config'; import { SavedObjectTypeRegistry } from '../saved_objects_type_registry'; @@ -21,6 +22,7 @@ describe('createInitialState', () => { const migrationsConfig = ({ retryAttempts: 15, batchSize: 1000, + maxBatchSizeBytes: ByteSizeValue.parse('100mb'), } as unknown) as SavedObjectsMigrationConfigType; it('creates the initial state for the model based on the passed in parameters', () => { expect( @@ -37,6 +39,7 @@ describe('createInitialState', () => { }) ).toEqual({ batchSize: 1000, + maxBatchSizeBytes: ByteSizeValue.parse('100mb').getValueInBytes(), controlState: 'INIT', currentAlias: '.kibana_task_manager', excludeFromUpgradeFilterHooks: {}, diff --git a/src/core/server/saved_objects/migrationsv2/initial_state.ts b/src/core/server/saved_objects/migrationsv2/initial_state.ts index dce37b384a4f7..a61967be9242c 100644 --- a/src/core/server/saved_objects/migrationsv2/initial_state.ts +++ b/src/core/server/saved_objects/migrationsv2/initial_state.ts @@ -82,6 +82,7 @@ export const createInitialState = ({ retryDelay: 0, retryAttempts: migrationsConfig.retryAttempts, batchSize: migrationsConfig.batchSize, + maxBatchSizeBytes: migrationsConfig.maxBatchSizeBytes.getValueInBytes(), logs: [], unusedTypesQuery: excludeUnusedTypesQuery, knownTypes, diff --git a/src/core/server/saved_objects/migrationsv2/integration_tests/migration_7.7.2_xpack_100k.test.ts b/src/core/server/saved_objects/migrationsv2/integration_tests/7.7.2_xpack_100k.test.ts similarity index 94% rename from src/core/server/saved_objects/migrationsv2/integration_tests/migration_7.7.2_xpack_100k.test.ts rename to src/core/server/saved_objects/migrationsv2/integration_tests/7.7.2_xpack_100k.test.ts index f2e7c2e3ae971..d072ccc5c976e 100644 --- a/src/core/server/saved_objects/migrationsv2/integration_tests/migration_7.7.2_xpack_100k.test.ts +++ b/src/core/server/saved_objects/migrationsv2/integration_tests/7.7.2_xpack_100k.test.ts @@ -17,7 +17,7 @@ import { InternalCoreStart } from '../../../internal_types'; import { Root } from '../../../root'; const kibanaVersion = Env.createDefault(REPO_ROOT, getEnvOptions()).packageInfo.version; -const logFilePath = path.join(__dirname, 'migration_test_kibana.log'); +const logFilePath = path.join(__dirname, '7.7.2_xpack_100k.log'); async function removeLogFile() { // ignore errors if it doesn't exist @@ -61,9 +61,12 @@ describe('migration from 7.7.2-xpack with 100k objects', () => { }, }, }, - root: { - appenders: ['default', 'file'], - }, + loggers: [ + { + name: 'root', + appenders: ['file'], + }, + ], }, // reporting loads headless browser, that prevents nodejs process from exiting. xpack: { diff --git a/src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_failed_action_tasks.test.ts b/src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_failed_action_tasks.test.ts similarity index 99% rename from src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_failed_action_tasks.test.ts rename to src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_failed_action_tasks.test.ts index 0788a7ecdf0b1..d70e034703158 100644 --- a/src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_failed_action_tasks.test.ts +++ b/src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_failed_action_tasks.test.ts @@ -12,7 +12,7 @@ import * as kbnTestServer from '../../../../test_helpers/kbn_server'; import { Root } from '../../../root'; import { ElasticsearchClient } from '../../../elasticsearch'; -const logFilePath = Path.join(__dirname, '7_13_failed_action_tasks_test.log'); +const logFilePath = Path.join(__dirname, '7_13_failed_action_tasks.log'); async function removeLogFile() { // ignore errors if it doesn't exist diff --git a/src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_transform_failures.test.ts b/src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_transform_failures.test.ts similarity index 99% rename from src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_transform_failures.test.ts rename to src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_transform_failures.test.ts index 3258732c6fdd2..fb40bda81cba5 100644 --- a/src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_transform_failures.test.ts +++ b/src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_transform_failures.test.ts @@ -12,7 +12,7 @@ import Util from 'util'; import * as kbnTestServer from '../../../../test_helpers/kbn_server'; import { Root } from '../../../root'; -const logFilePath = Path.join(__dirname, '7_13_corrupt_transform_failures_test.log'); +const logFilePath = Path.join(__dirname, '7_13_corrupt_transform_failures.log'); const asyncUnlink = Util.promisify(Fs.unlink); diff --git a/src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_unknown_types.test.ts b/src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_unknown_types.test.ts similarity index 86% rename from src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_unknown_types.test.ts rename to src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_unknown_types.test.ts index dbf285021118d..f15e0c5d684d0 100644 --- a/src/core/server/saved_objects/migrationsv2/integration_tests/migration_7_13_0_unknown_types.test.ts +++ b/src/core/server/saved_objects/migrationsv2/integration_tests/7_13_0_unknown_types.test.ts @@ -16,9 +16,12 @@ import { ElasticsearchClient } from '../../../elasticsearch'; import { Env } from '@kbn/config'; import { REPO_ROOT } from '@kbn/utils'; import { getEnvOptions } from '../../../config/mocks'; +import { retryAsync } from '../test_helpers/retry_async'; +import { LogRecord } from '@kbn/logging'; const kibanaVersion = Env.createDefault(REPO_ROOT, getEnvOptions()).packageInfo.version; -const logFilePath = Path.join(__dirname, '7_13_unknown_types_test.log'); +const targetIndex = `.kibana_${kibanaVersion}_001`; +const logFilePath = Path.join(__dirname, '7_13_unknown_types.log'); async function removeLogFile() { // ignore errors if it doesn't exist @@ -67,23 +70,30 @@ describe('migration v2', () => { await root.setup(); await root.start(); - const logFileContent = await fs.readFile(logFilePath, 'utf-8'); - const records = logFileContent - .split('\n') - .filter(Boolean) - .map((str) => JSON5.parse(str)); + let unknownDocsWarningLog: LogRecord; - const unknownDocsWarningLog = records.find((rec) => - rec.message.startsWith(`[.kibana] CHECK_UNKNOWN_DOCUMENTS`) - ); + await retryAsync( + async () => { + const logFileContent = await fs.readFile(logFilePath, 'utf-8'); + const records = logFileContent + .split('\n') + .filter(Boolean) + .map((str) => JSON5.parse(str)); + + unknownDocsWarningLog = records.find((rec) => + rec.message.startsWith(`[.kibana] CHECK_UNKNOWN_DOCUMENTS`) + ); - expect( - unknownDocsWarningLog.message.startsWith( - '[.kibana] CHECK_UNKNOWN_DOCUMENTS Upgrades will fail for 8.0+ because documents were found for unknown saved ' + - 'object types. To ensure that upgrades will succeed in the future, either re-enable plugins or delete ' + - `these documents from the ".kibana_${kibanaVersion}_001" index after the current upgrade completes.` - ) - ).toBeTruthy(); + expect( + unknownDocsWarningLog.message.startsWith( + '[.kibana] CHECK_UNKNOWN_DOCUMENTS Upgrades will fail for 8.0+ because documents were found for unknown saved ' + + 'object types. To ensure that upgrades will succeed in the future, either re-enable plugins or delete ' + + `these documents from the "${targetIndex}" index after the current upgrade completes.` + ) + ).toBeTruthy(); + }, + { retryAttempts: 10, retryDelayMs: 200 } + ); const unknownDocs = [ { type: 'space', id: 'space:default' }, diff --git a/src/core/server/saved_objects/migrationsv2/integration_tests/archives/7.14.0_xpack_sample_saved_objects.zip b/src/core/server/saved_objects/migrationsv2/integration_tests/archives/7.14.0_xpack_sample_saved_objects.zip new file mode 100644 index 0000000000000000000000000000000000000000..70d68587e3603bd9e8f09aaf0f1773f1969512e1 GIT binary patch literal 4619738 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