From 06aefaac0ef3abf23638911c8afcf96feb88d2ef Mon Sep 17 00:00:00 2001 From: Tyler Ohlsen Date: Mon, 19 Dec 2022 11:18:37 -0800 Subject: [PATCH] Add augment-vis saved obj Signed-off-by: Tyler Ohlsen --- src/plugins/vis_augmenter/public/index.ts | 8 + src/plugins/vis_augmenter/public/plugin.ts | 17 +- .../saved_augment_vis/_saved_augment_vis.ts | 66 ++++++++ .../public/saved_augment_vis/index.ts | 7 + .../saved_augment_vis/saved_augment_vis.ts | 64 ++++++++ .../saved_augment_vis_references.test.ts | 154 ++++++++++++++++++ .../saved_augment_vis_references.ts | 69 ++++++++ .../public/saved_augment_vis/utils/helpers.ts | 17 ++ .../public/saved_augment_vis/utils/index.ts | 6 + src/plugins/vis_augmenter/public/services.ts | 11 ++ src/plugins/vis_augmenter/public/types.ts | 26 +++ src/plugins/vis_augmenter/server/plugin.ts | 2 + .../server/saved_objects/augment_vis.ts | 29 ++++ .../server/saved_objects/index.ts | 6 + .../visualize/public/application/types.ts | 2 + src/plugins/visualize/public/plugin.ts | 3 + yarn.lock | 5 - 17 files changed, 484 insertions(+), 8 deletions(-) create mode 100644 src/plugins/vis_augmenter/public/saved_augment_vis/_saved_augment_vis.ts create mode 100644 src/plugins/vis_augmenter/public/saved_augment_vis/index.ts create mode 100644 src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis.ts create mode 100644 src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis_references.test.ts create mode 100644 src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis_references.ts create mode 100644 src/plugins/vis_augmenter/public/saved_augment_vis/utils/helpers.ts create mode 100644 src/plugins/vis_augmenter/public/saved_augment_vis/utils/index.ts create mode 100644 src/plugins/vis_augmenter/public/services.ts create mode 100644 src/plugins/vis_augmenter/public/types.ts create mode 100644 src/plugins/vis_augmenter/server/saved_objects/augment_vis.ts create mode 100644 src/plugins/vis_augmenter/server/saved_objects/index.ts diff --git a/src/plugins/vis_augmenter/public/index.ts b/src/plugins/vis_augmenter/public/index.ts index e931e2ac2e03..f89d8362db9b 100644 --- a/src/plugins/vis_augmenter/public/index.ts +++ b/src/plugins/vis_augmenter/public/index.ts @@ -10,3 +10,11 @@ export function plugin(initializerContext: PluginInitializerContext) { return new VisAugmenterPlugin(initializerContext); } export { VisAugmenterSetup, VisAugmenterStart }; + +export { + SavedAugmentVisLoader, + createSavedAugmentVisLoader, + createAugmentVisSavedObject, +} from './saved_augment_vis'; + +export { ISavedAugmentVis, VisLayerExpressionFn, AugmentVisSavedObject } from './types'; diff --git a/src/plugins/vis_augmenter/public/plugin.ts b/src/plugins/vis_augmenter/public/plugin.ts index cbc7a24800de..f7ed9d0ef90f 100644 --- a/src/plugins/vis_augmenter/public/plugin.ts +++ b/src/plugins/vis_augmenter/public/plugin.ts @@ -5,12 +5,15 @@ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../core/public'; import { DataPublicPluginSetup, DataPublicPluginStart } from '../../data/public'; +import { setSavedAugmentVisLoader } from './services'; +import { createSavedAugmentVisLoader, SavedAugmentVisLoader } from './saved_augment_vis'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface VisAugmenterSetup {} -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface VisAugmenterStart {} +export interface VisAugmenterStart { + savedAugmentVisLoader: SavedAugmentVisLoader; +} export interface VisAugmenterSetupDeps { data: DataPublicPluginSetup; @@ -33,7 +36,15 @@ export class VisAugmenterPlugin } public start(core: CoreStart, { data }: VisAugmenterStartDeps): VisAugmenterStart { - return {}; + const savedAugmentVisLoader = createSavedAugmentVisLoader({ + savedObjectsClient: core.savedObjects.client, + indexPatterns: data.indexPatterns, + search: data.search, + chrome: core.chrome, + overlays: core.overlays, + }); + setSavedAugmentVisLoader(savedAugmentVisLoader); + return { savedAugmentVisLoader }; } public stop() {} diff --git a/src/plugins/vis_augmenter/public/saved_augment_vis/_saved_augment_vis.ts b/src/plugins/vis_augmenter/public/saved_augment_vis/_saved_augment_vis.ts new file mode 100644 index 000000000000..c17d0745061d --- /dev/null +++ b/src/plugins/vis_augmenter/public/saved_augment_vis/_saved_augment_vis.ts @@ -0,0 +1,66 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @name SavedAugmentVis + * + * @extends SavedObject. + */ +import { get } from 'lodash'; +import { + createSavedObjectClass, + SavedObject, + SavedObjectOpenSearchDashboardsServices, +} from '../../../saved_objects/public'; +import { IIndexPattern } from '../../../data/public'; +import { extractReferences, injectReferences } from './saved_augment_vis_references'; + +export function createSavedAugmentVisClass(services: SavedObjectOpenSearchDashboardsServices) { + const SavedObjectClass = createSavedObjectClass(services); + + class SavedAugmentVis extends SavedObjectClass { + public static type: string = 'augment-vis'; + public static mapping: Record = { + description: 'text', + pluginResourceId: 'text', + savedObjectType: 'keyword', + savedObjectId: 'keyword', + visLayerExpressionFn: 'object', + version: 'integer', + }; + + constructor(opts: Record | string = {}) { + if (typeof opts !== 'object') { + opts = { id: opts }; + } + super({ + type: SavedAugmentVis.type, + mapping: SavedAugmentVis.mapping, + extractReferences, + injectReferences, + id: (opts.id as string) || '', + indexPattern: opts.indexPattern as IIndexPattern, + defaults: { + description: get(opts, 'description', ''), + pluginResourceId: get(opts, 'pluginResourceId', ''), + savedObjectType: get(opts, 'savedObjectType', ''), + savedObjectId: get(opts, 'savedObjectId', ''), + visLayerExpressionFn: get(opts, 'visLayerExpressionFn', {}), + version: 1, + }, + }); + // probably set to false since this saved obj should be hidden by default + this.showInRecentlyAccessed = false; + + // we probably don't need this below field. we aren't going to need a full path + // since we aren't going to allow editing by default + // this.getFullPath = () => { + // return `/app/visualize#/edit/${this.id}`; + // }; + } + } + + return SavedAugmentVis as new (opts: Record | string) => SavedObject; +} diff --git a/src/plugins/vis_augmenter/public/saved_augment_vis/index.ts b/src/plugins/vis_augmenter/public/saved_augment_vis/index.ts new file mode 100644 index 000000000000..5ac3a159132e --- /dev/null +++ b/src/plugins/vis_augmenter/public/saved_augment_vis/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './saved_augment_vis'; +export * from './utils'; diff --git a/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis.ts b/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis.ts new file mode 100644 index 000000000000..6819af5c3904 --- /dev/null +++ b/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis.ts @@ -0,0 +1,64 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { get } from 'lodash'; +import { + SavedObjectLoader, + SavedObjectOpenSearchDashboardsServices, +} from '../../../saved_objects/public'; +import { createSavedAugmentVisClass } from './_saved_augment_vis'; + +// currently visualizations have a 'vis_types' plugin that maintains all of the +// different vis types. in the saved vis loader, those types are then imported here, +// such that if a type returned by the client isn't in the list, the request is +// rejected. essentially just post-processing of the returned obj. We may do something +// same for the vis integration augment fn types, since we will have a set list +// of eligible augment fn types for plugins to choose from, when creating their saved objs. +// +// for now, and until it's determined where this code will live (separate plugin, within +// dashboards, etc.), we will not enforce the fn types. + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SavedObjectOpenSearchDashboardsServicesWithAugmentVis + extends SavedObjectOpenSearchDashboardsServices {} +export type SavedAugmentVisLoader = ReturnType; +export function createSavedAugmentVisLoader( + services: SavedObjectOpenSearchDashboardsServicesWithAugmentVis +) { + const { savedObjectsClient } = services; + + class SavedObjectLoaderAugmentVis extends SavedObjectLoader { + // this is doing a lightweight version of injectReferences + // essentially we want to inject the saved object id/type + // by fetching the saved object reference and parsing out the id/type + mapHitSource = (source: Record, id: string) => { + source.id = id; + source.savedObjectId = get(source, 'savedObjectReference.id', ''); + source.savedObjectType = get(source, 'savedObjectReference.type', ''); + delete source.savedObjectReference; + delete source.savedObjectName; + return source; + }; + + /** + * Updates hit.attributes to contain an id and fields related to the referenced saved object + * (savedObjectId, savedObjectType) and returns the updated attributes object. + * @param hit + * @returns {hit.attributes} The modified hit.attributes object, with an id and url field. + */ + mapSavedObjectApiHits(hit: { + references: any[]; + attributes: Record; + id: string; + }) { + // For now we are assuming only one reference per saved object. + // If we change to multiple, we will need to dynamically handle that + const savedObjectReference = hit.references[0]; + return this.mapHitSource({ ...hit.attributes, savedObjectReference }, hit.id); + } + } + const SavedAugmentVis = createSavedAugmentVisClass(services); + return new SavedObjectLoaderAugmentVis(SavedAugmentVis, savedObjectsClient) as SavedObjectLoader; +} diff --git a/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis_references.test.ts b/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis_references.test.ts new file mode 100644 index 000000000000..cf66b488071d --- /dev/null +++ b/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis_references.test.ts @@ -0,0 +1,154 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { extractReferences, injectReferences } from './saved_augment_vis_references'; +import { AugmentVisSavedObject } from '../../common'; + +describe('extractReferences()', () => { + test('extracts nothing if savedObjectType is empty', () => { + const doc = { + id: '1', + attributes: { + foo: true, + savedObjectId: 'test-id', + }, + references: [], + }; + const updatedDoc = extractReferences(doc); + expect(updatedDoc).toMatchInlineSnapshot(` + Object { + "attributes": Object { + "foo": true, + "savedObjectId": "test-id", + }, + "references": Array [], + } + `); + }); + + test('extracts nothing if savedObjectId is empty', () => { + const doc = { + id: '1', + attributes: { + foo: true, + savedObjectType: 'test-type', + }, + references: [], + }; + const updatedDoc = extractReferences(doc); + expect(updatedDoc).toMatchInlineSnapshot(` + Object { + "attributes": Object { + "foo": true, + "savedObjectType": "test-type", + }, + "references": Array [], + } + `); + }); + + test('extracts nothing if savedObjectType & savedObjectId are empty', () => { + const doc = { + id: '1', + attributes: { + foo: true, + }, + references: [], + }; + const updatedDoc = extractReferences(doc); + expect(updatedDoc).toMatchInlineSnapshot(` + Object { + "attributes": Object { + "foo": true, + }, + "references": Array [], + } + `); + }); + + test('extracts references from savedObjectType & savedObjectId', () => { + const doc = { + id: '1', + attributes: { + foo: true, + savedObjectType: 'test-type', + savedObjectId: 'test-id', + }, + references: [], + }; + const updatedDoc = extractReferences(doc); + expect(updatedDoc).toMatchInlineSnapshot(` + Object { + "attributes": Object { + "foo": true, + "savedObjectName": "saved_object_0", + }, + "references": Array [ + Object { + "id": "test-id", + "name": "saved_object_0", + "type": "test-type", + }, + ], + } + `); + }); +}); + +describe('injectReferences()', () => { + test('injects nothing when savedObjectName is null', () => { + const context = ({ + id: '1', + pluginResourceId: 'test-resource-id', + visLayerExpressionFn: 'test-fn', + } as unknown) as AugmentVisSavedObject; + injectReferences(context, []); + expect(context).toMatchInlineSnapshot(` + Object { + "id": "1", + "pluginResourceId": "test-resource-id", + "visLayerExpressionFn": "test-fn", + } + `); + }); + + test('injects references into context', () => { + const context = ({ + id: '1', + pluginResourceId: 'test-resource-id', + visLayerExpressionFn: 'test-fn', + savedObjectName: 'saved_object_0', + } as unknown) as AugmentVisSavedObject; + const references = [ + { + name: 'saved_object_0', + type: 'visualization', + id: 'test-id', + }, + ]; + injectReferences(context, references); + expect(context).toMatchInlineSnapshot(` + Object { + "id": "1", + "pluginResourceId": "test-resource-id", + "savedObjectId": "test-id", + "savedObjectType": "visualization", + "visLayerExpressionFn": "test-fn", + } + `); + }); + + test(`fails when it can't find the saved object reference in the array`, () => { + const context = ({ + id: '1', + pluginResourceId: 'test-resource-id', + visLayerExpressionFn: 'test-fn', + savedObjectName: 'saved_object_0', + } as unknown) as AugmentVisSavedObject; + expect(() => injectReferences(context, [])).toThrowErrorMatchingInlineSnapshot( + `"Could not find saved object reference \\"saved_object_0\\""` + ); + }); +}); diff --git a/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis_references.ts b/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis_references.ts new file mode 100644 index 000000000000..90a7421f0b40 --- /dev/null +++ b/src/plugins/vis_augmenter/public/saved_augment_vis/saved_augment_vis_references.ts @@ -0,0 +1,69 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { SavedObjectAttributes, SavedObjectReference } from '../../../../core/public'; +import { AugmentVisSavedObject } from '../../common'; + +/** + * Note that references aren't stored in the object's client-side interface (AugmentVisSavedObject). + * Rather, just the ID/type is. The concept of references is a server-side definition used to define + * relationships between saved objects. They are visible in the saved objs management page or + * when making direct saved obj API calls. + * + * So, we need helper fns to construct & deconstruct references when creating and reading the + * indexed/stored saved objects, respectively. + */ + +/** + * Used during creation. Converting from AugmentVisSavedObject to the actual indexed saved object + * with references. + */ +export function extractReferences({ + attributes, + references = [], +}: { + attributes: SavedObjectAttributes; + references: SavedObjectReference[]; +}) { + const updatedAttributes = { ...attributes }; + const updatedReferences = [...references]; + + // Extract saved object + if (updatedAttributes.savedObjectType && updatedAttributes.savedObjectId) { + updatedReferences.push({ + name: 'saved_object_0', + type: String(updatedAttributes.savedObjectType), + id: String(updatedAttributes.savedObjectId), + }); + delete updatedAttributes.savedObjectId; + delete updatedAttributes.savedObjectType; + updatedAttributes.savedObjectName = 'saved_object_0'; + } + return { + references: updatedReferences, + attributes: updatedAttributes, + }; +} + +/** + * Used during reading. Converting from the indexed saved object with references + * to a AugmentVisSavedObject + */ +export function injectReferences( + savedObject: AugmentVisSavedObject, + references: SavedObjectReference[] +) { + if (savedObject.savedObjectName) { + const savedObjectReference = references.find( + (reference) => reference.name === savedObject.savedObjectName + ); + if (!savedObjectReference) { + throw new Error(`Could not find saved object reference "${savedObject.savedObjectName}"`); + } + savedObject.savedObjectId = savedObjectReference.id; + savedObject.savedObjectType = savedObjectReference.type; + delete savedObject.savedObjectName; + } +} diff --git a/src/plugins/vis_augmenter/public/saved_augment_vis/utils/helpers.ts b/src/plugins/vis_augmenter/public/saved_augment_vis/utils/helpers.ts new file mode 100644 index 000000000000..5c99059f6430 --- /dev/null +++ b/src/plugins/vis_augmenter/public/saved_augment_vis/utils/helpers.ts @@ -0,0 +1,17 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import _ from 'lodash'; +import { getSavedAugmentVisLoader } from '../../services'; +import { ISavedAugmentVis } from '../../../common'; + +/** + * Create an augment vis saved object given an object that + * implements the ISavedAugmentVis interface + */ +export const createAugmentVisSavedObject = async (AugmentVis: ISavedAugmentVis): Promise => { + const loader = getSavedAugmentVisLoader(); + return await loader.get((AugmentVis as any) as Record); +}; diff --git a/src/plugins/vis_augmenter/public/saved_augment_vis/utils/index.ts b/src/plugins/vis_augmenter/public/saved_augment_vis/utils/index.ts new file mode 100644 index 000000000000..0e8ad44d2bd7 --- /dev/null +++ b/src/plugins/vis_augmenter/public/saved_augment_vis/utils/index.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './helpers'; diff --git a/src/plugins/vis_augmenter/public/services.ts b/src/plugins/vis_augmenter/public/services.ts new file mode 100644 index 000000000000..00fa45374980 --- /dev/null +++ b/src/plugins/vis_augmenter/public/services.ts @@ -0,0 +1,11 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { createGetterSetter } from '../../opensearch_dashboards_utils/common'; +import { SavedObjectLoader } from '../../saved_objects/public'; + +export const [getSavedAugmentVisLoader, setSavedAugmentVisLoader] = createGetterSetter< + SavedObjectLoader +>('savedAugmentVisLoader'); diff --git a/src/plugins/vis_augmenter/public/types.ts b/src/plugins/vis_augmenter/public/types.ts new file mode 100644 index 000000000000..883a85f6e494 --- /dev/null +++ b/src/plugins/vis_augmenter/public/types.ts @@ -0,0 +1,26 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { SavedObject } from '../../saved_objects/public'; + +export interface ISavedAugmentVis { + id?: string; + description?: string; + pluginResourceId: string; + savedObjectName?: string; + savedObjectType?: string; + savedObjectId?: string; + visLayerExpressionFn: VisLayerExpressionFn; + version?: number; +} + +export interface VisLayerExpressionFn { + type: string; + name: string; + // plugin expression fns can freely set custom arguments + args: { [key: string]: any }; +} + +export interface AugmentVisSavedObject extends SavedObject, ISavedAugmentVis {} diff --git a/src/plugins/vis_augmenter/server/plugin.ts b/src/plugins/vis_augmenter/server/plugin.ts index d921126a1f66..cc8309ed8c02 100644 --- a/src/plugins/vis_augmenter/server/plugin.ts +++ b/src/plugins/vis_augmenter/server/plugin.ts @@ -10,6 +10,7 @@ import { Plugin, Logger, } from '../../../core/server'; +import { augmentVisSavedObjectType } from './saved_objects'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface VisAugmenterPluginSetup {} @@ -26,6 +27,7 @@ export class VisAugmenterPlugin public setup(core: CoreSetup) { this.logger.debug('VisAugmenter: Setup'); + core.savedObjects.registerType(augmentVisSavedObjectType); return {}; } diff --git a/src/plugins/vis_augmenter/server/saved_objects/augment_vis.ts b/src/plugins/vis_augmenter/server/saved_objects/augment_vis.ts new file mode 100644 index 000000000000..f52de163137b --- /dev/null +++ b/src/plugins/vis_augmenter/server/saved_objects/augment_vis.ts @@ -0,0 +1,29 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { SavedObjectsType } from 'opensearch-dashboards/server'; + +export const augmentVisSavedObjectType: SavedObjectsType = { + name: 'augment-vis', + hidden: false, + namespaceType: 'single', + mappings: { + properties: { + description: { type: 'text' }, + pluginResourceId: { type: 'text' }, + savedObjectName: { type: 'keyword', index: false, doc_values: false }, + visLayerExpressionFn: { + properties: { + type: { type: 'text' }, + name: { type: 'text' }, + // keeping generic to not limit what users may pass as args to their fns + // users may not have this field at all, if no args are needed + args: { type: 'object', dynamic: true }, + }, + }, + version: { type: 'integer' }, + }, + }, +}; diff --git a/src/plugins/vis_augmenter/server/saved_objects/index.ts b/src/plugins/vis_augmenter/server/saved_objects/index.ts new file mode 100644 index 000000000000..b96dbd4b2a58 --- /dev/null +++ b/src/plugins/vis_augmenter/server/saved_objects/index.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { augmentVisSavedObjectType } from './augment_vis'; diff --git a/src/plugins/visualize/public/application/types.ts b/src/plugins/visualize/public/application/types.ts index 49fe4e1c6da4..48248d80e9d2 100644 --- a/src/plugins/visualize/public/application/types.ts +++ b/src/plugins/visualize/public/application/types.ts @@ -57,6 +57,7 @@ import { SavedObjectsStart, SavedObject } from 'src/plugins/saved_objects/public import { EmbeddableStart } from 'src/plugins/embeddable/public'; import { UrlForwardingStart } from 'src/plugins/url_forwarding/public'; import { DashboardStart } from '../../../dashboard/public'; +import { PluginIntegrationStart } from '../../../plugin_integration/public'; export type PureVisState = SavedVisState; @@ -119,6 +120,7 @@ export interface VisualizeServices extends CoreStart { visualizations: VisualizationsStart; savedObjectsPublic: SavedObjectsStart; savedVisualizations: VisualizationsStart['savedVisualizationsLoader']; + savedAugmentVis: PluginIntegrationStart['savedAugmentVisLoader']; setActiveUrl: (newUrl: string) => void; createVisEmbeddableFromObject: VisualizationsStart['__LEGACY']['createVisEmbeddableFromObject']; restorePreviousUrl: () => void; diff --git a/src/plugins/visualize/public/plugin.ts b/src/plugins/visualize/public/plugin.ts index 297db26c48de..33be6d0b4390 100644 --- a/src/plugins/visualize/public/plugin.ts +++ b/src/plugins/visualize/public/plugin.ts @@ -70,12 +70,14 @@ import { } from './services'; import { visualizeFieldAction } from './actions/visualize_field_action'; import { createVisualizeUrlGenerator } from './url_generator'; +import { PluginIntegrationStart } from '../../plugin_integration/public'; export interface VisualizePluginStartDependencies { data: DataPublicPluginStart; navigation: NavigationStart; share?: SharePluginStart; visualizations: VisualizationsStart; + pluginIntegration: PluginIntegrationStart; embeddable: EmbeddableStart; urlForwarding: UrlForwardingStart; savedObjects: SavedObjectsStart; @@ -196,6 +198,7 @@ export class VisualizePlugin localStorage: new Storage(localStorage), navigation: pluginsStart.navigation, savedVisualizations: pluginsStart.visualizations.savedVisualizationsLoader, + savedAugmentVis: pluginsStart.pluginIntegration.savedAugmentVisLoader, share: pluginsStart.share, toastNotifications: coreStart.notifications.toasts, visualizeCapabilities: coreStart.application.capabilities.visualize, diff --git a/yarn.lock b/yarn.lock index 822684d097bd..b40434b8fc20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16566,11 +16566,6 @@ strip-json-comments@3.1.1, strip-json-comments@^3.0.1, strip-json-comments@^3.1. resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10"