From 4d523f56f26323c221892d4a7d6dba9a25c7f4f6 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Fri, 29 May 2026 10:10:20 -0600 Subject: [PATCH 1/2] [Embeddable] embeddable schema cache --- .../server/embeddable_transforms/registry.ts | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/platform/plugins/shared/embeddable/server/embeddable_transforms/registry.ts b/src/platform/plugins/shared/embeddable/server/embeddable_transforms/registry.ts index c6fd8f77a7ff6..27468e1b3d6ee 100644 --- a/src/platform/plugins/shared/embeddable/server/embeddable_transforms/registry.ts +++ b/src/platform/plugins/shared/embeddable/server/embeddable_transforms/registry.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { ObjectType } from '@kbn/config-schema'; +import type { ObjectType, Type } from '@kbn/config-schema'; import type { getDrilldownRegistry } from '../drilldowns/registry'; import type { EmbeddableServerDefinition } from './types'; @@ -15,6 +15,20 @@ export function getEmbeddableServerRegistry( drilldownRegistry: ReturnType ) { const registry: { [key: string]: EmbeddableServerDefinition } = {}; + const schemaCache: Record> = {}; + + function getCachedSchema(type: string) { + if (schemaCache[type]) { + return schemaCache[type]; + } + + const { getSchema } = registry[type] ?? {}; + if (!getSchema) return; + const schema = getSchema(drilldownRegistry.getSchema); + if (!schema) return; + schemaCache[type] = schema; + return schema; + } return { registerEmbeddableServerDefinition: ( @@ -30,7 +44,7 @@ export function getEmbeddableServerRegistry( getAllEmbeddableSchemas: () => { const schemas: { [key: string]: { schema: ObjectType; title: string } } = {}; Object.entries(registry).forEach(([type, definition]) => { - const schema = definition?.getSchema?.(drilldownRegistry.getSchema); + const schema = getCachedSchema(type); if (schema) { schemas[type] = { schema: schema as ObjectType, @@ -41,10 +55,11 @@ export function getEmbeddableServerRegistry( return schemas; }, getEmbeddableTransforms: (type: string) => { - const { getTransforms, getSchema, throwOnUnmappedPanel } = registry[type] ?? {}; + const { getTransforms, throwOnUnmappedPanel } = registry[type] ?? {}; + const schema = getCachedSchema(type); return { ...getTransforms?.(drilldownRegistry.transforms), - ...(getSchema ? { schema: getSchema(drilldownRegistry.getSchema) } : {}), + ...(schema ? { schema } : {}), ...(typeof throwOnUnmappedPanel === 'boolean' ? { throwOnUnmappedPanel } : {}), }; }, From 9ca50df5135a61fe0fae804a2c38df8245acabf4 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Fri, 29 May 2026 10:16:07 -0600 Subject: [PATCH 2/2] clean up --- .../embeddable/server/embeddable_transforms/registry.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/platform/plugins/shared/embeddable/server/embeddable_transforms/registry.ts b/src/platform/plugins/shared/embeddable/server/embeddable_transforms/registry.ts index 27468e1b3d6ee..d757dc5ea42f1 100644 --- a/src/platform/plugins/shared/embeddable/server/embeddable_transforms/registry.ts +++ b/src/platform/plugins/shared/embeddable/server/embeddable_transforms/registry.ts @@ -15,7 +15,7 @@ export function getEmbeddableServerRegistry( drilldownRegistry: ReturnType ) { const registry: { [key: string]: EmbeddableServerDefinition } = {}; - const schemaCache: Record> = {}; + const schemaCache: Record | undefined> = {}; function getCachedSchema(type: string) { if (schemaCache[type]) { @@ -23,9 +23,7 @@ export function getEmbeddableServerRegistry( } const { getSchema } = registry[type] ?? {}; - if (!getSchema) return; - const schema = getSchema(drilldownRegistry.getSchema); - if (!schema) return; + const schema = getSchema?.(drilldownRegistry.getSchema); schemaCache[type] = schema; return schema; }